Karsten Hopp ae61a4
To: vim_dev@googlegroups.com
Karsten Hopp ae61a4
Subject: Patch 7.3.996
Karsten Hopp ae61a4
Fcc: outbox
Karsten Hopp ae61a4
From: Bram Moolenaar <Bram@moolenaar.net>
Karsten Hopp ae61a4
Mime-Version: 1.0
Karsten Hopp ae61a4
Content-Type: text/plain; charset=UTF-8
Karsten Hopp ae61a4
Content-Transfer-Encoding: 8bit
Karsten Hopp ae61a4
------------
Karsten Hopp ae61a4
Karsten Hopp ae61a4
Patch 7.3.996
Karsten Hopp ae61a4
Problem:    Python: Can't check types of what is returned by bindeval().
Karsten Hopp ae61a4
Solution:   Add vim.List, vim.Dictionary and vim.Function types. (ZyX)
Karsten Hopp ae61a4
Files:	    runtime/doc/if_pyth.txt, src/if_py_both.h, src/testdir/test86.in,
Karsten Hopp ae61a4
	    src/testdir/test86.ok, src/testdir/test87.in,
Karsten Hopp ae61a4
	    src/testdir/test87.ok
Karsten Hopp ae61a4
Karsten Hopp ae61a4
Karsten Hopp ae61a4
*** ../vim-7.3.995/runtime/doc/if_pyth.txt	2013-05-17 16:39:59.000000000 +0200
Karsten Hopp ae61a4
--- runtime/doc/if_pyth.txt	2013-05-21 19:21:58.000000000 +0200
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 11,19 ****
Karsten Hopp ae61a4
  3. Buffer objects				|python-buffer|
Karsten Hopp ae61a4
  4. Range objects				|python-range|
Karsten Hopp ae61a4
  5. Window objects				|python-window|
Karsten Hopp ae61a4
! 6. pyeval(), py3eval() Vim functions		|python-pyeval|
Karsten Hopp ae61a4
! 7. Dynamic loading				|python-dynamic|
Karsten Hopp ae61a4
! 8. Python 3					|python3|
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  {Vi does not have any of these commands}
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
--- 11,20 ----
Karsten Hopp ae61a4
  3. Buffer objects				|python-buffer|
Karsten Hopp ae61a4
  4. Range objects				|python-range|
Karsten Hopp ae61a4
  5. Window objects				|python-window|
Karsten Hopp ae61a4
! 6. Tab page objects				|python-tabpage|
Karsten Hopp ae61a4
! 7. pyeval(), py3eval() Vim functions		|python-pyeval|
Karsten Hopp ae61a4
! 8. Dynamic loading				|python-dynamic|
Karsten Hopp ae61a4
! 9. Python 3					|python3|
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  {Vi does not have any of these commands}
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 176,182 ****
Karsten Hopp ae61a4
  	   list or dictionary. Thus modifications to these objects imply 
Karsten Hopp ae61a4
  	   modifications of the original.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
! 	   Additionally, vimlist and vimdictionary type have read-write 
Karsten Hopp ae61a4
  	   `.locked` attribute that returns
Karsten Hopp ae61a4
  	     Value           Meaning ~
Karsten Hopp ae61a4
  	     zero            Variable is not locked
Karsten Hopp ae61a4
--- 177,183 ----
Karsten Hopp ae61a4
  	   list or dictionary. Thus modifications to these objects imply 
Karsten Hopp ae61a4
  	   modifications of the original.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
! 	   Additionally, vim.List and vim.Dictionary type have read-write 
Karsten Hopp ae61a4
  	   `.locked` attribute that returns
Karsten Hopp ae61a4
  	     Value           Meaning ~
Karsten Hopp ae61a4
  	     zero            Variable is not locked
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 189,202 ****
Karsten Hopp ae61a4
  	   case these locks are ignored by anything except |:let|: |extend()| 
