diff --git a/7.3.1042 b/7.3.1042 new file mode 100644 index 0000000..a1d5bbb --- /dev/null +++ b/7.3.1042 @@ -0,0 +1,964 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.1042 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.1042 +Problem: Python: can't assign to vim.Buffer.name. +Solution: Python patch 3. (ZyX) +Files: runtime/doc/if_pyth.txt, src/ex_cmds.c, src/if_py_both.h, + src/if_python3.c, src/if_python.c, src/proto/ex_cmds.pro, + src/testdir/test86.in, src/testdir/test86.ok, + src/testdir/test87.in, src/testdir/test87.ok + + +*** ../vim-7.3.1041/runtime/doc/if_pyth.txt 2013-05-21 19:49:58.000000000 +0200 +--- runtime/doc/if_pyth.txt 2013-05-29 21:40:05.000000000 +0200 +*************** +*** 250,256 **** + object and always use windows from that tab page (or throw vim.error + in case tab page was deleted). You can keep a reference to both + without keeping a reference to vim module object or |python-tabpage|, +! they will not loose their properties in this case. + + vim.tabpages *python-tabpages* + A sequence object providing access to the list of vim tab pages. The +--- 250,256 ---- + object and always use windows from that tab page (or throw vim.error + in case tab page was deleted). You can keep a reference to both + without keeping a reference to vim module object or |python-tabpage|, +! they will not lose their properties in this case. + + vim.tabpages *python-tabpages* + A sequence object providing access to the list of vim tab pages. The +*************** +*** 361,366 **** +--- 361,371 ---- + this object will raise KeyError. If option is + |global-local| and local value is missing getting it + will return None. ++ b.name String, RW. Contains buffer name (full path). ++ Note: when assigning to b.name |BufFilePre| and ++ |BufFilePost| autocommands are launched. ++ b.number Buffer number. Can be used as |python-buffers| key. ++ Read-only. + + The buffer object methods are: + b.append(str) Append a line to the buffer +*** ../vim-7.3.1041/src/ex_cmds.c 2013-04-14 23:19:32.000000000 +0200 +--- src/ex_cmds.c 2013-05-29 21:44:19.000000000 +0200 +*************** +*** 784,789 **** +--- 784,790 ---- + */ + last_line = curbuf->b_ml.ml_line_count; + mark_adjust(line1, line2, last_line - line2, 0L); ++ changed_lines(last_line - num_lines + 1, 0, last_line + 1, num_lines); + if (dest >= line2) + { + mark_adjust(line2 + 1, dest, -num_lines, 0L); +*************** +*** 799,804 **** +--- 800,806 ---- + curbuf->b_op_start.col = curbuf->b_op_end.col = 0; + mark_adjust(last_line - num_lines + 1, last_line, + -(last_line - dest - extra), 0L); ++ changed_lines(last_line - num_lines + 1, 0, last_line + 1, -extra); + + /* + * Now we delete the original text -- webb +*************** +*** 2414,2419 **** +--- 2416,2473 ---- + info_message = FALSE; + } + ++ int ++ rename_buffer(new_fname) ++ char_u *new_fname; ++ { ++ char_u *fname, *sfname, *xfname; ++ #ifdef FEAT_AUTOCMD ++ buf_T *buf = curbuf; ++ ++ apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, buf); ++ /* buffer changed, don't change name now */ ++ if (buf != curbuf) ++ return FAIL; ++ # ifdef FEAT_EVAL ++ if (aborting()) /* autocmds may abort script processing */ ++ return FAIL; ++ # endif ++ #endif ++ /* ++ * The name of the current buffer will be changed. ++ * A new (unlisted) buffer entry needs to be made to hold the old file ++ * name, which will become the alternate file name. ++ * But don't set the alternate file name if the buffer didn't have a ++ * name. ++ */ ++ fname = buf->b_ffname; ++ sfname = buf->b_sfname; ++ xfname = buf->b_fname; ++ buf->b_ffname = NULL; ++ buf->b_sfname = NULL; ++ if (setfname(buf, new_fname, NULL, TRUE) == FAIL) ++ { ++ buf->b_ffname = fname; ++ buf->b_sfname = sfname; ++ return FAIL; ++ } ++ buf->b_flags |= BF_NOTEDITED; ++ if (xfname != NULL && *xfname != NUL) ++ { ++ buf = buflist_new(fname, xfname, curwin->w_cursor.lnum, 0); ++ if (buf != NULL && !cmdmod.keepalt) ++ curwin->w_alt_fnum = buf->b_fnum; ++ } ++ vim_free(fname); ++ vim_free(sfname); ++ #ifdef FEAT_AUTOCMD ++ apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, buf); ++ #endif ++ /* Change directories when the 'acd' option is set. */ ++ DO_AUTOCHDIR ++ return OK; ++ } ++ + /* + * ":file[!] [fname]". + */ +*************** +*** 2421,2429 **** + ex_file(eap) + exarg_T *eap; + { +- char_u *fname, *sfname, *xfname; +- buf_T *buf; +- + /* ":0file" removes the file name. Check for illegal uses ":3file", + * "0file name", etc. */ + if (eap->addr_count > 0 +--- 2475,2480 ---- +*************** +*** 2437,2485 **** + + if (*eap->arg != NUL || eap->addr_count == 1) + { +! #ifdef FEAT_AUTOCMD +! buf = curbuf; +! apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf); +! /* buffer changed, don't change name now */ +! if (buf != curbuf) +! return; +! # ifdef FEAT_EVAL +! if (aborting()) /* autocmds may abort script processing */ +! return; +! # endif +! #endif +! /* +! * The name of the current buffer will be changed. +! * A new (unlisted) buffer entry needs to be made to hold the old file +! * name, which will become the alternate file name. +! * But don't set the alternate file name if the buffer didn't have a +! * name. +! */ +! fname = curbuf->b_ffname; +! sfname = curbuf->b_sfname; +! xfname = curbuf->b_fname; +! curbuf->b_ffname = NULL; +! curbuf->b_sfname = NULL; +! if (setfname(curbuf, eap->arg, NULL, TRUE) == FAIL) +! { +! curbuf->b_ffname = fname; +! curbuf->b_sfname = sfname; + return; +- } +- curbuf->b_flags |= BF_NOTEDITED; +- if (xfname != NULL && *xfname != NUL) +- { +- buf = buflist_new(fname, xfname, curwin->w_cursor.lnum, 0); +- if (buf != NULL && !cmdmod.keepalt) +- curwin->w_alt_fnum = buf->b_fnum; +- } +- vim_free(fname); +- vim_free(sfname); +- #ifdef FEAT_AUTOCMD +- apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf); +- #endif +- /* Change directories when the 'acd' option is set. */ +- DO_AUTOCHDIR + } + /* print full file name if :cd used */ + fileinfo(FALSE, FALSE, eap->forceit); +--- 2488,2495 ---- + + if (*eap->arg != NUL || eap->addr_count == 1) + { +! if (rename_buffer(eap->arg) == FAIL) + return; + } + /* print full file name if :cd used */ + fileinfo(FALSE, FALSE, eap->forceit); +*** ../vim-7.3.1041/src/if_py_both.h 2013-05-29 21:37:29.000000000 +0200 +--- src/if_py_both.h 2013-05-29 21:47:35.000000000 +0200 +*************** +*** 30,35 **** +--- 30,43 ---- + #define INVALID_WINDOW_VALUE ((win_T *)(-1)) + #define INVALID_TABPAGE_VALUE ((tabpage_T *)(-1)) + ++ #define DICTKEY_DECL \ ++ PyObject *dictkey_todecref; ++ #define DICTKEY_GET(err) \ ++ if (!(key = StringToChars(keyObject, &dictkey_todecref))) \ ++ return err; ++ #define DICTKEY_UNREF \ ++ Py_XDECREF(dictkey_todecref); ++ + typedef void (*rangeinitializer)(void *); + typedef void (*runner)(const char *, void * + #ifdef PY_CAN_RECURSE +*************** +*** 64,69 **** +--- 72,122 ---- + { + } + ++ /* ++ * The "todecref" argument holds a pointer to PyObject * that must be ++ * DECREF'ed after returned char_u * is no longer needed or NULL if all what ++ * was needed to generate returned value is object. ++ * ++ * Use Py_XDECREF to decrement reference count. ++ */ ++ static char_u * ++ StringToChars(PyObject *object, PyObject **todecref) ++ { ++ char_u *p; ++ PyObject *bytes = NULL; ++ ++ if (PyBytes_Check(object)) ++ { ++ ++ if (PyString_AsStringAndSize(object, (char **) &p, NULL) == -1) ++ return NULL; ++ if (p == NULL) ++ return NULL; ++ ++ *todecref = NULL; ++ } ++ else if (PyUnicode_Check(object)) ++ { ++ bytes = PyUnicode_AsEncodedString(object, (char *)ENC_OPT, NULL); ++ if (bytes == NULL) ++ return NULL; ++ ++ if(PyString_AsStringAndSize(bytes, (char **) &p, NULL) == -1) ++ return NULL; ++ if (p == NULL) ++ return NULL; ++ ++ *todecref = bytes; ++ } ++ else ++ { ++ PyErr_SetString(PyExc_TypeError, _("object must be string")); ++ return NULL; ++ } ++ ++ return (char_u *) p; ++ } ++ + /* Output buffer management + */ + +*************** +*** 1586,1591 **** +--- 1639,1656 ---- + return VimTryEnd(); + } + ++ static void * ++ py_memsave(void *p, size_t len) ++ { ++ void *r; ++ if (!(r = PyMem_Malloc(len))) ++ return NULL; ++ mch_memmove(r, p, len); ++ return r; ++ } ++ ++ #define PY_STRSAVE(s) ((char_u *) py_memsave(s, STRLEN(s) + 1)) ++ + static int + OptionsAssItem(OptionsObject *self, PyObject *keyObject, PyObject *valObject) + { +*************** +*** 1670,1726 **** + else + { + char_u *val; +! if (PyBytes_Check(valObject)) +! { + +! if (PyString_AsStringAndSize(valObject, (char **) &val, NULL) == -1) +! { +! DICTKEY_UNREF +! return -1; +! } +! if (val == NULL) +! { +! DICTKEY_UNREF +! return -1; +! } +! +! val = vim_strsave(val); +! } +! else if (PyUnicode_Check(valObject)) + { +! PyObject *bytes; +! +! bytes = PyUnicode_AsEncodedString(valObject, (char *)ENC_OPT, NULL); +! if (bytes == NULL) +! { +! DICTKEY_UNREF +! return -1; +! } +! +! if(PyString_AsStringAndSize(bytes, (char **) &val, NULL) == -1) +! { +! DICTKEY_UNREF +! return -1; +! } +! if (val == NULL) +! { +! DICTKEY_UNREF +! return -1; +! } +! +! val = vim_strsave(val); +! Py_XDECREF(bytes); + } + else +! { +! PyErr_SetString(PyExc_TypeError, _("object must be string")); +! DICTKEY_UNREF +! return -1; +! } +! +! r = set_option_value_for(key, 0, val, opt_flags, +! self->opt_type, self->from); +! vim_free(val); + } + + DICTKEY_UNREF +--- 1735,1750 ---- + else + { + char_u *val; +! PyObject *todecref; + +! if ((val = StringToChars(valObject, &todecref))) + { +! r = set_option_value_for(key, 0, val, opt_flags, +! self->opt_type, self->from); +! Py_XDECREF(todecref); + } + else +! r = -1; + } + + DICTKEY_UNREF +*************** +*** 2541,2547 **** + array = NULL; + else + { +! array = (char **)alloc((unsigned)(new_len * sizeof(char *))); + if (array == NULL) + { + PyErr_NoMemory(); +--- 2565,2571 ---- + array = NULL; + else + { +! array = PyMem_New(char *, new_len); + if (array == NULL) + { + PyErr_NoMemory(); +*************** +*** 2558,2564 **** + { + while (i) + vim_free(array[--i]); +! vim_free(array); + return FAIL; + } + } +--- 2582,2588 ---- + { + while (i) + vim_free(array[--i]); +! PyMem_Free(array); + return FAIL; + } + } +*************** +*** 2635,2641 **** + * been dealt with (either freed, or the responsibility passed + * to vim. + */ +! vim_free(array); + + /* Adjust marks. Invalidate any which lie in the + * changed range, and move any in the remainder of the buffer. +--- 2659,2665 ---- + * been dealt with (either freed, or the responsibility passed + * to vim. + */ +! PyMem_Free(array); + + /* Adjust marks. Invalidate any which lie in the + * changed range, and move any in the remainder of the buffer. +*************** +*** 2717,2723 **** + char **array; + buf_T *savebuf; + +! array = (char **)alloc((unsigned)(size * sizeof(char *))); + if (array == NULL) + { + PyErr_NoMemory(); +--- 2741,2747 ---- + char **array; + buf_T *savebuf; + +! array = PyMem_New(char *, size); + if (array == NULL) + { + PyErr_NoMemory(); +*************** +*** 2733,2739 **** + { + while (i) + vim_free(array[--i]); +! vim_free(array); + return FAIL; + } + } +--- 2757,2763 ---- + { + while (i) + vim_free(array[--i]); +! PyMem_Free(array); + return FAIL; + } + } +*************** +*** 2768,2774 **** + /* Free the array of lines. All of its contents have now + * been freed. + */ +! vim_free(array); + + restore_buffer(savebuf); + update_screen(VALID); +--- 2792,2798 ---- + /* Free the array of lines. All of its contents have now + * been freed. + */ +! PyMem_Free(array); + + restore_buffer(savebuf); + update_screen(VALID); +*************** +*** 3179,3184 **** +--- 3203,3247 ---- + return NULL; + } + ++ static int ++ BufferSetattr(BufferObject *self, char *name, PyObject *valObject) ++ { ++ if (CheckBuffer(self)) ++ return -1; ++ ++ if (strcmp(name, "name") == 0) ++ { ++ char_u *val; ++ aco_save_T aco; ++ int r; ++ PyObject *todecref; ++ ++ if (!(val = StringToChars(valObject, &todecref))) ++ return -1; ++ ++ VimTryStart(); ++ /* Using aucmd_*: autocommands will be executed by rename_buffer */ ++ aucmd_prepbuf(&aco, self->buf); ++ r = rename_buffer(val); ++ aucmd_restbuf(&aco); ++ Py_XDECREF(todecref); ++ if (VimTryEnd()) ++ return -1; ++ ++ if (r == FAIL) ++ { ++ PyErr_SetVim(_("failed to rename buffer")); ++ return -1; ++ } ++ return 0; ++ } ++ else ++ { ++ PyErr_SetString(PyExc_AttributeError, name); ++ return -1; ++ } ++ } ++ + static PyObject * + BufferAppend(BufferObject *self, PyObject *args) + { +*************** +*** 4040,4046 **** + if (result == NULL) + return -1; + +! if (set_string_copy(result, tv) == -1) + { + Py_XDECREF(bytes); + return -1; +--- 4103,4109 ---- + if (result == NULL) + return -1; + +! if (set_string_copy(result, tv)) + { + Py_XDECREF(bytes); + return -1; +*************** +*** 4169,4179 **** +--- 4232,4244 ---- + BufferType.tp_methods = BufferMethods; + #if PY_MAJOR_VERSION >= 3 + BufferType.tp_getattro = (getattrofunc)BufferGetattro; ++ BufferType.tp_setattro = (setattrofunc)BufferSetattro; + BufferType.tp_alloc = call_PyType_GenericAlloc; + BufferType.tp_new = call_PyType_GenericNew; + BufferType.tp_free = call_PyObject_Free; + #else + BufferType.tp_getattr = (getattrfunc)BufferGetattr; ++ BufferType.tp_setattr = (setattrfunc)BufferSetattr; + #endif + + vim_memset(&WindowType, 0, sizeof(WindowType)); +*** ../vim-7.3.1041/src/if_python3.c 2013-05-29 21:33:34.000000000 +0200 +--- src/if_python3.c 2013-05-29 21:40:05.000000000 +0200 +*************** +*** 638,669 **** + + #define PYINITIALISED py3initialised + +- #define DICTKEY_DECL PyObject *bytes = NULL; +- +- #define DICTKEY_GET(err) \ +- if (PyBytes_Check(keyObject)) \ +- { \ +- if (PyString_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \ +- return err; \ +- } \ +- else if (PyUnicode_Check(keyObject)) \ +- { \ +- bytes = PyString_AsBytes(keyObject); \ +- if (bytes == NULL) \ +- return err; \ +- if (PyString_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \ +- return err; \ +- } \ +- else \ +- { \ +- PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \ +- return err; \ +- } +- +- #define DICTKEY_UNREF \ +- if (bytes != NULL) \ +- Py_XDECREF(bytes); +- + #define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self) + + #define WIN_PYTHON_REF(win) win->w_python3_ref +--- 638,643 ---- +*************** +*** 696,701 **** +--- 670,676 ---- + static PyObject *OutputGetattro(PyObject *, PyObject *); + static int OutputSetattro(PyObject *, PyObject *, PyObject *); + static PyObject *BufferGetattro(PyObject *, PyObject *); ++ static int BufferSetattro(PyObject *, PyObject *, PyObject *); + static PyObject *TabPageGetattro(PyObject *, PyObject *); + static PyObject *WindowGetattro(PyObject *, PyObject *); + static int WindowSetattro(PyObject *, PyObject *, PyObject *); +*************** +*** 1108,1113 **** +--- 1083,1096 ---- + return PyObject_GenericGetAttr(self, nameobj); + } + ++ static int ++ BufferSetattro(PyObject *self, PyObject *nameobj, PyObject *val) ++ { ++ GET_ATTR_STRING(name, nameobj); ++ ++ return BufferSetattr((BufferObject *)(self), name, val); ++ } ++ + static PyObject * + BufferDir(PyObject *self UNUSED) + { +*** ../vim-7.3.1041/src/if_python.c 2013-05-29 21:33:34.000000000 +0200 +--- src/if_python.c 2013-05-29 21:40:05.000000000 +0200 +*************** +*** 676,693 **** + static int initialised = 0; + #define PYINITIALISED initialised + +- #define DICTKEY_GET(err) \ +- if (!PyString_Check(keyObject)) \ +- { \ +- PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \ +- return err; \ +- } \ +- if (PyString_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \ +- return err; +- +- #define DICTKEY_UNREF +- #define DICTKEY_DECL +- + #define DESTRUCTOR_FINISH(self) self->ob_type->tp_free((PyObject*)self); + + #define WIN_PYTHON_REF(win) win->w_python_ref +--- 676,681 ---- +*************** +*** 926,932 **** + else + { + /* Need to make a copy, value may change when setting new locale. */ +! saved_locale = (char *)vim_strsave((char_u *)saved_locale); + (void)setlocale(LC_NUMERIC, "C"); + } + #endif +--- 914,920 ---- + else + { + /* Need to make a copy, value may change when setting new locale. */ +! saved_locale = (char *) PY_STRSAVE(saved_locale); + (void)setlocale(LC_NUMERIC, "C"); + } + #endif +*************** +*** 953,959 **** + if (saved_locale != NULL) + { + (void)setlocale(LC_NUMERIC, saved_locale); +! vim_free(saved_locale); + } + #endif + +--- 941,947 ---- + if (saved_locale != NULL) + { + (void)setlocale(LC_NUMERIC, saved_locale); +! PyMem_Free(saved_locale); + } + #endif + +*** ../vim-7.3.1041/src/proto/ex_cmds.pro 2012-04-25 17:32:14.000000000 +0200 +--- src/proto/ex_cmds.pro 2013-05-29 21:40:05.000000000 +0200 +*************** +*** 19,24 **** +--- 19,25 ---- + void do_fixdel __ARGS((exarg_T *eap)); + void print_line_no_prefix __ARGS((linenr_T lnum, int use_number, int list)); + void print_line __ARGS((linenr_T lnum, int use_number, int list)); ++ int rename_buffer __ARGS((char_u *new_fname)); + void ex_file __ARGS((exarg_T *eap)); + void ex_update __ARGS((exarg_T *eap)); + void ex_write __ARGS((exarg_T *eap)); +*** ../vim-7.3.1041/src/testdir/test86.in 2013-05-21 22:23:51.000000000 +0200 +--- src/testdir/test86.in 2013-05-29 21:56:41.000000000 +0200 +*************** +*** 476,481 **** +--- 476,485 ---- + :py b=vim.current.buffer + :wincmd w + :mark a ++ :augroup BUFS ++ : autocmd BufFilePost * python cb.append(vim.eval('expand("")') + ':BufFilePost:' + vim.eval('bufnr("%")')) ++ : autocmd BufFilePre * python cb.append(vim.eval('expand("")') + ':BufFilePre:' + vim.eval('bufnr("%")')) ++ :augroup END + py << EOF + cb = vim.current.buffer + # Tests BufferAppend and BufferItem +*************** +*** 496,504 **** + b[0]='bar' + b[0:0]=['baz'] + vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number) + # Test CheckBuffer +! vim.command('bwipeout! ' + str(b.number)) +! for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")'): + try: + exec(expr) + except vim.error: +--- 500,519 ---- + b[0]='bar' + b[0:0]=['baz'] + vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number) ++ # Test assigning to name property ++ old_name = cb.name ++ cb.name = 'foo' ++ cb.append(cb.name[-11:]) ++ b.name = 'bar' ++ cb.append(b.name[-11:]) ++ cb.name = old_name ++ cb.append(cb.name[-17:]) + # Test CheckBuffer +! for _b in vim.buffers: +! if _b is not cb: +! vim.command('bwipeout! ' + str(_b.number)) +! del _b +! for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")', 'b.name = "!"'): + try: + exec(expr) + except vim.error: +*************** +*** 507,513 **** +--- 522,533 ---- + # Usually a SEGV here + # Should not happen in any case + cb.append('No exception for ' + expr) ++ vim.command('cd .') + EOF ++ :augroup BUFS ++ : autocmd! ++ :augroup END ++ :augroup! BUFS + :" + :" Test vim.buffers object + :set hidden +*************** +*** 586,592 **** + else: + return repr(w) + +! def Cursor(w, start=len(cb)): + if w.buffer is cb: + return repr((start - w.cursor[0], w.cursor[1])) + else: +--- 606,614 ---- + else: + return repr(w) + +! start = len(cb) +! +! def Cursor(w): + if w.buffer is cb: + return repr((start - w.cursor[0], w.cursor[1])) + else: +*** ../vim-7.3.1041/src/testdir/test86.ok 2013-05-21 22:38:14.000000000 +0200 +--- src/testdir/test86.ok 2013-05-29 21:57:30.000000000 +0200 +*************** +*** 319,332 **** + Second line + Third line + foo + i: + i2: + i: + i3: + 1:= +! 6:= +! 7:= +! 8:= + 4 + i4: + i4: +--- 319,341 ---- + Second line + Third line + foo ++ 1:BufFilePre:1 ++ 6:BufFilePost:1 ++ testdir/foo ++ 5:BufFilePre:5 ++ 5:BufFilePost:5 ++ testdir/bar ++ 1:BufFilePre:1 ++ 7:BufFilePost:1 ++ testdir/test86.in + i: + i2: + i: + i3: + 1:= +! 8:= +! 9:= +! 10:= + 4 + i4: + i4: +*************** +*** 335,341 **** + Current tab pages: + (1): 1 windows, current is + Windows: +! (1): displays buffer ; cursor is at (27, 0) + (2): 1 windows, current is + Windows: + (1): displays buffer ; cursor is at (1, 0) +--- 344,350 ---- + Current tab pages: + (1): 1 windows, current is + Windows: +! (1): displays buffer ; cursor is at (36, 0) + (2): 1 windows, current is + Windows: + (1): displays buffer ; cursor is at (1, 0) +*** ../vim-7.3.1041/src/testdir/test87.in 2013-05-21 22:23:51.000000000 +0200 +--- src/testdir/test87.in 2013-05-29 21:58:50.000000000 +0200 +*************** +*** 463,468 **** +--- 463,472 ---- + :py3 b=vim.current.buffer + :wincmd w + :mark a ++ :augroup BUFS ++ : autocmd BufFilePost * python3 cb.append(vim.eval('expand("")') + ':BufFilePost:' + vim.eval('bufnr("%")')) ++ : autocmd BufFilePre * python3 cb.append(vim.eval('expand("")') + ':BufFilePre:' + vim.eval('bufnr("%")')) ++ :augroup END + py3 << EOF + cb = vim.current.buffer + # Tests BufferAppend and BufferItem +*************** +*** 483,490 **** + b[0]='bar' + b[0:0]=['baz'] + vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number) + # Test CheckBuffer +! vim.command('bwipeout! ' + str(b.number)) + for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")'): + try: + exec(expr) +--- 487,505 ---- + b[0]='bar' + b[0:0]=['baz'] + vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number) ++ # Test assigning to name property ++ old_name = cb.name ++ cb.name = 'foo' ++ cb.append(cb.name[-11:]) ++ b.name = 'bar' ++ cb.append(b.name[-11:]) ++ cb.name = old_name ++ cb.append(cb.name[-17:]) + # Test CheckBuffer +! for _b in vim.buffers: +! if _b is not cb: +! vim.command('bwipeout! ' + str(_b.number)) +! del _b + for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")'): + try: + exec(expr) +*************** +*** 494,499 **** +--- 509,515 ---- + # Usually a SEGV here + # Should not happen in any case + cb.append('No exception for ' + expr) ++ vim.command('cd .') + EOF + :" + :" Test vim.buffers object +*** ../vim-7.3.1041/src/testdir/test87.ok 2013-05-21 22:38:14.000000000 +0200 +--- src/testdir/test87.ok 2013-05-29 21:59:04.000000000 +0200 +*************** +*** 308,321 **** + Second line + Third line + foo + i: + i2: + i: + i3: + 1:= +! 6:= +! 7:= +! 8:= + 4 + i4: + i4: +--- 308,330 ---- + Second line + Third line + foo ++ 1:BufFilePre:1 ++ 6:BufFilePost:1 ++ testdir/foo ++ 5:BufFilePre:5 ++ 5:BufFilePost:5 ++ testdir/bar ++ 1:BufFilePre:1 ++ 7:BufFilePost:1 ++ testdir/test87.in + i: + i2: + i: + i3: + 1:= +! 8:= +! 9:= +! 10:= + 4 + i4: + i4: +*************** +*** 324,330 **** + Current tab pages: + (1): 1 windows, current is + Windows: +! (1): displays buffer ; cursor is at (27, 0) + (2): 1 windows, current is + Windows: + (1): displays buffer ; cursor is at (1, 0) +--- 333,339 ---- + Current tab pages: + (1): 1 windows, current is + Windows: +! (1): displays buffer ; cursor is at (36, 0) + (2): 1 windows, current is + Windows: + (1): displays buffer ; cursor is at (1, 0) +*** ../vim-7.3.1041/src/version.c 2013-05-29 21:37:29.000000000 +0200 +--- src/version.c 2013-05-29 22:01:11.000000000 +0200 +*************** +*** 730,731 **** +--- 730,733 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1042, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +19. All of your friends have an @ in their names. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///