home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / patches / 7.3 / 7.3.945 < prev    next >
Encoding:
Internet Message Format  |  2013-05-14  |  16.3 KB

  1. To: vim_dev@googlegroups.com
  2. Subject: Patch 7.3.945
  3. Fcc: outbox
  4. From: Bram Moolenaar <Bram@moolenaar.net>
  5. Mime-Version: 1.0
  6. Content-Type: text/plain; charset=UTF-8
  7. Content-Transfer-Encoding: 8bit
  8. ------------
  9.  
  10. Patch 7.3.945
  11. Problem:    Python: List of buffers is not very useful.
  12. Solution:   Make vim.buffers a map. No iterator yet. (ZyX)
  13. Files:        runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python3.c,
  14.         src/if_python.c, src/testdir/test86.ok, src/testdir/test87.ok
  15.  
  16.  
  17. *** ../vim-7.3.944/runtime/doc/if_pyth.txt    2013-05-12 19:30:27.000000000 +0200
  18. --- runtime/doc/if_pyth.txt    2013-05-15 13:34:06.000000000 +0200
  19. ***************
  20. *** 209,220 ****
  21.       to which the variables referred.
  22.   
  23.   vim.buffers                        *python-buffers*
  24. !     A sequence object providing access to the list of vim buffers.  The
  25.       object supports the following operations: >
  26.           :py b = vim.buffers[i]    # Indexing (read-only)
  27.           :py b in vim.buffers    # Membership test
  28.           :py n = len(vim.buffers)    # Number of elements
  29. -         :py for b in vim.buffers:    # Sequential access
  30.   <
  31.   vim.windows                        *python-windows*
  32.       A sequence object providing access to the list of vim windows.  The
  33. --- 209,219 ----
  34.       to which the variables referred.
  35.   
  36.   vim.buffers                        *python-buffers*
  37. !     A mapping object providing access to the list of vim buffers.  The
  38.       object supports the following operations: >
  39.           :py b = vim.buffers[i]    # Indexing (read-only)
  40.           :py b in vim.buffers    # Membership test
  41.           :py n = len(vim.buffers)    # Number of elements
  42.   <
  43.   vim.windows                        *python-windows*
  44.       A sequence object providing access to the list of vim windows.  The
  45. *** ../vim-7.3.944/src/if_py_both.h    2013-05-12 21:16:17.000000000 +0200
  46. --- src/if_py_both.h    2013-05-15 13:34:06.000000000 +0200
  47. ***************
  48. *** 534,549 ****
  49.    * Buffer list object - Implementation
  50.    */
  51.   
  52. ! static PyTypeObject BufListType;
  53. ! static PySequenceMethods BufListAsSeq;
  54.   
  55.   typedef struct
  56.   {
  57.       PyObject_HEAD
  58. ! } BufListObject;
  59.   
  60.       static PyInt
  61. ! BufListLength(PyObject *self UNUSED)
  62.   {
  63.       buf_T    *b = firstbuf;
  64.       PyInt    n = 0;
  65. --- 534,548 ----
  66.    * Buffer list object - Implementation
  67.    */
  68.   
  69. ! static PyTypeObject BufMapType;
  70.   
  71.   typedef struct
  72.   {
  73.       PyObject_HEAD
  74. ! } BufMapObject;
  75.   
  76.       static PyInt
  77. ! BufMapLength(PyObject *self UNUSED)
  78.   {
  79.       buf_T    *b = firstbuf;
  80.       PyInt    n = 0;
  81. ***************
  82. *** 558,577 ****
  83.   }
  84.   
  85.       static PyObject *
  86. ! BufListItem(PyObject *self UNUSED, PyInt n)
  87.   {
  88. !     buf_T *b;
  89.   
  90. !     for (b = firstbuf; b; b = b->b_next, --n)
  91.       {
  92. !     if (n == 0)
  93. !         return BufferNew(b);
  94.       }
  95.   
  96. !     PyErr_SetString(PyExc_IndexError, _("no such buffer"));
  97. !     return NULL;
  98.   }
  99.   
  100.   typedef struct pylinkedlist_S {
  101.       struct pylinkedlist_S    *pll_next;
  102.       struct pylinkedlist_S    *pll_prev;
  103. --- 557,597 ----
  104.   }
  105.   
  106.       static PyObject *
  107. ! BufMapItem(PyObject *self UNUSED, PyObject *keyObject)
  108.   {
  109. !     buf_T    *b;
  110. !     int        bnr;
  111.   
  112. ! #if PY_MAJOR_VERSION < 3
  113. !     if (PyInt_Check(keyObject))
  114. !     bnr = PyInt_AsLong(keyObject);
  115. !     else
  116. ! #endif
  117. !     if (PyLong_Check(keyObject))
  118. !     bnr = PyLong_AsLong(keyObject);
  119. !     else
  120.       {
  121. !     PyErr_SetString(PyExc_ValueError, _("key must be integer"));
  122. !     return NULL;
  123.       }
  124.   
  125. !     b = buflist_findnr(bnr);
  126. !     if (b)
  127. !     return BufferNew(b);
  128. !     else
  129. !     {
  130. !     PyErr_SetString(PyExc_KeyError, _("no such buffer"));
  131. !     return NULL;
  132. !     }
  133.   }
  134.   
  135. + static PyMappingMethods BufMapAsMapping = {
  136. +     (lenfunc)       BufMapLength,
  137. +     (binaryfunc)    BufMapItem,
  138. +     (objobjargproc) 0,
  139. + };
  140.   typedef struct pylinkedlist_S {
  141.       struct pylinkedlist_S    *pll_next;
  142.       struct pylinkedlist_S    *pll_prev;
  143. ***************
  144. *** 3401,3411 ****
  145.       WindowType.tp_setattr = WindowSetattr;
  146.   #endif
  147.   
  148. !     vim_memset(&BufListType, 0, sizeof(BufListType));
  149. !     BufListType.tp_name = "vim.bufferlist";
  150. !     BufListType.tp_basicsize = sizeof(BufListObject);
  151. !     BufListType.tp_as_sequence = &BufListAsSeq;
  152. !     BufListType.tp_flags = Py_TPFLAGS_DEFAULT;
  153.       BufferType.tp_doc = "vim buffer list";
  154.   
  155.       vim_memset(&WinListType, 0, sizeof(WinListType));
  156. --- 3421,3431 ----
  157.       WindowType.tp_setattr = WindowSetattr;
  158.   #endif
  159.   
  160. !     vim_memset(&BufMapType, 0, sizeof(BufMapType));
  161. !     BufMapType.tp_name = "vim.bufferlist";
  162. !     BufMapType.tp_basicsize = sizeof(BufMapObject);
  163. !     BufMapType.tp_as_mapping = &BufMapAsMapping;
  164. !     BufMapType.tp_flags = Py_TPFLAGS_DEFAULT;
  165.       BufferType.tp_doc = "vim buffer list";
  166.   
  167.       vim_memset(&WinListType, 0, sizeof(WinListType));
  168. *** ../vim-7.3.944/src/if_python3.c    2013-05-12 21:16:17.000000000 +0200
  169. --- src/if_python3.c    2013-05-15 13:34:06.000000000 +0200
  170. ***************
  171. *** 1272,1293 ****
  172.       }
  173.   }
  174.   
  175. - /* Buffer list object - Definitions
  176. -  */
  177. - static PySequenceMethods BufListAsSeq = {
  178. -     (lenfunc)        BufListLength,        /* sq_length,    len(x)   */
  179. -     (binaryfunc)    0,            /* sq_concat,    x+y      */
  180. -     (ssizeargfunc)    0,            /* sq_repeat,    x*n      */
  181. -     (ssizeargfunc)    BufListItem,        /* sq_item,      x[i]     */
  182. -     0,                        /* was_sq_slice,     x[i:j]   */
  183. -     (ssizeobjargproc)    0,            /* sq_as_item,  x[i]=v   */
  184. -     0,                        /* sq_ass_slice, x[i:j]=v */
  185. -     0,                        /* sq_contains */
  186. -     0,                        /* sq_inplace_concat */
  187. -     0,                        /* sq_inplace_repeat */
  188. - };
  189.   /* Window object - Implementation
  190.    */
  191.   
  192. --- 1272,1277 ----
  193. ***************
  194. *** 1512,1520 ****
  195.   }
  196.   #endif
  197.   
  198. ! static BufListObject TheBufferList =
  199.   {
  200. !     PyObject_HEAD_INIT(&BufListType)
  201.   };
  202.   
  203.   static WinListObject TheWindowList =
  204. --- 1496,1504 ----
  205.   }
  206.   #endif
  207.   
  208. ! static BufMapObject TheBufferMap =
  209.   {
  210. !     PyObject_HEAD_INIT(&BufMapType)
  211.   };
  212.   
  213.   static WinListObject TheWindowList =
  214. ***************
  215. *** 1538,1544 ****
  216.       PyType_Ready(&BufferType);
  217.       PyType_Ready(&RangeType);
  218.       PyType_Ready(&WindowType);
  219. !     PyType_Ready(&BufListType);
  220.       PyType_Ready(&WinListType);
  221.       PyType_Ready(&CurrentType);
  222.       PyType_Ready(&DictionaryType);
  223. --- 1522,1528 ----
  224.       PyType_Ready(&BufferType);
  225.       PyType_Ready(&RangeType);
  226.       PyType_Ready(&WindowType);
  227. !     PyType_Ready(&BufMapType);
  228.       PyType_Ready(&WinListType);
  229.       PyType_Ready(&CurrentType);
  230.       PyType_Ready(&DictionaryType);
  231. ***************
  232. *** 1557,1564 ****
  233.       Py_INCREF(VimError);
  234.   
  235.       PyModule_AddObject(mod, "error", VimError);
  236. !     Py_INCREF((PyObject *)(void *)&TheBufferList);
  237. !     PyModule_AddObject(mod, "buffers", (PyObject *)(void *)&TheBufferList);
  238.       Py_INCREF((PyObject *)(void *)&TheCurrent);
  239.       PyModule_AddObject(mod, "current", (PyObject *)(void *)&TheCurrent);
  240.       Py_INCREF((PyObject *)(void *)&TheWindowList);
  241. --- 1541,1548 ----
  242.       Py_INCREF(VimError);
  243.   
  244.       PyModule_AddObject(mod, "error", VimError);
  245. !     Py_INCREF((PyObject *)(void *)&TheBufferMap);
  246. !     PyModule_AddObject(mod, "buffers", (PyObject *)(void *)&TheBufferMap);
  247.       Py_INCREF((PyObject *)(void *)&TheCurrent);
  248.       PyModule_AddObject(mod, "current", (PyObject *)(void *)&TheCurrent);
  249.       Py_INCREF((PyObject *)(void *)&TheWindowList);
  250. *** ../vim-7.3.944/src/if_python.c    2013-05-12 20:36:09.000000000 +0200
  251. --- src/if_python.c    2013-05-15 13:34:06.000000000 +0200
  252. ***************
  253. *** 1131,1154 ****
  254.                 &((RangeObject *)(self))->end);
  255.   }
  256.   
  257. - /* Buffer list object - Definitions
  258. -  */
  259. - static PySequenceMethods BufListAsSeq = {
  260. -     (PyInquiry)        BufListLength,        /* sq_length,    len(x)   */
  261. -     (binaryfunc)    0,            /* sq_concat,    x+y      */
  262. -     (PyIntArgFunc)    0,            /* sq_repeat,    x*n      */
  263. -     (PyIntArgFunc)    BufListItem,        /* sq_item,      x[i]     */
  264. -     (PyIntIntArgFunc)    0,            /* sq_slice,     x[i:j]   */
  265. -     (PyIntObjArgProc)    0,            /* sq_ass_item,  x[i]=v   */
  266. -     (PyIntIntObjArgProc) 0,            /* sq_ass_slice, x[i:j]=v */
  267. -     (objobjproc)    0,
  268. - #if PY_MAJOR_VERSION >= 2
  269. -     (binaryfunc)    0,
  270. -     0,
  271. - #endif
  272. - };
  273.   /* Window object - Implementation
  274.    */
  275.   
  276. --- 1131,1136 ----
  277. ***************
  278. *** 1212,1220 ****
  279.   }
  280.   #endif
  281.   
  282. ! static BufListObject TheBufferList =
  283.   {
  284. !     PyObject_HEAD_INIT(&BufListType)
  285.   };
  286.   
  287.   static WinListObject TheWindowList =
  288. --- 1194,1202 ----
  289.   }
  290.   #endif
  291.   
  292. ! static BufMapObject TheBufferMap =
  293.   {
  294. !     PyObject_HEAD_INIT(&BufMapType)
  295.   };
  296.   
  297.   static WinListObject TheWindowList =
  298. ***************
  299. *** 1240,1246 ****
  300.       PyType_Ready(&BufferType);
  301.       PyType_Ready(&RangeType);
  302.       PyType_Ready(&WindowType);
  303. !     PyType_Ready(&BufListType);
  304.       PyType_Ready(&WinListType);
  305.       PyType_Ready(&CurrentType);
  306.       PyType_Ready(&OptionsType);
  307. --- 1222,1228 ----
  308.       PyType_Ready(&BufferType);
  309.       PyType_Ready(&RangeType);
  310.       PyType_Ready(&WindowType);
  311. !     PyType_Ready(&BufMapType);
  312.       PyType_Ready(&WinListType);
  313.       PyType_Ready(&CurrentType);
  314.       PyType_Ready(&OptionsType);
  315. ***************
  316. *** 1254,1260 ****
  317.       VimError = Py_BuildValue("s", "vim.error");
  318.   
  319.       PyDict_SetItemString(dict, "error", VimError);
  320. !     PyDict_SetItemString(dict, "buffers", (PyObject *)(void *)&TheBufferList);
  321.       PyDict_SetItemString(dict, "current", (PyObject *)(void *)&TheCurrent);
  322.       PyDict_SetItemString(dict, "windows", (PyObject *)(void *)&TheWindowList);
  323.       tmp = DictionaryNew(&globvardict);
  324. --- 1236,1242 ----
  325.       VimError = Py_BuildValue("s", "vim.error");
  326.   
  327.       PyDict_SetItemString(dict, "error", VimError);
  328. !     PyDict_SetItemString(dict, "buffers", (PyObject *)(void *)&TheBufferMap);
  329.       PyDict_SetItemString(dict, "current", (PyObject *)(void *)&TheCurrent);
  330.       PyDict_SetItemString(dict, "windows", (PyObject *)(void *)&TheWindowList);
  331.       tmp = DictionaryNew(&globvardict);
  332. *** ../vim-7.3.944/src/testdir/test86.ok    2013-05-12 21:16:17.000000000 +0200
  333. --- src/testdir/test86.ok    2013-05-15 13:34:06.000000000 +0200
  334. ***************
  335. *** 226,238 ****
  336.     p/bopts1: False
  337.     inv: 2! ValueError
  338.     G: 0
  339. !   W: 1:1 2:1 3:0 4:0
  340. !   B: 1:1 2:1 3:0 4:0
  341.     del wopts3! KeyError
  342.     del bopts3! ValueError
  343.     G: 0
  344. !   W: 1:1 2:1 3:0 4:0
  345. !   B: 1:1 2:1 3:0 4:0
  346.   >>> iminsert
  347.     p/gopts1! KeyError
  348.     inv: 3! KeyError
  349. --- 226,238 ----
  350.     p/bopts1: False
  351.     inv: 2! ValueError
  352.     G: 0
  353. !   W: 1:0 2:1 3:0 4:1
  354. !   B: 1:0 2:1 3:0 4:1
  355.     del wopts3! KeyError
  356.     del bopts3! ValueError
  357.     G: 0
  358. !   W: 1:0 2:1 3:0 4:1
  359. !   B: 1:0 2:1 3:0 4:1
  360.   >>> iminsert
  361.     p/gopts1! KeyError
  362.     inv: 3! KeyError
  363. ***************
  364. *** 244,256 ****
  365.     wopts3! KeyError
  366.     p/bopts1: 2
  367.     G: 1
  368. !   W: 1:2 2:1 3:0 4:2
  369. !   B: 1:2 2:1 3:0 4:2
  370.     del wopts3! KeyError
  371.     del bopts3! ValueError
  372.     G: 1
  373. !   W: 1:2 2:1 3:0 4:2
  374. !   B: 1:2 2:1 3:0 4:2
  375.   >>> omnifunc
  376.     p/gopts1! KeyError
  377.     inv: 1! KeyError
  378. --- 244,256 ----
  379.     wopts3! KeyError
  380.     p/bopts1: 2
  381.     G: 1
  382. !   W: 1:0 2:2 3:2 4:1
  383. !   B: 1:0 2:2 3:2 4:1
  384.     del wopts3! KeyError
  385.     del bopts3! ValueError
  386.     G: 1
  387. !   W: 1:0 2:2 3:2 4:1
  388. !   B: 1:0 2:2 3:2 4:1
  389.   >>> omnifunc
  390.     p/gopts1! KeyError
  391.     inv: 1! KeyError
  392. ***************
  393. *** 263,275 ****
  394.     p/bopts1: ''
  395.     inv: 1! ValueError
  396.     G: ''
  397. !   W: 1:'B' 2:'C' 3:'A' 4:''
  398. !   B: 1:'B' 2:'C' 3:'A' 4:''
  399.     del wopts3! KeyError
  400.     del bopts3! ValueError
  401.     G: ''
  402. !   W: 1:'B' 2:'C' 3:'A' 4:''
  403. !   B: 1:'B' 2:'C' 3:'A' 4:''
  404.   >>> preserveindent
  405.     p/gopts1! KeyError
  406.     inv: 2! KeyError
  407. --- 263,275 ----
  408.     p/bopts1: ''
  409.     inv: 1! ValueError
  410.     G: ''
  411. !   W: 1:'A' 2:'B' 3:'' 4:'C'
  412. !   B: 1:'A' 2:'B' 3:'' 4:'C'
  413.     del wopts3! KeyError
  414.     del bopts3! ValueError
  415.     G: ''
  416. !   W: 1:'A' 2:'B' 3:'' 4:'C'
  417. !   B: 1:'A' 2:'B' 3:'' 4:'C'
  418.   >>> preserveindent
  419.     p/gopts1! KeyError
  420.     inv: 2! KeyError
  421. ***************
  422. *** 282,294 ****
  423.     p/bopts1: False
  424.     inv: 2! ValueError
  425.     G: 0
  426. !   W: 1:1 2:1 3:0 4:0
  427. !   B: 1:1 2:1 3:0 4:0
  428.     del wopts3! KeyError
  429.     del bopts3! ValueError
  430.     G: 0
  431. !   W: 1:1 2:1 3:0 4:0
  432. !   B: 1:1 2:1 3:0 4:0
  433.   >>> path
  434.     p/gopts1: '.,/usr/include,,'
  435.     inv: 0! ValueError
  436. --- 282,294 ----
  437.     p/bopts1: False
  438.     inv: 2! ValueError
  439.     G: 0
  440. !   W: 1:0 2:1 3:0 4:1
  441. !   B: 1:0 2:1 3:0 4:1
  442.     del wopts3! KeyError
  443.     del bopts3! ValueError
  444.     G: 0
  445. !   W: 1:0 2:1 3:0 4:1
  446. !   B: 1:0 2:1 3:0 4:1
  447.   >>> path
  448.     p/gopts1: '.,/usr/include,,'
  449.     inv: 0! ValueError
  450. ***************
  451. *** 300,311 ****
  452.     p/bopts1: None
  453.     inv: 0! ValueError
  454.     G: '.,,'
  455. !   W: 1:',,' 2:'.' 3:'.,,' 4:'.,,'
  456. !   B: 1:',,' 2:'.' 3:'.,,' 4:'.,,'
  457.     del wopts3! KeyError
  458.     G: '.,,'
  459. !   W: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
  460. !   B: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
  461.   First line
  462.   First line
  463.   def
  464. --- 300,311 ----
  465.     p/bopts1: None
  466.     inv: 0! ValueError
  467.     G: '.,,'
  468. !   W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
  469. !   B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
  470.     del wopts3! KeyError
  471.     G: '.,,'
  472. !   W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
  473. !   B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
  474.   First line
  475.   First line
  476.   def
  477. *** ../vim-7.3.944/src/testdir/test87.ok    2013-05-12 21:16:17.000000000 +0200
  478. --- src/testdir/test87.ok    2013-05-15 13:34:06.000000000 +0200
  479. ***************
  480. *** 215,227 ****
  481.     p/bopts1: False
  482.     inv: 2! ValueError
  483.     G: 0
  484. !   W: 1:1 2:1 3:0 4:0
  485. !   B: 1:1 2:1 3:0 4:0
  486.     del wopts3! KeyError
  487.     del bopts3! ValueError
  488.     G: 0
  489. !   W: 1:1 2:1 3:0 4:0
  490. !   B: 1:1 2:1 3:0 4:0
  491.   >>> iminsert
  492.     p/gopts1! KeyError
  493.     inv: 3! KeyError
  494. --- 215,227 ----
  495.     p/bopts1: False
  496.     inv: 2! ValueError
  497.     G: 0
  498. !   W: 1:0 2:1 3:0 4:1
  499. !   B: 1:0 2:1 3:0 4:1
  500.     del wopts3! KeyError
  501.     del bopts3! ValueError
  502.     G: 0
  503. !   W: 1:0 2:1 3:0 4:1
  504. !   B: 1:0 2:1 3:0 4:1
  505.   >>> iminsert
  506.     p/gopts1! KeyError
  507.     inv: 3! KeyError
  508. ***************
  509. *** 233,245 ****
  510.     wopts3! KeyError
  511.     p/bopts1: 2
  512.     G: 1
  513. !   W: 1:2 2:1 3:0 4:2
  514. !   B: 1:2 2:1 3:0 4:2
  515.     del wopts3! KeyError
  516.     del bopts3! ValueError
  517.     G: 1
  518. !   W: 1:2 2:1 3:0 4:2
  519. !   B: 1:2 2:1 3:0 4:2
  520.   >>> omnifunc
  521.     p/gopts1! KeyError
  522.     inv: 1! KeyError
  523. --- 233,245 ----
  524.     wopts3! KeyError
  525.     p/bopts1: 2
  526.     G: 1
  527. !   W: 1:0 2:2 3:2 4:1
  528. !   B: 1:0 2:2 3:2 4:1
  529.     del wopts3! KeyError
  530.     del bopts3! ValueError
  531.     G: 1
  532. !   W: 1:0 2:2 3:2 4:1
  533. !   B: 1:0 2:2 3:2 4:1
  534.   >>> omnifunc
  535.     p/gopts1! KeyError
  536.     inv: 1! KeyError
  537. ***************
  538. *** 252,264 ****
  539.     p/bopts1: b''
  540.     inv: 1! ValueError
  541.     G: ''
  542. !   W: 1:'B' 2:'C' 3:'A' 4:''
  543. !   B: 1:'B' 2:'C' 3:'A' 4:''
  544.     del wopts3! KeyError
  545.     del bopts3! ValueError
  546.     G: ''
  547. !   W: 1:'B' 2:'C' 3:'A' 4:''
  548. !   B: 1:'B' 2:'C' 3:'A' 4:''
  549.   >>> preserveindent
  550.     p/gopts1! KeyError
  551.     inv: 2! KeyError
  552. --- 252,264 ----
  553.     p/bopts1: b''
  554.     inv: 1! ValueError
  555.     G: ''
  556. !   W: 1:'A' 2:'B' 3:'' 4:'C'
  557. !   B: 1:'A' 2:'B' 3:'' 4:'C'
  558.     del wopts3! KeyError
  559.     del bopts3! ValueError
  560.     G: ''
  561. !   W: 1:'A' 2:'B' 3:'' 4:'C'
  562. !   B: 1:'A' 2:'B' 3:'' 4:'C'
  563.   >>> preserveindent
  564.     p/gopts1! KeyError
  565.     inv: 2! KeyError
  566. ***************
  567. *** 271,283 ****
  568.     p/bopts1: False
  569.     inv: 2! ValueError
  570.     G: 0
  571. !   W: 1:1 2:1 3:0 4:0
  572. !   B: 1:1 2:1 3:0 4:0
  573.     del wopts3! KeyError
  574.     del bopts3! ValueError
  575.     G: 0
  576. !   W: 1:1 2:1 3:0 4:0
  577. !   B: 1:1 2:1 3:0 4:0
  578.   >>> path
  579.     p/gopts1: b'.,/usr/include,,'
  580.     inv: 0! ValueError
  581. --- 271,283 ----
  582.     p/bopts1: False
  583.     inv: 2! ValueError
  584.     G: 0
  585. !   W: 1:0 2:1 3:0 4:1
  586. !   B: 1:0 2:1 3:0 4:1
  587.     del wopts3! KeyError
  588.     del bopts3! ValueError
  589.     G: 0
  590. !   W: 1:0 2:1 3:0 4:1
  591. !   B: 1:0 2:1 3:0 4:1
  592.   >>> path
  593.     p/gopts1: b'.,/usr/include,,'
  594.     inv: 0! ValueError
  595. ***************
  596. *** 289,300 ****
  597.     p/bopts1: None
  598.     inv: 0! ValueError
  599.     G: '.,,'
  600. !   W: 1:',,' 2:'.' 3:'.,,' 4:'.,,'
  601. !   B: 1:',,' 2:'.' 3:'.,,' 4:'.,,'
  602.     del wopts3! KeyError
  603.     G: '.,,'
  604. !   W: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
  605. !   B: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
  606.   First line
  607.   First line
  608.   def
  609. --- 289,300 ----
  610.     p/bopts1: None
  611.     inv: 0! ValueError
  612.     G: '.,,'
  613. !   W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
  614. !   B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
  615.     del wopts3! KeyError
  616.     G: '.,,'
  617. !   W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
  618. !   B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
  619.   First line
  620.   First line
  621.   def
  622. *** ../vim-7.3.944/src/version.c    2013-05-13 20:26:47.000000000 +0200
  623. --- src/version.c    2013-05-15 13:37:08.000000000 +0200
  624. ***************
  625. *** 730,731 ****
  626. --- 730,733 ----
  627.   {   /* Add new patch number below this line */
  628. + /**/
  629. +     945,
  630.   /**/
  631.  
  632. -- 
  633. ARTHUR:        A scratch?  Your arm's off!
  634. BLACK KNIGHT:  No, it isn't.
  635. ARTHUR:        Well, what's that then?
  636. BLACK KNIGHT:  I've had worse.
  637.                                   The Quest for the Holy Grail (Monty Python)
  638.  
  639.  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
  640. ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
  641. \\\  an exciting new programming language -- http://www.Zimbu.org        ///
  642.  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
  643.