Karsten Hopp 69032a
To: vim_dev@googlegroups.com
Karsten Hopp 69032a
Subject: Patch 7.3.964
Karsten Hopp 69032a
Fcc: outbox
Karsten Hopp 69032a
From: Bram Moolenaar <Bram@moolenaar.net>
Karsten Hopp 69032a
Mime-Version: 1.0
Karsten Hopp 69032a
Content-Type: text/plain; charset=UTF-8
Karsten Hopp 69032a
Content-Transfer-Encoding: 8bit
Karsten Hopp 69032a
------------
Karsten Hopp 69032a
Karsten Hopp 69032a
Patch 7.3.964
Karsten Hopp 69032a
Problem:    Python: not so easy to access tab pages.
Karsten Hopp 69032a
Solution:   Add window.tabpage, make window.number work with non-current tab
Karsten Hopp 69032a
	    pages. (ZyX)
Karsten Hopp 69032a
Files:	    runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python3.c,
Karsten Hopp 69032a
	    src/if_python.c, src/testdir/test86.ok, src/testdir/test87.ok
Karsten Hopp 69032a
Karsten Hopp 69032a
Karsten Hopp 69032a
*** ../vim-7.3.963/runtime/doc/if_pyth.txt	2013-05-15 18:28:08.000000000 +0200
Karsten Hopp 69032a
--- runtime/doc/if_pyth.txt	2013-05-17 16:07:16.000000000 +0200
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 433,440 ****
Karsten Hopp 69032a
  				This is zero in case it cannot be determined
Karsten Hopp 69032a
  				(e.g. when the window object belongs to other
Karsten Hopp 69032a
  				tab page).
Karsten Hopp 69032a
!  	row, col (read-only)	On-screen window position in display cells.
Karsten Hopp 69032a
  				First position is zero.
Karsten Hopp 69032a
  
Karsten Hopp 69032a
  The height attribute is writable only if the screen is split horizontally.
Karsten Hopp 69032a
  The width attribute is writable only if the screen is split vertically.
Karsten Hopp 69032a
--- 433,441 ----
Karsten Hopp 69032a
  				This is zero in case it cannot be determined
Karsten Hopp 69032a
  				(e.g. when the window object belongs to other
Karsten Hopp 69032a
  				tab page).
Karsten Hopp 69032a
! 	row, col (read-only)	On-screen window position in display cells.
Karsten Hopp 69032a
  				First position is zero.
Karsten Hopp 69032a
+ 	tabpage (read-only)	Window tab page.
Karsten Hopp 69032a
  
Karsten Hopp 69032a
  The height attribute is writable only if the screen is split horizontally.
Karsten Hopp 69032a
  The width attribute is writable only if the screen is split vertically.
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 490,496 ****
Karsten Hopp 69032a
  <							*:py3file*
Karsten Hopp 69032a
  The |:py3file| command works similar to |:pyfile|.
Karsten Hopp 69032a
  
Karsten Hopp 69032a
! 							*:py3do*
Karsten Hopp 69032a
  :[range]py3do {body}	Execute Python function "def _vim_pydo(line, linenr):
Karsten Hopp 69032a
  			{body}" for each line in the [range], with the
Karsten Hopp 69032a
  			function arguments being set to the text of each line
Karsten Hopp 69032a
--- 491,497 ----
Karsten Hopp 69032a
  <							*:py3file*
Karsten Hopp 69032a
  The |:py3file| command works similar to |:pyfile|.
Karsten Hopp 69032a
  
Karsten Hopp 69032a
! 							*:py3do* *E863*
Karsten Hopp 69032a
  :[range]py3do {body}	Execute Python function "def _vim_pydo(line, linenr):
Karsten Hopp 69032a
  			{body}" for each line in the [range], with the
Karsten Hopp 69032a
  			function arguments being set to the text of each line
