]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.1044 v7.3.1044
authorBram Moolenaar <Bram@vim.org>
Wed, 29 May 2013 20:15:30 +0000 (22:15 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 29 May 2013 20:15:30 +0000 (22:15 +0200)
Problem:    Python: No {Buffer,TabPage,Window}.valid attributes.
Solution:   Python patch 5: add .valid (ZyX)

src/if_py_both.h
src/if_python.c
src/if_python3.c
src/testdir/test86.in
src/testdir/test86.ok
src/testdir/test87.in
src/testdir/test87.ok
src/version.c

index 2098ed1f0d7c63375a1c7b7b4ec67c86aa8dfcf9..c1464331f447295b39c8c2f355fc99e1ec3e405d 100644 (file)
@@ -1814,6 +1814,19 @@ TabPageDestructor(TabPageObject *self)
     DESTRUCTOR_FINISH(self);
 }
 
+    static PyObject *
+TabPageAttrValid(TabPageObject *self, char *name)
+{
+    PyObject *r;
+
+    if (strcmp(name, "valid") != 0)
+       return NULL;
+
+    r = ((self->tab == INVALID_TABPAGE_VALUE) ? Py_False : Py_True);
+    Py_INCREF(r);
+    return r;
+}
+
     static PyObject *
 TabPageAttr(TabPageObject *self, char *name)
 {
@@ -2009,6 +2022,19 @@ get_firstwin(TabPageObject *tabObject)
        return firstwin;
 }
 
+    static PyObject *
+WindowAttrValid(WindowObject *self, char *name)
+{
+    PyObject *r;
+
+    if (strcmp(name, "valid") != 0)
+       return NULL;
+
+    r = ((self->win == INVALID_WINDOW_VALUE) ? Py_False : Py_True);
+    Py_INCREF(r);
+    return r;
+}
+
     static PyObject *
 WindowAttr(WindowObject *self, char *name)
 {
@@ -2050,8 +2076,8 @@ WindowAttr(WindowObject *self, char *name)
        return (PyObject *)(self->tabObject);
     }
     else if (strcmp(name,"__members__") == 0)
-       return Py_BuildValue("[sssssssss]", "buffer", "cursor", "height",
-               "vars", "options", "number", "row", "col", "tabpage");
+       return Py_BuildValue("[ssssssssss]", "buffer", "cursor", "height",
+               "vars", "options", "number", "row", "col", "tabpage", "valid");
     else
        return NULL;
 }
@@ -3185,6 +3211,19 @@ BufferSlice(BufferObject *self, PyInt lo, PyInt hi)
     return RBSlice(self, lo, hi, 1, -1);
 }
 
+    static PyObject *
+BufferAttrValid(BufferObject *self, char *name)
+{
+    PyObject *r;
+
+    if (strcmp(name, "valid") != 0)
+       return NULL;
+
+    r = ((self->buf == INVALID_BUFFER_VALUE) ? Py_False : Py_True);
+    Py_INCREF(r);
+    return r;
+}
+
     static PyObject *
 BufferAttr(BufferObject *self, char *name)
 {
@@ -3198,7 +3237,8 @@ BufferAttr(BufferObject *self, char *name)
        return OptionsNew(SREQ_BUF, self->buf, (checkfun) CheckBuffer,
                        (PyObject *) self);
     else if (strcmp(name,"__members__") == 0)
-       return Py_BuildValue("[ssss]", "name", "number", "vars", "options");
+       return Py_BuildValue("[sssss]", "name", "number", "vars", "options",
+               "valid");
     else
        return NULL;
 }
