[vim/f17] - patchlevel 945

Karsten Hopp karsten at fedoraproject.org
Tue May 21 11:34:08 UTC 2013


commit 15bee7a7d67c54f04b01b4aa599390f8e7274e8e
Author: Karsten Hopp <karsten at redhat.com>
Date:   Tue May 21 13:33:25 2013 +0200

    - patchlevel 945

 7.3.945 |  648 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 648 insertions(+), 0 deletions(-)
---
diff --git a/7.3.945 b/7.3.945
new file mode 100644
index 0000000..f3bfb2f
--- /dev/null
+++ b/7.3.945
@@ -0,0 +1,648 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.945
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.945
+Problem:    Python: List of buffers is not very useful.
+Solution:   Make vim.buffers a map. No iterator yet. (ZyX)
+Files:	    runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python3.c,
+	    src/if_python.c, src/testdir/test86.ok, src/testdir/test87.ok
+
+
+*** ../vim-7.3.944/runtime/doc/if_pyth.txt	2013-05-12 19:30:27.000000000 +0200
+--- runtime/doc/if_pyth.txt	2013-05-15 13:34:06.000000000 +0200
+***************
+*** 209,220 ****
+  	to which the variables referred.
+  
+  vim.buffers						*python-buffers*
+! 	A sequence object providing access to the list of vim buffers.  The
+  	object supports the following operations: >
+  	    :py b = vim.buffers[i]	# Indexing (read-only)
+  	    :py b in vim.buffers	# Membership test
+  	    :py n = len(vim.buffers)	# Number of elements
+- 	    :py for b in vim.buffers:	# Sequential access
+  <
+  vim.windows						*python-windows*
+  	A sequence object providing access to the list of vim windows.  The
+--- 209,219 ----
+  	to which the variables referred.
+  
+  vim.buffers						*python-buffers*
+! 	A mapping object providing access to the list of vim buffers.  The
+  	object supports the following operations: >
+  	    :py b = vim.buffers[i]	# Indexing (read-only)
+  	    :py b in vim.buffers	# Membership test
+  	    :py n = len(vim.buffers)	# Number of elements
+  <
+  vim.windows						*python-windows*
+  	A sequence object providing access to the list of vim windows.  The
+*** ../vim-7.3.944/src/if_py_both.h	2013-05-12 21:16:17.000000000 +0200
+--- src/if_py_both.h	2013-05-15 13:34:06.000000000 +0200
+***************
+*** 534,549 ****
+   * Buffer list object - Implementation
+   */
+  
+! static PyTypeObject BufListType;
+! static PySequenceMethods BufListAsSeq;
+  
+  typedef struct
+  {
+      PyObject_HEAD
+! } BufListObject;
+  
+      static PyInt
+! BufListLength(PyObject *self UNUSED)
+  {
+      buf_T	*b = firstbuf;
+      PyInt	n = 0;
+--- 534,548 ----
+   * Buffer list object - Implementation
+   */
+  
+! static PyTypeObject BufMapType;
+  
+  typedef struct
+  {
+      PyObject_HEAD
+! } BufMapObject;
+  
+      static PyInt
+! BufMapLength(PyObject *self UNUSED)
+  {
+      buf_T	*b = firstbuf;
+      PyInt	n = 0;
+***************
+*** 558,577 ****
+  }
+  
+      static PyObject *
+! BufListItem(PyObject *self UNUSED, PyInt n)
+  {
+!     buf_T *b;
+  
+!     for (b = firstbuf; b; b = b->b_next, --n)
+      {
+! 	if (n == 0)
+! 	    return BufferNew(b);
+      }
+  
+!     PyErr_SetString(PyExc_IndexError, _("no such buffer"));
+!     return NULL;
+  }
+  
+  typedef struct pylinkedlist_S {
+      struct pylinkedlist_S	*pll_next;
+      struct pylinkedlist_S	*pll_prev;
+--- 557,597 ----
+  }
+  
+      static PyObject *
+! BufMapItem(PyObject *self UNUSED, PyObject *keyObject)
+  {
+!     buf_T	*b;
+!     int		bnr;
+  
+! #if PY_MAJOR_VERSION < 3
+!     if (PyInt_Check(keyObject))
+! 	bnr = PyInt_AsLong(keyObject);
+!     else
+! #endif
+!     if (PyLong_Check(keyObject))
+! 	bnr = PyLong_AsLong(keyObject);
+!     else
+      {
+! 	PyErr_SetString(PyExc_ValueError, _("key must be integer"));
+! 	return NULL;
+      }
+  
+!     b = buflist_findnr(bnr);
+! 
+!     if (b)
+! 	return BufferNew(b);
+!     else
+!     {
+! 	PyErr_SetString(PyExc_KeyError, _("no such buffer"));
+! 	return NULL;
+!     }
+  }
+  
++ static PyMappingMethods BufMapAsMapping = {
++     (lenfunc)       BufMapLength,
++     (binaryfunc)    BufMapItem,
++     (objobjargproc) 0,
++ };
++ 
+  typedef struct pylinkedlist_S {
+      struct pylinkedlist_S	*pll_next;
+      struct pylinkedlist_S	*pll_prev;
+***************
+*** 3401,3411 ****
+      WindowType.tp_setattr = WindowSetattr;
+  #endif
+  
+!     vim_memset(&BufListType, 0, sizeof(BufListType));
+!     BufListType.tp_name = "vim.bufferlist";
+!     BufListType.tp_basicsize = sizeof(BufListObject);
+!     BufListType.tp_as_sequence = &BufListAsSeq;
+!     BufListType.tp_flags = Py_TPFLAGS_DEFAULT;
+      BufferType.tp_doc = "vim buffer list";
+  
+      vim_memset(&WinListType, 0, sizeof(WinListType));
+--- 3421,3431 ----
+      WindowType.tp_setattr = WindowSetattr;
+  #endif
+  
+!     vim_memset(&BufMapType, 0, sizeof(BufMapType));
+!     BufMapType.tp_name = "vim.bufferlist";
+!     BufMapType.tp_basicsize = sizeof(BufMapObject);
+!     BufMapType.tp_as_mapping = &BufMapAsMapping;
+!     BufMapType.tp_flags = Py_TPFLAGS_DEFAULT;
+      BufferType.tp_doc = "vim buffer list";
+  
+      vim_memset(&WinListType, 0, sizeof(WinListType));
+*** ../vim-7.3.944/src/if_python3.c	2013-05-12 21:16:17.000000000 +0200
+--- src/if_python3.c	2013-05-15 13:34:06.000000000 +0200
+***************
+*** 1272,1293 ****
+      }
+  }
+  
+- /* Buffer list object - Definitions
+-  */
+- 
+- static PySequenceMethods BufListAsSeq = {
+-     (lenfunc)		BufListLength,	    /* sq_length,    len(x)   */
+-     (binaryfunc)	0,		    /* sq_concat,    x+y      */
+-     (ssizeargfunc)	0,		    /* sq_repeat,    x*n      */
+-     (ssizeargfunc)	BufListItem,	    /* sq_item,      x[i]     */
+-     0,					    /* was_sq_slice,	 x[i:j]   */
+-     (ssizeobjargproc)	0,		    /* sq_as_item,  x[i]=v   */
+-     0,					    /* sq_ass_slice, x[i:j]=v */
+-     0,					    /* sq_contains */
+-     0,					    /* sq_inplace_concat */
+-     0,					    /* sq_inplace_repeat */
+- };
+- 
+  /* Window object - Implementation
+   */
+  
+--- 1272,1277 ----
+***************
+*** 1512,1520 ****
+  }
+  #endif
+  
+! static BufListObject TheBufferList =
+  {
+!     PyObject_HEAD_INIT(&BufListType)
+  };
+  
+  static WinListObject TheWindowList =
+--- 1496,1504 ----
+  }
+  #endif
+  
+! static BufMapObject TheBufferMap =
+  {
+!     PyObject_HEAD_INIT(&BufMapType)
+  };
+  
+  static WinListObject TheWindowList =
+***************
+*** 1538,1544 ****
+      PyType_Ready(&BufferType);
+      PyType_Ready(&RangeType);
+      PyType_Ready(&WindowType);
+!     PyType_Ready(&BufListType);
+      PyType_Ready(&WinListType);
+      PyType_Ready(&CurrentType);
+      PyType_Ready(&DictionaryType);
+--- 1522,1528 ----
+      PyType_Ready(&BufferType);
+      PyType_Ready(&RangeType);
+      PyType_Ready(&WindowType);
+!     PyType_Ready(&BufMapType);
+      PyType_Ready(&WinListType);
+      PyType_Ready(&CurrentType);
+      PyType_Ready(&DictionaryType);
+***************
+*** 1557,1564 ****
+      Py_INCREF(VimError);
+  
+      PyModule_AddObject(mod, "error", VimError);
+!     Py_INCREF((PyObject *)(void *)&TheBufferList);
+!     PyModule_AddObject(mod, "buffers", (PyObject *)(void *)&TheBufferList);
+      Py_INCREF((PyObject *)(void *)&TheCurrent);
+      PyModule_AddObject(mod, "current", (PyObject *)(void *)&TheCurrent);
+      Py_INCREF((PyObject *)(void *)&TheWindowList);
+--- 1541,1548 ----
+      Py_INCREF(VimError);
+  
+      PyModule_AddObject(mod, "error", VimError);
+!     Py_INCREF((PyObject *)(void *)&TheBufferMap);
+!     PyModule_AddObject(mod, "buffers", (PyObject *)(void *)&TheBufferMap);
+      Py_INCREF((PyObject *)(void *)&TheCurrent);
+      PyModule_AddObject(mod, "current", (PyObject *)(void *)&TheCurrent);
+      Py_INCREF((PyObject *)(void *)&TheWindowList);
+*** ../vim-7.3.944/src/if_python.c	2013-05-12 20:36:09.000000000 +0200
+--- src/if_python.c	2013-05-15 13:34:06.000000000 +0200
+***************
+*** 1131,1154 ****
+  		      &((RangeObject *)(self))->end);
+  }
+  
+- /* Buffer list object - Definitions
+-  */
+- 
+- static PySequenceMethods BufListAsSeq = {
+-     (PyInquiry)		BufListLength,	    /* sq_length,    len(x)   */
+-     (binaryfunc)	0,		    /* sq_concat,    x+y      */
+-     (PyIntArgFunc)	0,		    /* sq_repeat,    x*n      */
+-     (PyIntArgFunc)	BufListItem,	    /* sq_item,      x[i]     */
+-     (PyIntIntArgFunc)	0,		    /* sq_slice,     x[i:j]   */
+-     (PyIntObjArgProc)	0,		    /* sq_ass_item,  x[i]=v   */
+-     (PyIntIntObjArgProc) 0,		    /* sq_ass_slice, x[i:j]=v */
+-     (objobjproc)	0,
+- #if PY_MAJOR_VERSION >= 2
+-     (binaryfunc)	0,
+-     0,
+- #endif
+- };
+- 
+  /* Window object - Implementation
+   */
+  
+--- 1131,1136 ----
+***************
+*** 1212,1220 ****
+  }
+  #endif
+  
+! static BufListObject TheBufferList =
+  {
+!     PyObject_HEAD_INIT(&BufListType)
+  };
+  
+  static WinListObject TheWindowList =
+--- 1194,1202 ----
+  }
+  #endif
+  
+! static BufMapObject TheBufferMap =
+  {
+!     PyObject_HEAD_INIT(&BufMapType)
+  };
+  
+  static WinListObject TheWindowList =
+***************
+*** 1240,1246 ****
+      PyType_Ready(&BufferType);
+      PyType_Ready(&RangeType);
+      PyType_Ready(&WindowType);
+!     PyType_Ready(&BufListType);
+      PyType_Ready(&WinListType);
+      PyType_Ready(&CurrentType);
+      PyType_Ready(&OptionsType);
+--- 1222,1228 ----
+      PyType_Ready(&BufferType);
+      PyType_Ready(&RangeType);
+      PyType_Ready(&WindowType);
+!     PyType_Ready(&BufMapType);
+      PyType_Ready(&WinListType);
+      PyType_Ready(&CurrentType);
+      PyType_Ready(&OptionsType);
+***************
+*** 1254,1260 ****
+      VimError = Py_BuildValue("s", "vim.error");
+  
+      PyDict_SetItemString(dict, "error", VimError);
+!     PyDict_SetItemString(dict, "buffers", (PyObject *)(void *)&TheBufferList);
+      PyDict_SetItemString(dict, "current", (PyObject *)(void *)&TheCurrent);
+      PyDict_SetItemString(dict, "windows", (PyObject *)(void *)&TheWindowList);
+      tmp = DictionaryNew(&globvardict);
+--- 1236,1242 ----
+      VimError = Py_BuildValue("s", "vim.error");
+  
+      PyDict_SetItemString(dict, "error", VimError);
+!     PyDict_SetItemString(dict, "buffers", (PyObject *)(void *)&TheBufferMap);
+      PyDict_SetItemString(dict, "current", (PyObject *)(void *)&TheCurrent);
+      PyDict_SetItemString(dict, "windows", (PyObject *)(void *)&TheWindowList);
+      tmp = DictionaryNew(&globvardict);
+*** ../vim-7.3.944/src/testdir/test86.ok	2013-05-12 21:16:17.000000000 +0200
+--- src/testdir/test86.ok	2013-05-15 13:34:06.000000000 +0200
+***************
+*** 226,238 ****
+    p/bopts1: False
+    inv: 2! ValueError
+    G: 0
+!   W: 1:1 2:1 3:0 4:0
+!   B: 1:1 2:1 3:0 4:0
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 0
+!   W: 1:1 2:1 3:0 4:0
+!   B: 1:1 2:1 3:0 4:0
+  >>> iminsert
+    p/gopts1! KeyError
+    inv: 3! KeyError
+--- 226,238 ----
+    p/bopts1: False
+    inv: 2! ValueError
+    G: 0
+!   W: 1:0 2:1 3:0 4:1
+!   B: 1:0 2:1 3:0 4:1
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 0
+!   W: 1:0 2:1 3:0 4:1
+!   B: 1:0 2:1 3:0 4:1
+  >>> iminsert
+    p/gopts1! KeyError
+    inv: 3! KeyError
+***************
+*** 244,256 ****
+    wopts3! KeyError
+    p/bopts1: 2
+    G: 1
+!   W: 1:2 2:1 3:0 4:2
+!   B: 1:2 2:1 3:0 4:2
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 1
+!   W: 1:2 2:1 3:0 4:2
+!   B: 1:2 2:1 3:0 4:2
+  >>> omnifunc
+    p/gopts1! KeyError
+    inv: 1! KeyError
+--- 244,256 ----
+    wopts3! KeyError
+    p/bopts1: 2
+    G: 1
+!   W: 1:0 2:2 3:2 4:1
+!   B: 1:0 2:2 3:2 4:1
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 1
+!   W: 1:0 2:2 3:2 4:1
+!   B: 1:0 2:2 3:2 4:1
+  >>> omnifunc
+    p/gopts1! KeyError
+    inv: 1! KeyError
+***************
+*** 263,275 ****
+    p/bopts1: ''
+    inv: 1! ValueError
+    G: ''
+!   W: 1:'B' 2:'C' 3:'A' 4:''
+!   B: 1:'B' 2:'C' 3:'A' 4:''
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: ''
+!   W: 1:'B' 2:'C' 3:'A' 4:''
+!   B: 1:'B' 2:'C' 3:'A' 4:''
+  >>> preserveindent
+    p/gopts1! KeyError
+    inv: 2! KeyError
+--- 263,275 ----
+    p/bopts1: ''
+    inv: 1! ValueError
+    G: ''
+!   W: 1:'A' 2:'B' 3:'' 4:'C'
+!   B: 1:'A' 2:'B' 3:'' 4:'C'
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: ''
+!   W: 1:'A' 2:'B' 3:'' 4:'C'
+!   B: 1:'A' 2:'B' 3:'' 4:'C'
+  >>> preserveindent
+    p/gopts1! KeyError
+    inv: 2! KeyError
+***************
+*** 282,294 ****
+    p/bopts1: False
+    inv: 2! ValueError
+    G: 0
+!   W: 1:1 2:1 3:0 4:0
+!   B: 1:1 2:1 3:0 4:0
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 0
+!   W: 1:1 2:1 3:0 4:0
+!   B: 1:1 2:1 3:0 4:0
+  >>> path
+    p/gopts1: '.,/usr/include,,'
+    inv: 0! ValueError
+--- 282,294 ----
+    p/bopts1: False
+    inv: 2! ValueError
+    G: 0
+!   W: 1:0 2:1 3:0 4:1
+!   B: 1:0 2:1 3:0 4:1
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 0
+!   W: 1:0 2:1 3:0 4:1
+!   B: 1:0 2:1 3:0 4:1
+  >>> path
+    p/gopts1: '.,/usr/include,,'
+    inv: 0! ValueError
+***************
+*** 300,311 ****
+    p/bopts1: None
+    inv: 0! ValueError
+    G: '.,,'
+!   W: 1:',,' 2:'.' 3:'.,,' 4:'.,,'
+!   B: 1:',,' 2:'.' 3:'.,,' 4:'.,,'
+    del wopts3! KeyError
+    G: '.,,'
+!   W: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
+!   B: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
+  First line
+  First line
+  def
+--- 300,311 ----
+    p/bopts1: None
+    inv: 0! ValueError
+    G: '.,,'
+!   W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+!   B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+    del wopts3! KeyError
+    G: '.,,'
+!   W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+!   B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+  First line
+  First line
+  def
+*** ../vim-7.3.944/src/testdir/test87.ok	2013-05-12 21:16:17.000000000 +0200
+--- src/testdir/test87.ok	2013-05-15 13:34:06.000000000 +0200
+***************
+*** 215,227 ****
+    p/bopts1: False
+    inv: 2! ValueError
+    G: 0
+!   W: 1:1 2:1 3:0 4:0
+!   B: 1:1 2:1 3:0 4:0
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 0
+!   W: 1:1 2:1 3:0 4:0
+!   B: 1:1 2:1 3:0 4:0
+  >>> iminsert
+    p/gopts1! KeyError
+    inv: 3! KeyError
+--- 215,227 ----
+    p/bopts1: False
+    inv: 2! ValueError
+    G: 0
+!   W: 1:0 2:1 3:0 4:1
+!   B: 1:0 2:1 3:0 4:1
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 0
+!   W: 1:0 2:1 3:0 4:1
+!   B: 1:0 2:1 3:0 4:1
+  >>> iminsert
+    p/gopts1! KeyError
+    inv: 3! KeyError
+***************
+*** 233,245 ****
+    wopts3! KeyError
+    p/bopts1: 2
+    G: 1
+!   W: 1:2 2:1 3:0 4:2
+!   B: 1:2 2:1 3:0 4:2
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 1
+!   W: 1:2 2:1 3:0 4:2
+!   B: 1:2 2:1 3:0 4:2
+  >>> omnifunc
+    p/gopts1! KeyError
+    inv: 1! KeyError
+--- 233,245 ----
+    wopts3! KeyError
+    p/bopts1: 2
+    G: 1
+!   W: 1:0 2:2 3:2 4:1
+!   B: 1:0 2:2 3:2 4:1
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 1
+!   W: 1:0 2:2 3:2 4:1
+!   B: 1:0 2:2 3:2 4:1
+  >>> omnifunc
+    p/gopts1! KeyError
+    inv: 1! KeyError
+***************
+*** 252,264 ****
+    p/bopts1: b''
+    inv: 1! ValueError
+    G: ''
+!   W: 1:'B' 2:'C' 3:'A' 4:''
+!   B: 1:'B' 2:'C' 3:'A' 4:''
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: ''
+!   W: 1:'B' 2:'C' 3:'A' 4:''
+!   B: 1:'B' 2:'C' 3:'A' 4:''
+  >>> preserveindent
+    p/gopts1! KeyError
+    inv: 2! KeyError
+--- 252,264 ----
+    p/bopts1: b''
+    inv: 1! ValueError
+    G: ''
+!   W: 1:'A' 2:'B' 3:'' 4:'C'
+!   B: 1:'A' 2:'B' 3:'' 4:'C'
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: ''
+!   W: 1:'A' 2:'B' 3:'' 4:'C'
+!   B: 1:'A' 2:'B' 3:'' 4:'C'
+  >>> preserveindent
+    p/gopts1! KeyError
+    inv: 2! KeyError
+***************
+*** 271,283 ****
+    p/bopts1: False
+    inv: 2! ValueError
+    G: 0
+!   W: 1:1 2:1 3:0 4:0
+!   B: 1:1 2:1 3:0 4:0
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 0
+!   W: 1:1 2:1 3:0 4:0
+!   B: 1:1 2:1 3:0 4:0
+  >>> path
+    p/gopts1: b'.,/usr/include,,'
+    inv: 0! ValueError
+--- 271,283 ----
+    p/bopts1: False
+    inv: 2! ValueError
+    G: 0
+!   W: 1:0 2:1 3:0 4:1
+!   B: 1:0 2:1 3:0 4:1
+    del wopts3! KeyError
+    del bopts3! ValueError
+    G: 0
+!   W: 1:0 2:1 3:0 4:1
+!   B: 1:0 2:1 3:0 4:1
+  >>> path
+    p/gopts1: b'.,/usr/include,,'
+    inv: 0! ValueError
+***************
+*** 289,300 ****
+    p/bopts1: None
+    inv: 0! ValueError
+    G: '.,,'
+!   W: 1:',,' 2:'.' 3:'.,,' 4:'.,,'
+!   B: 1:',,' 2:'.' 3:'.,,' 4:'.,,'
+    del wopts3! KeyError
+    G: '.,,'
+!   W: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
+!   B: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
+  First line
+  First line
+  def
+--- 289,300 ----
+    p/bopts1: None
+    inv: 0! ValueError
+    G: '.,,'
+!   W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+!   B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+    del wopts3! KeyError
+    G: '.,,'
+!   W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+!   B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+  First line
+  First line
+  def
+*** ../vim-7.3.944/src/version.c	2013-05-13 20:26:47.000000000 +0200
+--- src/version.c	2013-05-15 13:37:08.000000000 +0200
+***************
+*** 730,731 ****
+--- 730,733 ----
+  {   /* Add new patch number below this line */
++ /**/
++     945,
+  /**/
+
+-- 
+ARTHUR:        A scratch?  Your arm's off!
+BLACK KNIGHT:  No, it isn't.
+ARTHUR:        Well, what's that then?
+BLACK KNIGHT:  I've had worse.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram at 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    ///


More information about the scm-commits mailing list