Karsten Hopp 69032a
*** ../vim-7.3.963/src/if_py_both.h	2013-05-17 16:03:53.000000000 +0200
Karsten Hopp 69032a
--- src/if_py_both.h	2013-05-17 16:07:16.000000000 +0200
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 31,36 ****
Karsten Hopp 69032a
--- 31,39 ----
Karsten Hopp 69032a
  
Karsten Hopp 69032a
  static int ConvertFromPyObject(PyObject *, typval_T *);
Karsten Hopp 69032a
  static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *);
Karsten Hopp 69032a
+ static PyObject *WindowNew(win_T *, tabpage_T *);
Karsten Hopp 69032a
+ static PyObject *BufferNew (buf_T *);
Karsten Hopp 69032a
+ static PyObject *LineToString(const char *);
Karsten Hopp 69032a
  
Karsten Hopp 69032a
  static PyInt RangeStart;
Karsten Hopp 69032a
  static PyInt RangeEnd;
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 1670,1678 ****
Karsten Hopp 69032a
  	/* For current tab window.c does not bother to set or update tp_curwin
Karsten Hopp 69032a
  	 */
Karsten Hopp 69032a
  	if (this->tab == curtab)
Karsten Hopp 69032a
! 	    return WindowNew(curwin);
Karsten Hopp 69032a
  	else
Karsten Hopp 69032a
! 	    return WindowNew(this->tab->tp_curwin);
Karsten Hopp 69032a
      }
Karsten Hopp 69032a
      return NULL;
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
--- 1673,1681 ----
Karsten Hopp 69032a
  	/* For current tab window.c does not bother to set or update tp_curwin
Karsten Hopp 69032a
  	 */
Karsten Hopp 69032a
  	if (this->tab == curtab)
Karsten Hopp 69032a
! 	    return WindowNew(curwin, curtab);
Karsten Hopp 69032a
  	else
Karsten Hopp 69032a
! 	    return WindowNew(this->tab->tp_curwin, this->tab);
Karsten Hopp 69032a
      }
Karsten Hopp 69032a
      return NULL;
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 1754,1759 ****
Karsten Hopp 69032a
--- 1757,1763 ----
Karsten Hopp 69032a
  {
Karsten Hopp 69032a
      PyObject_HEAD
Karsten Hopp 69032a
      win_T	*win;
Karsten Hopp 69032a
+     TabPageObject	*tabObject;
Karsten Hopp 69032a
  } WindowObject;
Karsten Hopp 69032a
  
Karsten Hopp 69032a
  static PyTypeObject WindowType;
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 1771,1777 ****
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
  
Karsten Hopp 69032a
      static PyObject *