index 7b82a7f116599a6cbbe479a6d83dc67bfb365c2e..f8e72f5fcc44a62d815ff484b46276c0fb042525 100644 (file)
@@ -1125,6 +1125,9 @@ BufferGetattr(PyObject *self, char *name)
 {
     PyObject *r;
 
+    if ((r = BufferAttrValid((BufferObject *)(self), name)))
+       return r;
+
     if (CheckBuffer((BufferObject *)(self)))
        return NULL;
 
@@ -1206,6 +1209,9 @@ TabPageGetattr(PyObject *self, char *name)
 {
     PyObject *r;
 
+    if ((r = TabPageAttrValid((TabPageObject *)(self), name)))
+       return r;
+
     if (CheckTabPage((TabPageObject *)(self)))
        return NULL;
 
@@ -1224,6 +1230,9 @@ WindowGetattr(PyObject *self, char *name)
 {
     PyObject *r;
 
+    if ((r = WindowAttrValid((WindowObject *)(self), name)))
+       return r;
+
     if (CheckWindow((WindowObject *)(self)))
        return NULL;
 
index b7323c2a969796765654d195fd32f5402e9b0b76..923d04696ddbd38a022295e8494f67d4a392012b 100644 (file)
@@ -1067,12 +1067,15 @@ static PyMappingMethods BufferAsMapping = {
  */
 
     static PyObject *
-BufferGetattro(PyObject *self, PyObject*nameobj)
+BufferGetattro(PyObject *self, PyObject *nameobj)
 {
     PyObject *r;
 
     GET_ATTR_STRING(name, nameobj);
 
+    if ((r = BufferAttrValid((BufferObject *)(self), name)))
+       return r;
+
     if (CheckBuffer((BufferObject *)(self)))
        return NULL;
 
@@ -1094,8 +1097,9 @@ BufferSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
     static PyObject *
 BufferDir(PyObject *self UNUSED)
 {
-    return Py_BuildValue("[sssss]", "name", "number",
-                                                  "append", "mark", "range");
+    return Py_BuildValue("[ssssssss]",
+           "name", "number", "vars", "options", "valid",
+           "append", "mark", "range");
 }
 
 /******************/
@@ -1283,6 +1287,9 @@ TabPageGetattro(PyObject *self, PyObject *nameobj)
 
     GET_ATTR_STRING(name, nameobj);
 
+    if ((r = TabPageAttrValid((TabPageObject *)(self), name)))
+       return r;
+
     if (CheckTabPage((TabPageObject *)(self)))
        return NULL;
 
@@ -1303,6 +1310,9 @@ WindowGetattro(PyObject *self, PyObject *nameobj)
 
     GET_ATTR_STRING(name, nameobj);
 
+    if ((r = WindowAttrValid((WindowObject *)(self), name)))
+       return r;
+
     if (CheckWindow((WindowObject *)(self)))
        return NULL;
 
index ae90b27cf4d88362ffc169471fd984303f2c9dba..267657c0aa7b7a6a1f279bb680dc666d08ce8c0a 100644 (file)
@@ -513,6 +513,7 @@ for _b in vim.buffers:
     if _b is not cb:
         vim.command('bwipeout! ' + str(_b.number))
 del _b
+cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid)))
 for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")', 'b.name = "!"'):
     try:
         exec(expr)
@@ -663,9 +664,13 @@ cb.append('Current tab page: ' + repr(vim.current.tabpage))
 cb.append('Current window: ' + repr(vim.current.window))
 cb.append('Current buffer: ' + repr(vim.current.buffer))
 cb.append('Current line: ' + repr(vim.current.line))
+ws = list(vim.windows)
+ts = list(vim.tabpages)
 for b in vim.buffers:
     if b is not cb:
         vim.command('bwipeout! ' + str(b.number))
+cb.append('w.valid: ' + repr([w.valid for w in ws]))
+cb.append('t.valid: ' + repr([t.valid for t in ts]))
 EOF
 :tabonly!
 :only!
index 1d3e81a0f25ebf90b3dfad31ceb631dd23713260..efa80019b43477c43f1b954ebfa9e6207da4bb64 100644 (file)
@@ -328,6 +328,7 @@ testdir/bar
 1:BufFilePre:1
 7:BufFilePost:1
 testdir/test86.in
+valid: b:False, cb:True
 i:<buffer test86.in>
 i2:<buffer test86.in>
 i:<buffer a>
@@ -344,7 +345,7 @@ Number of tabs: 4
 Current tab pages:
   <tabpage 0>(1): 1 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (36, 0)
+    <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (37, 0)
   <tabpage 1>(2): 1 windows, current is <window object (unknown)>
   Windows:
     <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
@@ -370,6 +371,8 @@ Current tab page: <tabpage 2>
 Current window: <window 0>
 Current buffer: <buffer test86.in>
 Current line: 'Type error at assigning None to vim.current.buffer'
+w.valid: [True, False]
+t.valid: [True, False, True, False]
 vim.vars:Dictionary:True
 vim.options:Options:True
 vim.bindeval("{}"):Dictionary:True
index a23cadc29f7249d026e11e2a0398e4525221957d..8f70fcf9072752c1d87553d4e4fce887e7e76376 100644 (file)
@@ -500,6 +500,7 @@ for _b in vim.buffers:
     if _b is not cb:
         vim.command('bwipeout! ' + str(_b.number))
 del _b
+cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid)))
 for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")'):
     try:
         exec(expr)
@@ -641,9 +642,13 @@ cb.append('Current tab page: ' + repr(vim.current.tabpage))
 cb.append('Current window: ' + repr(vim.current.window))
 cb.append('Current buffer: ' + repr(vim.current.buffer))
 cb.append('Current line: ' + repr(vim.current.line))
+ws = list(vim.windows)
+ts = list(vim.tabpages)
 for b in vim.buffers:
     if b is not cb:
         vim.command('bwipeout! ' + str(b.number))
+cb.append('w.valid: ' + repr([w.valid for w in ws]))
+cb.append('t.valid: ' + repr([t.valid for t in ts]))
 EOF
 :tabonly!
 :only!
index 697e6e371ea6508c8c42192ff2eb1c5ee3ab4f86..c04d2201e5f786ef84492f6cccc2399b38c5bb0f 100644 (file)
@@ -317,6 +317,7 @@ testdir/bar
 1:BufFilePre:1
 7:BufFilePost:1
 testdir/test87.in
+valid: b:False, cb:True
 i:<buffer test87.in>
 i2:<buffer test87.in>
 i:<buffer a>
@@ -333,7 +334,7 @@ Number of tabs: 4
 Current tab pages:
   <tabpage 0>(1): 1 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (36, 0)
+    <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (37, 0)
   <tabpage 1>(2): 1 windows, current is <window object (unknown)>
   Windows:
     <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
@@ -359,6 +360,8 @@ Current tab page: <tabpage 2>
 Current window: <window 0>
 Current buffer: <buffer test87.in>
 Current line: 'Type error at assigning None to vim.current.buffer'
+w.valid: [True, False]
+t.valid: [True, False, True, False]
 vim.vars:Dictionary:True
 vim.options:Options:True
 vim.bindeval("{}"):Dictionary:True
index 4407e0e24e1d871a9ab686a38e381d9c4452d70c..b3bd87493f3a083469bdb9b6f816b86a565b13c1 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1044,
 /**/
     1043,
 /**/