Karsten Hopp ae61a4
  	   does not care, neither does python interface).
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
! 	   Vimdictionary type also supports `.scope` attribute which is one of
Karsten Hopp ae61a4
  	     Value              Meaning ~
Karsten Hopp ae61a4
  	     zero               Dictionary is not a scope one
Karsten Hopp ae61a4
  	     vim.VAR_DEF_SCOPE  Function-local or global scope dictionary
Karsten Hopp ae61a4
  	     vim.VAR_SCOPE      Other scope dictionary
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  	2. if expression evaluates to a function reference, then it returns 
Karsten Hopp ae61a4
! 	   callable vimfunction object. Use self keyword argument to assign 
Karsten Hopp ae61a4
  	   |self| object for dictionary functions.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  	Note: this function has the same behavior as |lua-eval| (except that 
Karsten Hopp ae61a4
--- 190,204 ----
Karsten Hopp ae61a4
  	   case these locks are ignored by anything except |:let|: |extend()| 
Karsten Hopp ae61a4
  	   does not care, neither does python interface).
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
! 	   vim.Dictionary type also supports `.scope` attribute which is one 
Karsten Hopp ae61a4
! 	   of
Karsten Hopp ae61a4
  	     Value              Meaning ~
Karsten Hopp ae61a4
  	     zero               Dictionary is not a scope one
Karsten Hopp ae61a4
  	     vim.VAR_DEF_SCOPE  Function-local or global scope dictionary