Karsten Hopp 69032a
! WindowNew(win_T *win)
Karsten Hopp 69032a
  {
Karsten Hopp 69032a
      /* We need to handle deletion of windows underneath us.
Karsten Hopp 69032a
       * If we add a "w_python*_ref" field to the win_T structure,
Karsten Hopp 69032a
--- 1775,1781 ----
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
  
Karsten Hopp 69032a
      static PyObject *
Karsten Hopp 69032a
! WindowNew(win_T *win, tabpage_T *tab)
Karsten Hopp 69032a
  {
Karsten Hopp 69032a
      /* We need to handle deletion of windows underneath us.
Karsten Hopp 69032a
       * If we add a "w_python*_ref" field to the win_T structure,
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 1804,1809 ****
Karsten Hopp 69032a
--- 1808,1815 ----
Karsten Hopp 69032a
  	WIN_PYTHON_REF(win) = self;
Karsten Hopp 69032a
      }
Karsten Hopp 69032a
  
Karsten Hopp 69032a
+     self->tabObject = ((TabPageObject *)(TabPageNew(tab)));
Karsten Hopp 69032a
+ 
Karsten Hopp 69032a
      return (PyObject *)(self);
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
  
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 1815,1823 ****
Karsten Hopp 69032a
--- 1821,1849 ----
Karsten Hopp 69032a
      if (this->win && this->win != INVALID_WINDOW_VALUE)
Karsten Hopp 69032a
  	WIN_PYTHON_REF(this->win) = NULL;
Karsten Hopp 69032a
  
Karsten Hopp 69032a
+     Py_DECREF(((PyObject *)(this->tabObject)));
Karsten Hopp 69032a
+ 
Karsten Hopp 69032a
      DESTRUCTOR_FINISH(self);
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
  
Karsten Hopp 69032a
+     static win_T *
Karsten Hopp 69032a
+ get_firstwin(TabPageObject *tabObject)
Karsten Hopp 69032a
+ {
Karsten Hopp 69032a
+     if (tabObject)
Karsten Hopp 69032a
+     {
Karsten Hopp 69032a
+ 	if (CheckTabPage(tabObject))
Karsten Hopp 69032a
+ 	    return NULL;
Karsten Hopp 69032a
+ 	/* For current tab window.c does not bother to set or update tp_firstwin
Karsten Hopp 69032a
+ 	 */
Karsten Hopp 69032a
+ 	else if (tabObject->tab == curtab)
Karsten Hopp 69032a
+ 	    return firstwin;
Karsten Hopp 69032a
+ 	else
Karsten Hopp 69032a
+ 	    return tabObject->tab->tp_firstwin;
Karsten Hopp 69032a
+     }
Karsten Hopp 69032a
+     else
Karsten Hopp 69032a
+ 	return firstwin;
Karsten Hopp 69032a
+ }
Karsten Hopp 69032a
+ 
Karsten Hopp 69032a
      static PyObject *
Karsten Hopp 69032a
  WindowAttr(WindowObject *this, char *name)
