Loading ...
Sorry, an error occurred while loading the content.
 

Re: [PATCH] (5/?) Add vim.version and vim.version_info

Expand Messages
  • ZyX
    # HG changeset patch # User ZyX # Date 1370096560 -14400 # Branch python-extended-4 # Node ID f322321a58b1a500736527ea82627fd65b2954bb # Parent
    Message 1 of 9 , Jun 1, 2013
      # HG changeset patch
      # User ZyX <kp-pav@...>
      # Date 1370096560 -14400
      # Branch python-extended-4
      # Node ID f322321a58b1a500736527ea82627fd65b2954bb
      # Parent 807b755f9898d68e4d93f18e7964783b207826b2
      Add vim.version and vim.version_info

      diff -r 807b755f9898 -r f322321a58b1 runtime/doc/if_pyth.txt
      --- a/runtime/doc/if_pyth.txt Sat Jun 01 19:55:13 2013 +0400
      +++ b/runtime/doc/if_pyth.txt Sat Jun 01 18:22:40 2013 +0400
      @@ -285,6 +285,19 @@
      Type of this object is available via "Options" attribute of vim
      module.

      +vim.version_info *python-version_info*
      + 3-tuple containing minor and major vim version and highest patch
      + number.
      +
      + Note: if third number in the tuple is 42 it does not mean patches 1-40
      + were included, it only means that highest included patch has
      + number 42. Use |has()| with |python-Function| to determine
      + whether specific patch was included.
      +
      +vim.version *python-version*
      + A string containing the vim version number plus additional information
      + about compiler.
      +
      Output from Python *python-output*
      Vim displays all Python code output in the Vim message area. Normal
      output appears as information messages, and error output appears as
      diff -r 807b755f9898 -r f322321a58b1 src/if_py_both.h
      --- a/src/if_py_both.h Sat Jun 01 19:55:13 2013 +0400
      +++ b/src/if_py_both.h Sat Jun 01 18:22:40 2013 +0400
      @@ -13,6 +13,8 @@
      * Common code for if_python.c and if_python3.c.
      */

      +#include "version.h"
      +
      #if PY_VERSION_HEX < 0x02050000
      typedef int Py_ssize_t; /* Python 2.4 and earlier don't have this type. */
      #endif
      @@ -5374,6 +5376,46 @@
      return -1;
      ADD_OBJECT(m, "error", VimError);

      + ADD_CHECKED_OBJECT(m, "version_info",
      + Py_BuildValue("(iii)", VIM_VERSION_MAJOR, VIM_VERSION_MINOR,
      + highest_patch()));
      + ADD_CHECKED_OBJECT(m, "version",
      + PyString_FromFormat("%i.%i (%s, %s %s)"
      + "\n[%s]"
      + , VIM_VERSION_MAJOR, VIM_VERSION_MINOR,
      +#ifdef FEAT_HUGE
      + "huge"
      +# else
      +# ifdef FEAT_NORMAL
      + "normal"
      +# else
      +# ifdef FEAT_SMALL
      + "small"
      +# else
      + "tiny"
      +# endif
      +# endif
      +#endif
      + , __DATE__, __TIME__,
      +#ifdef VMS
      + compiler_version
      +#else
      +# ifndef COMPILER
      +# ifdef __GNUC__
      + "GCC " __VERSION__
      +# else
      +# ifdef __cplusplus
      + "C++"
      +# else
      + "C"
      +# endif
      +# endif
      +# else
      + COMPILER
      +# endif
      +#endif
      + ));
      +
      ADD_CHECKED_OBJECT(m, "vars", NEW_DICTIONARY(&globvardict));
      ADD_CHECKED_OBJECT(m, "vvars", NEW_DICTIONARY(&vimvardict));
      ADD_CHECKED_OBJECT(m, "options",
      # HG changeset patch
      # User ZyX <kp-pav@...>
      # Date 1370115249 -14400
      # Branch python-extended-4
      # Node ID 7698aef182526761915fa4c3fa02080555a1b327
      # Parent f322321a58b1a500736527ea82627fd65b2954bb
      Improve vim.version

      diff -r f322321a58b1 -r 7698aef18252 src/if_py_both.h
      --- a/src/if_py_both.h Sat Jun 01 18:22:40 2013 +0400
      +++ b/src/if_py_both.h Sat Jun 01 23:34:09 2013 +0400
      @@ -5380,23 +5380,17 @@
      Py_BuildValue("(iii)", VIM_VERSION_MAJOR, VIM_VERSION_MINOR,
      highest_patch()));
      ADD_CHECKED_OBJECT(m, "version",
      - PyString_FromFormat("%i.%i (%s, %s %s)"
      + PyString_FromFormat(
      + VIM_VERSION_MAJOR_STR "." VIM_VERSION_MINOR_STR
      + " (" __DATE__ " " __TIME__ ")"
      "\n[%s]"
      - , VIM_VERSION_MAJOR, VIM_VERSION_MINOR,
      -#ifdef FEAT_HUGE
      - "huge"
      -# else
      -# ifdef FEAT_NORMAL
      - "normal"
      -# else
      -# ifdef FEAT_SMALL
      - "small"
      -# else
      - "tiny"
      -# endif
      -# endif
      + "\n" VIM_VERSION_TYPE " version "
      +#ifdef VIM_VERSION_GUI
      + "with " VIM_VERSION_GUI
      +#else
      + "without"
      #endif
      - , __DATE__, __TIME__,
      + " GUI",
      #ifdef VMS
      compiler_version
      #else
      diff -r f322321a58b1 -r 7698aef18252 src/version.c
      --- a/src/version.c Sat Jun 01 18:22:40 2013 +0400
      +++ b/src/version.c Sat Jun 01 23:34:09 2013 +0400
      @@ -3044,52 +3044,17 @@
      * internal variables in eval.c!
      */
      MSG(longVersion);
      +
      + MSG_PUTS(_("\n" VIM_VERSION_PLATFORM));
      #ifdef WIN3264
      # ifdef FEAT_GUI_W32
      -# if defined(_MSC_VER) && (_MSC_VER <= 1010)
      - /* Only MS VC 4.1 and earlier can do Win32s */
      - MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
      -# else
      -# ifdef _WIN64
      - MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
      -# else
      - MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
      -# endif
      -# endif
      if (gui_is_win32s())
      MSG_PUTS(_(" in Win32s mode"));
      -# ifdef FEAT_OLE
      +# ifdef FEAT_OLE
      MSG_PUTS(_(" with OLE support"));
      -# endif
      -# else
      -# ifdef _WIN64
      - MSG_PUTS(_("\nMS-Windows 64-bit console version"));
      -# else
      - MSG_PUTS(_("\nMS-Windows 32-bit console version"));
      # endif
      # endif
      #endif
      -#ifdef WIN16
      - MSG_PUTS(_("\nMS-Windows 16-bit version"));
      -#endif
      -#ifdef MSDOS
      -# ifdef DJGPP
      - MSG_PUTS(_("\n32-bit MS-DOS version"));
      -# else
      - MSG_PUTS(_("\n16-bit MS-DOS version"));
      -# endif
      -#endif
      -#ifdef MACOS
      -# ifdef MACOS_X
      -# ifdef MACOS_X_UNIX
      - MSG_PUTS(_("\nMacOS X (unix) version"));
      -# else
      - MSG_PUTS(_("\nMacOS X version"));
      -# endif
      -#else
      - MSG_PUTS(_("\nMacOS version"));
      -# endif
      -#endif

      #ifdef VMS
      MSG_PUTS(_("\nOpenVMS version"));
      @@ -3167,66 +3132,21 @@
      }
      #endif

      -#ifdef FEAT_HUGE
      - MSG_PUTS(_("\nHuge version "));
      -#else
      -# ifdef FEAT_BIG
      - MSG_PUTS(_("\nBig version "));
      + MSG_PUTS(_("\n" VIM_VERSION_TYPE " version "));
      +#ifdef VIM_VERSION_GUI
      +# ifdef MSWIN
      + MSG_PUTS(_("with GUI."));
      # else
      -# ifdef FEAT_NORMAL
      - MSG_PUTS(_("\nNormal version "));
      +# if defined(MACOS) && !defined(TARGET_API_MAC_CARBON) && !defined(TARGET_API_MAC_OSX)
      + MSG_PUTS(_("with (classic) GUI."));
      # else
      -# ifdef FEAT_SMALL
      - MSG_PUTS(_("\nSmall version "));
      -# else
      - MSG_PUTS(_("\nTiny version "));
      -# endif
      + MSG_PUTS(_("with " VIM_VERSION_GUI " GUI."));
      # endif
      # endif
      +#else
      + MSG_PUTS(_("without GUI."));
      #endif
      -#ifndef FEAT_GUI
      - MSG_PUTS(_("without GUI."));
      -#else
      -# ifdef FEAT_GUI_GTK
      -# ifdef FEAT_GUI_GNOME
      - MSG_PUTS(_("with GTK2-GNOME GUI."));
      -# else
      - MSG_PUTS(_("with GTK2 GUI."));
      -# endif
      -# else
      -# ifdef FEAT_GUI_MOTIF
      - MSG_PUTS(_("with X11-Motif GUI."));
      -# else
      -# ifdef FEAT_GUI_ATHENA
      -# ifdef FEAT_GUI_NEXTAW
      - MSG_PUTS(_("with X11-neXtaw GUI."));
      -# else
      - MSG_PUTS(_("with X11-Athena GUI."));
      -# endif
      -# else
      -# ifdef FEAT_GUI_PHOTON
      - MSG_PUTS(_("with Photon GUI."));
      -# else
      -# if defined(MSWIN)
      - MSG_PUTS(_("with GUI."));
      -# else
      -# if defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON
      - MSG_PUTS(_("with Carbon GUI."));
      -# else
      -# if defined(TARGET_API_MAC_OSX) && TARGET_API_MAC_OSX
      - MSG_PUTS(_("with Cocoa GUI."));
      -# else
      -# if defined(MACOS)
      - MSG_PUTS(_("with (classic) GUI."));
      -# endif
      -# endif
      -# endif
      -# endif
      -# endif
      -# endif
      -# endif
      -# endif
      -#endif
      +
      version_msg(_(" Features included (+) or not (-):\n"));

      list_features();
      diff -r f322321a58b1 -r 7698aef18252 src/version.h
      --- a/src/version.h Sat Jun 01 18:22:40 2013 +0400
      +++ b/src/version.h Sat Jun 01 23:34:09 2013 +0400
      @@ -27,6 +27,112 @@
      /* Used by MacOS port should be one of: development, alpha, beta, final */
      #define VIM_VERSION_RELEASE final

      +#ifdef FEAT_HUGE
      +# define VIM_VERSION_TYPE "Huge"
      +#else
      +# ifdef FEAT_BIG
      +# define VIM_VERSION_TYPE "Big"
      +# else
      +# ifdef FEAT_NORMAL
      +# define VIM_VERSION_TYPE "Normal"
      +# else
      +# ifdef FEAT_SMALL
      +# define VIM_VERSION_TYPE "Small"
      +# else
      +# define VIM_VERSION_TYPE "Tiny"
      +# endif
      +# endif
      +# endif
      +#endif
      +
      +#ifdef FEAT_GUI_GTK
      +# ifdef FEAT_GUI_GNOME
      +# define VIM_VERSION_GUI "GTK2-GNOME"
      +# else
      +# define VIM_VERSION_GUI "GTK2"
      +# endif
      +#else
      +# ifdef FEAT_GUI_MOTIF
      +# define VIM_VERSION_GUI "X11-Motif"
      +# else
      +# ifdef FEAT_GUI_ATHENA
      +# ifdef FEAT_GUI_NEXTAW
      +# define VIM_VERSION_GUI "X11-neXtaw"
      +# else
      +# define VIM_VERSION_GUI "X11-Athena"
      +# endif
      +# else
      +# ifdef FEAT_GUI_PHOTON
      +# define VIM_VERSION_GUI "Photon"
      +# else
      +# if defined(MSWIN)
      +# define "Windows"
      +# else
      +# if defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON
      +# define VIM_VERSION_GUI "Carbon"
      +# else
      +# if defined(TARGET_API_MAC_OSX) && TARGET_API_MAC_OSX
      +# define VIM_VERSION_GUI "Cocoa"
      +# else
      +# if defined(MACOS)
      +# define VIM_VERSION_GUI "Mac OS classic"
      +# endif
      +# endif
      +# endif
      +# endif
      +# endif
      +# endif
      +# endif
      +#endif
      +
      +#ifdef WIN3264
      +# ifdef FEAT_GUI_W32
      +# if defined(_MSC_VER) && (_MSC_VER <= 1010)
      +/* Only MS VC 4.1 and earlier can do Win32s */
      +# define VIM_VERSION_PLATFORM "MS-Windows 16/32-bit GUI"
      +# else
      +# ifdef _WIN64
      +# define VIM_VERSION_PLATFORM "MS-Windows 64-bit GUI"
      +# else
      +# define VIM_VERSION_PLATFORM "MS-Windows 32-bit GUI"
      +# endif
      +# endif
      +# else
      +# ifdef _WIN64
      +# define VIM_VERSION_PLATFORM "MS-Windows 64-bit console"
      +# else
      +# define VIM_VERSION_PLATFORM "MS-Windows 32-bit console"
      +# endif
      +# endif
      +#else
      +# ifdef WIN16
      +# define VIM_VERSION_PLATFORM "MS-Windows 16-bit"
      +# else
      +# ifdef MSDOS
      +# ifdef DJGPP
      +# define VIM_VERSION_PLATFORM "32-bit MS-DOS"
      +# else
      +# define VIM_VERSION_PLATFORM "16-bit MS-DOS"
      +# endif
      +# else
      +# ifdef MACOS
      +# ifdef MACOS_X
      +# ifdef MACOS_X_UNIX
      +# define VIM_VERSION_PLATFORM "MacOS X (unix)"
      +# else
      +# define VIM_VERSION_PLATFORM "MacOS X"
      +# endif
      +# else
      +# define VIM_VERSION_PLATFORM "MacOS"
      +# endif
      +# else
      +/* Should not really ever happen */
      +# define VIM_VERSION_PLATFORM "unknown"
      +# endif
      +# endif
      +# endif
      +#endif
      +
      /*
      * VIM_VERSION_NODOT is used for the runtime directory name.
      * VIM_VERSION_SHORT is copied into the swap file (max. length is 6 chars).

      --
      --
      You received this message from the "vim_dev" maillist.
      Do not top-post! Type your reply below the text you are replying to.
      For more information, visit http://www.vim.org/maillist.php

      ---
      You received this message because you are subscribed to the Google Groups "vim_dev" group.
      To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.
    • ZyX
      # HG changeset patch # User ZyX # Date 1370141913 -14400 # Branch python-extended-4 # Node ID aeb6697bc6851e894681f9baad6ea9dc808c6714 # Parent
      Message 2 of 9 , Jun 1, 2013
        # HG changeset patch
        # User ZyX <kp-pav@...>
        # Date 1370141913 -14400
        # Branch python-extended-4
        # Node ID aeb6697bc6851e894681f9baad6ea9dc808c6714
        # Parent 7698aef182526761915fa4c3fa02080555a1b327
        Change the meaning of popitem: it should not accept any arguments

        diff -r 7698aef18252 -r aeb6697bc685 runtime/doc/if_pyth.txt
        --- a/runtime/doc/if_pyth.txt Sat Jun 01 23:34:09 2013 +0400
        +++ b/runtime/doc/if_pyth.txt Sun Jun 02 06:58:33 2013 +0400
        @@ -524,10 +524,9 @@
        Remove specified key from dictionary and return
        corresponding value. If key is not found and default is
        given returns the default, otherwise raises KeyError.
        - popitem(key)
        - Remove specified key from dictionary and return a pair
        - with it and the corresponding value. Returned key is a new
        - object.
        + popitem()
        + Remove random key from dictionary and return (key, value)
        + pair.
        has_key(key)
        Check whether dictionary contains specified key, similar
        to `key in dict`.
        diff -r 7698aef18252 -r aeb6697bc685 src/if_py_both.h
        --- a/src/if_py_both.h Sat Jun 01 23:34:09 2013 +0400
        +++ b/src/if_py_both.h Sun Jun 02 06:58:33 2013 +0400
        @@ -1135,17 +1135,6 @@
        dictitem_free(di);
        }

        - if (flags & DICT_FLAG_RETURN_PAIR)
        - {
        - PyObject *tmp = r;
        -
        - if (!(r = Py_BuildValue("(" Py_bytes_fmt "O)", hi->hi_key, tmp)))
        - {
        - Py_DECREF(tmp);
        - return NULL;
        - }
        - }
        -
        return r;
        }

        @@ -1532,15 +1521,38 @@
        }

        static PyObject *
        -DictionaryPopItem(DictionaryObject *self, PyObject *args)
        -{
        - PyObject *keyObject;
        -
        - if (!PyArg_ParseTuple(args, "O", &keyObject))
        +DictionaryPopItem(DictionaryObject *self)
        +{
        + hashitem_T *hi;
        + PyObject *r;
        + PyObject *valObject;
        + dictitem_T *di;
        +
        + if (self->dict->dv_hashtab.ht_used == 0)
        + {
        + PyErr_SetNone(PyExc_KeyError);
        return NULL;
        -
        - return _DictionaryItem(self, keyObject,
        - DICT_FLAG_POP|DICT_FLAG_RETURN_PAIR);
        + }
        +
        + hi = self->dict->dv_hashtab.ht_array;
        + while (HASHITEM_EMPTY(hi))
        + ++hi;
        +
        + di = dict_lookup(hi);
        +
        + if (!(valObject = ConvertToPyObject(&di->di_tv)))
        + return NULL;
        +
        + if (!(r = Py_BuildValue("(" Py_bytes_fmt "O)", hi->hi_key, valObject)))
        + {
        + Py_DECREF(valObject);
        + return NULL;
        + }
        +
        + hash_remove(&self->dict->dv_hashtab, hi);
        + dictitem_free(di);
        +
        + return r;
        }

        static PyObject *
        @@ -1580,7 +1592,7 @@
        {"update", (PyCFunction)DictionaryUpdate, METH_VARARGS|METH_KEYWORDS, ""},
        {"get", (PyCFunction)DictionaryGet, METH_VARARGS, ""},
        {"pop", (PyCFunction)DictionaryPop, METH_VARARGS, ""},
        - {"popitem", (PyCFunction)DictionaryPopItem, METH_VARARGS, ""},
        + {"popitem", (PyCFunction)DictionaryPopItem, METH_NOARGS, ""},
        {"has_key", (PyCFunction)DictionaryHasKey, METH_VARARGS, ""},
        {"__dir__", (PyCFunction)DictionaryDir, METH_NOARGS, ""},
        { NULL, NULL, 0, NULL}
        diff -r 7698aef18252 -r aeb6697bc685 src/testdir/test86.in
        --- a/src/testdir/test86.in Sat Jun 01 23:34:09 2013 +0400
        +++ b/src/testdir/test86.in Sun Jun 02 06:58:33 2013 +0400
        @@ -83,7 +83,7 @@
        :$put =pyeval('repr(''1'' in d)')
        :$put =pyeval('repr(list(iter(d)))')
        :$put =string(d)
        -:$put =pyeval('repr(d.popitem(''0''))')
        +:$put =pyeval('repr(d.popitem())')
        :$put =pyeval('repr(d.get(''0''))')
        :$put =pyeval('repr(list(iter(d)))')
        :"
        @@ -226,7 +226,7 @@
        em('d[u"a\\0b"]=1')

        em('d.pop("abc")')
        -em('d.popitem("abc")')
        +em('d.popitem()')
        EOF
        :$put =messages
        :unlet messages
        diff -r 7698aef18252 -r aeb6697bc685 src/testdir/test86.ok
        --- a/src/testdir/test86.ok Sat Jun 01 23:34:09 2013 +0400
        +++ b/src/testdir/test86.ok Sun Jun 02 06:58:33 2013 +0400
        @@ -26,7 +26,7 @@
        False
        ['0']
        {'0': -1}
        -('', -1L)
        +('0', -1L)
        None
        []
        [0, 1, 2, 3]
        @@ -672,7 +672,7 @@
        d.update((("a", FailingMappingKey()),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
        <<< Finished
        >> DictionaryPopItem
        -d.popitem(1, 2):(<type 'exceptions.TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
        +d.popitem(1, 2):(<type 'exceptions.TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
        >> DictionaryHasKey
        d.has_key():(<type 'exceptions.TypeError'>, TypeError('function takes exactly 1 argument (0 given)',))
        > List
        diff -r 7698aef18252 -r aeb6697bc685 src/testdir/test87.in
        --- a/src/testdir/test87.in Sat Jun 01 23:34:09 2013 +0400
        +++ b/src/testdir/test87.in Sun Jun 02 06:58:33 2013 +0400
        @@ -77,7 +77,7 @@
        :$put =py3eval('repr(''1'' in d)')
        :$put =py3eval('repr(list(iter(d)))')
        :$put =string(d)
        -:$put =py3eval('repr(d.popitem(''0''))')
        +:$put =py3eval('repr(d.popitem())')
        :$put =py3eval('repr(d.get(''0''))')
        :$put =py3eval('repr(list(iter(d)))')
        :"
        @@ -220,7 +220,7 @@
        em('d[b"a\\0b"]=1')

        em('d.pop("abc")')
        -em('d.popitem("abc")')
        +em('d.popitem()')
        EOF
        :$put =messages
        :unlet messages
        diff -r 7698aef18252 -r aeb6697bc685 src/testdir/test87.ok
        --- a/src/testdir/test87.ok Sat Jun 01 23:34:09 2013 +0400
        +++ b/src/testdir/test87.ok Sun Jun 02 06:58:33 2013 +0400
        @@ -26,7 +26,7 @@
        False
        [b'0']
        {'0': -1}
        -(b'', -1)
        +(b'0', -1)
        None
        []
        [0, 1, 2, 3]
        @@ -669,7 +669,7 @@
        d.update((("a", FailingMappingKey()),)):(<class 'NotImplementedError'>, NotImplementedError())
        <<< Finished
        >> DictionaryPopItem
        -d.popitem(1, 2):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
        +d.popitem(1, 2):(<class 'TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
        >> DictionaryHasKey
        d.has_key():(<class 'TypeError'>, TypeError('function takes exactly 1 argument (0 given)',))
        > List

        --
        --
        You received this message from the "vim_dev" maillist.
        Do not top-post! Type your reply below the text you are replying to.
        For more information, visit http://www.vim.org/maillist.php

        ---
        You received this message because you are subscribed to the Google Groups "vim_dev" group.
        To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscribe@....
        For more options, visit https://groups.google.com/groups/opt_out.
      • Bram Moolenaar
        ... This breaks translations. And string concatenation doesn t work with older compilers. Should at least be split up into: MSG_PUTS( n );
        Message 3 of 9 , Jun 2, 2013
          ZyX wrote:

          > # HG changeset patch
          > # User ZyX <kp-pav@...>
          > # Date 1370096560 -14400
          > # Branch python-extended-4
          > # Node ID f322321a58b1a500736527ea82627fd65b2954bb
          > # Parent 807b755f9898d68e4d93f18e7964783b207826b2
          > Add vim.version and vim.version_info

          I am not including this patch, for these reasons:

          > + MSG_PUTS(_("\n" VIM_VERSION_PLATFORM));

          This breaks translations. And string concatenation doesn't work with
          older compilers. Should at least be split up into:

          MSG_PUTS("\n");
          MSG_PUTS(_(VIM_VERSION_PLATFORM));

          All the messages in version.h need to have N_() around them so that they
          can be translated.

          You can't leave out the trailing "version", because after translation it
          may appear somewhere else in the text.


          --
          The real
          trick is
          this: to
          keep the
          lines as
          short as
          possible
          and keep
          the size
          the same
          yet free
          from the
          need for
          hyphena-
          Dammit!! (Matthew Winn)

          /// Bram Moolenaar -- Bram@... -- 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 ///

          --
          --
          You received this message from the "vim_dev" maillist.
          Do not top-post! Type your reply below the text you are replying to.
          For more information, visit http://www.vim.org/maillist.php

          ---
          You received this message because you are subscribed to the Google Groups "vim_dev" group.
          To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscribe@....
          For more options, visit https://groups.google.com/groups/opt_out.
        Your message has been successfully submitted and would be delivered to recipients shortly.