Karsten Hopp ae61a4
  	     vim.VAR_SCOPE      Other scope dictionary
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  	2. if expression evaluates to a function reference, then it returns 
Karsten Hopp ae61a4
! 	   callable vim.Function object. Use self keyword argument to assign 
Karsten Hopp ae61a4
  	   |self| object for dictionary functions.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  	Note: this function has the same behavior as |lua-eval| (except that 
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 205,210 ****
Karsten Hopp ae61a4
--- 207,216 ----
Karsten Hopp ae61a4
  	      relying on outputs of vim.eval() being a copy of original or 
Karsten Hopp ae61a4
  	      vim.eval("1") returning a string.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
+ 	You can use "List", "Dictionary" and "Function" vim module attributes 
Karsten Hopp ae61a4
+ 	to test whether object has given type. These types are currently not 
Karsten Hopp ae61a4
+ 	subclassable, neither they contain constructors, so you can use them 
Karsten Hopp ae61a4
+ 	only for checks like `isinstance(obj, vim.List)`.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  Error object of the "vim" module
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 302,307 ****
Karsten Hopp ae61a4
--- 308,316 ----
Karsten Hopp ae61a4
  	buffer-local options and |python-window| objects to access to
Karsten Hopp ae61a4
  	window-local options.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
+ 	Type of this object is available via "Options" attribute of vim 
Karsten Hopp ae61a4
+ 	module.
Karsten Hopp ae61a4
+ 
Karsten Hopp ae61a4
  Output from Python					*python-output*
Karsten Hopp ae61a4
  	Vim displays all Python code output in the Vim message area.  Normal
Karsten Hopp ae61a4
  	output appears as information messages, and error output appears as
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 371,376 ****
Karsten Hopp ae61a4
--- 380,387 ----
Karsten Hopp ae61a4
  A trailing '\n' is allowed and ignored, so that you can do: >
Karsten Hopp ae61a4
  	:py b.append(f.readlines())
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
+ Buffer object type is available using "Buffer" attribute of vim module.
Karsten Hopp ae61a4
+ 
Karsten Hopp ae61a4
  Examples (assume b is the current buffer) >
Karsten Hopp ae61a4
  	:py print b.name		# write the buffer file name
Karsten Hopp ae61a4
  	:py b[0] = "hello!!!"		# replace the top line
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 412,417 ****
Karsten Hopp ae61a4
--- 423,430 ----
Karsten Hopp ae61a4
  			for Python's built-in list objects.
Karsten Hopp ae61a4
  	r.append(list, nr)  Idem, after line "nr"
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
+ Range object type is available using "Range" attribute of vim module.
Karsten Hopp ae61a4
+ 
Karsten Hopp ae61a4
  Example (assume r is the current range):
Karsten Hopp ae61a4
  	# Send all lines in a range to the default printer
Karsten Hopp ae61a4
  	vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 456,461 ****
Karsten Hopp ae61a4
--- 469,476 ----
Karsten Hopp ae61a4
  The height attribute is writable only if the screen is split horizontally.
Karsten Hopp ae61a4
  The width attribute is writable only if the screen is split vertically.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
+ Window object type is available using "Window" attribute of vim module.
Karsten Hopp ae61a4
+ 
Karsten Hopp ae61a4
  ==============================================================================
Karsten Hopp ae61a4
  6. Tab page objects					*python-tabpage*
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 474,487 ****
Karsten Hopp ae61a4
  	vars		The tab page |t:| variables.
Karsten Hopp ae61a4
  	window		Current tabpage window.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  ==============================================================================
Karsten Hopp ae61a4
! 6. pyeval() and py3eval() Vim functions			*python-pyeval*
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()| 
Karsten Hopp ae61a4
  functions to evaluate Python expressions and pass their values to VimL.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  ==============================================================================
Karsten Hopp ae61a4
! 7. Dynamic loading					*python-dynamic*
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  On MS-Windows the Python library can be loaded dynamically.  The |:version|
Karsten Hopp ae61a4
  output then includes |+python/dyn|.
Karsten Hopp ae61a4
--- 489,504 ----
Karsten Hopp ae61a4
  	vars		The tab page |t:| variables.
Karsten Hopp ae61a4
  	window		Current tabpage window.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
+ TabPage object type is available using "TabPage" attribute of vim module.
Karsten Hopp ae61a4
+ 
Karsten Hopp ae61a4
  ==============================================================================
Karsten Hopp ae61a4
! 7. pyeval() and py3eval() Vim functions			*python-pyeval*
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()| 
Karsten Hopp ae61a4
  functions to evaluate Python expressions and pass their values to VimL.
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  ==============================================================================
Karsten Hopp ae61a4
! 8. Dynamic loading					*python-dynamic*
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  On MS-Windows the Python library can be loaded dynamically.  The |:version|
Karsten Hopp ae61a4
  output then includes |+python/dyn|.
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 498,504 ****
Karsten Hopp ae61a4
  sure edit "gvim.exe" and search for "python\d*.dll\c".
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  ==============================================================================
Karsten Hopp ae61a4
! 8. Python 3						*python3*
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  							*:py3* *:python3*
Karsten Hopp ae61a4
  The `:py3` and `:python3` commands work similar to `:python`.  A simple check
Karsten Hopp ae61a4
--- 515,521 ----
Karsten Hopp ae61a4
  sure edit "gvim.exe" and search for "python\d*.dll\c".
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  ==============================================================================
Karsten Hopp ae61a4
! 9. Python 3						*python3*
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  							*:py3* *:python3*
Karsten Hopp ae61a4
  The `:py3` and `:python3` commands work similar to `:python`.  A simple check
Karsten Hopp ae61a4
*** ../vim-7.3.995/src/if_py_both.h	2013-05-21 19:10:56.000000000 +0200
Karsten Hopp ae61a4
--- src/if_py_both.h	2013-05-21 19:21:58.000000000 +0200
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 4245,4250 ****
Karsten Hopp ae61a4
--- 4245,4259 ----
Karsten Hopp ae61a4
      {"windows",  (PyObject *)(void *)&TheWindowList},
Karsten Hopp ae61a4
      {"tabpages", (PyObject *)(void *)&TheTabPageList},
Karsten Hopp ae61a4
      {"current",  (PyObject *)(void *)&TheCurrent},
Karsten Hopp ae61a4
+ 
Karsten Hopp ae61a4
+     {"Buffer",     (PyObject *)&BufferType},
Karsten Hopp ae61a4
+     {"Range",      (PyObject *)&RangeType},
Karsten Hopp ae61a4
+     {"Window",     (PyObject *)&WindowType},
Karsten Hopp ae61a4
+     {"TabPage",    (PyObject *)&TabPageType},
Karsten Hopp ae61a4
+     {"Dictionary", (PyObject *)&DictionaryType},
Karsten Hopp ae61a4
+     {"List",       (PyObject *)&ListType},
Karsten Hopp ae61a4
+     {"Function",   (PyObject *)&FunctionType},
Karsten Hopp ae61a4
+     {"Options",    (PyObject *)&OptionsType},
Karsten Hopp ae61a4
  };