Karsten Hopp 69032a
  {
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 1847,1856 ****
Karsten Hopp 69032a
  	return OptionsNew(SREQ_WIN, this->win, (checkfun) CheckWindow,
Karsten Hopp 69032a
  			(PyObject *) this);
Karsten Hopp 69032a
      else if (strcmp(name, "number") == 0)
Karsten Hopp 69032a
! 	return PyLong_FromLong((long) get_win_number(this->win, firstwin));
Karsten Hopp 69032a
      else if (strcmp(name,"__members__") == 0)
Karsten Hopp 69032a
! 	return Py_BuildValue("[ssssssss]", "buffer", "cursor", "height", "vars",
Karsten Hopp 69032a
! 		"options", "number", "row", "col");
Karsten Hopp 69032a
      else
Karsten Hopp 69032a
  	return NULL;
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
--- 1873,1892 ----
Karsten Hopp 69032a
  	return OptionsNew(SREQ_WIN, this->win, (checkfun) CheckWindow,
Karsten Hopp 69032a
  			(PyObject *) this);
Karsten Hopp 69032a
      else if (strcmp(name, "number") == 0)
Karsten Hopp 69032a
!     {
Karsten Hopp 69032a
! 	if (CheckTabPage(this->tabObject))
Karsten Hopp 69032a
! 	    return NULL;
Karsten Hopp 69032a
! 	return PyLong_FromLong((long)
Karsten Hopp 69032a
! 		get_win_number(this->win, get_firstwin(this->tabObject)));
Karsten Hopp 69032a
!     }
Karsten Hopp 69032a
!     else if (strcmp(name, "tabpage") == 0)
Karsten Hopp 69032a
!     {
Karsten Hopp 69032a
! 	Py_INCREF(this->tabObject);
Karsten Hopp 69032a
! 	return (PyObject *)(this->tabObject);
Karsten Hopp 69032a
!     }
Karsten Hopp 69032a
      else if (strcmp(name,"__members__") == 0)
Karsten Hopp 69032a
! 	return Py_BuildValue("[sssssssss]", "buffer", "cursor", "height",
Karsten Hopp 69032a
! 		"vars", "options", "number", "row", "col", "tabpage");
Karsten Hopp 69032a
      else
Karsten Hopp 69032a
  	return NULL;
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 2016,2046 ****
Karsten Hopp 69032a
      DESTRUCTOR_FINISH(self);
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
  
Karsten Hopp 69032a
-     static win_T *
Karsten Hopp 69032a
- get_firstwin(WinListObject *this)
Karsten Hopp 69032a
- {
Karsten Hopp 69032a
-     if (this->tabObject)
Karsten Hopp 69032a
-     {
Karsten Hopp 69032a
- 	if (CheckTabPage(this->tabObject))
Karsten Hopp 69032a
- 	    return NULL;
Karsten Hopp 69032a
- 	/* For current tab window.c does not bother to set or update tp_firstwin
Karsten Hopp 69032a
- 	 */
Karsten Hopp 69032a
- 	else if (this->tabObject->tab == curtab)
Karsten Hopp 69032a
- 	    return firstwin;
Karsten Hopp 69032a
- 	else
Karsten Hopp 69032a
- 	    return this->tabObject->tab->tp_firstwin;
Karsten Hopp 69032a
-     }
Karsten Hopp 69032a
-     else
Karsten Hopp 69032a
- 	return firstwin;
Karsten Hopp 69032a
- }
Karsten Hopp 69032a
- 
Karsten Hopp 69032a
      static PyInt
Karsten Hopp 69032a
  WinListLength(PyObject *self)
Karsten Hopp 69032a
  {
Karsten Hopp 69032a
      win_T	*w;
Karsten Hopp 69032a
      PyInt	n = 0;
Karsten Hopp 69032a
  
Karsten Hopp 69032a
!     if (!(w = get_firstwin((WinListObject *)(self))))
Karsten Hopp 69032a
  	return -1;
Karsten Hopp 69032a
  
Karsten Hopp 69032a
      while (w != NULL)
Karsten Hopp 69032a
--- 2052,2064 ----
Karsten Hopp 69032a
      DESTRUCTOR_FINISH(self);
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
  
Karsten Hopp 69032a
      static PyInt
Karsten Hopp 69032a
  WinListLength(PyObject *self)
Karsten Hopp 69032a
  {
Karsten Hopp 69032a
      win_T	*w;
Karsten Hopp 69032a
      PyInt	n = 0;
Karsten Hopp 69032a
  
Karsten Hopp 69032a
!     if (!(w = get_firstwin(((WinListObject *)(self))->tabObject)))
Karsten Hopp 69032a
  	return -1;
Karsten Hopp 69032a
  
Karsten Hopp 69032a
      while (w != NULL)
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 2055,2068 ****
Karsten Hopp 69032a
      static PyObject *
Karsten Hopp 69032a
  WinListItem(PyObject *self, PyInt n)
Karsten Hopp 69032a
  {
Karsten Hopp 69032a
      win_T *w;
Karsten Hopp 69032a
  
Karsten Hopp 69032a
!     if (!(w = get_firstwin((WinListObject *)(self))))
Karsten Hopp 69032a
  	return NULL;
Karsten Hopp 69032a
  
Karsten Hopp 69032a
      for (; w != NULL; w = W_NEXT(w), --n)
Karsten Hopp 69032a
  	if (n == 0)
Karsten Hopp 69032a
! 	    return WindowNew(w);
Karsten Hopp 69032a
  
Karsten Hopp 69032a
      PyErr_SetString(PyExc_IndexError, _("no such window"));
Karsten Hopp 69032a
      return NULL;
Karsten Hopp 69032a
--- 2073,2087 ----
Karsten Hopp 69032a
      static PyObject *
Karsten Hopp 69032a
  WinListItem(PyObject *self, PyInt n)
Karsten Hopp 69032a
  {
Karsten Hopp 69032a
+     WinListObject	*this = ((WinListObject *)(self));
Karsten Hopp 69032a
      win_T *w;
Karsten Hopp 69032a
  
Karsten Hopp 69032a
!     if (!(w = get_firstwin(this->tabObject)))
Karsten Hopp 69032a
  	return NULL;
Karsten Hopp 69032a
  
Karsten Hopp 69032a
      for (; w != NULL; w = W_NEXT(w), --n)
Karsten Hopp 69032a
  	if (n == 0)
Karsten Hopp 69032a
! 	    return WindowNew(w, this->tabObject? this->tabObject->tab: curtab);
Karsten Hopp 69032a
  
Karsten Hopp 69032a
      PyErr_SetString(PyExc_IndexError, _("no such window"));
Karsten Hopp 69032a
      return NULL;
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 3227,3233 ****
Karsten Hopp 69032a
      if (strcmp(name, "buffer") == 0)
Karsten Hopp 69032a
  	return (PyObject *)BufferNew(curbuf);
Karsten Hopp 69032a
      else if (strcmp(name, "window") == 0)
Karsten Hopp 69032a
! 	return (PyObject *)WindowNew(curwin);
Karsten Hopp 69032a
      else if (strcmp(name, "tabpage") == 0)
Karsten Hopp 69032a
  	return (PyObject *)TabPageNew(curtab);
Karsten Hopp 69032a
      else if (strcmp(name, "line") == 0)
Karsten Hopp 69032a
--- 3246,3252 ----
Karsten Hopp 69032a
      if (strcmp(name, "buffer") == 0)
Karsten Hopp 69032a
  	return (PyObject *)BufferNew(curbuf);
Karsten Hopp 69032a
      else if (strcmp(name, "window") == 0)
Karsten Hopp 69032a
! 	return (PyObject *)WindowNew(curwin, curtab);
Karsten Hopp 69032a
      else if (strcmp(name, "tabpage") == 0)
Karsten Hopp 69032a
  	return (PyObject *)TabPageNew(curtab);
Karsten Hopp 69032a
      else if (strcmp(name, "line") == 0)
Karsten Hopp 69032a
*** ../vim-7.3.963/src/if_python3.c	2013-05-15 19:44:35.000000000 +0200
Karsten Hopp 69032a
--- src/if_python3.c	2013-05-17 16:07:16.000000000 +0200
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 611,619 ****
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
  #endif /* DYNAMIC_PYTHON3 */
Karsten Hopp 69032a
  
Karsten Hopp 69032a
- static PyObject *BufferNew (buf_T *);
Karsten Hopp 69032a
- static PyObject *WindowNew(win_T *);
Karsten Hopp 69032a
- static PyObject *LineToString(const char *);
Karsten Hopp 69032a
  static PyObject *BufferDir(PyObject *, PyObject *);
Karsten Hopp 69032a
  
Karsten Hopp 69032a
  static int py3initialised = 0;
Karsten Hopp 69032a
--- 611,616 ----
Karsten Hopp 69032a
*** ../vim-7.3.963/src/if_python.c	2013-05-15 17:49:00.000000000 +0200
Karsten Hopp 69032a
--- src/if_python.c	2013-05-17 16:07:16.000000000 +0200
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 610,620 ****
Karsten Hopp 69032a
  }
Karsten Hopp 69032a
  #endif /* DYNAMIC_PYTHON */
Karsten Hopp 69032a
  
Karsten Hopp 69032a
- static PyObject *BufferNew (buf_T *);
Karsten Hopp 69032a
- static PyObject *WindowNew(win_T *);
Karsten Hopp 69032a
- static PyObject *DictionaryNew(dict_T *);
Karsten Hopp 69032a
- static PyObject *LineToString(const char *);
Karsten Hopp 69032a
- 
Karsten Hopp 69032a
  static int initialised = 0;
Karsten Hopp 69032a
  #define PYINITIALISED initialised
Karsten Hopp 69032a
  
Karsten Hopp 69032a
--- 610,615 ----
Karsten Hopp 69032a
*** ../vim-7.3.963/src/testdir/test86.ok	2013-05-17 16:03:53.000000000 +0200
Karsten Hopp 69032a
--- src/testdir/test86.ok	2013-05-17 16:10:26.000000000 +0200
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 333,346 ****
Karsten Hopp 69032a
  Current tab pages:
Karsten Hopp 69032a
    <tabpage 0>(1): 1 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(0): displays buffer <buffer test86.in>; cursor is at (954, 0)
Karsten Hopp 69032a
    <tabpage 1>(2): 1 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(0): displays buffer <buffer 0>; cursor is at (1, 0)
Karsten Hopp 69032a
    <tabpage 2>(3): 2 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(0): displays buffer <buffer a.1>; cursor is at (1, 0)
Karsten Hopp 69032a
!     <window object (unknown)>(0): displays buffer <buffer 1>; cursor is at (1, 0)
Karsten Hopp 69032a
    <tabpage 3>(4): 4 windows, current is <window 0>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
      <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
Karsten Hopp 69032a
--- 333,346 ----
Karsten Hopp 69032a
  Current tab pages:
Karsten Hopp 69032a
    <tabpage 0>(1): 1 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (954, 0)
Karsten Hopp 69032a
    <tabpage 1>(2): 1 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
Karsten Hopp 69032a
    <tabpage 2>(3): 2 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
Karsten Hopp 69032a
!     <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
Karsten Hopp 69032a
    <tabpage 3>(4): 4 windows, current is <window 0>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
      <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
Karsten Hopp 69032a
*** ../vim-7.3.963/src/testdir/test87.ok	2013-05-17 13:37:57.000000000 +0200
Karsten Hopp 69032a
--- src/testdir/test87.ok	2013-05-17 16:07:16.000000000 +0200
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 322,335 ****
Karsten Hopp 69032a
  Current tab pages:
Karsten Hopp 69032a
    <tabpage 0>(1): 1 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(0): displays buffer <buffer test87.in>; cursor is at (930, 0)
Karsten Hopp 69032a
    <tabpage 1>(2): 1 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(0): displays buffer <buffer 0>; cursor is at (1, 0)
Karsten Hopp 69032a
    <tabpage 2>(3): 2 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(0): displays buffer <buffer a.1>; cursor is at (1, 0)
Karsten Hopp 69032a
!     <window object (unknown)>(0): displays buffer <buffer 1>; cursor is at (1, 0)
Karsten Hopp 69032a
    <tabpage 3>(4): 4 windows, current is <window 0>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
      <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
Karsten Hopp 69032a
--- 322,335 ----
Karsten Hopp 69032a
  Current tab pages:
Karsten Hopp 69032a
    <tabpage 0>(1): 1 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (930, 0)
Karsten Hopp 69032a
    <tabpage 1>(2): 1 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
Karsten Hopp 69032a
    <tabpage 2>(3): 2 windows, current is <window object (unknown)>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
!     <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
Karsten Hopp 69032a
!     <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
Karsten Hopp 69032a
    <tabpage 3>(4): 4 windows, current is <window 0>
Karsten Hopp 69032a
    Windows:
Karsten Hopp 69032a
      <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
Karsten Hopp 69032a
*** ../vim-7.3.963/src/version.c	2013-05-17 16:03:53.000000000 +0200
Karsten Hopp 69032a
--- src/version.c	2013-05-17 16:11:15.000000000 +0200
Karsten Hopp 69032a
***************
Karsten Hopp 69032a
*** 730,731 ****
Karsten Hopp 69032a
--- 730,733 ----
Karsten Hopp 69032a
  {   /* Add new patch number below this line */
Karsten Hopp 69032a
+ /**/
Karsten Hopp 69032a
+     964,
Karsten Hopp 69032a
  /**/
Karsten Hopp 69032a
Karsten Hopp 69032a
-- 
Karsten Hopp 69032a
ARTHUR: Go on, Bors, chop its head off.
Karsten Hopp 69032a
BORS:   Right.  Silly little bleeder.  One rabbit stew coming up.
Karsten Hopp 69032a
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
Karsten Hopp 69032a
Karsten Hopp 69032a
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
Karsten Hopp 69032a
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
Karsten Hopp 69032a
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
Karsten Hopp 69032a
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///