Karsten Hopp ae61a4
  
Karsten Hopp ae61a4
  typedef int (*object_adder)(PyObject *, const char *, PyObject *);
Karsten Hopp ae61a4
*** ../vim-7.3.995/src/testdir/test86.in	2013-05-17 13:37:57.000000000 +0200
Karsten Hopp ae61a4
--- src/testdir/test86.in	2013-05-21 19:21:58.000000000 +0200
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 631,640 ****
Karsten Hopp ae61a4
  cb.append('Current line: ' + repr(vim.current.line))
Karsten Hopp ae61a4
  for b in vim.buffers:
Karsten Hopp ae61a4
      if b is not cb:
Karsten Hopp ae61a4
!         vim.command('bwipeout! ' + b.number)
Karsten Hopp ae61a4
  EOF
Karsten Hopp ae61a4
  :tabonly!
Karsten Hopp ae61a4
  :only!
Karsten Hopp ae61a4
  :endfun
Karsten Hopp ae61a4
  :"
Karsten Hopp ae61a4
  :call Test()
Karsten Hopp ae61a4
--- 631,656 ----
Karsten Hopp ae61a4
  cb.append('Current line: ' + repr(vim.current.line))
Karsten Hopp ae61a4
  for b in vim.buffers:
Karsten Hopp ae61a4
      if b is not cb:
Karsten Hopp ae61a4
!         vim.command('bwipeout! ' + str(b.number))
Karsten Hopp ae61a4
  EOF
Karsten Hopp ae61a4
  :tabonly!
Karsten Hopp ae61a4
  :only!
Karsten Hopp ae61a4
+ :"
Karsten Hopp ae61a4
+ :" Test types
Karsten Hopp ae61a4
+ py << EOF
Karsten Hopp ae61a4
+ for expr, attr in (
Karsten Hopp ae61a4
+     ('vim.vars',                         'Dictionary'),
Karsten Hopp ae61a4
+     ('vim.options',                      'Options'),
Karsten Hopp ae61a4
+     ('vim.bindeval("{}")',               'Dictionary'),
Karsten Hopp ae61a4
+     ('vim.bindeval("[]")',               'List'),
Karsten Hopp ae61a4
+     ('vim.bindeval("function(\'tr\')")', 'Function'),
Karsten Hopp ae61a4
+     ('vim.current.buffer',               'Buffer'),
Karsten Hopp ae61a4
+     ('vim.current.range',                'Range'),
Karsten Hopp ae61a4
+     ('vim.current.window',               'Window'),
Karsten Hopp ae61a4
+     ('vim.current.tabpage',              'TabPage'),
Karsten Hopp ae61a4
+ ):
Karsten Hopp ae61a4
+     cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
Karsten Hopp ae61a4
+ EOF
Karsten Hopp ae61a4
  :endfun
Karsten Hopp ae61a4
  :"
Karsten Hopp ae61a4
  :call Test()
Karsten Hopp ae61a4
*** ../vim-7.3.995/src/testdir/test86.ok	2013-05-17 16:18:27.000000000 +0200
Karsten Hopp ae61a4
--- src/testdir/test86.ok	2013-05-21 19:21:58.000000000 +0200
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 333,339 ****
Karsten Hopp ae61a4
  Current tab pages:
Karsten Hopp ae61a4
    <tabpage 0>(1): 1 windows, current is <window object (unknown)>
Karsten Hopp ae61a4
    Windows:
Karsten Hopp ae61a4
!     <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (954, 0)
Karsten Hopp ae61a4
    <tabpage 1>(2): 1 windows, current is <window object (unknown)>
Karsten Hopp ae61a4
    Windows:
Karsten Hopp ae61a4
      <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
Karsten Hopp ae61a4
--- 333,339 ----
Karsten Hopp ae61a4
  Current tab pages:
Karsten Hopp ae61a4
    <tabpage 0>(1): 1 windows, current is <window object (unknown)>
Karsten Hopp ae61a4
    Windows:
Karsten Hopp ae61a4
!     <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (970, 0)
Karsten Hopp ae61a4
    <tabpage 1>(2): 1 windows, current is <window object (unknown)>
Karsten Hopp ae61a4
    Windows:
Karsten Hopp ae61a4
      <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 359,361 ****
Karsten Hopp ae61a4
--- 359,370 ----
Karsten Hopp ae61a4
  Current window: <window 0>
Karsten Hopp ae61a4
  Current buffer: <buffer test86.in>
Karsten Hopp ae61a4
  Current line: 'Type error at assigning None to vim.current.buffer'
Karsten Hopp ae61a4
+ vim.vars:Dictionary:True
Karsten Hopp ae61a4
+ vim.options:Options:True
Karsten Hopp ae61a4
+ vim.bindeval("{}"):Dictionary:True
Karsten Hopp ae61a4
+ vim.bindeval("[]"):List:True
Karsten Hopp ae61a4
+ vim.bindeval("function('tr')"):Function:True
Karsten Hopp ae61a4
+ vim.current.buffer:Buffer:True
Karsten Hopp ae61a4
+ vim.current.range:Range:True
Karsten Hopp ae61a4
+ vim.current.window:Window:True
Karsten Hopp ae61a4
+ vim.current.tabpage:TabPage:True
Karsten Hopp ae61a4
*** ../vim-7.3.995/src/testdir/test87.in	2013-05-17 13:37:57.000000000 +0200
Karsten Hopp ae61a4
--- src/testdir/test87.in	2013-05-21 19:21:58.000000000 +0200
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 622,627 ****
Karsten Hopp ae61a4
--- 622,643 ----
Karsten Hopp ae61a4
  EOF
Karsten Hopp ae61a4
  :tabonly!
Karsten Hopp ae61a4
  :only!
Karsten Hopp ae61a4
+ :"
Karsten Hopp ae61a4
+ :" Test types
Karsten Hopp ae61a4
+ py3 << EOF
Karsten Hopp ae61a4
+ for expr, attr in (
Karsten Hopp ae61a4
+     ('vim.vars',                         'Dictionary'),
Karsten Hopp ae61a4
+     ('vim.options',                      'Options'),
Karsten Hopp ae61a4
+     ('vim.bindeval("{}")',               'Dictionary'),
Karsten Hopp ae61a4
+     ('vim.bindeval("[]")',               'List'),
Karsten Hopp ae61a4
+     ('vim.bindeval("function(\'tr\')")', 'Function'),
Karsten Hopp ae61a4
+     ('vim.current.buffer',               'Buffer'),
Karsten Hopp ae61a4
+     ('vim.current.range',                'Range'),
Karsten Hopp ae61a4
+     ('vim.current.window',               'Window'),
Karsten Hopp ae61a4
+     ('vim.current.tabpage',              'TabPage'),
Karsten Hopp ae61a4
+ ):
Karsten Hopp ae61a4
+     cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
Karsten Hopp ae61a4
+ EOF
Karsten Hopp ae61a4
  :endfun
Karsten Hopp ae61a4
  :"
Karsten Hopp ae61a4
  :call Test()
Karsten Hopp ae61a4
*** ../vim-7.3.995/src/testdir/test87.ok	2013-05-21 18:19:33.000000000 +0200
Karsten Hopp ae61a4
--- src/testdir/test87.ok	2013-05-21 19:21:58.000000000 +0200
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 322,328 ****
Karsten Hopp ae61a4
  Current tab pages:
Karsten Hopp ae61a4
    <tabpage 0>(1): 1 windows, current is <window object (unknown)>
Karsten Hopp ae61a4
    Windows:
Karsten Hopp ae61a4
!     <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (930, 0)
Karsten Hopp ae61a4
    <tabpage 1>(2): 1 windows, current is <window object (unknown)>
Karsten Hopp ae61a4
    Windows:
Karsten Hopp ae61a4
      <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
Karsten Hopp ae61a4
--- 322,328 ----
Karsten Hopp ae61a4
  Current tab pages:
Karsten Hopp ae61a4
    <tabpage 0>(1): 1 windows, current is <window object (unknown)>
Karsten Hopp ae61a4
    Windows:
Karsten Hopp ae61a4
!     <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (946, 0)
Karsten Hopp ae61a4
    <tabpage 1>(2): 1 windows, current is <window object (unknown)>
Karsten Hopp ae61a4
    Windows:
Karsten Hopp ae61a4
      <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 348,350 ****
Karsten Hopp ae61a4
--- 348,359 ----
Karsten Hopp ae61a4
  Current window: <window 0>
Karsten Hopp ae61a4
  Current buffer: <buffer test87.in>
Karsten Hopp ae61a4
  Current line: 'Type error at assigning None to vim.current.buffer'
Karsten Hopp ae61a4
+ vim.vars:Dictionary:True
Karsten Hopp ae61a4
+ vim.options:Options:True
Karsten Hopp ae61a4
+ vim.bindeval("{}"):Dictionary:True
Karsten Hopp ae61a4
+ vim.bindeval("[]"):List:True
Karsten Hopp ae61a4
+ vim.bindeval("function('tr')"):Function:True
Karsten Hopp ae61a4
+ vim.current.buffer:Buffer:True
Karsten Hopp ae61a4
+ vim.current.range:Range:True
Karsten Hopp ae61a4
+ vim.current.window:Window:True
Karsten Hopp ae61a4
+ vim.current.tabpage:TabPage:True
Karsten Hopp ae61a4
*** ../vim-7.3.995/src/version.c	2013-05-21 19:10:56.000000000 +0200
Karsten Hopp ae61a4
--- src/version.c	2013-05-21 19:48:38.000000000 +0200
Karsten Hopp ae61a4
***************
Karsten Hopp ae61a4
*** 730,731 ****
Karsten Hopp ae61a4
--- 730,733 ----
Karsten Hopp ae61a4
  {   /* Add new patch number below this line */
Karsten Hopp ae61a4
+ /**/
Karsten Hopp ae61a4
+     996,
Karsten Hopp ae61a4
  /**/
Karsten Hopp ae61a4
Karsten Hopp ae61a4
-- 
Karsten Hopp ae61a4
SUPERIMPOSE "England AD 787".  After a few more seconds we hear hoofbeats in
Karsten Hopp ae61a4
the distance.  They come slowly closer.  Then out of the mist comes KING
Karsten Hopp ae61a4
ARTHUR followed by a SERVANT who is banging two half coconuts together.
Karsten Hopp ae61a4
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
Karsten Hopp ae61a4
Karsten Hopp ae61a4
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
Karsten Hopp ae61a4
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
Karsten Hopp ae61a4
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
Karsten Hopp ae61a4
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///