Changeset 4641a79


Ignore:
Timestamp:
Jul 21, 2012, 9:15:17 PM (12 years ago)
Author:
William Harrington <kb0iic@…>
Branches:
clfs-2.1, clfs-3.0.0-systemd, clfs-3.0.0-sysvinit, master, systemd, sysvinit
Children:
1752595
Parents:
c1c44b9
Message:

Update vim 7.3 to patch level 608.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • patches/vim-7.3-branch-update-5.patch

    rc1c44b9 r4641a79  
    1 Submitted By: Jonathan Norman (jonathan at bluesquarelinux dot co dot uk)
    2 Date: 2012-06-03
    3 Initial Package Version: 7.3
    4 Origin: Upstream
    5 Upstream Status: Applied
    6 Description: Contains all upstream patches up to 7.3.538
    7 
    81diff -Naur vim73.orig/Filelist vim73/Filelist
    9 --- vim73.orig/Filelist 2012-06-03 23:09:52.956007482 +0000
    10 +++ vim73/Filelist      2012-06-03 23:09:54.868058365 +0000
     2--- vim73.orig/Filelist 2010-08-07 11:04:57.000000000 +0000
     3+++ vim73/Filelist      2012-07-20 20:31:18.230978438 +0000
    114@@ -39,6 +39,7 @@
    125                src/mark.c \
     
    6255                src/toolbar.phi \
    6356 
    64 @@ -686,6 +683,8 @@
     57@@ -466,6 +463,7 @@
     58                runtime/macros/hanoi/hanoi.vim \
     59                runtime/macros/hanoi/poster \
     60                runtime/macros/justify.vim \
     61+               runtime/macros/less.bat \
     62                runtime/macros/less.sh \
     63                runtime/macros/less.vim \
     64                runtime/macros/life/click.me \
     65@@ -669,6 +667,8 @@
     66 
     67 # generic language files
     68 LANG_GEN = \
     69+               runtime/doc/*-de.1 \
     70+               runtime/doc/*-de.UTF-8.1 \
     71                runtime/doc/*-fr.1 \
     72                runtime/doc/*-fr.UTF-8.1 \
     73                runtime/doc/*-it.1 \
     74@@ -686,6 +686,8 @@
    6575                runtime/tutor/tutor.utf-8 \
    6676                runtime/tutor/tutor.?? \
     
    7282                runtime/spell/??/main.aap \
    7383diff -Naur vim73.orig/Makefile vim73/Makefile
    74 --- vim73.orig/Makefile 2012-06-03 23:09:53.028009398 +0000
    75 +++ vim73/Makefile      2012-06-03 23:09:53.712027602 +0000
     84--- vim73.orig/Makefile 2010-08-15 12:23:34.000000000 +0000
     85+++ vim73/Makefile      2012-07-20 20:31:09.600972239 +0000
    7686@@ -23,6 +23,9 @@
    7787 # has run can result in compiling with $(CC) empty.
     
    95105        cd src && $(MAKE) $@
    96106diff -Naur vim73.orig/README_extra.txt vim73/README_extra.txt
    97 --- vim73.orig/README_extra.txt 2012-06-03 23:09:52.920006524 +0000
    98 +++ vim73/README_extra.txt      2012-06-03 23:09:54.124038565 +0000
     107--- vim73.orig/README_extra.txt 2010-08-15 12:23:19.000000000 +0000
     108+++ vim73/README_extra.txt      2012-07-20 20:31:10.880973163 +0000
    99109@@ -13,9 +13,6 @@
    100110 
     
    108118 
    109119diff -Naur vim73.orig/runtime/doc/autocmd.txt vim73/runtime/doc/autocmd.txt
    110 --- vim73.orig/runtime/doc/autocmd.txt  2012-06-03 23:09:53.024009292 +0000
    111 +++ vim73/runtime/doc/autocmd.txt       2012-06-03 23:09:55.576077206 +0000
     120--- vim73.orig/runtime/doc/autocmd.txt  2010-08-15 12:23:19.000000000 +0000
     121+++ vim73/runtime/doc/autocmd.txt       2012-07-20 20:31:15.250976305 +0000
    112122@@ -299,6 +299,8 @@
    113123 |InsertEnter|          starting Insert mode
     
    183193                        the autocommands, not the buffers to which they are
    184194diff -Naur vim73.orig/runtime/doc/change.txt vim73/runtime/doc/change.txt
    185 --- vim73.orig/runtime/doc/change.txt   2012-06-03 23:09:53.016009080 +0000
    186 +++ vim73/runtime/doc/change.txt        2012-06-03 23:09:53.976034626 +0000
     195--- vim73.orig/runtime/doc/change.txt   2010-08-15 12:23:19.000000000 +0000
     196+++ vim73/runtime/doc/change.txt        2012-07-20 20:31:16.577643922 +0000
    187197@@ -916,8 +916,10 @@
    188198 {Visual}["x]Y          Yank the highlighted lines [into register x] (for
     
    198208 :[range]y[ank] [x] {count}
    199209                        Yank {count} lines, starting with last line number
     210@@ -1493,6 +1495,12 @@
     211        characters.  Overruled by the 'M' flag.
     212 1      Don't break a line after a one-letter word.  It's broken before it
     213        instead (if possible).
     214+j      Where it makes sense, remove a comment leader when joining lines.  For
     215+       example, joining:
     216+               int i;   // the index ~
     217+                        // in the list ~
     218+       Becomes:
     219+               int i;   // the index in the list ~
     220 
     221 
     222 With 't' and 'c' you can specify when Vim performs auto-wrapping:
    200223diff -Naur vim73.orig/runtime/doc/cmdline.txt vim73/runtime/doc/cmdline.txt
    201 --- vim73.orig/runtime/doc/cmdline.txt  2012-06-03 23:09:53.016009080 +0000
    202 +++ vim73/runtime/doc/cmdline.txt       2012-06-03 23:09:55.820083699 +0000
     224--- vim73.orig/runtime/doc/cmdline.txt  2010-08-15 12:23:19.000000000 +0000
     225+++ vim73/runtime/doc/cmdline.txt       2012-07-20 20:31:16.060976885 +0000
    203226@@ -330,12 +330,12 @@
    204227 
     
    221244                If the numbers {first} and/or {last} are given, the respective
    222245diff -Naur vim73.orig/runtime/doc/diff.txt vim73/runtime/doc/diff.txt
    223 --- vim73.orig/runtime/doc/diff.txt     2012-06-03 23:09:53.024009292 +0000
    224 +++ vim73/runtime/doc/diff.txt  2012-06-03 23:09:55.876085191 +0000
     246--- vim73.orig/runtime/doc/diff.txt     2010-08-15 12:23:20.000000000 +0000
     247+++ vim73/runtime/doc/diff.txt  2012-07-20 20:31:16.204310320 +0000
    225248@@ -178,7 +178,7 @@
    226249 nodiff" before hiding it.
     
    243266 present in another.  These lines were inserted in another file or deleted in
    244267diff -Naur vim73.orig/runtime/doc/eval.txt vim73/runtime/doc/eval.txt
    245 --- vim73.orig/runtime/doc/eval.txt     2012-06-03 23:09:53.016009080 +0000
    246 +++ vim73/runtime/doc/eval.txt  2012-06-03 23:09:55.556076674 +0000
     268--- vim73.orig/runtime/doc/eval.txt     2010-08-15 12:23:20.000000000 +0000
     269+++ vim73/runtime/doc/eval.txt  2012-07-20 20:31:17.304311108 +0000
    247270@@ -798,11 +798,12 @@
    248271 For |Lists| only "+" is possible and then both expr6 must be a list.  The
     
    321344 islocked( {expr})              Number  TRUE if {expr} is locked
    322345 items( {dict})                 List    key-value pairs in {dict}
    323 @@ -1822,7 +1837,7 @@
     346@@ -1821,9 +1836,11 @@
     347 localtime()                    Number  current time
    324348 log( {expr})                   Float   natural logarithm (base e) of {expr}
    325349 log10( {expr})                 Float   logarithm of Float {expr} to base 10
     350+luaeval( {expr}[, {expr}])     any     evaluate |Lua| expression
    326351 map( {expr}, {string})         List/Dict  change each item in {expr} to {expr}
    327352-maparg( {name}[, {mode} [, {abbr}]])
     353-                               String  rhs of mapping {name} in mode {mode}
    328354+maparg( {name}[, {mode} [, {abbr} [, {dict}]]])
    329                                 String  rhs of mapping {name} in mode {mode}
     355+                               String or Dict
     356+                                       rhs of mapping {name} in mode {mode}
    330357 mapcheck( {name}[, {mode} [, {abbr}]])
    331358                                String  check for mappings matching {name}
    332 @@ -1846,6 +1861,7 @@
     359 match( {expr}, {pat}[, {start}[, {count}]])
     360@@ -1846,11 +1863,14 @@
    333361 mzeval( {expr})                        any     evaluate |MzScheme| expression
    334362 nextnonblank( {lnum})          Number  line nr of non-blank line >= {lnum}
     
    338366 pow( {x}, {y})                 Float   {x} to the power of {y}
    339367 prevnonblank( {lnum})          Number  line nr of non-blank line <= {lnum}
    340 @@ -1904,7 +1920,8 @@
     368 printf( {fmt}, {expr1}...)     String  format text
     369 pumvisible()                   Number  whether popup menu is visible
     370+pyeval( {expr})                        any     evaluate |Python| expression
     371+py3eval( {expr})               any     evaluate |python3| expression
     372 range( {expr} [, {max} [, {stride}]])
     373                                List    items from {expr} to {max}
     374 readfile( {fname} [, {binary} [, {max}]])
     375@@ -1904,7 +1924,8 @@
    341376 simplify( {filename})          String  simplify filename as much as possible
    342377 sin( {expr})                   Float   sine of {expr}
     
    348383 spellbadword()                 String  badly spelled word at cursor
    349384 spellsuggest( {word} [, {max} [, {capital}]])
    350 @@ -1967,6 +1984,7 @@
     385@@ -1967,6 +1988,7 @@
    351386 winwidth( {nr})                        Number  width of window {nr}
    352387 writefile( {list}, {fname} [, {binary}])
     
    356391 abs({expr})                                                    *abs()*
    357392                Return the absolute value of {expr}.  When {expr} evaluates to
    358 @@ -2006,6 +2024,13 @@
     393@@ -2006,6 +2028,13 @@
    359394                Use |insert()| to add an item at another position.
    360395 
     
    370405                When {expr} is a |List|: Append each item of the |List| as a
    371406                text line below line {lnum} in the current buffer.
    372 @@ -2708,13 +2733,15 @@
     407@@ -2708,13 +2737,15 @@
    373408                {only available when compiled with the |+float| feature}
    374409 
     
    391426                If the expansion fails, the result is an empty string.  A name
    392427                for a non-existing file is not included.
    393 @@ -2731,6 +2758,7 @@
     428@@ -2731,6 +2762,7 @@
    394429                        <abuf>          autocmd buffer number (as a String!)
    395430                        <amatch>        autocmd matched name
     
    399434                        <cWORD>         WORD under the cursor
    400435                        <client>        the {clientid} of the last received
    401 @@ -2767,10 +2795,10 @@
     436@@ -2767,10 +2799,10 @@
    402437                When {expr} does not start with '%', '#' or '<', it is
    403438                expanded like a file name is expanded on the command line.
     
    414449 <
    415450                Expand() can also be used to expand variables and environment
    416 @@ -3414,17 +3442,23 @@
     451@@ -3414,17 +3446,23 @@
    417452                        :let list_is_on = getwinvar(2, '&list')
    418453                        :echo "myvar = " . getwinvar(1, 'myvar')
     
    444479 
    445480                For most systems backticks can be used to get files names from
    446 @@ -3759,6 +3793,11 @@
     481@@ -3759,6 +3797,11 @@
    447482                Note that when {item} is a |List| it is inserted as a single
    448483                item.  Use |extend()| to concatenate |Lists|.
     
    456491                The result is a Number, which is non-zero when a directory
    457492                with the name {directory} exists.  If {directory} doesn't
    458 @@ -3966,23 +4005,51 @@
     493@@ -3941,6 +3984,20 @@
     494 <                      -2.0
     495                {only available when compiled with the |+float| feature}
     496               
     497+luaeval({expr}[, {expr}])                                      *luaeval()*
     498+               Evaluate Lua expression {expr} and return its result converted
     499+               to Vim data structures. Second {expr} may hold additional
     500+               argument accessible as _A inside first {expr}.
     501+               Strings are returned as they are.
     502+               Boolean objects are converted to numbers.
     503+               Numbers are converted to |Float| values if vim was compiled
     504+               with |+float| and to numbers otherwise.
     505+               Dictionaries and lists obtained by vim.eval() are returned
     506+               as-is.
     507+               Other objects are returned as zero without any errors.
     508+               See |lua-luaeval| for more details.
     509+               {only available when compiled with the |+lua| feature}
     510+
     511 map({expr}, {string})                                  *map()*
     512                {expr} must be a |List| or a |Dictionary|.
     513                Replace each item in {expr} with the result of evaluating
     514@@ -3966,23 +4023,51 @@
    459515                further items in {expr} are processed.
    460516 
     
    515571                then the global mappings.
    516572                This function can be used to map a key even when it's already
    517 @@ -4295,6 +4362,13 @@
     573@@ -4295,6 +4380,13 @@
    518574                        call setpos('.', save_cursor)
    519575 <              Also see |setpos()|.
     
    529585                Shorten directory names in the path {expr} and return the
    530586                result.  The tail, the file name, is kept as-is.  The other
    531 @@ -5228,7 +5302,7 @@
     587@@ -4500,6 +4592,29 @@
     588                This can be used to avoid some things that would remove the
     589                popup menu.
     590 
     591+                                                       *E860* *E861*
     592+py3eval({expr})                                                *py3eval()*
     593+               Evaluate Python expression {expr} and return its result
     594+               converted to Vim data structures.
     595+               Numbers and strings are returned as they are (strings are
     596+               copied though, unicode strings are additionally converted to
     597+               'encoding').
     598+               Lists are represented as Vim |List| type.
     599+               Dictionaries are represented as Vim |Dictionary| type with
     600+               keys converted to strings.
     601+               {only available when compiled with the |+python3| feature}
     602+
     603+                                                       *E858* *E859*
     604+pyeval({expr})                                         *pyeval()*
     605+               Evaluate Python expression {expr} and return its result
     606+               converted to Vim data structures.
     607+               Numbers and strings are returned as they are (strings are
     608+               copied though).
     609+               Lists are represented as Vim |List| type.
     610+               Dictionaries are represented as Vim |Dictionary| type with
     611+               keys converted to strings.
     612+               {only available when compiled with the |+python| feature}
     613+
     614                                                        *E726* *E727*
     615 range({expr} [, {max} [, {stride}]])                           *range()*
     616                Returns a |List| with Numbers:
     617@@ -4733,6 +4848,10 @@
     618                Search for regexp pattern {pattern}.  The search starts at the
     619                cursor position (you can use |cursor()| to set it).
     620 
     621+               If there is no match a 0 is returned and the cursor doesn't
     622+               move.  No error message is given.
     623+               When a match has been found its line number is returned.
     624+
     625                {flags} is a String, which can contain these character flags:
     626                'b'     search backward instead of forward
     627                'c'     accept a match at the cursor position
     628@@ -5228,7 +5347,7 @@
    532629                {only available when compiled with the |+float| feature}
    533630 
     
    538635                want a list to remain unmodified make a copy first: >
    539636                        :let sortedlist = sort(copy(mylist))
    540 @@ -5236,6 +5310,8 @@
     637@@ -5236,6 +5355,8 @@
    541638                Numbers sort after Strings, |Lists| after Numbers.
    542639                For sorting text in the current buffer use |:sort|.
     
    547644                is called to compare items.  The function is invoked with two
    548645                items as argument and must return zero if they are equal, 1 or
    549 @@ -6056,7 +6132,15 @@
     646@@ -6056,7 +6177,15 @@
    550647                To copy a file byte for byte: >
    551648                        :let fl = readfile("foo", "b")
     
    566663diff -Naur vim73.orig/runtime/doc/eval.txt.orig vim73/runtime/doc/eval.txt.orig
    567664--- vim73.orig/runtime/doc/eval.txt.orig        1970-01-01 00:00:00.000000000 +0000
    568 +++ vim73/runtime/doc/eval.txt.orig     2012-06-03 23:09:54.176039949 +0000
     665+++ vim73/runtime/doc/eval.txt.orig     2012-07-20 20:31:11.084306643 +0000
    569666@@ -0,0 +1,8362 @@
    570667+*eval.txt*     For Vim version 7.3.  Last change: 2010 Aug 15
     
    89319028+ vim:tw=78:ts=8:ft=help:norl:
    89329029diff -Naur vim73.orig/runtime/doc/if_cscop.txt vim73/runtime/doc/if_cscop.txt
    8933 --- vim73.orig/runtime/doc/if_cscop.txt 2012-06-03 23:09:53.020009186 +0000
    8934 +++ vim73/runtime/doc/if_cscop.txt      2012-06-03 23:09:54.252041972 +0000
     9030--- vim73.orig/runtime/doc/if_cscop.txt 2010-08-15 12:23:20.000000000 +0000
     9031+++ vim73/runtime/doc/if_cscop.txt      2012-07-20 20:31:11.324306815 +0000
    89359032@@ -272,6 +272,15 @@
    89369033        :set cst
     
    94449541+ vim:tw=78:ts=8:ft=help:norl:
    94459542diff -Naur vim73.orig/runtime/doc/if_lua.txt vim73/runtime/doc/if_lua.txt
    9446 --- vim73.orig/runtime/doc/if_lua.txt   2012-06-03 23:09:53.020009186 +0000
    9447 +++ vim73/runtime/doc/if_lua.txt        2012-06-03 23:09:55.696080401 +0000
     9543--- vim73.orig/runtime/doc/if_lua.txt   2010-08-15 12:23:20.000000000 +0000
     9544+++ vim73/runtime/doc/if_lua.txt        2012-07-20 20:31:15.670976605 +0000
    94489545@@ -1,4 +1,4 @@
    94499546-*if_lua.txt*    For Vim version 7.3.  Last change: 2010 Jul 22
     
    96439740+==============================================================================
    96449741+ vim:tw=78:ts=8:noet:ft=help:norl:
     9742diff -Naur vim73.orig/runtime/doc/if_pyth.txt vim73/runtime/doc/if_pyth.txt
     9743--- vim73.orig/runtime/doc/if_pyth.txt  2010-08-15 12:23:20.000000000 +0000
     9744+++ vim73/runtime/doc/if_pyth.txt       2012-07-20 20:31:17.307644444 +0000
     9745@@ -1,4 +1,4 @@
     9746-*if_pyth.txt*   For Vim version 7.3.  Last change: 2010 Aug 13
     9747+*if_pyth.txt*   For Vim version 7.3.  Last change: 2012 Feb 04
     9748 
     9749 
     9750                  VIM REFERENCE MANUAL    by Paul Moore
     9751@@ -6,13 +6,14 @@
     9752 
     9753 The Python Interface to Vim                            *python* *Python*
     9754 
     9755-1. Commands                    |python-commands|
     9756-2. The vim module              |python-vim|
     9757-3. Buffer objects              |python-buffer|
     9758-4. Range objects               |python-range|
     9759-5. Window objects              |python-window|
     9760-6. Dynamic loading             |python-dynamic|
     9761-7. Python 3                    |python3|
     9762+1. Commands                                    |python-commands|
     9763+2. The vim module                              |python-vim|
     9764+3. Buffer objects                              |python-buffer|
     9765+4. Range objects                               |python-range|
     9766+5. Window objects                              |python-window|
     9767+6. pyeval(), py3eval() Vim functions           |python-pyeval|
     9768+7. Dynamic loading                             |python-dynamic|
     9769+8. Python 3                                    |python3|
     9770 
     9771 {Vi does not have any of these commands}
     9772 
     9773@@ -150,6 +151,22 @@
     9774        [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
     9775        'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
     9776 
     9777+vim.bindeval(str)                                      *python-bindeval*
     9778+       Like |python-eval|, but
     9779+       1. if expression evaluates to |List| or |Dictionary| it is returned as
     9780+          vimlist or vimdictionary python type that are connected to original
     9781+          list or dictionary. Thus modifications to these objects imply
     9782+          modifications of the original.
     9783+       2. if expression evaluates to a function reference, then it returns
     9784+          callable vimfunction object. Use self keyword argument to assign
     9785+          |self| object for dictionary functions.
     9786+
     9787+       Note: this function has the same behavior as |lua-eval| (except that
     9788+             lua does not support running vim functions), |python-eval| is
     9789+             kept for backwards compatibility in order not to make scripts
     9790+             relying on outputs of vim.eval() being a copy of original or
     9791+             vim.eval("1") returning a string.
     9792+
     9793 
     9794 
     9795 Error object of the "vim" module
     9796@@ -222,8 +239,9 @@
     9797        - from indexing vim.buffers (|python-buffers|)
     9798        - from the "buffer" attribute of a window (|python-window|)
     9799 
     9800-Buffer objects have one read-only attribute - name - the full file name for
     9801-the buffer.  They also have three methods (append, mark, and range; see below).
     9802+Buffer objects have two read-only attributes - name - the full file name for
     9803+the buffer, and number - the buffer number.  They also have three methods
     9804+(append, mark, and range; see below).
     9805 
     9806 You can also treat buffer objects as sequence objects.  In this context, they
     9807 act as if they were lists (yes, they are mutable) of strings, with each
     9808@@ -318,7 +336,13 @@
     9809 The width attribute is writable only if the screen is split vertically.
     9810 
     9811 ==============================================================================
     9812-6. Dynamic loading                                     *python-dynamic*
     9813+6. pyeval() and py3eval() Vim functions                        *python-pyeval*
     9814+
     9815+To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
     9816+functions to evaluate Python expressions and pass their values to VimL.
     9817+
     9818+==============================================================================
     9819+7. Dynamic loading                                     *python-dynamic*
     9820 
     9821 On MS-Windows the Python library can be loaded dynamically.  The |:version|
     9822 output then includes |+python/dyn|.
     9823@@ -335,13 +359,14 @@
     9824 sure edit "gvim.exe" and search for "python\d*.dll\c".
     9825 
     9826 ==============================================================================
     9827-7. Python 3                                            *python3*
     9828+8. Python 3                                            *python3*
     9829 
     9830                                                        *:py3* *:python3*
     9831 The |:py3| and |:python3| commands work similar to |:python|.
     9832                                                        *:py3file*
     9833 The |:py3file| command works similar to |:pyfile|.
     9834 
     9835+
     9836 Vim can be built in four ways (:version output):
     9837 1. No Python support       (-python, -python3)
     9838 2. Python 2 support only    (+python or +python/dyn, -python3)
     9839@@ -355,7 +380,7 @@
     9840 When doing this on Linux/Unix systems and importing global symbols, this leads
     9841 to a crash when the second Python version is used.  So either global symbols
     9842 are loaded but only one Python version is activated, or no global symbols are
     9843-loaded. The latter makes Python's "import" fail on libaries that expect the
     9844+loaded. The latter makes Python's "import" fail on libraries that expect the
     9845 symbols to be provided by Vim.
     9846                                                        *E836* *E837*
     9847 Vim's configuration script makes a guess for all libraries based on one
     9848@@ -377,6 +402,18 @@
     9849 3. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration.  This
     9850    may crash Vim though.
     9851 
     9852+                                                       *has-python*
     9853+You can test what Python version is available with: >
     9854+       if has('python')
     9855+         echo 'there is Python 2.x'
     9856+       elseif has('python3')
     9857+         echo 'there is Python 3.x'
     9858+       endif
     9859+
     9860+Note however, that when Python 2 and 3 are both available and loaded
     9861+dynamically, these has() calls will try to load them.  If only one can be
     9862+loaded at a time, just checking if Python 2 or 3 are available will prevent
     9863+the other one from being available.
     9864 
     9865 ==============================================================================
     9866  vim:tw=78:ts=8:ft=help:norl:
    96459867diff -Naur vim73.orig/runtime/doc/indent.txt vim73/runtime/doc/indent.txt
    9646 --- vim73.orig/runtime/doc/indent.txt   2012-06-03 23:09:53.024009292 +0000
    9647 +++ vim73/runtime/doc/indent.txt        2012-06-03 23:09:55.712080826 +0000
     9868--- vim73.orig/runtime/doc/indent.txt   2010-08-15 12:23:20.000000000 +0000
     9869+++ vim73/runtime/doc/indent.txt        2012-07-20 20:31:15.707643298 +0000
    96489870@@ -128,13 +128,20 @@
    96499871 used CTRL-T or CTRL-D.
     
    1078711009+ vim:tw=78:ts=8:ft=help:norl:
    1078811010diff -Naur vim73.orig/runtime/doc/map.txt vim73/runtime/doc/map.txt
    10789 --- vim73.orig/runtime/doc/map.txt      2012-06-03 23:09:53.020009186 +0000
    10790 +++ vim73/runtime/doc/map.txt   2012-06-03 23:09:55.820083699 +0000
     11011--- vim73.orig/runtime/doc/map.txt      2010-08-15 12:23:21.000000000 +0000
     11012+++ vim73/runtime/doc/map.txt   2012-07-20 20:31:16.060976885 +0000
    1079111013@@ -226,7 +226,7 @@
    1079211014 
     
    1082811050        -complete=tag_listfiles tags, file names are shown when CTRL-D is hit
    1082911051diff -Naur vim73.orig/runtime/doc/motion.txt vim73/runtime/doc/motion.txt
    10830 --- vim73.orig/runtime/doc/motion.txt   2012-06-03 23:09:53.020009186 +0000
    10831 +++ vim73/runtime/doc/motion.txt        2012-06-03 23:09:54.380045379 +0000
     11052--- vim73.orig/runtime/doc/motion.txt   2010-08-15 12:23:21.000000000 +0000
     11053+++ vim73/runtime/doc/motion.txt        2012-07-20 20:31:11.687640410 +0000
    1083211054@@ -269,11 +269,11 @@
    1083311055                        {char} can be entered like with the |f| command.
     
    1084511067 3. Up-down motions                                     *up-down-motions*
    1084611068diff -Naur vim73.orig/runtime/doc/netbeans.txt vim73/runtime/doc/netbeans.txt
    10847 --- vim73.orig/runtime/doc/netbeans.txt 2012-06-03 23:09:53.016009080 +0000
    10848 +++ vim73/runtime/doc/netbeans.txt      2012-06-03 23:09:54.892059004 +0000
     11069--- vim73.orig/runtime/doc/netbeans.txt 2010-08-15 12:23:21.000000000 +0000
     11070+++ vim73/runtime/doc/netbeans.txt      2012-07-20 20:31:13.184308154 +0000
    1084911071@@ -1,4 +1,4 @@
    1085011072-*netbeans.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
     
    1090811130 ==============================================================================
    1090911131diff -Naur vim73.orig/runtime/doc/options.txt vim73/runtime/doc/options.txt
    10910 --- vim73.orig/runtime/doc/options.txt  2012-06-03 23:09:53.020009186 +0000
    10911 +++ vim73/runtime/doc/options.txt       2012-06-03 23:09:55.460074120 +0000
     11132--- vim73.orig/runtime/doc/options.txt  2010-08-15 12:23:21.000000000 +0000
     11133+++ vim73/runtime/doc/options.txt       2012-07-20 20:31:18.044311638 +0000
    1091211134@@ -150,6 +150,18 @@
    1091311135 (the ^[ is a real <Esc> here, use CTRL-V <Esc> to enter it)
     
    1092911151 security reasons.
    1093011152 
    10931 @@ -1434,6 +1446,15 @@
     11153@@ -1425,6 +1437,7 @@
     11154        This option is a list of comma separated names.
     11155        These names are recognized:
     11156 
     11157+                                               *clipboard-unnamed*
     11158        unnamed         When included, Vim will use the clipboard register '*'
     11159                        for all yank, delete, change and put operations which
     11160                        would normally go to the unnamed register.  When a
     11161@@ -1434,6 +1447,17 @@
    1093211162                        explicitly accessed using the "* notation.  Also see
    1093311163                        |gui-clipboard|.
    1093411164 
     11165+                                               *clipboard-unnamedplus*
    1093511166+       unnamedplus     A variant of "unnamed" flag which uses the clipboard
    1093611167+                       register '+' (|quoteplus|) instead of register '*' for
     
    1093811169+                       into register '+' and also into '*' when "unnamed" is
    1093911170+                       included.
    10940 +                       Only available with the |+x11| feature.
     11171+                       Only available with the |+X11| feature.
    1094111172+                       Availability can be checked with: >
    1094211173+                               if has('unnamedplus')
    1094311174+<
     11175+                                               *clipboard-autoselect*
    1094411176        autoselect      Works like the 'a' flag in 'guioptions': If present,
    1094511177                        then whenever Visual mode is started, or the Visual
    1094611178                        area extended, Vim tries to become the owner of the
    10947 @@ -2069,6 +2090,12 @@
     11179@@ -1445,9 +1469,16 @@
     11180                        "autoselect" flag is used.
     11181                        Also applies to the modeless selection.
     11182 
     11183+                                               *clipboard-autoselectplus*
     11184+       autoselectplus  Like "autoselect" but using the + register instead of
     11185+                       the * register.  Compare to the 'P' flag in
     11186+                       'guioptions'.
     11187+
     11188+                                               *clipboard-autoselectml*
     11189        autoselectml    Like "autoselect", but for the modeless selection
     11190                        only.  Compare to the 'A' flag in 'guioptions'.
     11191 
     11192+                                               *clipboard-html*
     11193        html            When the clipboard contains HTML, use this when
     11194                        pasting.  When putting text on the clipboard, mark it
     11195                        as HTML.  This works to copy rendered HTML from
     11196@@ -1458,6 +1489,7 @@
     11197                        Only supported for GTK version 2 and later.
     11198                        Only available with the |+multi_byte| feature.
     11199 
     11200+                                               *clipboard-exclude*
     11201        exclude:{pattern}
     11202                        Defines a pattern that is matched against the name of
     11203                        the terminal 'term'.  If there is a match, no
     11204@@ -2069,6 +2101,12 @@
    1094811205                                                                *cpo->*
    1094911206                >       When appending to a register, put a line break before
     
    1095811215        POSIX flags.  These are not included in the Vi default value, except
    1095911216        when $VIM_POSIX was set on startup. |posix|
    10960 @@ -2161,6 +2188,16 @@
     11217@@ -2161,6 +2199,16 @@
    1096111218        Specifies whether to use quickfix window to show cscope results.
    1096211219        See |cscopequickfix|.
     
    1097511232 'cscopetag' 'cst'      boolean (default off)
    1097611233                        global
    10977 @@ -5843,16 +5880,21 @@
     11234@@ -3510,6 +3558,9 @@
     11235                windowing system's global selection unless explicitly told to
     11236                by a yank or delete operation for the "* register.
     11237                The same applies to the modeless selection.
     11238+                                                               *'go-P'*
     11239+         'P'   Like autoselect but using the "+ register instead of the "*
     11240+               register.
     11241                                                                *'go-A'*
     11242          'A'   Autoselect for the modeless selection.  Like 'a', but only
     11243                applies to the modeless selection.
     11244@@ -5843,16 +5894,21 @@
    1097811245        security reasons.
    1097911246 
     
    1100111268        security reasons.
    1100211269 
    11003 @@ -5873,9 +5915,10 @@
     11270@@ -5873,9 +5929,10 @@
    1100411271        For Unix the default it "| tee".  The stdout of the compiler is saved
    1100511272        in a file and echoed to the screen.  If the 'shell' option is "csh" or
     
    1101511282        and the other initializations, so that when the 'shell' option is set
    1101611283        there, the 'shellpipe' option changes automatically, unless it was
    11017 @@ -5980,6 +6023,7 @@
     11284@@ -5980,6 +6037,7 @@
    1101811285 
    1101911286                                                *'shellxquote'* *'sxq'*
     
    1102311290                                        somewhere: "\""
    1102411291                                        for Unix, when using system(): "\"")
    11025 @@ -5989,14 +6033,28 @@
     11292@@ -5989,14 +6047,28 @@
    1102611293        the "!" and ":!" commands.  Includes the redirection.  See
    1102711294        'shellquote' to exclude the redirection.  It's probably not useful
     
    1105711324 'shiftround' 'sr'      boolean (default off)
    1105811325                        global
    11059 @@ -7530,8 +7588,9 @@
     11326@@ -7530,8 +7602,9 @@
    1106011327        !       When included, save and restore global variables that start
    1106111328                with an uppercase letter, and don't contain a lowercase
     
    1106911336                the '<' item, with the disadvantage that you need to put a
    1107011337                backslash before the ", otherwise it will be recognized as the
    11071 @@ -7747,6 +7806,17 @@
     11338@@ -7747,6 +7820,17 @@
    1107211339        a pattern from the list.  This avoids problems when a future version
    1107311340        uses another default.
     
    1108911356diff -Naur vim73.orig/runtime/doc/options.txt.orig vim73/runtime/doc/options.txt.orig
    1109011357--- vim73.orig/runtime/doc/options.txt.orig     1970-01-01 00:00:00.000000000 +0000
    11091 +++ vim73/runtime/doc/options.txt.orig  2012-06-03 23:09:53.792029731 +0000
     11358+++ vim73/runtime/doc/options.txt.orig  2012-07-20 20:31:09.814305726 +0000
    1109211359@@ -0,0 +1,8079 @@
    1109311360+*options.txt*  For Vim version 7.3.  Last change: 2010 Aug 15
     
    1917219439+ vim:tw=78:ts=8:ft=help:norl:
    1917319440diff -Naur vim73.orig/runtime/doc/os_risc.txt vim73/runtime/doc/os_risc.txt
    19174 --- vim73.orig/runtime/doc/os_risc.txt  2012-06-03 23:09:53.024009292 +0000
    19175 +++ vim73/runtime/doc/os_risc.txt       2012-06-03 23:09:54.112038245 +0000
     19441--- vim73.orig/runtime/doc/os_risc.txt  2010-08-15 12:23:21.000000000 +0000
     19442+++ vim73/runtime/doc/os_risc.txt       2012-07-20 20:31:10.844306469 +0000
    1917619443@@ -1,322 +1,12 @@
    1917719444-*os_risc.txt*   For Vim version 7.3.  Last change: 2010 Aug 07
     
    1950119768  vim:tw=78:ts=8:ft=help:norl:
    1950219769diff -Naur vim73.orig/runtime/doc/os_win32.txt vim73/runtime/doc/os_win32.txt
    19503 --- vim73.orig/runtime/doc/os_win32.txt 2012-06-03 23:09:53.016009080 +0000
    19504 +++ vim73/runtime/doc/os_win32.txt      2012-06-03 23:09:54.368045058 +0000
     19770--- vim73.orig/runtime/doc/os_win32.txt 2010-08-15 12:23:21.000000000 +0000
     19771+++ vim73/runtime/doc/os_win32.txt      2012-07-20 20:31:11.650973718 +0000
    1950519772@@ -313,6 +313,37 @@
    1950619773    with :!start do not get passed Vim's open file handles, which means they do
     
    1954219809    Vim doesn't wait for it to finish!  Help!
    1954319810diff -Naur vim73.orig/runtime/doc/pattern.txt vim73/runtime/doc/pattern.txt
    19544 --- vim73.orig/runtime/doc/pattern.txt  2012-06-03 23:09:53.020009186 +0000
    19545 +++ vim73/runtime/doc/pattern.txt       2012-06-03 23:09:54.508048784 +0000
     19811--- vim73.orig/runtime/doc/pattern.txt  2010-08-15 12:23:21.000000000 +0000
     19812+++ vim73/runtime/doc/pattern.txt       2012-07-20 20:31:12.107640712 +0000
    1954619813@@ -1027,11 +1027,9 @@
    1954719814          These items only work for 8-bit characters.
     
    1955819825        - A collation element.  This currently simply accepts a single
    1955919826          character in the form:
     19827diff -Naur vim73.orig/runtime/doc/sign.txt vim73/runtime/doc/sign.txt
     19828--- vim73.orig/runtime/doc/sign.txt     2010-08-15 12:23:22.000000000 +0000
     19829+++ vim73/runtime/doc/sign.txt  2012-07-20 20:31:18.004311609 +0000
     19830@@ -150,8 +150,14 @@
     19831                Remove the previously placed sign {id} from file {fname}.
     19832                See remark above about {fname} |:sign-fname|.
     19833 
     19834+:sign unplace * file={fname}
     19835+               Remove all placed signs in file {fname}.
     19836+
     19837 :sign unplace {id} buffer={nr}
     19838-               Same, but use buffer {nr}.
     19839+               Remove the previously placed sign {id} from buffer {nr}.
     19840+
     19841+:sign unplace * buffer={nr}
     19842+               Remove all placed signs in buffer {nr}.
     19843 
     19844 :sign unplace {id}
     19845                Remove the previously placed sign {id} from all files it
     19846diff -Naur vim73.orig/runtime/doc/tabpage.txt vim73/runtime/doc/tabpage.txt
     19847--- vim73.orig/runtime/doc/tabpage.txt  2010-08-15 12:23:22.000000000 +0000
     19848+++ vim73/runtime/doc/tabpage.txt       2012-07-20 20:31:17.920978216 +0000
     19849@@ -173,10 +173,20 @@
     19850 REORDERING TAB PAGES:
     19851 
     19852 :tabm[ove] [N]                                         *:tabm* *:tabmove*
     19853+:[N]tabm[ove]
     19854                Move the current tab page to after tab page N.  Use zero to
     19855                make the current tab page the first one.  Without N the tab
     19856                page is made the last one.
     19857 
     19858+:tabm[ove] +[N]
     19859+:tabm[ove] -[N]
     19860+               Move the current tab page N places to the right (with +) or to
     19861+               the left (with -).
     19862+
     19863+Note that although it is possible to move a tab behind the N-th one by using
     19864+:Ntabmove, it is impossible to move it by N places by using :+Ntabmove. For
     19865+clarification what +N means in this context see |[range]|.
     19866+
     19867 
     19868 LOOPING OVER TAB PAGES:
     19869 
    1956019870diff -Naur vim73.orig/runtime/filetype.vim vim73/runtime/filetype.vim
    19561 --- vim73.orig/runtime/filetype.vim     2012-06-03 23:09:52.976008014 +0000
    19562 +++ vim73/runtime/filetype.vim  2012-06-03 23:09:55.356071352 +0000
     19871--- vim73.orig/runtime/filetype.vim     2010-08-03 20:44:00.000000000 +0000
     19872+++ vim73/runtime/filetype.vim  2012-07-20 20:31:14.564309144 +0000
    1956319873@@ -2475,17 +2475,19 @@
    1956419874 " detected filetypes.
     
    2210322413+unlet s:cpo_save
    2210422414diff -Naur vim73.orig/runtime/ftplugof.vim vim73/runtime/ftplugof.vim
    22105 --- vim73.orig/runtime/ftplugof.vim     2012-06-03 23:09:53.028009398 +0000
    22106 +++ vim73/runtime/ftplugof.vim  2012-06-03 23:09:54.868058365 +0000
     22415--- vim73.orig/runtime/ftplugof.vim     2010-05-15 11:03:57.000000000 +0000
     22416+++ vim73/runtime/ftplugof.vim  2012-07-20 20:31:13.030974711 +0000
    2210722417@@ -1,11 +1,13 @@
    2210822418 " Vim support file to switch off loading plugins for file types
     
    2212422434diff -Naur vim73.orig/src/GvimExt/Make_cyg.mak vim73/src/GvimExt/Make_cyg.mak
    2212522435--- vim73.orig/src/GvimExt/Make_cyg.mak 1970-01-01 00:00:00.000000000 +0000
    22126 +++ vim73/src/GvimExt/Make_cyg.mak      2012-06-03 23:09:54.804056662 +0000
     22436+++ vim73/src/GvimExt/Make_cyg.mak      2012-07-20 20:31:12.867641259 +0000
    2212722437@@ -0,0 +1,77 @@
    2212822438+# Project: gvimext
     
    2220422514+       -$(DEL)  $(OBJ) $(RES) $(DLL)
    2220522515diff -Naur vim73.orig/src/GvimExt/Make_ming.mak vim73/src/GvimExt/Make_ming.mak
    22206 --- vim73.orig/src/GvimExt/Make_ming.mak        2012-06-03 23:09:52.944007163 +0000
    22207 +++ vim73/src/GvimExt/Make_ming.mak     2012-06-03 23:09:54.804056662 +0000
     22516--- vim73.orig/src/GvimExt/Make_ming.mak        2010-05-15 11:04:10.000000000 +0000
     22517+++ vim73/src/GvimExt/Make_ming.mak     2012-07-20 20:31:12.867641259 +0000
    2220822518@@ -1,6 +1,6 @@
    2220922519 # Project: gvimext
     
    2227322583-
    2227422584diff -Naur vim73.orig/src/GvimExt/gvimext.cpp vim73/src/GvimExt/gvimext.cpp
    22275 --- vim73.orig/src/GvimExt/gvimext.cpp  2012-06-03 23:09:52.944007163 +0000
    22276 +++ vim73/src/GvimExt/gvimext.cpp       2012-06-03 23:09:54.580050701 +0000
     22585--- vim73.orig/src/GvimExt/gvimext.cpp  2010-07-10 17:21:34.000000000 +0000
     22586+++ vim73/src/GvimExt/gvimext.cpp       2012-07-20 20:31:12.297640849 +0000
    2227722587@@ -142,6 +142,7 @@
    2227822588 static int dyn_libintl_init(char *dir);
     
    2235922669                &pi)            // Pointer to PROCESS_INFORMATION structure.
    2236022670diff -Naur vim73.orig/src/GvimExt/gvimext.def vim73/src/GvimExt/gvimext.def
    22361 --- vim73.orig/src/GvimExt/gvimext.def  2012-06-03 23:09:52.944007163 +0000
    22362 +++ vim73/src/GvimExt/gvimext.def       2012-06-03 23:09:54.328043994 +0000
     22671--- vim73.orig/src/GvimExt/gvimext.def  2010-05-15 11:04:10.000000000 +0000
     22672+++ vim73/src/GvimExt/gvimext.def       2012-07-20 20:31:11.500973609 +0000
    2236322673@@ -1,7 +1,7 @@
    2236422674 ;gvimdef.def : Declares the module parameters for the DLL.
     
    2237122681     DllCanUnloadNow private
    2237222682diff -Naur vim73.orig/src/GvimExt/gvimext_ming.def vim73/src/GvimExt/gvimext_ming.def
    22373 --- vim73.orig/src/GvimExt/gvimext_ming.def     2012-06-03 23:09:52.944007163 +0000
    22374 +++ vim73/src/GvimExt/gvimext_ming.def  2012-06-03 23:09:54.328043994 +0000
     22683--- vim73.orig/src/GvimExt/gvimext_ming.def     2010-05-15 11:04:10.000000000 +0000
     22684+++ vim73/src/GvimExt/gvimext_ming.def  2012-07-20 20:31:11.500973609 +0000
    2237522685@@ -3,7 +3,7 @@
    2237622686 ;Hence this is the same file as gvimext.def with private removed
     
    2238322693     DllCanUnloadNow = DllCanUnloadNow@0
    2238422694diff -Naur vim73.orig/src/INSTALL vim73/src/INSTALL
    22385 --- vim73.orig/src/INSTALL      2012-06-03 23:09:52.940007057 +0000
    22386 +++ vim73/src/INSTALL   2012-06-03 23:09:54.124038565 +0000
     22695--- vim73.orig/src/INSTALL      2010-06-26 04:04:51.000000000 +0000
     22696+++ vim73/src/INSTALL   2012-07-20 20:31:10.884306499 +0000
    2238722697@@ -6,9 +6,8 @@
    2238822698 Contents:
     
    2243422744 [NOTE: this is quite old, it might not work anymore]
    2243522745diff -Naur vim73.orig/src/INSTALLpc.txt vim73/src/INSTALLpc.txt
    22436 --- vim73.orig/src/INSTALLpc.txt        2012-06-03 23:09:52.948007269 +0000
    22437 +++ vim73/src/INSTALLpc.txt     2012-06-03 23:09:55.528075930 +0000
     22746--- vim73.orig/src/INSTALLpc.txt        2010-05-24 12:58:06.000000000 +0000
     22747+++ vim73/src/INSTALLpc.txt     2012-07-20 20:31:15.140976226 +0000
    2243822748@@ -11,9 +11,9 @@
    2243922749 this, then you will get the default behavior as is documented, which should
     
    2254822858+Happy Vimming!
    2254922859diff -Naur vim73.orig/src/Make_cyg.mak vim73/src/Make_cyg.mak
    22550 --- vim73.orig/src/Make_cyg.mak 2012-06-03 23:09:52.920006524 +0000
    22551 +++ vim73/src/Make_cyg.mak      2012-06-03 23:09:54.804056662 +0000
     22860--- vim73.orig/src/Make_cyg.mak 2010-08-02 19:09:22.000000000 +0000
     22861+++ vim73/src/Make_cyg.mak      2012-07-20 20:31:17.854311501 +0000
    2255222862@@ -1,6 +1,6 @@
    2255322863 #
    2255422864 # Makefile for VIM on Win32, using Cygnus gcc
    2255522865-# Last updated by Dan Sharp.  Last Change: 2010 Feb 24
    22556 +# Last updated by Dan Sharp.  Last Change: 2010 Nov 03
     22866+# Last updated by Dan Sharp.  Last Change: 2012 Jun 30
    2255722867 #
    2255822868 # Also read INSTALLpc.txt!
     
    2256622876 #   LUA_VER        define to version of Lua being used (51)
    2256722877 #   DYNAMIC_LUA  no or yes: use yes to load the Lua DLL dynamically (yes)
     22878@@ -47,7 +48,7 @@
     22879 #              -L/lib/w32api to EXTRA_LIBS.
     22880 # POSTSCRIPT   no or yes: set to yes for PostScript printing (no)
     22881 # FEATURES     TINY, SMALL, NORMAL, BIG or HUGE (BIG)
     22882-# WINVER       Lowest Win32 version to support.  (0x0400)
     22883+# WINVER       Lowest Win32 version to support.  (0x0500)
     22884 # CSCOPE       no or yes: to include cscope interface support (yes)
     22885 # OPTIMIZE     SPACE, SPEED, or MAXSPEED: set optimization level (MAXSPEED)
     22886 # NETBEANS     no or yes: to include netbeans interface support (yes when GUI
     22887@@ -84,7 +85,7 @@
     22888 endif
     22889 
     22890 ifndef WINVER
     22891-WINVER = 0x0400
     22892+WINVER = 0x0500
     22893 endif
     22894 
     22895 ifndef CSCOPE
    2256822896@@ -254,16 +255,22 @@
    2256922897 MZSCHEME_GENERATE_BASE=no
     
    2261122939        -$(DEL) obj$(DIRSLASH)*.o
    2261222940diff -Naur vim73.orig/src/Make_ming.mak vim73/src/Make_ming.mak
    22613 --- vim73.orig/src/Make_ming.mak        2012-06-03 23:09:52.944007163 +0000
    22614 +++ vim73/src/Make_ming.mak     2012-06-03 23:09:55.744081677 +0000
     22941--- vim73.orig/src/Make_ming.mak        2010-08-02 19:09:43.000000000 +0000
     22942+++ vim73/src/Make_ming.mak     2012-07-20 20:31:17.854311501 +0000
    2261522943@@ -14,9 +14,11 @@
    2261622944 # it's just run out of memory or something.  Run again, and it will continue
     
    2263122959 OLE=no
    2263222960 # Set the default $(WINVER) to make it work with pre-Win2k
     22961-WINVER = 0x0400
    2263322962+ifndef WINVER
    22634  WINVER = 0x0400
     22963+WINVER = 0x0500
    2263522964+endif
    2263622965 # Set to yes to enable Cscope support
     
    2277823107 $(OUTDIR)/netbeans.o:  netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
    2277923108diff -Naur vim73.orig/src/Make_mvc.mak vim73/src/Make_mvc.mak
    22780 --- vim73.orig/src/Make_mvc.mak 2012-06-03 23:09:52.924006631 +0000
    22781 +++ vim73/src/Make_mvc.mak      2012-06-03 23:09:55.492074972 +0000
     23109--- vim73.orig/src/Make_mvc.mak 2010-07-18 19:24:20.000000000 +0000
     23110+++ vim73/src/Make_mvc.mak      2012-07-20 20:31:14.987642782 +0000
    2278223111@@ -380,9 +380,6 @@
    2278323112 !if "$(_NMAKE_VER)" == "10.00.30319.01"
     
    2290123230 
    2290223231diff -Naur vim73.orig/src/Make_ro.mak vim73/src/Make_ro.mak
    22903 --- vim73.orig/src/Make_ro.mak  2012-06-03 23:09:52.940007057 +0000
     23232--- vim73.orig/src/Make_ro.mak  2010-05-15 11:04:08.000000000 +0000
    2290423233+++ vim73/src/Make_ro.mak       1970-01-01 00:00:00.000000000 +0000
    2290523234@@ -1,135 +0,0 @@
     
    2304023369-o.window:      c.window
    2304123370diff -Naur vim73.orig/src/Makefile vim73/src/Makefile
    23042 --- vim73.orig/src/Makefile     2012-06-03 23:09:52.956007482 +0000
    23043 +++ vim73/src/Makefile  2012-06-03 23:09:55.668079655 +0000
     23371--- vim73.orig/src/Makefile     2010-08-15 12:56:15.000000000 +0000
     23372+++ vim73/src/Makefile  2012-07-20 20:31:17.217644379 +0000
    2304423373@@ -29,7 +29,7 @@
    2304523374 #      - Uncomment the line "CONF_OPT_X = --without-x" if you have X11 but
     
    2314723476 #CC= gcc -D_POSIX_SOURCE
    2314823477 #CFLAGS= -O2
    23149 @@ -1047,8 +1052,9 @@
     23478@@ -870,6 +875,10 @@
     23479 #CFLAGS = -O -Qtarget=m88110compat
     23480 #EXTRA_LIBS = -lgen
     23481 
     23482+# The value of QUOTESED comes from auto/config.mk.
     23483+# Uncomment the next line to use the default value.
     23484+# QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
     23485+
     23486 ##################### end of system specific lines ################### }}}
     23487 
     23488 ### Names of the programs and targets  {{{1
     23489@@ -1047,8 +1056,9 @@
    2315023490 INSTALL_DATA   = cp
    2315123491 INSTALL_DATA_R = cp -r
     
    2315823498 ### Permissions for binaries  {{{1
    2315923499 BINMOD = 755
    23160 @@ -1321,15 +1327,15 @@
     23500@@ -1321,15 +1331,15 @@
    2316123501 .SUFFIXES: .c .o .pro
    2316223502 
     
    2317323513 
    2317423514-LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
    23175 +LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
     23515+LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
    2317623516 
    2317723517 LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)="
    2317823518 
    23179 @@ -1352,7 +1358,8 @@
     23519@@ -1352,7 +1362,8 @@
    2318023520           $(PYTHON3_LIBS) \
    2318123521           $(TCL_LIBS) \
     
    2318723527 # abbreviations
    2318823528 DEST_BIN = $(DESTDIR)$(BINDIR)
    23189 @@ -1474,8 +1481,15 @@
     23529@@ -1474,8 +1485,15 @@
    2319023530            if_python.c if_python3.c if_tcl.c if_ruby.c if_sniff.c \
    2319123531            gui_beval.c workshop.c wsdebug.c integration.c netbeans.c
     
    2320423544 # Which files to check with lint.  Select one of these three lines.  ALL_SRC
    2320523545 # checks more, but may not work well for checking a GUI that wasn't configured.
    23206 @@ -1486,7 +1500,7 @@
     23546@@ -1486,7 +1504,7 @@
    2320723547 #LINT_SRC = $(ALL_SRC)
    2320823548 #LINT_SRC = $(BASIC_SRC)
     
    2321323553        objects/blowfish.o \
    2321423554        objects/charset.o \
    23215 @@ -1507,10 +1521,8 @@
     23555@@ -1507,10 +1525,8 @@
    2321623556        $(HANGULIN_OBJ) \
    2321723557        objects/if_cscope.o \
     
    2322523565        objects/message.o \
    2322623566        objects/misc1.o \
    23227 @@ -1535,6 +1547,7 @@
     23567@@ -1535,6 +1551,7 @@
    2322823568        objects/term.o \
    2322923569        objects/ui.o \
     
    2323323573        $(GUI_OBJ) \
    2323423574        $(LUA_OBJ) \
    23235 @@ -1549,6 +1562,13 @@
     23575@@ -1549,6 +1566,13 @@
    2323623576        $(NETBEANS_OBJ) \
    2323723577        $(WSDEBUG_OBJ)
     
    2324723587        blowfish.pro \
    2324823588        buffer.pro \
    23249 @@ -1612,7 +1632,7 @@
     23589@@ -1612,7 +1636,7 @@
    2325023590 RSRC_DIR = os_mac_rsrc
    2325123591 
     
    2325623596 # Default target is making the executable and tools
    2325723597 all: $(VIMTARGET) $(TOOLS) languages $(GUI_BUNDLE)
    23258 @@ -1633,7 +1653,8 @@
     23598@@ -1633,7 +1657,8 @@
    2325923599                CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
    2326023600                LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
     
    2326623606                $(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \
    2326723607                $(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
    23268 @@ -1694,11 +1715,12 @@
     23608@@ -1694,11 +1719,12 @@
    2326923609 $(VIMTARGET): auto/config.mk objects $(OBJ) version.c version.h
    2327023610        $(CCC) version.c -o objects/version.o
     
    2328223622 
    2328323623 # Build the language specific files if they were unpacked.
    23284 @@ -1818,6 +1840,15 @@
     23624@@ -1818,6 +1844,15 @@
    2328523625                ln -s $(VIMTARGET) vim; \
    2328623626        fi
     
    2329823638 testclean:
    2329923639        cd testdir; $(MAKE) -f Makefile clean
    23300 @@ -1825,6 +1856,17 @@
     23640@@ -1825,6 +1860,17 @@
    2330123641                cd $(PODIR); $(MAKE) checkclean; \
    2330223642        fi
     
    2331623656 
    2331723657 install_normal: installvim installtools $(INSTALL_LANGS) install-icons
    23318 @@ -2258,6 +2300,7 @@
     23658@@ -2258,6 +2304,7 @@
    2331923659        -rm -f *.o objects/* core $(VIMTARGET).core $(VIMTARGET) vim xxd/*.o
    2332023660        -rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c
     
    2332423664        -rm -rf $(APPDIR)
    2332523665        -rm -rf mzscheme_base.c
    23326 @@ -2291,6 +2334,7 @@
     23666@@ -2291,6 +2338,7 @@
    2332723667                                 ../../testdir/vimrc.unix \
    2332823668                                 ../../testdir/*.in \
     
    2333223672 
    2333323673 # Link needed for doing "make install" in a shadow directory.
    23334 @@ -2532,7 +2576,7 @@
     23674@@ -2367,7 +2415,6 @@
     23675 auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
     23676        CC="$(CC) $(OSDEF_CFLAGS)" srcdir=$(srcdir) sh $(srcdir)/osdef.sh
     23677 
     23678-QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
     23679 auto/pathdef.c: Makefile auto/config.mk
     23680        -@echo creating $@
     23681        -@echo '/* pathdef.c */' > $@
     23682@@ -2532,7 +2579,7 @@
    2333523683        $(CCC) $(PYTHON3_CFLAGS) $(PYTHON3_CFLAGS_EXTRA) -o $@ if_python3.c
    2333623684 
     
    2334123689 objects/if_sniff.o: if_sniff.c
    2334223690        $(CCC) -o $@ if_sniff.c
    23343 @@ -2552,6 +2596,9 @@
     23691@@ -2552,6 +2599,9 @@
    2334423692 objects/memfile.o: memfile.c
    2334523693        $(CCC) -o $@ memfile.c
     
    2335123699        $(CCC) -o $@ memline.c
    2335223700 
    23353 @@ -2870,7 +2917,7 @@
     23701@@ -2870,7 +2920,7 @@
    2335423702 objects/os_unix.o: os_unix.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
    2335523703  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
     
    2336023708  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
    2336123709  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
    23362 @@ -3009,6 +3056,10 @@
     23710@@ -3009,6 +3059,10 @@
    2336323711 objects/pty.o: pty.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
    2336423712  keymap.h term.h macros.h option.h structs.h regexp.h gui.h gui_beval.h \
     
    2337123719  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
    2337223720  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
    23373 @@ -3020,7 +3071,7 @@
     23721@@ -3020,7 +3074,7 @@
    2337423722 objects/if_mzsch.o: if_mzsch.c vim.h auto/config.h feature.h os_unix.h \
    2337523723  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
     
    2338023728  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
    2338123729  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
    23382 @@ -3041,7 +3092,7 @@
     23730@@ -3041,7 +3095,7 @@
    2338323731  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
    2338423732  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
     
    2339023738  arabic.h version.h
    2339123739diff -Naur vim73.orig/src/VisVim/Commands.cpp vim73/src/VisVim/Commands.cpp
    23392 --- vim73.orig/src/VisVim/Commands.cpp  2012-06-03 23:09:52.932006845 +0000
    23393 +++ vim73/src/VisVim/Commands.cpp       2012-06-03 23:09:54.592051020 +0000
     23740--- vim73.orig/src/VisVim/Commands.cpp  2010-05-15 11:04:08.000000000 +0000
     23741+++ vim73/src/VisVim/Commands.cpp       2012-07-20 20:31:12.320974199 +0000
    2339423742@@ -549,7 +549,7 @@
    2339523743        if (g_bNewTabs)
     
    2341223760                else
    2341323761diff -Naur vim73.orig/src/arabic.c vim73/src/arabic.c
    23414 --- vim73.orig/src/arabic.c     2012-06-03 23:09:52.924006631 +0000
    23415 +++ vim73/src/arabic.c  2012-06-03 23:09:55.924086467 +0000
     23762--- vim73.orig/src/arabic.c     2010-05-15 11:04:09.000000000 +0000
     23763+++ vim73/src/arabic.c  2012-07-20 20:31:16.377643778 +0000
    2341623764@@ -1066,7 +1066,7 @@
    2341723765 
     
    2342423772        (*mb_char2bytes)(curr_c, buf);
    2342523773diff -Naur vim73.orig/src/ascii.h vim73/src/ascii.h
    23426 --- vim73.orig/src/ascii.h      2012-06-03 23:09:52.948007269 +0000
    23427 +++ vim73/src/ascii.h   2012-06-03 23:09:55.076063900 +0000
     23774--- vim73.orig/src/ascii.h      2010-05-15 11:04:07.000000000 +0000
     23775+++ vim73/src/ascii.h   2012-07-20 20:31:13.754308564 +0000
    2342823776@@ -123,7 +123,7 @@
    2342923777 #define DCS            0x90    /* Device Control String */
     
    2345023798 #endif
    2345123799diff -Naur vim73.orig/src/auto/config.mk vim73/src/auto/config.mk
    23452 --- vim73.orig/src/auto/config.mk       2012-06-03 23:09:52.948007269 +0000
     23800--- vim73.orig/src/auto/config.mk       2010-08-15 13:02:25.000000000 +0000
    2345323801+++ vim73/src/auto/config.mk    1970-01-01 00:00:00.000000000 +0000
    2345423802@@ -1,5 +0,0 @@
     
    2345923807-VIEWNAME = view
    2346023808diff -Naur vim73.orig/src/auto/configure vim73/src/auto/configure
    23461 --- vim73.orig/src/auto/configure       2012-06-03 23:09:52.948007269 +0000
    23462 +++ vim73/src/auto/configure    2012-06-03 23:09:55.372071777 +0000
     23809--- vim73.orig/src/auto/configure       2010-08-13 14:17:15.000000000 +0000
     23810+++ vim73/src/auto/configure    2012-07-20 20:31:17.054310930 +0000
    2346323811@@ -593,6 +593,7 @@
    2346423812 
     
    2351523863   CFLAGS="-O"
    2351623864   test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
    23517 @@ -4726,6 +4743,9 @@
     23865@@ -4409,15 +4426,18 @@
     23866                  echo ""
     23867                  echo "------------------------------------------"
     23868                  echo " On z/OS Unix, the environment variable"
     23869-                 echo " __CC_${ccn}MODE must be set to \"1\"!"
     23870+                 echo " _CC_${ccn}MODE must be set to \"1\"!"
     23871                  echo " Do:"
     23872                  echo "    export _CC_${ccn}MODE=1"
     23873                  echo " and then call configure again."
     23874                  echo "------------------------------------------"
     23875                  exit 1
     23876                fi
     23877-               CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
     23878-                LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
     23879+               # Set CFLAGS for configure process.
     23880+               # This will be reset later for config.mk.
     23881+               # Use haltonmsg to force error for missing H files.
     23882+               CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
     23883+               LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
     23884                { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
     23885 $as_echo "yes" >&6; }
     23886                ;;
     23887@@ -4726,6 +4746,9 @@
    2351823888       LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
    2351923889     fi
     
    2352523895 
    2352623896 
    23527 @@ -4862,16 +4882,36 @@
     23897@@ -4862,16 +4885,36 @@
    2352823898       else
    2352923899        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
     
    2356723937       fi
    2356823938     fi
    23569 @@ -4883,12 +4923,22 @@
     23939@@ -4883,12 +4926,22 @@
    2357023940     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
    2357123941       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
     
    2359123961         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
    2359223962       fi
    23593 @@ -4901,10 +4951,20 @@
     23963@@ -4901,10 +4954,20 @@
    2359423964     fi
    2359523965     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
     
    2361423984     fi
    2361523985     MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
    23616 @@ -5099,6 +5159,10 @@
     23986@@ -5099,6 +5162,10 @@
    2361723987       PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
    2361823988     fi
     
    2362523995 
    2362623996 
    23627 @@ -5285,9 +5349,9 @@
     23997@@ -5285,9 +5352,9 @@
    2362823998 
    2362923999        PYTHON_LIBS="${vi_cv_path_python_plibs}"
     
    2363724007        PYTHON_SRC="if_python.c"
    2363824008                if test "x$MACOSX" = "xyes"; then
    23639 @@ -5298,7 +5362,7 @@
     24009@@ -5298,7 +5365,7 @@
    2364024010        if test "${vi_cv_var_python_version}" = "1.4"; then
    2364124011           PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
     
    2364624016                                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
    2364724017 $as_echo_n "checking if -pthread should be used... " >&6; }
    23648 @@ -5388,6 +5452,10 @@
     24018@@ -5388,6 +5455,10 @@
    2364924019 $as_echo "too old" >&6; }
    2365024020     fi
     
    2365724027 
    2365824028 
    23659 @@ -5464,6 +5532,23 @@
     24029@@ -5464,6 +5535,23 @@
    2366024030 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_version" >&5
    2366124031 $as_echo "$vi_cv_var_python3_version" >&6; }
     
    2368124051 $as_echo_n "checking Python's install prefix... " >&6; }
    2368224052 if test "${vi_cv_path_python3_pfx+set}" = set; then :
    23683 @@ -5514,9 +5599,13 @@
     24053@@ -5514,9 +5602,13 @@
    2368424054 else
    2368524055 
     
    2369624066            vi_cv_path_python3_conf="$d"
    2369724067          fi
    23698 @@ -5545,13 +5634,12 @@
     24068@@ -5545,13 +5637,12 @@
    2369924069        @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
    2370024070        @echo "python3_LIBS='$(LIBS)'"
     
    2371224082           vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
    2371324083 
    23714 @@ -5560,9 +5648,9 @@
     24084@@ -5560,9 +5651,9 @@
    2371524085 
    2371624086       PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
     
    2372424094       PYTHON3_SRC="if_python3.c"
    2372524095             if test "x$MACOSX" = "xyes"; then
    23726 @@ -5667,12 +5755,12 @@
     24096@@ -5667,12 +5758,12 @@
    2372724097 
    2372824098   $as_echo "#define DYNAMIC_PYTHON3 1" >>confdefs.h
     
    2374124111   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
    2374224112 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
    23743 @@ -5689,15 +5777,17 @@
     24113@@ -5689,15 +5780,17 @@
    2374424114      * Only the first pyhton version used will be switched on.
    2374524115      */
     
    2376024130           needed = (*simple)("import termios") == -1;
    2376124131           (*final)();
    23762 @@ -5709,7 +5799,7 @@
     24132@@ -5709,7 +5802,7 @@
    2376324133     int main(int argc, char** argv)
    2376424134     {
     
    2376924139       return !not_needed;
    2377024140     }
    23771 @@ -5726,8 +5816,76 @@
     24141@@ -5726,8 +5819,76 @@
    2377224142   conftest.$ac_objext conftest.beam conftest.$ac_ext
    2377324143 fi
    2377424144 
    2377524145+
    23776    CFLAGS=$cflags_save
    23777    LDFLAGS=$ldflags_save
     24146+  CFLAGS=$cflags_save
     24147+  LDFLAGS=$ldflags_save
    2377824148+
    2377924149+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL for Python3" >&5
     
    2384024210+
    2384124211+
    23842 +  CFLAGS=$cflags_save
    23843 +  LDFLAGS=$ldflags_save
     24212   CFLAGS=$cflags_save
     24213   LDFLAGS=$ldflags_save
    2384424214+
    2384524215   PYTHON_SRC="if_python.c"
    2384624216   PYTHON_OBJ="objects/if_python.o"
    2384724217   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
    23848 @@ -6085,6 +6243,9 @@
     24218@@ -6085,6 +6246,9 @@
    2384924219 $as_echo "too old; need Tcl version 8.0 or later" >&6; }
    2385024220     fi
     
    2385624226 
    2385724227 
    23858 @@ -6103,20 +6264,20 @@
     24228@@ -6103,20 +6267,20 @@
    2385924229 
    2386024230 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_rubyinterp" >&5
     
    2388024250 set dummy $RUBY_CMD; ac_word=$2
    2388124251 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
    23882 @@ -6181,17 +6342,14 @@
     24252@@ -6181,17 +6345,14 @@
    2388324253          RUBY_LIBS="$rubylibs"
    2388424254        fi
     
    2390624276 
    2390724277        if test "X$librubyarg" != "X"; then
    23908 @@ -6209,6 +6367,13 @@
     24278@@ -6209,6 +6370,13 @@
    2390924279        RUBY_PRO="if_ruby.pro"
    2391024280        $as_echo "#define FEAT_RUBY 1" >>confdefs.h
     
    2392024290        { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found; disabling Ruby" >&5
    2392124291 $as_echo "not found; disabling Ruby" >&6; }
    23922 @@ -6218,6 +6383,10 @@
     24292@@ -6218,6 +6386,10 @@
    2392324293 $as_echo "too old; need Ruby version 1.6.0 or later" >&6; }
    2392424294     fi
     
    2393124301 
    2393224302 
    23933 @@ -9768,9 +9937,9 @@
     24303@@ -8528,8 +8700,13 @@
     24304 if test -z "$SKIP_MOTIF"; then
     24305   cppflags_save=$CPPFLAGS
     24306   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
     24307-  for ac_header in Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
     24308-                  Xm/UnhighlightT.h Xm/Notebook.h
     24309+  if test "$zOSUnix" = "yes"; then
     24310+       xmheader="Xm/Xm.h"
     24311+  else
     24312+       xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
     24313+          Xm/UnhighlightT.h Xm/Notebook.h"
     24314+  fi
     24315+  for ac_header in $xmheader
     24316 do :
     24317   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
     24318 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
     24319@@ -8544,7 +8721,7 @@
     24320 done
     24321 
     24322 
     24323-  if test $ac_cv_header_Xm_XpmP_h = yes; then
     24324+  if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
     24325         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmAttributes_21 in Xm/XpmP.h" >&5
     24326 $as_echo_n "checking for XpmAttributes_21 in Xm/XpmP.h... " >&6; }
     24327     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
     24328@@ -9768,9 +9945,9 @@
    2393424329 else
    2393524330   { $as_echo "$as_me:${as_lineno-$LINENO}: result: empty: automatic terminal library selection" >&5
     
    2394424339   for libname in $tlibs; do
    2394524340     as_ac_Lib=`$as_echo "ac_cv_lib_${libname}''_tgetent" | $as_tr_sh`
    23946 @@ -11159,7 +11328,47 @@
     24341@@ -11159,7 +11336,47 @@
    2394724342 rm -f core conftest.err conftest.$ac_objext \
    2394824343     conftest$ac_exeext conftest.$ac_ext
     
    2399324388 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
    2399424389 /* end confdefs.h.  */
    23995 @@ -11186,6 +11395,8 @@
     24390@@ -11186,6 +11403,8 @@
    2399624391 fi
    2399724392 rm -f core conftest.err conftest.$ac_objext \
     
    2400224397 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AIX ACL support" >&5
    2400324398 $as_echo_n "checking for AIX ACL support... " >&6; }
    24004 @@ -11642,7 +11853,8 @@
     24399@@ -11642,7 +11861,8 @@
    2400524400 { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
    2400624401 $as_echo_n "checking uint32_t is 32 bits... " >&6; }
     
    2401224407   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
    2401324408 /* end confdefs.h.  */
    24014 @@ -11915,6 +12127,10 @@
     24409@@ -11915,6 +12135,10 @@
    2401524410 test -f tags && mv tags tags.save
    2401624411 if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
     
    2402324418   TAGPRG="ctags"
    2402424419   (eval etags     /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
    24025 @@ -12344,10 +12560,10 @@
     24420@@ -12344,10 +12568,10 @@
    2402624421     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
    2402724422 $as_echo "no" >&6; }
     
    2403624431 $as_echo "yes" >&6; }
    2403724432   else
    24038 @@ -12357,6 +12573,23 @@
     24433@@ -12357,6 +12581,28 @@
    2403924434 fi
    2404024435 
     
    2405724452+
    2405824453+
     24454+# IBM z/OS reset CFLAGS for config.mk
     24455+if test "$zOSUnix" = "yes"; then
     24456+       CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
     24457+fi
     24458+
    2405924459 ac_config_files="$ac_config_files auto/config.mk:config.mk.in"
    2406024460 
    2406124461 cat >confcache <<\_ACEOF
    2406224462diff -Naur vim73.orig/src/blowfish.c vim73/src/blowfish.c
    24063 --- vim73.orig/src/blowfish.c   2012-06-03 23:09:52.932006845 +0000
    24064 +++ vim73/src/blowfish.c        2012-06-03 23:09:53.732028133 +0000
     24463--- vim73.orig/src/blowfish.c   2010-07-14 14:45:39.000000000 +0000
     24464+++ vim73/src/blowfish.c        2012-07-20 20:31:09.647638940 +0000
    2406524465@@ -413,6 +413,7 @@
    2406624466     int    salt_len;
     
    2408324483     mch_memmove(sbx, sbi, 4 * 4 * 256);
    2408424484diff -Naur vim73.orig/src/buffer.c vim73/src/buffer.c
    24085 --- vim73.orig/src/buffer.c     2012-06-03 23:09:52.920006524 +0000
    24086 +++ vim73/src/buffer.c  2012-06-03 23:09:55.588077525 +0000
    24087 @@ -64,6 +64,9 @@
     24485--- vim73.orig/src/buffer.c     2010-08-13 09:14:35.000000000 +0000
     24486+++ vim73/src/buffer.c  2012-07-20 20:31:18.240978445 +0000
     24487@@ -57,13 +57,15 @@
     24488 
     24489 #if defined(FEAT_SIGNS)
     24490 static void insert_sign __ARGS((buf_T *buf, signlist_T *prev, signlist_T *next, int id, linenr_T lnum, int typenr));
     24491-static void buf_delete_signs __ARGS((buf_T *buf));
     24492 #endif
     24493 
     24494 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
    2408824495 static char *msg_loclist = N_("[Location List]");
    2408924496 static char *msg_qflist = N_("[Quickfix List]");
     
    2409524502 /*
    2409624503  * Open current buffer, that is: open the memfile and read the file into
    24097 @@ -96,7 +99,7 @@
     24504@@ -96,7 +98,7 @@
    2409824505         * There MUST be a memfile, otherwise we can't do anything
    2409924506         * If we can't create one for the current buffer, take another buffer
     
    2410424511            if (curbuf->b_ml.ml_mfp != NULL)
    2410524512                break;
    24106 @@ -316,12 +319,17 @@
     24513@@ -316,12 +318,17 @@
    2410724514  * get a new buffer very soon!
    2410824515  *
     
    2412324530 #ifdef FEAT_AUTOCMD
    2412424531     int                is_curbuf;
    24125 @@ -371,8 +379,12 @@
     24532@@ -369,19 +376,35 @@
     24533     /* When the buffer is no longer in a window, trigger BufWinLeave */
     24534     if (buf->b_nwindows == 1)
    2412624535     {
     24536+       buf->b_closing = TRUE;
    2412724537        apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
    2412824538                                                                  FALSE, buf);
    2412924539-       if (!buf_valid(buf))        /* autocommands may delete the buffer */
    24130 +       /* Return if autocommands deleted the buffer or made it the only one. */
    24131 +       if (!buf_valid(buf) || (abort_if_last && one_window()))
     24540+       if (!buf_valid(buf))
    2413224541+       {
     24542+           /* Autocommands deleted the buffer. */
     24543+aucmd_abort:
    2413324544+           EMSG(_(e_auabort));
    2413424545            return;
    2413524546+       }
     24547+       buf->b_closing = FALSE;
     24548+       if (abort_if_last && one_window())
     24549+           /* Autocommands made this the only window. */
     24550+           goto aucmd_abort;
    2413624551 
    2413724552        /* When the buffer becomes hidden, but is not unloaded, trigger
    2413824553         * BufHidden */
    24139 @@ -380,8 +392,13 @@
     24554        if (!unload_buf)
    2414024555        {
     24556+           buf->b_closing = TRUE;
    2414124557            apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
    2414224558                                                                  FALSE, buf);
    2414324559-           if (!buf_valid(buf))        /* autocmds may delete the buffer */
    24144 +           /* Return if autocommands deleted the buffer or made it the only
    24145 +            * one. */
    24146 +           if (!buf_valid(buf) || (abort_if_last && one_window()))
    24147 +           {
    24148 +               EMSG(_(e_auabort));
    24149                 return;
    24150 +           }
     24560-               return;
     24561+           if (!buf_valid(buf))
     24562+               /* Autocommands deleted the buffer. */
     24563+               goto aucmd_abort;
     24564+           buf->b_closing = FALSE;
     24565+           if (abort_if_last && one_window())
     24566+               /* Autocommands made this the only window. */
     24567+               goto aucmd_abort;
    2415124568        }
    2415224569 # ifdef FEAT_EVAL
    2415324570        if (aborting())     /* autocmds may abort script processing */
    24154 @@ -416,6 +433,14 @@
     24571@@ -416,6 +439,14 @@
    2415524572 #endif
    2415624573 
     
    2416724584 #ifdef FEAT_AUTOCMD
    2416824585     /* Autocommands may have deleted the buffer. */
    24169 @@ -560,6 +585,11 @@
     24586@@ -527,6 +558,7 @@
     24587 #ifdef FEAT_AUTOCMD
     24588     int                is_curbuf = (buf == curbuf);
     24589 
     24590+    buf->b_closing = TRUE;
     24591     apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, FALSE, buf);
     24592     if (!buf_valid(buf))           /* autocommands may delete the buffer */
     24593        return;
     24594@@ -543,6 +575,7 @@
     24595        if (!buf_valid(buf))        /* autocommands may delete the buffer */
     24596            return;
     24597     }
     24598+    buf->b_closing = FALSE;
     24599 # ifdef FEAT_EVAL
     24600     if (aborting())        /* autocmds may abort script processing */
     24601        return;
     24602@@ -560,6 +593,11 @@
    2417024603 #ifdef FEAT_DIFF
    2417124604     diff_buf_delete(buf);          /* Can't use 'diff' for unloaded buffer. */
     
    2417924612 #ifdef FEAT_FOLDING
    2418024613     /* No folds in an empty buffer. */
    24181 @@ -639,6 +669,9 @@
     24614@@ -639,6 +677,9 @@
    2418224615     {
    2418324616        clear_wininfo(buf);             /* including window-local options */
     
    2418924622 #ifdef FEAT_EVAL
    2419024623     vars_clear(&buf->b_vars.dv_hashtab); /* free all internal variables */
    24191 @@ -661,9 +694,6 @@
     24624@@ -661,9 +702,6 @@
    2419224625     vim_free(buf->b_start_fenc);
    2419324626     buf->b_start_fenc = NULL;
     
    2419924632 
    2420024633 /*
    24201 @@ -762,7 +792,7 @@
     24634@@ -762,7 +800,7 @@
    2420224635         * open a new, empty buffer. */
    2420324636        swap_exists_action = SEA_NONE;  /* don't want it again */
     
    2420824641            old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
    2420924642        if (old_curbuf != NULL)
    24210 @@ -1109,7 +1139,7 @@
     24643@@ -1109,7 +1147,7 @@
    2421124644             * if the buffer still exists.
    2421224645             */
     
    2421724650        }
    2421824651 
    24219 @@ -1133,7 +1163,7 @@
     24652@@ -1120,6 +1158,9 @@
     24653         * a window with this buffer.
     24654         */
     24655        while (buf == curbuf
     24656+# ifdef FEAT_AUTOCMD
     24657+                  && !(curwin->w_closing || curwin->w_buffer->b_closing)
     24658+# endif
     24659                   && (firstwin != lastwin || first_tabpage->tp_next != NULL))
     24660            win_close(curwin, FALSE);
     24661 #endif
     24662@@ -1133,7 +1174,7 @@
    2422024663            close_windows(buf, FALSE);
    2422124664 #endif
     
    2422624669        }
    2422724670 
    24228 @@ -1288,9 +1318,12 @@
     24671@@ -1288,9 +1329,12 @@
    2422924672     /* Go to the other buffer. */
    2423024673     set_curbuf(buf, action);
     
    2424124684 
    2424224685 #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
    24243 @@ -1343,6 +1376,10 @@
     24686@@ -1343,6 +1387,10 @@
    2424424687 # endif
    2424524688 #endif
     
    2425224695        if (unload)
    2425324696            close_windows(prevbuf, FALSE);
    24254 @@ -1358,7 +1395,7 @@
     24697@@ -1353,22 +1401,34 @@
     24698        if (buf_valid(prevbuf))
     24699 #endif
     24700        {
     24701+#ifdef FEAT_WINDOWS
     24702+           win_T  *previouswin = curwin;
     24703+#endif
     24704            if (prevbuf == curbuf)
     24705                u_sync(FALSE);
    2425524706            close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
    2425624707                    unload ? action : (action == DOBUF_GOTO
     
    2425824709-                       && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0);
    2425924710+                       && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
     24711+#ifdef FEAT_WINDOWS
     24712+           if (curwin != previouswin && win_valid(previouswin))
     24713+             /* autocommands changed curwin, Grr! */
     24714+             curwin = previouswin;
     24715+#endif
    2426024716        }
    2426124717     }
    2426224718 #ifdef FEAT_AUTOCMD
    24263 @@ -1392,10 +1429,6 @@
     24719     /* An autocommand may have deleted "buf", already entered it (e.g., when
     24720-     * it did ":bunload") or aborted the script processing! */
     24721+     * it did ":bunload") or aborted the script processing!
     24722+     * If curwin->w_buffer is null, enter_buffer() will make it valid again */
     24723+    if ((buf_valid(buf) && buf != curbuf
     24724 # ifdef FEAT_EVAL
     24725-    if (buf_valid(buf) && buf != curbuf && !aborting())
     24726-# else
     24727-    if (buf_valid(buf) && buf != curbuf)
     24728+           && !aborting()
     24729+# endif
     24730+# ifdef FEAT_WINDOWS
     24731+        ) || curwin->w_buffer == NULL
     24732 # endif
     24733+       )
     24734 #endif
     24735        enter_buffer(buf);
     24736 }
     24737@@ -1392,10 +1452,6 @@
    2426424738     foldUpdateAll(curwin);     /* update folds (later). */
    2426524739 #endif
     
    2427224746     curwin->w_buffer = buf;
    2427324747     curbuf = buf;
    24274 @@ -1406,6 +1439,10 @@
     24748@@ -1406,6 +1462,10 @@
    2427524749        diff_buf_add(curbuf);
    2427624750 #endif
     
    2428324757     curwin->w_cursor.lnum = 1;
    2428424758     curwin->w_cursor.col = 0;
    24285 @@ -1805,9 +1842,6 @@
     24759@@ -1687,7 +1747,8 @@
     24760     buf->b_wininfo->wi_win = curwin;
     24761 
     24762 #ifdef FEAT_EVAL
     24763-    init_var_dict(&buf->b_vars, &buf->b_bufvar);    /* init b: variables */
     24764+    /* init b: variables */
     24765+    init_var_dict(&buf->b_vars, &buf->b_bufvar, VAR_SCOPE);
     24766 #endif
     24767 #ifdef FEAT_SYN_HL
     24768     hash_init(&buf->b_s.b_keywtab);
     24769@@ -1805,9 +1866,6 @@
    2428624770 #ifdef FEAT_AUTOCMD
    2428724771     clear_string_option(&buf->b_p_ft);
     
    2429324777     clear_string_option(&buf->b_p_cink);
    2429424778     clear_string_option(&buf->b_p_cino);
    24295 @@ -1917,9 +1951,7 @@
     24779@@ -1917,9 +1975,7 @@
    2429624780                tabpage_new();
    2429724781            else if (win_split(0, 0) == FAIL)   /* Open in a new window */
     
    2430424788     }
    2430524789 #endif
    24306 @@ -2526,6 +2558,9 @@
     24790@@ -2526,6 +2582,9 @@
    2430724791     if (p_fdls >= 0)
    2430824792        curwin->w_p_fdl = p_fdls;
     
    2431424798 
    2431524799 /*
    24316 @@ -2690,7 +2725,8 @@
     24800@@ -2690,7 +2749,8 @@
    2431724801                vim_free(ffname);
    2431824802                return FAIL;
     
    2432424808        sfname = vim_strsave(sfname);
    2432524809        if (ffname == NULL || sfname == NULL)
    24326 @@ -3175,7 +3211,7 @@
     24810@@ -3175,7 +3235,7 @@
    2432724811            /* format: "fname + (path) (1 of 2) - VIM" */
    2432824812 
     
    2433324817            {
    2433424818                p = transstr(gettail(curbuf->b_fname));
    24335 @@ -3231,7 +3267,7 @@
     24819@@ -3231,7 +3291,7 @@
    2433624820            if (serverName != NULL)
    2433724821            {
     
    2434224826            else
    2434324827 #endif
    24344 @@ -3240,9 +3276,8 @@
     24828@@ -3240,9 +3300,8 @@
    2434524829            if (maxlen > 0)
    2434624830            {
     
    2435424838        }
    2435524839     }
    24356 @@ -3363,7 +3398,8 @@
     24840@@ -3363,7 +3422,8 @@
    2435724841  * or truncated if too long, fillchar is used for all whitespace.
    2435824842  */
     
    2436424848     char_u     *out;           /* buffer to write into != NameBuff */
    2436524849     size_t     outlen;         /* length of out[] */
    24366 @@ -3458,6 +3494,18 @@
     24850@@ -3458,6 +3518,18 @@
    2436724851     prevchar_isitem = FALSE;
    2436824852     for (s = usefmt; *s; )
     
    2438324867            prevchar_isflag = prevchar_isitem = FALSE;
    2438424868 
    24385 @@ -3473,6 +3521,8 @@
     24869@@ -3473,6 +3545,8 @@
    2438624870         * Handle one '%' item.
    2438724871         */
     
    2439224876        {
    2439324877            if (p + 1 >= out + outlen)
    24394 @@ -4355,7 +4405,12 @@
     24878@@ -4355,7 +4429,12 @@
    2439524879 {
    2439624880     int                i;
     
    2440624890     int                use_firstwin = FALSE;   /* use first window for arglist */
    2440724891     int                split_ret = OK;
    24408 @@ -4364,6 +4419,8 @@
     24892@@ -4364,6 +4443,8 @@
    2440924893     buf_T      *buf;
    2441024894     tabpage_T  *tpnext;
     
    2441524899     tabpage_T  *new_curtab = NULL;
    2441624900 
    24417 @@ -4380,6 +4437,15 @@
     24901@@ -4380,6 +4461,15 @@
    2441824902     if (opened == NULL)
    2441924903        return;
     
    2443124915     need_mouse_correct = TRUE;
    2443224916 #endif
    24433 @@ -4401,36 +4467,51 @@
     24917@@ -4392,7 +4482,7 @@
     24918      * When the ":tab" modifier was used do this for all tab pages.
     24919      */
     24920     if (had_tab > 0)
     24921-       goto_tabpage_tp(first_tabpage);
     24922+       goto_tabpage_tp(first_tabpage, TRUE);
     24923     for (;;)
     24924     {
     24925        tpnext = curtab->tp_next;
     24926@@ -4401,36 +4491,51 @@
    2443424927            wpnext = wp->w_next;
    2443524928            buf = wp->w_buffer;
     
    2446124954+
    2446224955+                       if (old_curtab == curtab)
    24463                         {
    24464 -                           opened[i] = TRUE;
     24956+                       {
    2446524957+                           ++weight;
    2446624958+                           if (old_curwin == wp)
     
    2446924961+
    2447024962+                       if (weight > (int)opened[i])
    24471 +                       {
     24963                        {
     24964-                           opened[i] = TRUE;
    2447224965+                           opened[i] = (char_u)weight;
    2447324966                            if (i == 0)
     
    2449324986                        }
    2449424987                        break;
    24495 @@ -4439,7 +4520,7 @@
     24988@@ -4439,7 +4544,7 @@
    2449624989            }
    2449724990            wp->w_arg_idx = i;
     
    2450224995                if (P_HID(buf) || forceit || buf->b_nwindows > 1
    2450324996                                                        || !bufIsChanged(buf))
    24504 @@ -4461,7 +4542,8 @@
     24997@@ -4461,7 +4566,8 @@
    2450524998                    }
    2450624999 #ifdef FEAT_WINDOWS
     
    2451225005                        use_firstwin = TRUE;
    2451325006 #ifdef FEAT_WINDOWS
    24514 @@ -4495,20 +4577,16 @@
     25007@@ -4488,27 +4594,23 @@
     25008        if (!valid_tabpage(tpnext))
     25009            tpnext = first_tabpage;     /* start all over...*/
     25010 # endif
     25011-       goto_tabpage_tp(tpnext);
     25012+       goto_tabpage_tp(tpnext, TRUE);
     25013     }
     25014 
     25015     /*
    2451525016      * Open a window for files in the argument list that don't have one.
    2451625017      * ARGCOUNT may change while doing this, because of autocommands.
     
    2453725038 #ifdef FEAT_WINDOWS
    2453825039     /* ":drop all" should re-use an empty window to avoid "--remote-tab"
    24539 @@ -4518,11 +4596,11 @@
     25040@@ -4518,11 +4620,11 @@
    2454025041        use_firstwin = TRUE;
    2454125042 #endif
     
    2455125052            /* Move the already present window to below the current window */
    2455225053            if (curwin->w_arg_idx != i)
    24553 @@ -4531,7 +4609,13 @@
     25054@@ -4531,7 +4633,13 @@
    2455425055                {
    2455525056                    if (wpnext->w_arg_idx == i)
     
    2456625067                    }
    2456725068                }
    24568 @@ -4586,6 +4670,14 @@
     25069@@ -4586,9 +4694,17 @@
    2456925070 #ifdef FEAT_AUTOCMD
    2457025071     --autocmd_no_enter;
     
    2457425075+    {
    2457525076+       if (valid_tabpage(last_curtab))
    24576 +           goto_tabpage_tp(last_curtab);
     25077+           goto_tabpage_tp(last_curtab, TRUE);
    2457725078+       if (win_valid(last_curwin))
    2457825079+           win_enter(last_curwin, FALSE);
     
    2458025081     /* to window with first arg */
    2458125082     if (valid_tabpage(new_curtab))
    24582         goto_tabpage_tp(new_curtab);
    24583 @@ -5465,7 +5557,7 @@
     25083-       goto_tabpage_tp(new_curtab);
     25084+       goto_tabpage_tp(new_curtab, TRUE);
     25085     if (win_valid(new_curwin))
     25086        win_enter(new_curwin, FALSE);
     25087 
     25088@@ -4640,7 +4756,7 @@
     25089      */
     25090 #ifdef FEAT_WINDOWS
     25091     if (had_tab > 0)
     25092-       goto_tabpage_tp(first_tabpage);
     25093+       goto_tabpage_tp(first_tabpage, TRUE);
     25094     for (;;)
     25095     {
     25096 #endif
     25097@@ -4658,7 +4774,11 @@
     25098 #ifdef FEAT_WINDOWS
     25099                    || (had_tab > 0 && wp != firstwin)
     25100 #endif
     25101-                   ) && firstwin != lastwin)
     25102+                   ) && firstwin != lastwin
     25103+#ifdef FEAT_AUTOCMD
     25104+                   && !(wp->w_closing || wp->w_buffer->b_closing)
     25105+#endif
     25106+                   )
     25107            {
     25108                win_close(wp, FALSE);
     25109 #ifdef FEAT_AUTOCMD
     25110@@ -4676,7 +4796,7 @@
     25111        /* Without the ":tab" modifier only do the current tab page. */
     25112        if (had_tab == 0 || tpnext == NULL)
     25113            break;
     25114-       goto_tabpage_tp(tpnext);
     25115+       goto_tabpage_tp(tpnext, TRUE);
     25116     }
     25117 #endif
     25118 
     25119@@ -5417,7 +5537,7 @@
     25120 /*
     25121  * Delete signs in buffer "buf".
     25122  */
     25123-    static void
     25124+    void
     25125 buf_delete_signs(buf)
     25126     buf_T      *buf;
     25127 {
     25128@@ -5465,7 +5585,7 @@
    2458425129        buf = firstbuf;
    2458525130     else
     
    2459025135        if (buf->b_signlist != NULL)
    2459125136        {
    24592 @@ -5473,7 +5565,7 @@
     25137@@ -5473,7 +5593,7 @@
    2459325138            MSG_PUTS_ATTR(lbuf, hl_attr(HLF_D));
    2459425139            msg_putchar('\n');
     
    2459925144            vim_snprintf(lbuf, BUFSIZ, _("    line=%ld  id=%d  name=%s"),
    2460025145                           (long)p->lnum, p->id, sign_typenr2name(p->typenr));
    24601 @@ -5606,7 +5698,7 @@
     25146@@ -5606,7 +5726,7 @@
    2460225147     if (!aucmd)                    /* Don't trigger BufDelete autocommands here. */
    2460325148        block_autocmds();
     
    2460925154        unblock_autocmds();
    2461025155diff -Naur vim73.orig/src/charset.c vim73/src/charset.c
    24611 --- vim73.orig/src/charset.c    2012-06-03 23:09:52.948007269 +0000
    24612 +++ vim73/src/charset.c 2012-06-03 23:09:55.892085615 +0000
     25156--- vim73.orig/src/charset.c    2010-08-12 18:16:04.000000000 +0000
     25157+++ vim73/src/charset.c 2012-07-20 20:31:16.277643707 +0000
    2461325158@@ -463,41 +463,42 @@
    2461425159            if (enc_utf8)
     
    2471225257            }
    2471325258diff -Naur vim73.orig/src/config.h.in vim73/src/config.h.in
    24714 --- vim73.orig/src/config.h.in  2012-06-03 23:09:52.956007482 +0000
    24715 +++ vim73/src/config.h.in       2012-06-03 23:09:55.372071777 +0000
     25259--- vim73.orig/src/config.h.in  2010-08-13 13:45:27.000000000 +0000
     25260+++ vim73/src/config.h.in       2012-07-20 20:31:14.604309173 +0000
    2471625261@@ -346,9 +346,15 @@
    2471725262 /* Define if dynamic python does not require RTLD_GLOBAL */
     
    2473925284 
    2474025285diff -Naur vim73.orig/src/config.mk.in vim73/src/config.mk.in
    24741 --- vim73.orig/src/config.mk.in 2012-06-03 23:09:52.952007375 +0000
    24742 +++ vim73/src/config.mk.in      2012-06-03 23:09:53.304016743 +0000
     25286--- vim73.orig/src/config.mk.in 2010-07-17 15:28:51.000000000 +0000
     25287+++ vim73/src/config.mk.in      2012-07-20 20:31:08.224304578 +0000
    2474325288@@ -30,6 +30,7 @@
    2474425289 CPP            = @CPP@
     
    2475025295 X_PRE_LIBS     = @X_PRE_LIBS@
    2475125296diff -Naur vim73.orig/src/configure.in vim73/src/configure.in
    24752 --- vim73.orig/src/configure.in 2012-06-03 23:09:52.948007269 +0000
    24753 +++ vim73/src/configure.in      2012-06-03 23:09:55.368071671 +0000
     25297--- vim73.orig/src/configure.in 2010-08-13 14:15:17.000000000 +0000
     25298+++ vim73/src/configure.in      2012-07-20 20:31:17.044310922 +0000
    2475425299@@ -28,6 +28,16 @@
    2475525300 AC_HEADER_STDC
     
    2476925314 if test -z "$CFLAGS"; then
    2477025315   CFLAGS="-O"
    24771 @@ -491,6 +501,9 @@
     25316@@ -319,15 +329,18 @@
     25317                  echo ""
     25318                  echo "------------------------------------------"
     25319                  echo " On z/OS Unix, the environment variable"
     25320-                 echo " __CC_${ccn}MODE must be set to \"1\"!"
     25321+                 echo " _CC_${ccn}MODE must be set to \"1\"!"
     25322                  echo " Do:"
     25323                  echo "    export _CC_${ccn}MODE=1"
     25324                  echo " and then call configure again."
     25325                  echo "------------------------------------------"
     25326                  exit 1
     25327                fi
     25328-               CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
     25329-                LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
     25330+               # Set CFLAGS for configure process.
     25331+               # This will be reset later for config.mk.
     25332+               # Use haltonmsg to force error for missing H files.
     25333+               CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
     25334+               LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
     25335                AC_MSG_RESULT(yes)
     25336                ;;
     25337     *)         zOSUnix="no";
     25338@@ -491,6 +504,9 @@
    2477225339       LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
    2477325340     fi
     
    2477925346   AC_SUBST(LUA_OBJ)
    2478025347   AC_SUBST(LUA_PRO)
    24781 @@ -568,13 +581,27 @@
     25348@@ -568,13 +584,27 @@
    2478225349        SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
    2478325350       else
     
    2481125378       fi
    2481225379     fi
    24813 @@ -586,13 +613,23 @@
     25380@@ -586,13 +616,23 @@
    2481425381     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
    2481525382       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
     
    2483625403         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
    2483725404       fi
    24838 @@ -607,10 +644,20 @@
     25405@@ -607,10 +647,20 @@
    2483925406     fi
    2484025407     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
     
    2485825425       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
    2485925426     fi
    24860 @@ -747,6 +794,10 @@
     25427@@ -747,6 +797,10 @@
    2486125428       PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
    2486225429     fi
     
    2486925436 AC_SUBST(shrpenv)
    2487025437 AC_SUBST(PERL_SRC)
    24871 @@ -857,9 +908,9 @@
     25438@@ -857,9 +911,9 @@
    2487225439 
    2487325440        PYTHON_LIBS="${vi_cv_path_python_plibs}"
     
    2488125448        PYTHON_SRC="if_python.c"
    2488225449        dnl For Mac OSX 10.2 config.o is included in the Python library.
    24883 @@ -871,7 +922,7 @@
     25450@@ -871,7 +925,7 @@
    2488425451        if test "${vi_cv_var_python_version}" = "1.4"; then
    2488525452           PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
     
    2489025457        dnl On FreeBSD linking with "-pthread" is required to use threads.
    2489125458        dnl _THREAD_SAFE must be used for compiling then.
    24892 @@ -932,6 +983,10 @@
     25459@@ -932,6 +986,10 @@
    2489325460       AC_MSG_RESULT(too old)
    2489425461     fi
     
    2490125468 
    2490225469 AC_SUBST(PYTHON_CONFDIR)
    24903 @@ -958,6 +1013,17 @@
     25470@@ -958,6 +1016,17 @@
    2490425471           ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
    2490525472     ]])
     
    2491925486     AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
    2492025487     [ vi_cv_path_python3_pfx=`
    24921 @@ -987,9 +1053,13 @@
     25488@@ -987,9 +1056,13 @@
    2492225489     AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
    2492325490     [
     
    2493425501            vi_cv_path_python3_conf="$d"
    2493525502          fi
    24936 @@ -1014,14 +1084,13 @@
     25503@@ -1014,14 +1087,13 @@
    2493725504        @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
    2493825505        @echo "python3_LIBS='$(LIBS)'"
     
    2495125518           vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
    2495225519           vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
    24953 @@ -1029,9 +1098,9 @@
     25520@@ -1029,9 +1101,9 @@
    2495425521 
    2495525522       PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
     
    2496325530       PYTHON3_SRC="if_python3.c"
    2496425531       dnl For Mac OSX 10.2 config.o is included in the Python library.
    24965 @@ -1109,11 +1178,12 @@
     25532@@ -1109,11 +1181,12 @@
    2496625533 if test "$python_ok" = yes && test "$python3_ok" = yes; then
    2496725534   AC_DEFINE(DYNAMIC_PYTHON)
     
    2497925546     #include <dlfcn.h>
    2498025547     /* If this program fails, then RTLD_GLOBAL is needed.
    24981 @@ -1122,15 +1192,17 @@
     25548@@ -1122,15 +1195,17 @@
    2498225549      * Only the first pyhton version used will be switched on.
    2498325550      */
     
    2499825565           needed = (*simple)("import termios") == -1;
    2499925566           (*final)();
    25000 @@ -1142,13 +1214,61 @@
     25567@@ -1142,13 +1217,61 @@
    2500125568     int main(int argc, char** argv)
    2500225569     {
     
    2500925576     [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
    2501025577+
    25011    CFLAGS=$cflags_save
    25012    LDFLAGS=$ldflags_save
     25578+  CFLAGS=$cflags_save
     25579+  LDFLAGS=$ldflags_save
    2501325580+
    2501425581+  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
     
    2505525622+    [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
    2505625623+
    25057 +  CFLAGS=$cflags_save
    25058 +  LDFLAGS=$ldflags_save
     25624   CFLAGS=$cflags_save
     25625   LDFLAGS=$ldflags_save
    2505925626+
    2506025627   PYTHON_SRC="if_python.c"
    2506125628   PYTHON_OBJ="objects/if_python.o"
    2506225629   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
    25063 @@ -1290,6 +1410,9 @@
     25630@@ -1290,6 +1413,9 @@
    2506425631       AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
    2506525632     fi
     
    2507125638 AC_SUBST(TCL_SRC)
    2507225639 AC_SUBST(TCL_OBJ)
    25073 @@ -1299,15 +1422,15 @@
     25640@@ -1299,15 +1425,15 @@
    2507425641 
    2507525642 AC_MSG_CHECKING(--enable-rubyinterp argument)
     
    2509125658   if test "X$vi_cv_path_ruby" != "X"; then
    2509225659     AC_MSG_CHECKING(Ruby version)
    25093 @@ -1329,18 +1452,15 @@
     25660@@ -1329,18 +1455,15 @@
    2509425661          RUBY_LIBS="$rubylibs"
    2509525662        fi
     
    2511925686 
    2512025687        if test "X$librubyarg" != "X"; then
    25121 @@ -1360,6 +1480,12 @@
     25688@@ -1360,6 +1483,12 @@
    2512225689        RUBY_OBJ="objects/if_ruby.o"
    2512325690        RUBY_PRO="if_ruby.pro"
     
    2513225699        AC_MSG_RESULT(not found; disabling Ruby)
    2513325700       fi
    25134 @@ -1367,6 +1493,10 @@
     25701@@ -1367,6 +1496,10 @@
    2513525702       AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
    2513625703     fi
     
    2514325710 AC_SUBST(RUBY_SRC)
    2514425711 AC_SUBST(RUBY_OBJ)
    25145 @@ -2529,13 +2659,14 @@
     25712@@ -2248,10 +2381,15 @@
     25713 if test -z "$SKIP_MOTIF"; then
     25714   cppflags_save=$CPPFLAGS
     25715   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
     25716-  AC_CHECK_HEADERS(Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
     25717-                  Xm/UnhighlightT.h Xm/Notebook.h)
     25718+  if test "$zOSUnix" = "yes"; then
     25719+       xmheader="Xm/Xm.h"
     25720+  else
     25721+       xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
     25722+          Xm/UnhighlightT.h Xm/Notebook.h" 
     25723+  fi   
     25724+  AC_CHECK_HEADERS($xmheader)
     25725 
     25726-  if test $ac_cv_header_Xm_XpmP_h = yes; then
     25727+  if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
     25728     dnl Solaris uses XpmAttributes_21, very annoying.
     25729     AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
     25730     AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
     25731@@ -2529,13 +2667,14 @@
    2514625732   AC_MSG_RESULT([empty: automatic terminal library selection])
    2514725733   dnl  On HP-UX 10.10 termcap or termlib should be used instead of
     
    2516125747   for libname in $tlibs; do
    2516225748     AC_CHECK_LIB(${libname}, tgetent,,)
    25163 @@ -2975,6 +3106,7 @@
     25749@@ -2975,6 +3114,7 @@
    2516425750 
    2516525751 dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
     
    2516925755 AC_ARG_ENABLE(acl,
    2517025756        [  --disable-acl           Don't check for ACL support.],
    25171 @@ -2997,6 +3129,7 @@
     25757@@ -2997,6 +3137,7 @@
    2517225758        AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
    2517325759        AC_MSG_RESULT(no))
     
    2517725763 AC_TRY_LINK([
    2517825764 #ifdef HAVE_SYS_ACL_H
    25179 @@ -3004,7 +3137,7 @@
     25765@@ -3004,7 +3145,7 @@
    2518025766 #endif], [acl("foo", GETACLCNT, 0, NULL);
    2518125767        ],
     
    2518625772 AC_MSG_CHECKING(for AIX ACL support)
    2518725773 AC_TRY_LINK([
    25188 @@ -3180,7 +3313,7 @@
     25774@@ -3180,7 +3321,7 @@
    2518925775 }],
    2519025776 AC_MSG_RESULT(ok),
     
    2519525781 dnl Check for memmove() before bcopy(), makes memmove() be used when both are
    2519625782 dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
    25197 @@ -3280,7 +3413,7 @@
     25783@@ -3280,7 +3421,7 @@
    2519825784 AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
    2519925785 
     
    2520425790 dnl -t for typedefs (many ctags have this)
    2520525791 dnl -s for static functions (Elvis ctags only?)
    25206 @@ -3290,6 +3423,10 @@
     25792@@ -3290,6 +3431,10 @@
    2520725793 test -f tags && mv tags tags.save
    2520825794 if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
     
    2521525801   TAGPRG="ctags"
    2521625802   (eval etags     /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
    25217 @@ -3477,9 +3614,10 @@
     25803@@ -3477,9 +3622,10 @@
    2521825804   dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
    2521925805   dnl declared as char x[1] but actually longer.  Introduced in gcc 4.0.
     
    2522725813   else
    2522825814     AC_MSG_RESULT(no)
    25229 @@ -3487,6 +3625,23 @@
     25815@@ -3487,6 +3633,28 @@
    2523025816 fi
    2523125817 AC_SUBST(DEPEND_CFLAGS_FILTER)
     
    2524825834+AC_SUBST(LINK_AS_NEEDED)
    2524925835+
     25836+# IBM z/OS reset CFLAGS for config.mk
     25837+if test "$zOSUnix" = "yes"; then
     25838+       CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
     25839+fi
     25840+
    2525025841 dnl write output files
    2525125842 AC_OUTPUT(auto/config.mk:config.mk.in)
    2525225843 
     25844diff -Naur vim73.orig/src/dehqx.py vim73/src/dehqx.py
     25845--- vim73.orig/src/dehqx.py     2010-05-15 11:04:12.000000000 +0000
     25846+++ vim73/src/dehqx.py  2012-07-20 20:31:17.260977744 +0000
     25847@@ -1,7 +1,10 @@
     25848 # Python script to get both the data and resource fork from a BinHex encoded
     25849 # file.
     25850-# Author: Taro Muraoka
     25851-# Last Change: 2003 Oct 25
     25852+# Author: MURAOKA Taro <koron.kaoriya@gmail.com>
     25853+# Last Change: 2012 Jun 29
     25854+#
     25855+# Copyright (C) 2003,12 MURAOKA Taro <koron.kaoriya@gmail.com>
     25856+# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
     25857 
     25858 import sys
     25859 import binhex
    2525325860diff -Naur vim73.orig/src/diff.c vim73/src/diff.c
    25254 --- vim73.orig/src/diff.c       2012-06-03 23:09:52.920006524 +0000
    25255 +++ vim73/src/diff.c    2012-06-03 23:09:55.880085297 +0000
     25861--- vim73.orig/src/diff.c       2010-07-31 13:35:21.000000000 +0000
     25862+++ vim73/src/diff.c    2012-07-20 20:31:16.204310320 +0000
    2525625863@@ -783,6 +783,15 @@
    2525725864        goto theend;
     
    2529925906            curwin = wp;
    2530025907diff -Naur vim73.orig/src/digraph.c vim73/src/digraph.c
    25301 --- vim73.orig/src/digraph.c    2012-06-03 23:09:52.952007375 +0000
    25302 +++ vim73/src/digraph.c 2012-06-03 23:09:55.156066030 +0000
     25908--- vim73.orig/src/digraph.c    2010-05-15 11:04:09.000000000 +0000
     25909+++ vim73/src/digraph.c 2012-07-20 20:31:14.044308771 +0000
    2530325910@@ -2080,13 +2080,13 @@
    2530425911 /*
     
    2534925956 }
    2535025957diff -Naur vim73.orig/src/edit.c vim73/src/edit.c
    25351 --- vim73.orig/src/edit.c       2012-06-03 23:09:52.952007375 +0000
    25352 +++ vim73/src/edit.c    2012-06-03 23:09:55.928086574 +0000
     25958--- vim73.orig/src/edit.c       2010-08-08 12:55:05.000000000 +0000
     25959+++ vim73/src/edit.c    2012-07-20 20:31:18.157645052 +0000
    2535325960@@ -58,6 +58,10 @@
    2535425961 };
     
    2548926096 #endif
    2549026097-                       c))
    25491 +                       c) && c != Ctrl_RSB))
     26098+                      c) && c != Ctrl_RSB))
    2549226099            {
    2549326100                insert_special(c, FALSE, FALSE);
     
    2559426201  * Show the popup menu with a different set of matches.
    2559526202  * May also search for matches again if the previous search was interrupted.
    25596 @@ -3397,14 +3473,20 @@
     26203@@ -3391,20 +3467,32 @@
     26204        (*mb_char2bytes)(c, buf);
     26205        buf[cc] = NUL;
     26206        ins_char_bytes(buf, cc);
     26207+       if (compl_opt_refresh_always)
     26208+           AppendToRedobuff(buf);
     26209     }
     26210     else
     26211 #endif
     26212+    {
    2559726213        ins_char(c);
     26214+       if (compl_opt_refresh_always)
     26215+           AppendCharToRedobuff(c);
     26216+    }
    2559826217 
    2559926218     /* If we didn't complete finding matches we must search again. */
     
    2560526224-    compl_leader = vim_strnsave(ml_get_curline() + compl_col,
    2560626225+    /* When 'always' is set, don't reset compl_leader. While completing,
    25607 +     * cursor don't point original position, changing compl_leader would
     26226+     * cursor doesn't point original position, changing compl_leader would
    2560826227+     * break redo. */
    2560926228+    if (!compl_opt_refresh_always)
     
    2562026239 
    2562126240 /*
    25622 @@ -3480,11 +3562,7 @@
     26241@@ -3480,11 +3568,7 @@
    2562326242            return;
    2562426243     }
     
    2563326252 }
    2563426253 
    25635 @@ -3653,9 +3731,6 @@
     26254@@ -3653,9 +3737,6 @@
    2563626255             * memory that was used, and make sure we can redo the insert. */
    2563726256            if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
     
    2564326262                 * If any of the original typed text has been changed, eg when
    2564426263                 * ignorecase is set, we must add back-spaces to the redo
    25645 @@ -3666,25 +3741,9 @@
     26264@@ -3666,25 +3747,9 @@
    2564626265                 */
    2564726266                if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
     
    2567126290 
    2567226291 #ifdef FEAT_CINDENT
    25673 @@ -3774,6 +3833,44 @@
     26292@@ -3759,6 +3824,11 @@
     26293            if (want_cindent && in_cinkeys(KEY_COMPLETE, ' ', inindent(0)))
     26294                do_c_expr_indent();
     26295 #endif
     26296+#ifdef FEAT_AUTOCMD
     26297+           /* Trigger the CompleteDone event to give scripts a chance to act
     26298+            * upon the completion. */
     26299+           apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
     26300+#endif
     26301        }
     26302     }
     26303 
     26304@@ -3774,6 +3844,44 @@
    2567426305 }
    2567526306 
     
    2571626347  * (depending on flag) starting from buf and looking for a non-scanned
    2571726348  * buffer (other than curbuf). curbuf is special, if it is called with
    25718 @@ -3829,10 +3926,14 @@
     26349@@ -3829,10 +3937,14 @@
    2571926350     int                type;       /* CTRL_X_OMNI or CTRL_X_FUNCTION */
    2572026351     char_u     *base;
     
    2573226363     funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
    2573326364     if (*funcname == NUL)
    25734 @@ -3843,13 +3944,50 @@
     26365@@ -3843,13 +3955,50 @@
    2573526366     args[1] = base;
    2573626367 
     
    2578826419 #endif /* FEAT_COMPL_FUNC */
    2578926420 
    25790 @@ -3876,6 +4014,33 @@
     26421@@ -3876,6 +4025,33 @@
    2579126422 }
    2579226423 
     
    2582226453  * If the given string is already in the list of completions, then return
    2582326454  * NOTDONE, otherwise add it to the list and return OK.  If there is an error,
    25824 @@ -3889,6 +4054,7 @@
     26455@@ -3889,6 +4065,7 @@
    2582526456     char_u     *word;
    2582626457     int                icase = FALSE;
     
    2583026461 
    2583126462     if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
    25832 @@ -3906,13 +4072,15 @@
     26463@@ -3906,13 +4083,15 @@
    2583326464            icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
    2583426465        if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
     
    2584726478     return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup);
    2584826479 }
    25849 @@ -4403,6 +4571,11 @@
     26480@@ -4403,6 +4582,11 @@
    2585026481     int            found_end = FALSE;
    2585126482     int            advance;
     
    2585926490                        && (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0)
    2586026491     {
    25861 @@ -4994,6 +5167,8 @@
     26492@@ -4994,6 +5178,8 @@
    2586226493            int         col;
    2586326494            char_u      *funcname;
     
    2586826499            /* Call 'completefunc' or 'omnifunc' and get pattern length as a
    2586926500             * string */
    25870 @@ -5009,8 +5184,40 @@
     26501@@ -5009,8 +5195,40 @@
    2587126502            args[0] = (char_u *)"1";
    2587226503            args[1] = NULL;
     
    2590926540            if (col < 0)
    2591026541                col = curs_col;
    25911 @@ -5089,6 +5296,10 @@
     26542@@ -5089,6 +5307,10 @@
    2591226543        else
    2591326544            edit_submode = (char_u *)_(CTRL_X_MSG(ctrl_x_mode));
     
    2592026551        vim_free(compl_orig_text);
    2592126552        compl_orig_text = vim_strnsave(line + compl_col, compl_length);
    25922 @@ -5249,7 +5460,7 @@
     26553@@ -5249,7 +5471,7 @@
    2592326554                                compl_curr_match->cp_number);
    2592426555                edit_submode_extra = match_ref;
     
    2592926560            }
    2593026561        }
    25931 @@ -5691,6 +5902,8 @@
     26562@@ -5558,6 +5780,16 @@
     26563 # define WHITECHAR(cc) vim_iswhite(cc)
     26564 #endif
     26565 
     26566+/*
     26567+ * "flags": INSCHAR_FORMAT - force formatting
     26568+ *         INSCHAR_CTRLV  - char typed just after CTRL-V
     26569+ *         INSCHAR_NO_FEX - don't use 'formatexpr'
     26570+ *
     26571+ *   NOTE: passes the flags value straight through to internal_format() which,
     26572+ *        beside INSCHAR_FORMAT (above), is also looking for these:
     26573+ *         INSCHAR_DO_COM   - format comments
     26574+ *         INSCHAR_COM_LIST - format comments with num list or 2nd line indent
     26575+ */
     26576     void
     26577 insertchar(c, flags, second_indent)
     26578     int                c;                      /* character to insert or NUL */
     26579@@ -5636,7 +5868,7 @@
     26580         * Need to remove existing (middle) comment leader and insert end
     26581         * comment leader.  First, check what comment leader we can find.
     26582         */
     26583-       i = get_leader_len(line = ml_get_curline(), &p, FALSE);
     26584+       i = get_leader_len(line = ml_get_curline(), &p, FALSE, TRUE);
     26585        if (i > 0 && vim_strchr(p, COM_MIDDLE) != NULL) /* Just checking */
     26586        {
     26587            /* Skip middle-comment string */
     26588@@ -5691,6 +5923,8 @@
    2593226589      * Don't do this when 'cindent' or 'indentexpr' is set, because we might
    2593326590      * need to re-indent at a ':', or any other character (but not what
     
    2593826595 #ifdef USE_ON_FLY_SCROLL
    2593926596     dont_scroll = FALSE;               /* allow scrolling here */
    25940 @@ -5708,6 +5921,9 @@
     26597@@ -5708,6 +5942,9 @@
    2594126598 #ifdef FEAT_RIGHTLEFT
    2594226599            && !p_ri
     
    2594826605     {
    2594926606 #define INPUT_BUFLEN 100
    25950 @@ -5902,6 +6118,7 @@
     26607@@ -5795,6 +6032,9 @@
     26608 
     26609 /*
     26610  * Format text at the current insert position.
     26611+ *
     26612+ * If the INSCHAR_COM_LIST flag is present, then the value of second_indent
     26613+ * will be the comment leader length sent to open_line().
     26614  */
     26615     static void
     26616 internal_format(textwidth, second_indent, flags, format_only, c)
     26617@@ -5869,7 +6109,7 @@
     26618 
     26619        /* Don't break until after the comment leader */
     26620        if (do_comments)
     26621-           leader_len = get_leader_len(ml_get_curline(), NULL, FALSE);
     26622+           leader_len = get_leader_len(ml_get_curline(), NULL, FALSE, TRUE);
     26623        else
     26624            leader_len = 0;
     26625 
     26626@@ -5902,6 +6142,7 @@
    2595126627         * Stop at first entered white when 'formatoptions' has 'v'
    2595226628         */
     
    2595626632                    || curwin->w_cursor.col >= Insstart.col)
    2595726633        {
    25958 @@ -6598,11 +6815,7 @@
     26634@@ -6072,23 +6313,59 @@
     26635                + (fo_white_par ? OPENLINE_KEEPTRAIL : 0)
     26636 #ifdef FEAT_COMMENTS
     26637                + (do_comments ? OPENLINE_DO_COM : 0)
     26638+               + ((flags & INSCHAR_COM_LIST) ? OPENLINE_COM_LIST : 0)
     26639 #endif
     26640-               , old_indent);
     26641-       old_indent = 0;
     26642+               , ((flags & INSCHAR_COM_LIST) ? second_indent : old_indent));
     26643+       if (!(flags & INSCHAR_COM_LIST))
     26644+           old_indent = 0;
     26645 
     26646        replace_offset = 0;
     26647        if (first_line)
     26648        {
     26649-           if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
     26650-               second_indent = get_number_indent(curwin->w_cursor.lnum -1);
     26651-           if (second_indent >= 0)
     26652+           if (!(flags & INSCHAR_COM_LIST))
     26653            {
     26654+               /*
     26655+                * This section is for auto-wrap of numeric lists.  When not
     26656+                * in insert mode (i.e. format_lines()), the INSCHAR_COM_LIST
     26657+                * flag will be set and open_line() will handle it (as seen
     26658+                * above).  The code here (and in get_number_indent()) will
     26659+                * recognize comments if needed...
     26660+                */
     26661+               if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
     26662+                   second_indent =
     26663+                                get_number_indent(curwin->w_cursor.lnum - 1);
     26664+               if (second_indent >= 0)
     26665+               {
     26666 #ifdef FEAT_VREPLACE
     26667-               if (State & VREPLACE_FLAG)
     26668-                   change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE);
     26669-               else
     26670+                   if (State & VREPLACE_FLAG)
     26671+                       change_indent(INDENT_SET, second_indent,
     26672+                                                           FALSE, NUL, TRUE);
     26673+                   else
     26674+#endif
     26675+#ifdef FEAT_COMMENTS
     26676+                       if (leader_len > 0 && second_indent - leader_len > 0)
     26677+                   {
     26678+                       int i;
     26679+                       int padding = second_indent - leader_len;
     26680+
     26681+                       /* We started at the first_line of a numbered list
     26682+                        * that has a comment.  the open_line() function has
     26683+                        * inserted the proper comment leader and positioned
     26684+                        * the cursor at the end of the split line.  Now we
     26685+                        * add the additional whitespace needed after the
     26686+                        * comment leader for the numbered list.  */
     26687+                       for (i = 0; i < padding; i++)
     26688+                           ins_str((char_u *)" ");
     26689+                       changed_bytes(curwin->w_cursor.lnum, leader_len);
     26690+                   }
     26691+                   else
     26692+                   {
     26693 #endif
     26694-                   (void)set_indent(second_indent, SIN_CHANGED);
     26695+                       (void)set_indent(second_indent, SIN_CHANGED);
     26696+#ifdef FEAT_COMMENTS
     26697+                   }
     26698+#endif
     26699+               }
     26700            }
     26701            first_line = FALSE;
     26702        }
     26703@@ -6194,7 +6471,7 @@
     26704     /* With the 'c' flag in 'formatoptions' and 't' missing: only format
     26705      * comments. */
     26706     if (has_format_option(FO_WRAP_COMS) && !has_format_option(FO_WRAP)
     26707-                                    && get_leader_len(old, NULL, FALSE) == 0)
     26708+                                    && get_leader_len(old, NULL, FALSE, TRUE) == 0)
     26709        return;
     26710 #endif
     26711 
     26712@@ -6598,11 +6875,7 @@
    2595926713     char_u     *s;
    2596026714 
     
    2596826722     {
    2596926723        s = last_insert;
    25970 @@ -6640,7 +6853,7 @@
     26724@@ -6640,7 +6913,7 @@
    2597126725     char_u     *s;
    2597226726 {
     
    2597726731     int                len;
    2597826732 
    25979 @@ -7202,7 +7415,7 @@
     26733@@ -7202,7 +7475,7 @@
    2598026734     int                cc;
    2598126735 {
     
    2598626740     int                c;
    2598726741 
    25988 @@ -8768,7 +8981,7 @@
     26742@@ -8352,7 +8625,7 @@
     26743     {
     26744        temp = curwin->w_cursor.col;
     26745        if (!can_bs(BS_EOL)             /* only if "eol" included */
     26746-               || do_join(2, FALSE, TRUE) == FAIL)
     26747+               || do_join(2, FALSE, TRUE, FALSE) == FAIL)
     26748            vim_beep();
     26749        else
     26750            curwin->w_cursor.col = temp;
     26751@@ -8533,7 +8806,7 @@
     26752                        ptr[len - 1] = NUL;
     26753                }
     26754 
     26755-               (void)do_join(2, FALSE, FALSE);
     26756+               (void)do_join(2, FALSE, FALSE, FALSE);
     26757                if (temp == NUL && gchar_cursor() != NUL)
     26758                    inc_cursor();
     26759            }
     26760@@ -8768,7 +9041,7 @@
    2598926761      * We can emulate the vi behaviour by pretending there is a dollar
    2599026762      * displayed even when there isn't.
     
    2599526767 
    2599626768 #ifdef FEAT_FOLDING
    25997 @@ -9598,6 +9811,7 @@
     26769@@ -9598,6 +9871,7 @@
    2599826770 {
    2599926771     int            c;
     
    2600326775     pc_status = PC_STATUS_UNSET;
    2600426776     if (redrawing() && !char_avail())
    26005 @@ -9606,6 +9820,7 @@
     26777@@ -9606,6 +9880,7 @@
    2600626778        ins_redraw(FALSE);
    2600726779 
     
    2601126783        add_to_showcmd_c(Ctrl_K);
    2601226784 #endif
    26013 @@ -9622,8 +9837,10 @@
     26785@@ -9622,8 +9897,10 @@
    2601426786     c = plain_vgetc();
    2601526787     --no_mapping;
     
    2602426796     if (IS_SPECIAL(c) || mod_mask)         /* special key */
    2602526797     {
    26026 @@ -9635,6 +9852,7 @@
     26798@@ -9635,6 +9912,7 @@
    2602726799     }
    2602826800     if (c != ESC)
     
    2603226804        {
    2603326805            /* may need to redraw when no more chars available now */
    26034 @@ -9642,11 +9860,9 @@
     26806@@ -9642,11 +9920,9 @@
    2603526807 
    2603626808            if (char2cells(c) == 1)
     
    2604526817 #ifdef FEAT_CMDL_INFO
    2604626818            add_to_showcmd_c(c);
    26047 @@ -9657,8 +9873,10 @@
     26819@@ -9657,8 +9933,10 @@
    2604826820        cc = plain_vgetc();
    2604926821        --no_mapping;
     
    2605826830        {
    2605926831            AppendToRedobuff((char_u *)CTRL_V_STR);
    26060 @@ -9680,7 +9898,7 @@
     26832@@ -9680,7 +9958,7 @@
    2606126833  * Handle CTRL-E and CTRL-Y in Insert mode: copy char from other line.
    2606226834  * Returns the char to be inserted, or NUL if none found.
     
    2606726839     linenr_T   lnum;
    2606826840 {
    26069 @@ -9870,3 +10088,52 @@
     26841@@ -9870,3 +10148,52 @@
    2607026842     validate_virtcol();
    2607126843     return curwin->w_virtcol;
     
    2612126893+#endif
    2612226894diff -Naur vim73.orig/src/eval.c vim73/src/eval.c
    26123 --- vim73.orig/src/eval.c       2012-06-03 23:09:52.952007375 +0000
    26124 +++ vim73/src/eval.c    2012-06-03 23:09:55.932086681 +0000
     26895--- vim73.orig/src/eval.c       2010-08-09 20:12:14.000000000 +0000
     26896+++ vim73/src/eval.c    2012-07-20 20:31:18.337645181 +0000
    2612526897@@ -10,9 +10,6 @@
    2612626898 /*
     
    2615926931 static char_u *skip_var_list __ARGS((char_u *arg, int *var_count, int *semicolon));
    2616026932 static char_u *skip_var_one __ARGS((char_u *arg));
    26161 @@ -433,9 +428,9 @@
     26933@@ -429,31 +424,22 @@
     26934 static int get_lit_string_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
     26935 static int get_list_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
     26936 static int rettv_list_alloc __ARGS((typval_T *rettv));
     26937-static listitem_T *listitem_alloc __ARGS((void));
    2616226938 static void listitem_free __ARGS((listitem_T *item));
    26163  static void listitem_remove __ARGS((list_T *l, listitem_T *item));
     26939-static void listitem_remove __ARGS((list_T *l, listitem_T *item));
    2616426940 static long list_len __ARGS((list_T *l));
    2616526941-static int list_equal __ARGS((list_T *l1, list_T *l2, int ic));
    2616626942-static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic));
    2616726943-static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic));
     26944-static listitem_T *list_find __ARGS((list_T *l, long n));
    2616826945+static int list_equal __ARGS((list_T *l1, list_T *l2, int ic, int recursive));
    2616926946+static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic, int recursive));
    2617026947+static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic, int recursive));
    26171  static listitem_T *list_find __ARGS((list_T *l, long n));
    2617226948 static long list_find_nr __ARGS((list_T *l, long idx, int *errorp));
    2617326949 static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
    26174 @@ -447,13 +442,13 @@
     26950-static void list_append __ARGS((list_T *l, listitem_T *item));
     26951 static int list_append_number __ARGS((list_T *l, varnumber_T n));
     26952-static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
     26953 static int list_extend __ARGS((list_T  *l1, list_T *l2, listitem_T *bef));
     26954 static int list_concat __ARGS((list_T *l1, list_T *l2, typval_T *tv));
    2617526955 static list_T *list_copy __ARGS((list_T *orig, int deep, int copyID));
    26176  static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
     26956-static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
    2617726957 static char_u *list2string __ARGS((typval_T *tv, int copyID));
    2617826958+static int list_join_inner __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo_style, int copyID, garray_T *join_gap));
    2617926959 static int list_join __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo, int copyID));
    2618026960 static int free_unref_items __ARGS((int copyID));
    26181  static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
    26182  static void set_ref_in_list __ARGS((list_T *l, int copyID));
    26183  static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
     26961-static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
     26962-static void set_ref_in_list __ARGS((list_T *l, int copyID));
     26963-static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
    2618426964 static int rettv_dict_alloc __ARGS((typval_T *rettv));
    2618526965-static void dict_unref __ARGS((dict_T *d));
     
    2618726967 static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
    2618826968 static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
    26189 @@ -480,6 +475,7 @@
     26969@@ -480,6 +466,7 @@
    2619026970 static void f_acos __ARGS((typval_T *argvars, typval_T *rettv));
    2619126971 #endif
     
    2619526975 static void f_argc __ARGS((typval_T *argvars, typval_T *rettv));
    2619626976 static void f_argidx __ARGS((typval_T *argvars, typval_T *rettv));
    26197 @@ -608,6 +604,7 @@
     26977@@ -608,6 +595,7 @@
    2619826978 static void f_inputsave __ARGS((typval_T *argvars, typval_T *rettv));
    2619926979 static void f_inputsecret __ARGS((typval_T *argvars, typval_T *rettv));
     
    2620326983 static void f_islocked __ARGS((typval_T *argvars, typval_T *rettv));
    2620426984 static void f_items __ARGS((typval_T *argvars, typval_T *rettv));
    26205 @@ -625,6 +622,9 @@
     26985@@ -625,6 +613,9 @@
    2620626986 static void f_log __ARGS((typval_T *argvars, typval_T *rettv));
    2620726987 static void f_log10 __ARGS((typval_T *argvars, typval_T *rettv));
     
    2621326993 static void f_maparg __ARGS((typval_T *argvars, typval_T *rettv));
    2621426994 static void f_mapcheck __ARGS((typval_T *argvars, typval_T *rettv));
    26215 @@ -646,6 +646,7 @@
     26995@@ -646,6 +637,7 @@
    2621626996 #endif
    2621726997 static void f_nextnonblank __ARGS((typval_T *argvars, typval_T *rettv));
     
    2622127001 #ifdef FEAT_FLOAT
    2622227002 static void f_pow __ARGS((typval_T *argvars, typval_T *rettv));
    26223 @@ -757,6 +758,7 @@
     27003@@ -653,6 +645,12 @@
     27004 static void f_prevnonblank __ARGS((typval_T *argvars, typval_T *rettv));
     27005 static void f_printf __ARGS((typval_T *argvars, typval_T *rettv));
     27006 static void f_pumvisible __ARGS((typval_T *argvars, typval_T *rettv));
     27007+#ifdef FEAT_PYTHON3
     27008+static void f_py3eval __ARGS((typval_T *argvars, typval_T *rettv));
     27009+#endif
     27010+#ifdef FEAT_PYTHON
     27011+static void f_pyeval __ARGS((typval_T *argvars, typval_T *rettv));
     27012+#endif
     27013 static void f_range __ARGS((typval_T *argvars, typval_T *rettv));
     27014 static void f_readfile __ARGS((typval_T *argvars, typval_T *rettv));
     27015 static void f_reltime __ARGS((typval_T *argvars, typval_T *rettv));
     27016@@ -757,6 +755,7 @@
    2622427017 static void f_winsaveview __ARGS((typval_T *argvars, typval_T *rettv));
    2622527018 static void f_winwidth __ARGS((typval_T *argvars, typval_T *rettv));
     
    2622927022 static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
    2623027023 static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
    26231 @@ -791,6 +793,8 @@
     27024@@ -791,6 +790,8 @@
    2623227025 static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
    2623327026 static int var_check_ro __ARGS((int flags, char_u *name));
     
    2623827031 static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int copyID));
    2623927032 static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags));
    26240 @@ -853,6 +857,7 @@
    26241  
    26242      init_var_dict(&globvardict, &globvars_var);
    26243      init_var_dict(&vimvardict, &vimvars_var);
     27033@@ -820,8 +821,6 @@
     27034 static char_u *autoload_name __ARGS((char_u *name));
     27035 static void cat_func_name __ARGS((char_u *buf, ufunc_T *fp));
     27036 static void func_free __ARGS((ufunc_T *fp));
     27037-static void func_unref __ARGS((char_u *name));
     27038-static void func_ref __ARGS((char_u *name));
     27039 static void call_user_func __ARGS((ufunc_T *fp, int argcount, typval_T *argvars, typval_T *rettv, linenr_T firstline, linenr_T lastline, dict_T *selfdict));
     27040 static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ;
     27041 static void free_funccal __ARGS((funccall_T *fc, int free_val));
     27042@@ -851,8 +850,9 @@
     27043     int                    i;
     27044     struct vimvar   *p;
     27045 
     27046-    init_var_dict(&globvardict, &globvars_var);
     27047-    init_var_dict(&vimvardict, &vimvars_var);
     27048+    init_var_dict(&globvardict, &globvars_var, VAR_DEF_SCOPE);
     27049+    init_var_dict(&vimvardict, &vimvars_var, VAR_SCOPE);
    2624427050+    vimvardict.dv_lock = VAR_FIXED;
    2624527051     hash_init(&compat_hashtab);
    2624627052     hash_init(&func_hashtab);
    2624727053 
    26248 @@ -875,10 +880,11 @@
     27054@@ -875,10 +875,11 @@
    2624927055            hash_add(&compat_hashtab, p->vv_di.di_key);
    2625027056     }
     
    2625927065     sortFunctions();
    2626027066 #endif
    26261 @@ -910,6 +916,7 @@
     27067@@ -910,6 +911,7 @@
    2626227068     hash_clear(&compat_hashtab);
    2626327069 
     
    2626727073     /* global variables */
    2626827074     vars_clear(&globvarht);
    26269 @@ -1355,7 +1362,11 @@
     27075@@ -1355,7 +1357,11 @@
    2627027076        {
    2627127077            ga_init2(&ga, (int)sizeof(char), 80);
     
    2627927085            retval = (char_u *)ga.ga_data;
    2628027086        }
    26281 @@ -1557,7 +1568,7 @@
     27087@@ -1557,7 +1563,7 @@
    2628227088  * arguments are currently supported.
    2628327089  * Returns OK or FAIL.
     
    2628827094     char_u      *func;
    2628927095     int                argc;
    26290 @@ -2325,7 +2336,7 @@
     27096@@ -2325,7 +2331,7 @@
    2629127097            else if (endchars != NULL
    2629227098                             && vim_strchr(endchars, *skipwhite(arg)) == NULL)
     
    2629727103                c1 = name[len];
    2629827104                name[len] = NUL;
    26299 @@ -2718,8 +2729,27 @@
     27105@@ -2718,8 +2724,39 @@
    2630027106            lp->ll_list = NULL;
    2630127107            lp->ll_dict = lp->ll_tv->vval.v_dict;
    2630227108            lp->ll_di = dict_find(lp->ll_dict, key, len);
    2630327109+
    26304 +           /* When assigning to g: check that a function and variable name is
    26305 +            * valid. */
    26306 +           if (rettv != NULL && lp->ll_dict == &globvardict)
     27110+           /* When assigning to a scope dictionary check that a function and
     27111+            * variable name is valid (only variable name unless it is l: or
     27112+            * g: dictionary). Disallow overwriting a builtin function. */
     27113+           if (rettv != NULL && lp->ll_dict->dv_scope != 0)
    2630727114+           {
    26308 +               if (rettv->v_type == VAR_FUNC
     27115+               int prevval;
     27116+               int wrong;
     27117+
     27118+               if (len != -1)
     27119+               {
     27120+                   prevval = key[len];
     27121+                   key[len] = NUL;
     27122+               }
     27123+               wrong = (lp->ll_dict->dv_scope == VAR_DEF_SCOPE
     27124+                              && rettv->v_type == VAR_FUNC
    2630927125+                              && var_check_func_name(key, lp->ll_di == NULL))
    26310 +                   return NULL;
    26311 +               if (!valid_varname(key))
     27126+                       || !valid_varname(key);
     27127+               if (len != -1)
     27128+                   key[len] = prevval;
     27129+               if (wrong)
    2631227130+                   return NULL;
    2631327131+           }
     
    2632527143                if (*p == '[' || *p == '.' || unlet)
    2632627144                {
    26327 @@ -2739,6 +2769,10 @@
     27145@@ -2739,6 +2776,10 @@
    2632827146                    p = NULL;
    2632927147                break;
     
    2633627154                clear_tv(&var1);
    2633727155            lp->ll_tv = &lp->ll_di->di_tv;
    26338 @@ -2770,6 +2804,8 @@
     27156@@ -2770,6 +2811,8 @@
    2633927157            {
    2634027158                if (lp->ll_range && !lp->ll_empty2)
     
    2634527163            }
    2634627164 
    26347 @@ -2787,7 +2823,11 @@
     27165@@ -2787,7 +2830,11 @@
    2634827166                {
    2634927167                    ni = list_find(lp->ll_list, lp->ll_n2);
     
    2635727175                }
    2635827176 
    26359 @@ -2795,7 +2835,11 @@
     27177@@ -2795,7 +2842,11 @@
    2636027178                if (lp->ll_n1 < 0)
    2636127179                    lp->ll_n1 = list_idx_of_item(lp->ll_list, lp->ll_li);
     
    2636927187 
    2637027188            lp->ll_tv = &lp->ll_li->li_tv;
    26371 @@ -3337,6 +3381,18 @@
     27189@@ -3337,6 +3388,18 @@
    2637227190     int                failed = FALSE;
    2637327191     funcdict_T fudi;
     
    2638827206     if (fudi.fd_newkey != NULL)
    2638927207     {
    26390 @@ -3386,6 +3442,9 @@
     27208@@ -3386,6 +3449,9 @@
    2639127209        {
    2639227210            curwin->w_cursor.lnum = lnum;
     
    2639827216        arg = startarg;
    2639927217        if (get_func_tv(name, (int)STRLEN(name), &rettv, &arg,
    26400 @@ -4349,7 +4408,8 @@
     27218@@ -4349,7 +4415,8 @@
    2640127219                else
    2640227220                {
     
    2640827226                        n1 = !n1;
    2640927227                }
    26410 @@ -4378,7 +4438,8 @@
     27228@@ -4378,7 +4445,8 @@
    2641127229                else
    2641227230                {
     
    2641827236                        n1 = !n1;
    2641927237                }
    26420 @@ -5097,9 +5158,7 @@
     27238@@ -5097,9 +5165,7 @@
    2642127239            else
    2642227240                ret = OK;
     
    2642927247 
    2643027248     *arg = skipwhite(*arg);
    26431 @@ -5913,10 +5972,11 @@
     27249@@ -5868,7 +5934,7 @@
     27250 /*
     27251  * Allocate a list item.
     27252  */
     27253-    static listitem_T *
     27254+    listitem_T *
     27255 listitem_alloc()
     27256 {
     27257     return (listitem_T *)alloc(sizeof(listitem_T));
     27258@@ -5888,7 +5954,7 @@
     27259 /*
     27260  * Remove a list item from a List and free it.  Also clears the value.
     27261  */
     27262-    static void
     27263+    void
     27264 listitem_remove(l, item)
     27265     list_T  *l;
     27266     listitem_T *item;
     27267@@ -5913,10 +5979,11 @@
    2643227268  * Return TRUE when two lists have exactly the same values.
    2643327269  */
     
    2644227278     listitem_T *item1, *item2;
    2644327279 
    26444 @@ -5930,7 +5990,7 @@
     27280@@ -5930,7 +5997,7 @@
    2644527281     for (item1 = l1->lv_first, item2 = l2->lv_first;
    2644627282            item1 != NULL && item2 != NULL;
     
    2645127287     return item1 == NULL && item2 == NULL;
    2645227288 }
    26453 @@ -5952,10 +6012,11 @@
     27289@@ -5952,10 +6019,11 @@
    2645427290  * Return TRUE when two dictionaries have exactly the same key/values.
    2645527291  */
     
    2646427300     hashitem_T *hi;
    2646527301     dictitem_T *item2;
    26466 @@ -5976,7 +6037,7 @@
     27302@@ -5976,7 +6044,7 @@
    2646727303            item2 = dict_find(d2, hi->hi_key, -1);
    2646827304            if (item2 == NULL)
     
    2647327309            --todo;
    2647427310        }
    26475 @@ -5984,41 +6045,54 @@
     27311@@ -5984,41 +6052,54 @@
    2647627312     return TRUE;
    2647727313 }
     
    2653927375 
    2654027376        case VAR_FUNC:
    26541 @@ -6502,47 +6576,119 @@
     27377@@ -6049,7 +6130,7 @@
     27378  * A negative index is counted from the end; -1 is the last item.
     27379  * Returns NULL when "n" is out of range.
     27380  */
     27381-    static listitem_T *
     27382+    listitem_T *
     27383 list_find(l, n)
     27384     list_T     *l;
     27385     long       n;
     27386@@ -6191,7 +6272,7 @@
     27387 /*
     27388  * Append item "item" to the end of list "l".
     27389  */
     27390-    static void
     27391+    void
     27392 list_append(l, item)
     27393     list_T     *l;
     27394     listitem_T *item;
     27395@@ -6304,7 +6385,7 @@
     27396  * If "item" is NULL append at the end.
     27397  * Return FAIL when out of memory.
     27398  */
     27399-    static int
     27400+    int
     27401 list_insert_tv(l, tv, item)
     27402     list_T     *l;
     27403     typval_T   *tv;
     27404@@ -6449,7 +6530,7 @@
     27405  * Remove items "item" to "item2" from list "l".
     27406  * Does not free the listitem or the value!
     27407  */
     27408-    static void
     27409+    void
     27410 list_remove(l, item, item2)
     27411     list_T     *l;
     27412     listitem_T *item;
     27413@@ -6502,47 +6583,119 @@
    2654227414     return (char_u *)ga.ga_data;
    2654327415 }
     
    2667627548  *
    2667727549  * We use reference counts to be able to free most items right away when they
    26678 @@ -6635,6 +6781,10 @@
     27550@@ -6635,6 +6788,18 @@
    2667927551     /* v: vars */
    2668027552     set_ref_in_ht(&vimvarht, copyID);
     
    2668427556+#endif
    2668527557+
     27558+#ifdef FEAT_PYTHON
     27559+    set_ref_in_python(copyID);
     27560+#endif
     27561+
     27562+#ifdef FEAT_PYTHON3
     27563+    set_ref_in_python3(copyID);
     27564+#endif
     27565+
    2668627566     /*
    2668727567      * 2. Free lists and dictionaries that are not referenced.
    2668827568      */
    26689 @@ -6837,7 +6987,7 @@
     27569@@ -6720,7 +6885,7 @@
     27570 /*
     27571  * Mark all lists and dicts referenced through hashtab "ht" with "copyID".
     27572  */
     27573-    static void
     27574+    void
     27575 set_ref_in_ht(ht, copyID)
     27576     hashtab_T  *ht;
     27577     int                copyID;
     27578@@ -6740,7 +6905,7 @@
     27579 /*
     27580  * Mark all lists and dicts referenced through list "l" with "copyID".
     27581  */
     27582-    static void
     27583+    void
     27584 set_ref_in_list(l, copyID)
     27585     list_T     *l;
     27586     int                copyID;
     27587@@ -6754,7 +6919,7 @@
     27588 /*
     27589  * Mark all lists and dicts referenced through typval "tv" with "copyID".
     27590  */
     27591-    static void
     27592+    void
     27593 set_ref_in_item(tv, copyID)
     27594     typval_T   *tv;
     27595     int                copyID;
     27596@@ -6798,7 +6963,7 @@
     27597     d = (dict_T *)alloc(sizeof(dict_T));
     27598     if (d != NULL)
     27599     {
     27600-       /* Add the list to the list of dicts for garbage collection. */
     27601+       /* Add the dict to the list of dicts for garbage collection. */
     27602        if (first_dict != NULL)
     27603            first_dict->dv_used_prev = d;
     27604        d->dv_used_next = first_dict;
     27605@@ -6807,6 +6972,7 @@
     27606 
     27607        hash_init(&d->dv_hashtab);
     27608        d->dv_lock = 0;
     27609+       d->dv_scope = 0;
     27610        d->dv_refcount = 0;
     27611        d->dv_copyID = 0;
     27612     }
     27613@@ -6837,7 +7003,7 @@
    2669027614  * Unreference a Dictionary: decrement the reference count and free it when it
    2669127615  * becomes zero.
     
    2669627620     dict_T *d;
    2669727621 {
    26698 @@ -7075,7 +7225,7 @@
     27622@@ -7075,7 +7241,7 @@
    2669927623 }
    2670027624 
     
    2670527629  */
    2670627630     int
    26707 @@ -7097,6 +7247,7 @@
     27631@@ -7097,6 +7263,7 @@
    2670827632        dictitem_free(item);
    2670927633        return FAIL;
     
    2671327637 }
    2671427638 
    26715 @@ -7649,6 +7800,7 @@
     27639@@ -7649,6 +7816,7 @@
    2671627640     {"acos",           1, 1, f_acos},  /* WJMc */
    2671727641 #endif
     
    2672127645     {"argc",           0, 0, f_argc},
    2672227646     {"argidx",         0, 0, f_argidx},
    26723 @@ -7708,7 +7860,7 @@
     27647@@ -7708,7 +7876,7 @@
    2672427648 #ifdef FEAT_FLOAT
    2672527649     {"exp",            1, 1, f_exp},
     
    2673027654     {"feedkeys",       1, 2, f_feedkeys},
    2673127655     {"file_readable",  1, 1, f_filereadable},  /* obsolete */
    26732 @@ -7759,7 +7911,7 @@
     27656@@ -7759,7 +7927,7 @@
    2673327657     {"getwinposx",     0, 0, f_getwinposx},
    2673427658     {"getwinposy",     0, 0, f_getwinposy},
     
    2673927663     {"has",            1, 1, f_has},
    2674027664     {"has_key",                2, 2, f_has_key},
    26741 @@ -7784,6 +7936,7 @@
     27665@@ -7784,6 +7952,7 @@
    2674227666     {"inputsave",      0, 0, f_inputsave},
    2674327667     {"inputsecret",    1, 2, f_inputsecret},
     
    2674727671     {"islocked",       1, 1, f_islocked},
    2674827672     {"items",          1, 1, f_items},
    26749 @@ -7801,8 +7954,11 @@
     27673@@ -7801,8 +7970,11 @@
    2675027674     {"log",            1, 1, f_log},
    2675127675     {"log10",          1, 1, f_log10},
     
    2676027684     {"match",          2, 4, f_match},
    2676127685     {"matchadd",       2, 4, f_matchadd},
    26762 @@ -7822,6 +7978,7 @@
     27686@@ -7822,6 +7994,7 @@
    2676327687 #endif
    2676427688     {"nextnonblank",   1, 1, f_nextnonblank},
     
    2676827692 #ifdef FEAT_FLOAT
    2676927693     {"pow",            2, 2, f_pow},
    26770 @@ -7870,7 +8027,7 @@
     27694@@ -7829,6 +8002,12 @@
     27695     {"prevnonblank",   1, 1, f_prevnonblank},
     27696     {"printf",         2, 19, f_printf},
     27697     {"pumvisible",     0, 0, f_pumvisible},
     27698+#ifdef FEAT_PYTHON3
     27699+    {"py3eval",                1, 1, f_py3eval},
     27700+#endif
     27701+#ifdef FEAT_PYTHON
     27702+    {"pyeval",         1, 1, f_pyeval},
     27703+#endif
     27704     {"range",          1, 3, f_range},
     27705     {"readfile",       1, 3, f_readfile},
     27706     {"reltime",                0, 2, f_reltime},
     27707@@ -7870,7 +8049,7 @@
    2677127708     {"sin",            1, 1, f_sin},
    2677227709     {"sinh",           1, 1, f_sinh},
     
    2677727714     {"spellbadword",   0, 1, f_spellbadword},
    2677827715     {"spellsuggest",   1, 3, f_spellsuggest},
    26779 @@ -7933,6 +8090,7 @@
     27716@@ -7933,6 +8112,7 @@
    2678027717     {"winsaveview",    0, 0, f_winsaveview},
    2678127718     {"winwidth",       1, 1, f_winwidth},
     
    2678527722 
    2678627723 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
    26787 @@ -8497,7 +8655,7 @@
     27724@@ -8497,7 +8677,7 @@
    2678827725     if (argvars[0].v_type == VAR_LIST)
    2678927726     {
     
    2679427731            copy_tv(&argvars[0], rettv);
    2679527732     }
    26796 @@ -8506,6 +8664,18 @@
     27733@@ -8506,6 +8686,18 @@
    2679727734 }
    2679827735 
     
    2681327750  */
    2681427751     static void
    26815 @@ -9298,7 +9468,7 @@
     27752@@ -8980,6 +9172,45 @@
     27753 #endif
     27754 }
     27755 
     27756+    int
     27757+func_call(name, args, selfdict, rettv)
     27758+    char_u     *name;
     27759+    typval_T   *args;
     27760+    dict_T     *selfdict;
     27761+    typval_T   *rettv;
     27762+{
     27763+    listitem_T *item;
     27764+    typval_T   argv[MAX_FUNC_ARGS + 1];
     27765+    int                argc = 0;
     27766+    int                dummy;
     27767+    int                r = 0;
     27768+
     27769+    for (item = args->vval.v_list->lv_first; item != NULL;
     27770+                                                        item = item->li_next)
     27771+    {
     27772+       if (argc == MAX_FUNC_ARGS)
     27773+       {
     27774+           EMSG(_("E699: Too many arguments"));
     27775+           break;
     27776+       }
     27777+       /* Make a copy of each argument.  This is needed to be able to set
     27778+        * v_lock to VAR_FIXED in the copy without changing the original list.
     27779+        */
     27780+       copy_tv(&item->li_tv, &argv[argc++]);
     27781+    }
     27782+
     27783+    if (item == NULL)
     27784+       r = call_func(name, (int)STRLEN(name), rettv, argc, argv,
     27785+                                curwin->w_cursor.lnum, curwin->w_cursor.lnum,
     27786+                                                     &dummy, TRUE, selfdict);
     27787+
     27788+    /* Free the arguments. */
     27789+    while (argc > 0)
     27790+       clear_tv(&argv[--argc]);
     27791+
     27792+    return r;
     27793+}
     27794+
     27795 /*
     27796  * "call(func, arglist)" function
     27797  */
     27798@@ -8989,10 +9220,6 @@
     27799     typval_T   *rettv;
     27800 {
     27801     char_u     *func;
     27802-    typval_T   argv[MAX_FUNC_ARGS + 1];
     27803-    int                argc = 0;
     27804-    listitem_T *item;
     27805-    int                dummy;
     27806     dict_T     *selfdict = NULL;
     27807 
     27808     if (argvars[1].v_type != VAR_LIST)
     27809@@ -9020,28 +9247,7 @@
     27810        selfdict = argvars[2].vval.v_dict;
     27811     }
     27812 
     27813-    for (item = argvars[1].vval.v_list->lv_first; item != NULL;
     27814-                                                        item = item->li_next)
     27815-    {
     27816-       if (argc == MAX_FUNC_ARGS)
     27817-       {
     27818-           EMSG(_("E699: Too many arguments"));
     27819-           break;
     27820-       }
     27821-       /* Make a copy of each argument.  This is needed to be able to set
     27822-        * v_lock to VAR_FIXED in the copy without changing the original list.
     27823-        */
     27824-       copy_tv(&item->li_tv, &argv[argc++]);
     27825-    }
     27826-
     27827-    if (item == NULL)
     27828-       (void)call_func(func, (int)STRLEN(func), rettv, argc, argv,
     27829-                                curwin->w_cursor.lnum, curwin->w_cursor.lnum,
     27830-                                                     &dummy, TRUE, selfdict);
     27831-
     27832-    /* Free the arguments. */
     27833-    while (argc > 0)
     27834-       clear_tv(&argv[--argc]);
     27835+    (void)func_call(func, &argvars[1], selfdict, rettv);
     27836 }
     27837 
     27838 #ifdef FEAT_FLOAT
     27839@@ -9298,7 +9504,7 @@
    2681627840 
    2681727841     if (!error)
     
    2682227846 }
    2682327847 
    26824 @@ -9389,7 +9559,7 @@
     27848@@ -9389,7 +9595,7 @@
    2682527849            }
    2682627850 
     
    2683127855        }
    2683227856     }
    26833 @@ -9416,7 +9586,7 @@
     27857@@ -9416,7 +9622,7 @@
    2683427858                if (!HASHITEM_EMPTY(hi))
    2683527859                {
     
    2684027864                }
    2684127865            }
    26842 @@ -9857,17 +10027,36 @@
     27866@@ -9857,17 +10063,36 @@
    2684327867     char_u     *s;
    2684427868     int                len;
     
    2687927903     else
    2688027904     {
    26881 @@ -9875,12 +10064,25 @@
     27905@@ -9875,12 +10100,25 @@
    2688227906         * for 'wildignore' and don't put matches for 'suffixes' at the end. */
    2688327907        if (argvars[1].v_type != VAR_UNKNOWN
     
    2690727931        else
    2690827932            rettv->vval.v_string = NULL;
    26909 @@ -9896,6 +10098,8 @@
     27933@@ -9896,6 +10134,8 @@
    2691027934     typval_T   *argvars;
    2691127935     typval_T   *rettv;
     
    2691627940     {
    2691727941        list_T          *l1, *l2;
    26918 @@ -9905,7 +10109,7 @@
     27942@@ -9905,7 +10145,7 @@
    2691927943 
    2692027944        l1 = argvars[0].vval.v_list;
     
    2692527949        {
    2692627950            if (argvars[2].v_type != VAR_UNKNOWN)
    26927 @@ -9944,7 +10148,7 @@
     27951@@ -9944,7 +10184,7 @@
    2692827952 
    2692927953        d1 = argvars[0].vval.v_dict;
     
    2693427958        {
    2693527959            /* Check the third argument. */
    26936 @@ -9987,7 +10191,7 @@
     27960@@ -9976,6 +10216,19 @@
     27961                {
     27962                    --todo;
     27963                    di1 = dict_find(d1, hi2->hi_key, -1);
     27964+                   if (d1->dv_scope != 0)
     27965+                   {
     27966+                       /* Disallow replacing a builtin function in l: and g:.
     27967+                        * Check the key to be valid when adding to any
     27968+                        * scope. */
     27969+                       if (d1->dv_scope == VAR_DEF_SCOPE
     27970+                               && HI2DI(hi2)->di_tv.v_type == VAR_FUNC
     27971+                               && var_check_func_name(hi2->hi_key,
     27972+                                                                di1 == NULL))
     27973+                           break;
     27974+                       if (!valid_varname(hi2->hi_key))
     27975+                           break;
     27976+                   }
     27977                    if (di1 == NULL)
     27978                    {
     27979                        di1 = dictitem_copy(HI2DI(hi2));
     27980@@ -9987,7 +10240,7 @@
    2693727981                        EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
    2693827982                        break;
     
    2694327987                        clear_tv(&di1->di_tv);
    2694427988                        copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
    26945 @@ -10186,20 +10390,22 @@
     27989@@ -10186,20 +10439,22 @@
    2694627990     typval_T   save_key;
    2694727991     int                rem;
     
    2696928013     }
    2697028014     else
    26971 @@ -10236,7 +10442,8 @@
     28015@@ -10236,7 +10491,8 @@
    2697228016                {
    2697328017                    --todo;
     
    2697928023                    vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
    2698028024                    if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
    26981 @@ -10255,7 +10462,7 @@
     28025@@ -10255,7 +10511,7 @@
    2698228026 
    2698328027            for (li = l->lv_first; li != NULL; li = nli)
     
    2698828032                nli = li->li_next;
    2698928033                vimvars[VV_KEY].vv_nr = idx;
    26990 @@ -10839,6 +11046,11 @@
     28034@@ -10839,6 +11095,11 @@
    2699128035 
    2699228036        if (*varname == '&')    /* buffer-local-option */
     
    2700028044        {
    2700128045            if (*varname == NUL)
    27002 @@ -11039,18 +11251,22 @@
     28046@@ -11039,18 +11300,22 @@
    2700328047     typval_T   *argvars UNUSED;
    2700428048     typval_T   *rettv;
     
    2703028074 }
    2703128075 
    27032 @@ -11653,22 +11869,44 @@
     28076@@ -11653,22 +11918,44 @@
    2703328077     typval_T   *argvars;
    2703428078     typval_T   *rettv;
     
    2708228126     else
    2708328127        rettv->vval.v_string = NULL;
    27084 @@ -11741,9 +11979,6 @@
     28128@@ -11741,9 +12028,6 @@
    2708528129 #ifdef __QNX__
    2708628130        "qnx",
     
    2709228136        "unix",
    2709328137 #endif
    27094 @@ -11856,7 +12091,7 @@
     28138@@ -11786,6 +12070,11 @@
     28139        "all_builtin_terms",
     28140 # endif
     28141 #endif
     28142+#if defined(FEAT_BROWSE) && (defined(USE_FILE_CHOOSER) \
     28143+       || defined(FEAT_GUI_W32) \
     28144+       || defined(FEAT_GUI_MOTIF))
     28145+       "browsefilter",
     28146+#endif
     28147 #ifdef FEAT_BYTEOFF
     28148        "byte_offset",
     28149 #endif
     28150@@ -11856,7 +12145,7 @@
    2709528151 #ifdef FEAT_SEARCHPATH
    2709628152        "file_in_path",
     
    2710128157 #endif
    2710228158 #ifdef FEAT_FIND_ID
    27103 @@ -12002,9 +12237,6 @@
     28159@@ -12002,9 +12291,6 @@
    2710428160 #ifdef FEAT_OLE
    2710528161        "ole",
     
    2711128167        "path_extra",
    2711228168 #endif
    27113 @@ -12116,6 +12348,9 @@
     28169@@ -12116,6 +12402,9 @@
    2711428170 #ifdef FEAT_TOOLBAR
    2711528171        "toolbar",
     
    2712128177        "user-commands",    /* was accidentally included in 5.4 */
    2712228178        "user_commands",
    27123 @@ -12159,6 +12394,9 @@
     28179@@ -12159,6 +12448,9 @@
    2712428180 #ifdef FEAT_XFONTSET
    2712528181        "xfontset",
     
    2713128187        "xsmp",
    2713228188 #endif
    27133 @@ -12572,7 +12810,7 @@
     28189@@ -12572,7 +12864,7 @@
    2713428190        }
    2713528191 
     
    2714028196                rettv->vval.v_number = idx;
    2714128197                break;
    27142 @@ -12712,7 +12950,7 @@
     28198@@ -12648,6 +12940,7 @@
     28199                int     xp_namelen;
     28200                long    argt;
     28201 
     28202+               /* input() with a third argument: completion */
     28203                rettv->vval.v_string = NULL;
     28204 
     28205                xp_name = get_tv_string_buf_chk(&argvars[2], buf);
     28206@@ -12666,6 +12959,11 @@
     28207            rettv->vval.v_string =
     28208                getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
     28209                                  xp_type, xp_arg);
     28210+       if (rettv->vval.v_string == NULL
     28211+               && argvars[1].v_type != VAR_UNKNOWN
     28212+               && argvars[2].v_type != VAR_UNKNOWN)
     28213+           rettv->vval.v_string = vim_strsave(get_tv_string_buf(
     28214+                                                          &argvars[2], buf));
     28215 
     28216        vim_free(xp_arg);
     28217 
     28218@@ -12712,7 +13010,7 @@
    2714328219            IObuff[0] = NUL;
    2714428220        if (message != NULL && defstr != NULL
     
    2714928225        else
    2715028226        {
    27151 @@ -12850,7 +13088,7 @@
     28227@@ -12850,7 +13148,7 @@
    2715228228     if (argvars[0].v_type != VAR_LIST)
    2715328229        EMSG2(_(e_listarg), "insert()");
     
    2715828234        if (argvars[2].v_type != VAR_UNKNOWN)
    2715928235            before = get_tv_number_chk(&argvars[2], &error);
    27160 @@ -12877,6 +13115,17 @@
     28236@@ -12877,6 +13175,17 @@
    2716128237 }
    2716228238 
     
    2717628252  */
    2717728253     static void
    27178 @@ -13290,8 +13539,10 @@
     28254@@ -13290,8 +13599,10 @@
    2717928255     char_u     *keys_buf = NULL;
    2718028256     char_u     *rhs;
     
    2718828264     /* return empty string for failure */
    2718928265     rettv->v_type = VAR_STRING;
    27190 @@ -13305,7 +13556,11 @@
     28266@@ -13305,7 +13616,11 @@
    2719128267     {
    2719228268        which = get_tv_string_buf_chk(&argvars[1], buf);
     
    2720028276     else
    2720128277        which = (char_u *)"";
    27202 @@ -13315,19 +13570,34 @@
     28278@@ -13315,19 +13630,34 @@
    2720328279     mode = get_map_mode(&which, 0);
    2720428280 
     
    2724528321 }
    2724628322 
    27247 @@ -13367,6 +13637,23 @@
     28323@@ -13367,6 +13697,23 @@
    2724828324 }
    2724928325 #endif
     
    2726928345  * "map()" function
    2727028346  */
    27271 @@ -14006,6 +14293,18 @@
     28347@@ -14006,6 +14353,18 @@
    2727228348 }
    2727328349 
     
    2728828364  */
    2728928365     static void
    27290 @@ -14177,22 +14476,19 @@
     28366@@ -14125,6 +14484,40 @@
     28367 #endif
     28368 }
     28369 
     28370+#ifdef FEAT_PYTHON3
     28371+/*
     28372+ * "py3eval()" function
     28373+ */
     28374+    static void
     28375+f_py3eval(argvars, rettv)
     28376+    typval_T   *argvars;
     28377+    typval_T   *rettv;
     28378+{
     28379+    char_u     *str;
     28380+    char_u     buf[NUMBUFLEN];
     28381+
     28382+    str = get_tv_string_buf(&argvars[0], buf);
     28383+    do_py3eval(str, rettv);
     28384+}
     28385+#endif
     28386+
     28387+#ifdef FEAT_PYTHON
     28388+/*
     28389+ * "pyeval()" function
     28390+ */
     28391+    static void
     28392+f_pyeval(argvars, rettv)
     28393+    typval_T   *argvars;
     28394+    typval_T   *rettv;
     28395+{
     28396+    char_u     *str;
     28397+    char_u     buf[NUMBUFLEN];
     28398+
     28399+    str = get_tv_string_buf(&argvars[0], buf);
     28400+    do_pyeval(str, rettv);
     28401+}
     28402+#endif
     28403+
     28404 /*
     28405  * "range()" function
     28406  */
     28407@@ -14177,22 +14570,19 @@
    2729128408     typval_T   *rettv;
    2729228409 {
     
    2732228439     if (argvars[1].v_type != VAR_UNKNOWN)
    2732328440     {
    27324 @@ -14214,49 +14510,61 @@
     28441@@ -14214,49 +14604,61 @@
    2732528442        return;
    2732628443     }
     
    2741528532                }
    2741628533                li->li_tv.v_type = VAR_STRING;
    27417 @@ -14264,71 +14572,111 @@
     28534@@ -14264,71 +14666,111 @@
    2741828535                li->li_tv.vval.v_string = s;
    2741928536                list_append(rettv->vval.v_list, li);
     
    2751428631+                   prevsize = (long)(p - start);
    2751528632+               else
    27516 +               {
     28633                {
     28634-                   mch_memmove(s, prev, prevlen);
     28635-                   mch_memmove(s + prevlen, buf, buflen);
     28636-                   vim_free(prev);
     28637-                   prev = s;
     28638-                   prevlen += buflen;
    2751728639+                   long grow50pc = (prevsize * 3) / 2;
    2751828640+                   long growmin  = (long)((p - start) * 2 + prevlen);
     
    2752228644+                                               : vim_realloc(prev, prevsize);
    2752328645+               if (newprev == NULL)
    27524                 {
    27525 -                   mch_memmove(s, prev, prevlen);
    27526 -                   mch_memmove(s + prevlen, buf, buflen);
    27527 -                   vim_free(prev);
    27528 -                   prev = s;
    27529 -                   prevlen += buflen;
     28646+               {
    2753028647+                   do_outofmem_msg((long_u)prevsize);
    2753128648+                   failed = TRUE;
     
    2756928686     fclose(fd);
    2757028687 }
    27571 @@ -14691,13 +15039,14 @@
     28688@@ -14691,13 +15133,14 @@
    2757228689     char_u     *key;
    2757328690     dict_T     *d;
     
    2758528702            key = get_tv_string_chk(&argvars[1]);
    2758628703            if (key != NULL)
    27587 @@ -14717,7 +15066,7 @@
     28704@@ -14717,7 +15160,7 @@
    2758828705     else if (argvars[0].v_type != VAR_LIST)
    2758928706        EMSG2(_(e_listdictarg), "remove()");
     
    2759428711        int         error = FALSE;
    2759528712 
    27596 @@ -14847,6 +15196,9 @@
     28713@@ -14847,6 +15290,9 @@
    2759728714     typval_T   *rettv;
    2759828715 {
     
    2760428721     p = get_tv_string(&argvars[0]);
    2760528722 #ifdef FEAT_SHORTCUT
    27606 @@ -14862,7 +15214,6 @@
     28723@@ -14862,7 +15308,6 @@
    2760728724 #else
    2760828725 # ifdef HAVE_READLINK
     
    2761228729        int     len;
    2761328730        char_u  *remain = NULL;
    27614 @@ -14879,7 +15230,10 @@
     28731@@ -14879,7 +15324,10 @@
    2761528732 
    2761628733        len = STRLEN(p);
     
    2762328740        q = getnextcomp(p);
    2762428741        if (*q != NUL)
    27625 @@ -14890,6 +15244,10 @@
     28742@@ -14890,6 +15338,10 @@
    2762628743            q[-1] = NUL;
    2762728744        }
     
    2763428751        {
    2763528752            for (;;)
    27636 @@ -15033,6 +15391,7 @@
     28753@@ -15033,6 +15485,7 @@
    2763728754 
    2763828755 #ifdef HAVE_READLINK
     
    2764228759     rettv->v_type = VAR_STRING;
    2764328760 }
    27644 @@ -15051,7 +15410,7 @@
     28761@@ -15051,7 +15504,7 @@
    2764528762     if (argvars[0].v_type != VAR_LIST)
    2764628763        EMSG2(_(e_listarg), "reverse()");
     
    2765128768        li = l->lv_last;
    2765228769        l->lv_first = l->lv_last = NULL;
    27653 @@ -16256,6 +16615,7 @@
     28770@@ -16056,7 +16509,7 @@
     28771     if (tp != NULL && varname != NULL && varp != NULL)
     28772     {
     28773        save_curtab = curtab;
     28774-       goto_tabpage_tp(tp);
     28775+       goto_tabpage_tp(tp, TRUE);
     28776 
     28777        tabvarname = alloc((unsigned)STRLEN(varname) + 3);
     28778        if (tabvarname != NULL)
     28779@@ -16069,7 +16522,7 @@
     28780 
     28781        /* Restore current tabpage */
     28782        if (valid_tabpage(save_curtab))
     28783-           goto_tabpage_tp(save_curtab);
     28784+           goto_tabpage_tp(save_curtab, TRUE);
     28785     }
     28786 }
     28787 
     28788@@ -16133,7 +16586,7 @@
     28789        /* set curwin to be our win, temporarily */
     28790        save_curwin = curwin;
     28791        save_curtab = curtab;
     28792-       goto_tabpage_tp(tp);
     28793+       goto_tabpage_tp(tp, TRUE);
     28794        if (!win_valid(win))
     28795            return;
     28796        curwin = win;
     28797@@ -16168,7 +16621,7 @@
     28798        /* Restore current tabpage and window, if still valid (autocomands can
     28799         * make them invalid). */
     28800        if (valid_tabpage(save_curtab))
     28801-           goto_tabpage_tp(save_curtab);
     28802+           goto_tabpage_tp(save_curtab, TRUE);
     28803        if (win_valid(save_curwin))
     28804        {
     28805            curwin = save_curwin;
     28806@@ -16256,6 +16709,7 @@
    2765428807 
    2765528808 static int     item_compare_ic;
     
    2765928812 #define ITEM_COMPARE_FAIL 999
    2766028813 
    27661 @@ -16315,7 +16675,8 @@
     28814@@ -16315,7 +16769,8 @@
    2766228815 
    2766328816     rettv.v_type = VAR_UNKNOWN;                /* clear_tv() uses this */
     
    2766928822     clear_tv(&argv[1]);
    2767028823 
    27671 @@ -16348,7 +16709,8 @@
     28824@@ -16348,7 +16803,8 @@
    2767228825     else
    2767328826     {
     
    2767928832        rettv->vval.v_list = l;
    2768028833        rettv->v_type = VAR_LIST;
    27681 @@ -16360,8 +16722,10 @@
     28834@@ -16360,8 +16816,10 @@
    2768228835 
    2768328836        item_compare_ic = FALSE;
     
    2769028843                item_compare_func = argvars[1].vval.v_string;
    2769128844            else
    27692 @@ -16376,6 +16740,17 @@
     28845@@ -16376,6 +16834,17 @@
    2769328846                else
    2769428847                    item_compare_func = get_tv_string(&argvars[1]);
     
    2770828861 
    2770928862        /* Make an array with each entry pointing to an item in the List. */
    27710 @@ -17512,18 +17887,22 @@
     28863@@ -17512,18 +17981,22 @@
    2771128864     typval_T   *argvars UNUSED;
    2771228865     typval_T   *rettv;
     
    2773228885 
    2773328886 /*
    27734 @@ -17711,7 +18090,7 @@
     28887@@ -17711,7 +18184,7 @@
    2773528888     typval_T   *argvars;
    2773628889     typval_T   *rettv;
     
    2774128894     char_u     *tostr;
    2774228895     char_u     *p;
    27743 @@ -17728,7 +18107,7 @@
     28896@@ -17728,7 +18201,7 @@
    2774428897     char_u     buf2[NUMBUFLEN];
    2774528898     garray_T   ga;
     
    2775028903     tostr = get_tv_string_buf_chk(&argvars[2], buf2);
    2775128904 
    27752 @@ -17754,19 +18133,19 @@
     28905@@ -17754,19 +18227,19 @@
    2775328906        }
    2775428907 
     
    2777428927                    for (p = tostr; *p != NUL; p += tolen)
    2777528928                    {
    27776 @@ -17785,11 +18164,11 @@
     28929@@ -17785,11 +18258,11 @@
    2777728930                ++idx;
    2777828931            }
     
    2778828941                for (p = tostr; *p != NUL; p += tolen)
    2778928942                {
    27790 @@ -17804,18 +18183,18 @@
     28943@@ -17804,18 +18277,18 @@
    2779128944            mch_memmove((char *)ga.ga_data + ga.ga_len, cpstr, (size_t)cplen);
    2779228945            ga.ga_len += cplen;
     
    2781128964     }
    2781228965 
    27813 @@ -17882,11 +18261,21 @@
     28966@@ -17882,11 +18355,21 @@
    2781428967     rettv->v_type = VAR_STRING;
    2781528968 #ifdef FEAT_PERSISTENT_UNDO
     
    2781728970-       char_u *ffname = FullName_save(get_tv_string(&argvars[0]), FALSE);
    2781828971+       char_u *fname = get_tv_string(&argvars[0]);
    27819 +
     28972 
     28973-       if (ffname != NULL)
     28974-           rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
     28975-       vim_free(ffname);
    2782028976+       if (*fname == NUL)
    2782128977+       {
     
    2782628982+       {
    2782728983+           char_u *ffname = FullName_save(fname, FALSE);
    27828  
    27829 -       if (ffname != NULL)
    27830 -           rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
    27831 -       vim_free(ffname);
     28984+
    2783228985+           if (ffname != NULL)
    2783328986+               rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
     
    2783728990 #else
    2783828991     rettv->vval.v_string = NULL;
    27839 @@ -18258,6 +18647,19 @@
     28992@@ -18118,9 +18601,11 @@
     28993        curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
     28994 
     28995        check_cursor();
     28996-       changed_cline_bef_curs();
     28997-       invalidate_botline();
     28998-       redraw_later(VALID);
     28999+       win_new_height(curwin, curwin->w_height);
     29000+# ifdef FEAT_VERTSPLIT
     29001+       win_new_width(curwin, W_WIDTH(curwin));
     29002+# endif
     29003+       changed_window_setting();
     29004 
     29005        if (curwin->w_topline == 0)
     29006            curwin->w_topline = 1;
     29007@@ -18258,6 +18743,19 @@
    2784029008 }
    2784129009 
     
    2785729025  * Returns NULL when there is an error.
    2785829026  */
    27859 @@ -18768,11 +19170,7 @@
     29027@@ -18768,11 +19266,7 @@
    2786029028 set_vim_var_char(c)
    2786129029     int c;
     
    2787029038 #ifdef FEAT_MBYTE
    2787129039     if (has_mbyte)
    27872 @@ -19453,9 +19851,14 @@
     29040@@ -19453,9 +19947,14 @@
    2787329041         * worked find the variable again.  Don't auto-load a script if it was
    2787429042         * loaded already, otherwise it would be loaded every time when
     
    2788729055            return NULL;
    2788829056     }
    27889 @@ -19730,7 +20133,6 @@
     29057@@ -19564,7 +20063,7 @@
     29058        {
     29059            sv = SCRIPT_SV(ga_scripts.ga_len + 1) =
     29060                (scriptvar_T *)alloc_clear(sizeof(scriptvar_T));
     29061-           init_var_dict(&sv->sv_dict, &sv->sv_var);
     29062+           init_var_dict(&sv->sv_dict, &sv->sv_var, VAR_SCOPE);
     29063            ++ga_scripts.ga_len;
     29064        }
     29065     }
     29066@@ -19575,11 +20074,14 @@
     29067  * point to it.
     29068  */
     29069     void
     29070-init_var_dict(dict, dict_var)
     29071+init_var_dict(dict, dict_var, scope)
     29072     dict_T     *dict;
     29073     dictitem_T *dict_var;
     29074+    int                scope;
     29075 {
     29076     hash_init(&dict->dv_hashtab);
     29077+    dict->dv_lock = 0;
     29078+    dict->dv_scope = scope;
     29079     dict->dv_refcount = DO_NOT_FREE_CNT;
     29080     dict->dv_copyID = 0;
     29081     dict_var->di_tv.vval.v_dict = dict;
     29082@@ -19730,7 +20232,6 @@
    2789029083     dictitem_T *v;
    2789129084     char_u     *varname;
     
    2789529088     ht = find_var_ht(name, &varname);
    2789629089     if (ht == NULL || *varname == NUL)
    27897 @@ -19740,25 +20142,8 @@
     29090@@ -19740,25 +20241,8 @@
    2789829091     }
    2789929092     v = find_var_in_ht(ht, varname, TRUE);
     
    2792329116     if (v != NULL)
    2792429117     {
    27925 @@ -19824,13 +20209,8 @@
     29118@@ -19824,13 +20308,8 @@
    2792629119        }
    2792729120 
     
    2793929132        v = (dictitem_T *)alloc((unsigned)(sizeof(dictitem_T)
    2794029133                                                          + STRLEN(varname)));
    27941 @@ -19895,6 +20275,55 @@
     29134@@ -19895,6 +20374,55 @@
    2794229135 }
    2794329136 
     
    2799529188  * Also give an error message, using "name".
    2799629189  */
    27997 @@ -20099,7 +20528,13 @@
     29190@@ -20099,7 +20627,13 @@
    2799829191                /* Call msg_start() after eval1(), evaluating the expression
    2799929192                 * may cause a message to appear. */
     
    2800929202            else if (eap->cmdidx == CMD_echo)
    2801029203                msg_puts_attr((char_u *)" ", echo_attr);
    28011 @@ -20302,6 +20737,7 @@
     29204@@ -20302,6 +20836,7 @@
    2801229205     exarg_T    *eap;
    2801329206 {
     
    2801729210     int                c;
    2801829211     int                saved_did_emsg;
    28019 @@ -20548,6 +20984,15 @@
     29212@@ -20548,6 +21083,15 @@
    2802029213            arg = vim_strsave(arg);
    2802129214            if (arg == NULL)
     
    2803329226            *p = c;
    2803429227            newargs.ga_len++;
    28035 @@ -20623,7 +21068,8 @@
     29228@@ -20623,7 +21167,8 @@
    2803629229     nesting = 0;
    2803729230     for (;;)
     
    2804329236        sourcing_lnum_off = sourcing_lnum;
    2804429237 
    28045 @@ -20726,6 +21172,8 @@
     29238@@ -20726,6 +21271,8 @@
    2804629239                                    && (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
    2804729240                        || (p[0] == 't' && p[1] == 'c'
     
    2805229245                                    && (!ASCII_ISALPHA(p[3]) || p[3] == 'y'))
    2805329246                        || (p[0] == 'm' && p[1] == 'z'
    28054 @@ -21562,6 +22010,9 @@
     29247@@ -21562,6 +22109,9 @@
    2805529248            ++hi;
    2805629249        fp = HI2UF(hi);
     
    2806229255            return fp->uf_name; /* prevents overflow */
    2806329256 
    28064 @@ -21921,8 +22372,12 @@
     29257@@ -21689,7 +22239,7 @@
     29258  * Unreference a Function: decrement the reference count and free it when it
     29259  * becomes zero.  Only for numbered functions.
     29260  */
     29261-    static void
     29262+    void
     29263 func_unref(name)
     29264     char_u     *name;
     29265 {
     29266@@ -21713,7 +22263,7 @@
     29267 /*
     29268  * Count a reference to a Function.
     29269  */
     29270-    static void
     29271+    void
     29272 func_ref(name)
     29273     char_u     *name;
     29274 {
     29275@@ -21792,7 +22342,7 @@
     29276     /*
     29277      * Init l: variables.
     29278      */
     29279-    init_var_dict(&fc->l_vars, &fc->l_vars_var);
     29280+    init_var_dict(&fc->l_vars, &fc->l_vars_var, VAR_DEF_SCOPE);
     29281     if (selfdict != NULL)
     29282     {
     29283        /* Set l:self to "selfdict".  Use "name" to avoid a warning from
     29284@@ -21813,7 +22363,7 @@
     29285      * Set a:0 to "argcount".
     29286      * Set a:000 to a list with room for the "..." arguments.
     29287      */
     29288-    init_var_dict(&fc->l_avars, &fc->l_avars_var);
     29289+    init_var_dict(&fc->l_avars, &fc->l_avars_var, VAR_SCOPE);
     29290     add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
     29291                                (varnumber_T)(argcount - fp->uf_args.ga_len));
     29292     /* Use "name" to avoid a warning from some compiler that checks the
     29293@@ -21921,8 +22471,12 @@
    2806529294                        s = tv2string(&argvars[i], &tofree, numbuf2, 0);
    2806629295                        if (s != NULL)
     
    2807729306                        }
    2807829307                    }
    28079 @@ -22010,8 +22465,12 @@
     29308@@ -22010,8 +22564,12 @@
    2808029309            s = tv2string(fc->rettv, &tofree, numbuf2, 0);
    2808129310            if (s != NULL)
     
    2809229321            }
    2809329322        }
    28094 @@ -22519,18 +22978,21 @@
     29323@@ -22519,18 +23077,21 @@
    2809529324        if (tab != NULL)
    2809629325        {
     
    2811929348                                       (int)(tab - virp->vir_line + 1), TRUE);
    2812029349 #ifdef FEAT_FLOAT
    28121 @@ -22539,9 +23001,28 @@
     29350@@ -22539,9 +23100,28 @@
    2812229351 #endif
    2812329352                else
     
    2814929378        }
    2815029379     }
    28151 @@ -22583,8 +23064,10 @@
     29380@@ -22583,8 +23163,10 @@
    2815229381                    case VAR_STRING: s = "STR"; break;
    2815329382                    case VAR_NUMBER: s = "NUM"; break;
     
    2816129390                }
    2816229391                fprintf(fp, "!%s\t%s\t", this_var->di_key, s);
    28163 @@ -22656,7 +23139,7 @@
     29392@@ -22656,7 +23238,7 @@
    2816429393                    f = -f;
    2816529394                    sign = '-';
     
    2817029399                        || put_eol(fd) == FAIL)
    2817129400                    return FAIL;
    28172 @@ -23019,6 +23502,7 @@
     29401@@ -23019,6 +23601,7 @@
    2817329402     int                c;
    2817429403     int                has_fullname = 0;
     
    2817829407 #endif
    2817929408 
    28180 @@ -23193,24 +23677,25 @@
     29409@@ -23072,6 +23655,27 @@
     29410                return -1;
     29411        }
     29412 
     29413+#ifdef WIN3264
     29414+# if _WIN32_WINNT >= 0x0500
     29415+       if (vim_strchr(*fnamep, '~') != NULL)
     29416+       {
     29417+           /* Expand 8.3 filename to full path.  Needed to make sure the same
     29418+            * file does not have two different names.
     29419+            * Note: problem does not occur if _WIN32_WINNT < 0x0500. */
     29420+           p = alloc(_MAX_PATH + 1);
     29421+           if (p != NULL)
     29422+           {
     29423+               if (GetLongPathName(*fnamep, p, MAXPATHL))
     29424+               {
     29425+                   vim_free(*bufp);
     29426+                   *bufp = *fnamep = p;
     29427+               }
     29428+               else
     29429+                   vim_free(p);
     29430+           }
     29431+       }
     29432+# endif
     29433+#endif
     29434        /* Append a path separator to a directory. */
     29435        if (mch_isdir(*fnamep))
     29436        {
     29437@@ -23193,24 +23797,25 @@
    2818129438     }
    2818229439 
     
    2821129468        {
    2821229469            if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
    28213 @@ -23218,18 +23703,16 @@
     29470@@ -23218,18 +23823,16 @@
    2821429471        }
    2821529472        else
     
    2823429491                    return -1;
    2823529492diff -Naur vim73.orig/src/ex_cmds.c vim73/src/ex_cmds.c
    28236 --- vim73.orig/src/ex_cmds.c    2012-06-03 23:09:52.940007057 +0000
    28237 +++ vim73/src/ex_cmds.c 2012-06-03 23:09:55.848084445 +0000
     29493--- vim73.orig/src/ex_cmds.c    2010-08-13 09:14:35.000000000 +0000
     29494+++ vim73/src/ex_cmds.c 2012-07-20 20:31:18.014311616 +0000
    2823829495@@ -11,10 +11,6 @@
    2823929496  * ex_cmds.c: some functions for command line commands
     
    2870129958-               p = p_rtp;
    2870229959-               while (*p != NUL)
    28703 +           if (strstr((char *)line, "*local-additions*") == NULL)
    28704 +               continue;
    28705 +
    28706 +           /* Go through all directories in 'runtimepath', skipping
    28707 +            * $VIMRUNTIME. */
    28708 +           p = p_rtp;
    28709 +           while (*p != NUL)
    28710 +           {
    28711 +               copy_option_part(&p, NameBuff, MAXPATHL, ",");
    28712 +               mustfree = FALSE;
    28713 +               rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
    28714 +               if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
    28715                 {
     29960-               {
    2871629961-                   copy_option_part(&p, NameBuff, MAXPATHL, ",");
    2871729962-                   mustfree = FALSE;
     
    2872429969-                       char_u  *s;
    2872529970-                       int     fi;
     29971+           if (strstr((char *)line, "*local-additions*") == NULL)
     29972+               continue;
     29973+
     29974+           /* Go through all directories in 'runtimepath', skipping
     29975+            * $VIMRUNTIME. */
     29976+           p = p_rtp;
     29977+           while (*p != NUL)
     29978+           {
     29979+               copy_option_part(&p, NameBuff, MAXPATHL, ",");
     29980+               mustfree = FALSE;
     29981+               rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
     29982+               if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
     29983+               {
    2872629984+                   int         fcount;
    2872729985+                   char_u      **fnames;
     
    2908530343 
    2908630344                /* set values for a defined sign. */
    29087 @@ -6886,6 +7004,8 @@
     30345@@ -6879,6 +6997,16 @@
     30346                lnum = atoi((char *)arg);
     30347                arg = skiptowhite(arg);
     30348            }
     30349+           else if (STRNCMP(arg, "*", 1) == 0 && idx == SIGNCMD_UNPLACE)
     30350+           {
     30351+               if (id != -1)
     30352+               {
     30353+                   EMSG(_(e_invarg));
     30354+                   return;
     30355+               }
     30356+               id = -2;
     30357+               arg = skiptowhite(arg + 1);
     30358+           }
     30359            else if (STRNCMP(arg, "name=", 5) == 0)
     30360            {
     30361                arg += 5;
     30362@@ -6886,6 +7014,8 @@
    2908830363                arg = skiptowhite(arg);
    2908930364                if (*arg != NUL)
     
    2909430369            else if (STRNCMP(arg, "file=", 5) == 0)
    2909530370            {
     30371@@ -6913,7 +7043,7 @@
     30372        {
     30373            EMSG2(_("E158: Invalid buffer name: %s"), arg);
     30374        }
     30375-       else if (id <= 0)
     30376+       else if (id <= 0 && !(idx == SIGNCMD_UNPLACE && id == -2))
     30377        {
     30378            if (lnum >= 0 || sign_name != NULL)
     30379                EMSG(_(e_invarg));
     30380@@ -6954,11 +7084,17 @@
     30381        }
     30382        else if (idx == SIGNCMD_UNPLACE)
     30383        {
     30384-           /* ":sign unplace {id} file={fname}" */
     30385            if (lnum >= 0 || sign_name != NULL)
     30386                EMSG(_(e_invarg));
     30387+           else if (id == -2)
     30388+           {
     30389+               /* ":sign unplace * file={fname}" */
     30390+               redraw_buf_later(buf, NOT_VALID);
     30391+               buf_delete_signs(buf);
     30392+           }
     30393            else
     30394            {
     30395+               /* ":sign unplace {id} file={fname}" */
     30396                lnum = buf_delsign(buf, id);
     30397                update_debug_sign(buf, lnum);
     30398            }
    2909630399diff -Naur vim73.orig/src/ex_cmds.h vim73/src/ex_cmds.h
    29097 --- vim73.orig/src/ex_cmds.h    2012-06-03 23:09:52.948007269 +0000
    29098 +++ vim73/src/ex_cmds.h 2012-06-03 23:09:55.880085297 +0000
     30400--- vim73.orig/src/ex_cmds.h    2010-07-21 13:48:02.000000000 +0000
     30401+++ vim73/src/ex_cmds.h 2012-07-20 20:31:17.920978216 +0000
    2909930402@@ -102,7 +102,7 @@
    2910030403 EX(CMD_aboveleft,      "aboveleft",    ex_wrongmodifier,
     
    2913330436                        NEEDARG|EXTRA|NOTRLCOM),
    2913430437 EX(CMD_saveas,         "saveas",       ex_write,
     30438@@ -944,7 +944,7 @@
     30439 EX(CMD_tabfirst,       "tabfirst",     ex_tabnext,
     30440                        TRLBAR),
     30441 EX(CMD_tabmove,                "tabmove",      ex_tabmove,
     30442-                       RANGE|NOTADR|ZEROR|COUNT|TRLBAR|ZEROR),
     30443+                       RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR),
     30444 EX(CMD_tablast,                "tablast",      ex_tabnext,
     30445                        TRLBAR),
     30446 EX(CMD_tabnext,                "tabnext",      ex_tabnext,
    2913530447@@ -1078,7 +1078,7 @@
    2913630448 EX(CMD_wsverb,         "wsverb",       ex_wsverb,
     
    2914330455 EX(CMD_xit,            "xit",          ex_exit,
    2914430456diff -Naur vim73.orig/src/ex_cmds2.c vim73/src/ex_cmds2.c
    29145 --- vim73.orig/src/ex_cmds2.c   2012-06-03 23:09:52.948007269 +0000
    29146 +++ vim73/src/ex_cmds2.c        2012-06-03 23:09:55.780082635 +0000
     30457--- vim73.orig/src/ex_cmds2.c   2010-07-27 19:43:38.000000000 +0000
     30458+++ vim73/src/ex_cmds2.c        2012-07-20 20:31:17.370977822 +0000
    2914730459@@ -11,10 +11,6 @@
    2914830460  * ex_cmds2.c: some more functions for command line commands
     
    2917530487        if (p == NULL)
    2917630488            return FAIL;
    29177 @@ -694,10 +682,12 @@
     30489@@ -608,10 +596,15 @@
     30490     garray_T   *gap;
     30491 
     30492     gap = &dbg_breakp;
     30493-#ifdef FEAT_PROFILE
     30494     if (eap->cmdidx == CMD_profdel)
     30495+    {
     30496+#ifdef FEAT_PROFILE
     30497        gap = &prof_ga;
     30498+#else
     30499+       ex_ni(eap);
     30500+       return;
     30501 #endif
     30502+    }
     30503 
     30504     if (vim_isdigit(*eap->arg))
     30505     {
     30506@@ -694,10 +687,12 @@
    2917830507        for (i = 0; i < dbg_breakp.ga_len; ++i)
    2917930508        {
     
    2918930518        }
    2919030519 }
    29191 @@ -1119,7 +1109,7 @@
     30520@@ -1119,7 +1114,7 @@
    2919230521 static enum
    2919330522 {
     
    2919830527 
    2919930528 static char *pexpand_cmds[] = {
    29200 @@ -1488,7 +1478,7 @@
     30529@@ -1488,7 +1483,7 @@
    2920130530 #endif
    2920230531 
     
    2920730536  */
    2920830537     void
    29209 @@ -1496,9 +1486,10 @@
     30538@@ -1496,9 +1491,10 @@
    2921030539     buf_T      *buf;
    2921130540     int                checkall;       /* may abandon all changed buffers */
     
    2921930548     dialog_msg(buff, _("Save changes to \"%s\"?"),
    2922030549                        (buf->b_fname != NULL) ?
    29221 @@ -1508,13 +1499,19 @@
     30550@@ -1508,13 +1504,19 @@
    2922230551     else
    2922330552        ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
     
    2924030569     }
    2924130570     else if (ret == VIM_NO)
    29242 @@ -1542,7 +1539,9 @@
     30571@@ -1542,7 +1544,9 @@
    2924330572                /* May get file name, when there is none */
    2924430573                browse_save_fname(buf2);
     
    2925130580 #ifdef FEAT_AUTOCMD
    2925230581                /* an autocommand may have deleted the buffer */
    29253 @@ -1579,6 +1578,26 @@
     30582@@ -1579,6 +1583,26 @@
    2925430583                || forceit);
    2925530584 }
     
    2927830607  * Return TRUE if any buffer was changed and cannot be abandoned.
    2927930608  * That changed buffer becomes the current buffer.
    29280 @@ -1587,32 +1606,64 @@
     30609@@ -1587,32 +1611,64 @@
    2928130610 check_changed_any(hidden)
    2928230611     int                hidden;         /* Only check hidden buffers */
     
    2935830687 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
    2935930688     /*
    29360 @@ -1645,24 +1696,29 @@
     30689@@ -1645,24 +1701,29 @@
    2936130690 #ifdef FEAT_WINDOWS
    2936230691     /* Try to find a window that contains the buffer. */
     
    2939330722 
    2939430723 /*
    29395 @@ -1949,7 +2005,7 @@
     30724@@ -1789,22 +1850,28 @@
     30725 #if defined(FEAT_QUICKFIX) || defined(FEAT_SYN_HL) || defined(PROTO)
     30726 /*
     30727  * Parse a list of arguments (file names), expand them and return in
     30728- * "fnames[fcountp]".
     30729+ * "fnames[fcountp]".  When "wig" is TRUE, removes files matching 'wildignore'.
     30730  * Return FAIL or OK.
     30731  */
     30732     int
     30733-get_arglist_exp(str, fcountp, fnamesp)
     30734+get_arglist_exp(str, fcountp, fnamesp, wig)
     30735     char_u     *str;
     30736     int                *fcountp;
     30737     char_u     ***fnamesp;
     30738+    int                wig;
     30739 {
     30740     garray_T   ga;
     30741     int                i;
     30742 
     30743     if (get_arglist(&ga, str) == FAIL)
     30744        return FAIL;
     30745-    i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
     30746-                                      fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
     30747+    if (wig == TRUE)
     30748+       i = expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
     30749+                                       fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
     30750+    else
     30751+       i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
     30752+                                       fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
     30753+
     30754     ga_clear(&ga);
     30755     return i;
     30756 }
     30757@@ -1949,7 +2016,7 @@
    2939630758 }
    2939730759 
     
    2940230764  */
    2940330765     static int
    29404 @@ -2165,9 +2221,7 @@
     30766@@ -2165,9 +2232,7 @@
    2940530767        {
    2940630768            if (win_split(0, 0) == FAIL)
     
    2941330775        else
    2941430776 #endif
    29415 @@ -2946,11 +3000,7 @@
     30777@@ -2422,7 +2487,7 @@
     30778                /* go to window "tp" */
     30779                if (!valid_tabpage(tp))
     30780                    break;
     30781-               goto_tabpage_tp(tp);
     30782+               goto_tabpage_tp(tp, TRUE);
     30783                tp = tp->tp_next;
     30784            }
     30785 #endif
     30786@@ -2946,11 +3011,7 @@
    2941630787     proftime_T             wait_start;
    2941730788 #endif
     
    2942530796        return retval;
    2942630797     fname_exp = fix_fname(p);
    29427 @@ -3286,7 +3336,11 @@
     30798@@ -3286,7 +3347,11 @@
    2942830799 
    2942930800     for (i = 1; i <= script_items.ga_len && !got_int; ++i)
     
    2943830809 
    2943930810 # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
    29440 @@ -3412,7 +3466,7 @@
     30811@@ -3412,7 +3477,7 @@
    2944130812 {
    2944230813     struct source_cookie *sp = (struct source_cookie *)cookie;
     
    2944730818 #ifdef FEAT_EVAL
    2944830819     /* If breakpoints have been added/deleted need to check for it. */
    29449 @@ -3451,28 +3505,49 @@
     30820@@ -3451,28 +3516,49 @@
    2945030821     {
    2945130822        /* compensate for the one line read-ahead */
     
    2951230883        s = string_convert(&sp->conv, line, NULL);
    2951330884        if (s != NULL)
    29514 @@ -4166,11 +4241,90 @@
     30885@@ -4166,11 +4252,90 @@
    2951530886            /* Set v:lang, v:lc_time and v:ctype to the final result. */
    2951630887            set_lang_var();
     
    2960330974  * Function given to ExpandGeneric() to obtain the possible arguments of the
    2960430975  * ":language" command.
    29605 @@ -4186,7 +4340,25 @@
     30976@@ -4186,7 +4351,25 @@
    2960630977        return (char_u *)"ctype";
    2960730978     if (idx == 2)
     
    2963131002 
    2963231003diff -Naur vim73.orig/src/ex_docmd.c vim73/src/ex_docmd.c
    29633 --- vim73.orig/src/ex_docmd.c   2012-06-03 23:09:52.924006631 +0000
    29634 +++ vim73/src/ex_docmd.c        2012-06-03 23:09:55.824083805 +0000
     31004--- vim73.orig/src/ex_docmd.c   2010-08-07 14:59:47.000000000 +0000
     31005+++ vim73/src/ex_docmd.c        2012-07-20 20:31:18.217645094 +0000
    2963531006@@ -61,6 +61,7 @@
    2963631007 static char_u  *do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie));
     
    3026331634        uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
    3026431635                                                                eap->forceit);
    30265 @@ -5888,7 +5983,14 @@
     31636@@ -5750,8 +5845,14 @@
     31637        }
     31638        else
     31639        {
     31640+#ifdef FEAT_MBYTE
     31641+           int charlen = (*mb_ptr2len)(p);
     31642+           len += charlen;
     31643+           p += charlen;
     31644+#else
     31645            ++len;
     31646            ++p;
     31647+#endif
     31648        }
     31649     }
     31650 
     31651@@ -5794,7 +5895,7 @@
     31652        }
     31653        else
     31654        {
     31655-           *q++ = *p++;
     31656+           MB_COPY_CHAR(p, q);
     31657        }
     31658     }
     31659     *q++ = '"';
     31660@@ -5888,7 +5989,14 @@
    3026631661            result = STRLEN(eap->arg) + 2;
    3026731662            for (p = eap->arg; *p; ++p)
     
    3027931674            }
    3028031675 
    30281 @@ -5897,7 +5999,14 @@
     31676@@ -5897,7 +6005,14 @@
    3028231677                *buf++ = '"';
    3028331678                for (p = eap->arg; *p; ++p)
     
    3029531690                    *buf++ = *p;
    3029631691                }
    30297 @@ -6039,15 +6148,17 @@
     31692@@ -6039,15 +6154,17 @@
    3029831693                end = vim_strchr(start + 1, '>');
    3029931694            if (buf != NULL)
     
    3031631711                     * do_cmdline() doesn't handle that, so convert it back.
    3031731712                     * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */
    30318 @@ -6439,7 +6550,7 @@
     31713@@ -6347,7 +6464,10 @@
     31714        return;
     31715     }
     31716 #ifdef FEAT_AUTOCMD
     31717-    if (curbuf_locked())
     31718+    apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
     31719+    /* Refuse to quick when locked or when the buffer in the last window is
     31720+     * being closed (can only happen in autocommands). */
     31721+    if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
     31722        return;
     31723 #endif
     31724 
     31725@@ -6439,7 +6559,7 @@
    3031931726 {
    3032031727 # ifdef FEAT_CMDWIN
     
    3032531732 # endif
    3032631733        if (!text_locked()
    30327 @@ -6897,9 +7008,7 @@
     31734@@ -6897,9 +7017,7 @@
    3032831735 # ifdef FEAT_WINDOWS
    3032931736        if (win_split(0, 0) == FAIL)
     
    3033631743        /* When splitting the window, create a new alist.  Otherwise the
    3033731744         * existing one is overwritten. */
    30338 @@ -7026,7 +7135,7 @@
     31745@@ -7026,7 +7144,7 @@
    3033931746        old_arg_count = GARGCOUNT;
    3034031747        if (expand_wildcards(old_arg_count, old_arg_files,
     
    3034531752        {
    3034631753            alist_set(&global_alist, new_arg_file_count, new_arg_files,
    30347 @@ -7299,7 +7408,9 @@
     31754@@ -7299,7 +7417,9 @@
    3034831755                || cmdmod.browse
    3034931756 #  endif
     
    3035631763            do_check_scrollbind(FALSE);
    3035731764 # endif
    30358 @@ -8122,6 +8233,12 @@
     31765@@ -7364,7 +7484,42 @@
     31766 ex_tabmove(eap)
     31767     exarg_T    *eap;
     31768 {
     31769-    tabpage_move(eap->addr_count == 0 ? 9999 : (int)eap->line2);
     31770+    int tab_number = 9999;
     31771+
     31772+    if (eap->arg && *eap->arg != NUL)
     31773+    {
     31774+       char_u *p = eap->arg;
     31775+       int    relative = 0; /* argument +N/-N means: move N places to the
     31776+                             * right/left relative to the current position. */
     31777+
     31778+       if (*eap->arg == '-')
     31779+       {
     31780+           relative = -1;
     31781+           p = eap->arg + 1;
     31782+       }
     31783+       else if (*eap->arg == '+')
     31784+       {
     31785+           relative = 1;
     31786+           p = eap->arg + 1;
     31787+       }
     31788+       else
     31789+           p = eap->arg;
     31790+
     31791+       if (p == skipdigits(p))
     31792+       {
     31793+           /* No numbers as argument. */
     31794+           eap->errmsg = e_invarg;
     31795+           return;
     31796+       }
     31797+
     31798+       tab_number = getdigits(&p);
     31799+       if (relative != 0)
     31800+           tab_number = tab_number * relative + tabpage_index(curtab) - 1;;
     31801+    }
     31802+    else if (eap->addr_count != 0)
     31803+       tab_number = eap->line2;
     31804+
     31805+    tabpage_move(tab_number);
     31806 }
     31807 
     31808 /*
     31809@@ -8122,6 +8277,12 @@
    3035931810     {
    3036031811        ui_delay(msec - done > 1000L ? 1000L : msec - done, TRUE);
     
    3036931820 }
    3037031821 
    30371 @@ -8193,7 +8310,7 @@
     31822@@ -8193,7 +8354,7 @@
    3037231823     p = skipwhite(p);
    3037331824     if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
     
    3037831829        /* Pass flags on for ":vertical wincmd ]". */
    3037931830        postponed_split_flags = cmdmod.split;
    30380 @@ -8907,35 +9024,42 @@
     31831@@ -8428,7 +8589,7 @@
     31832        }
     31833        ++eap->line2;
     31834     }
     31835-    (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE);
     31836+    (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE, TRUE);
     31837     beginline(BL_WHITE | BL_FIX);
     31838     ex_may_print(eap);
     31839 }
     31840@@ -8907,35 +9068,42 @@
    3038131841                failed = TRUE;
    3038231842            if (eap->cmdidx == CMD_mksession)
     
    3044531905            }
    3044631906            else
    30447 @@ -8966,10 +9090,15 @@
     31907@@ -8966,10 +9134,15 @@
    3044831908        else if (eap->cmdidx == CMD_mksession)
    3044931909        {
     
    3046431924 #endif
    3046531925 #ifdef MKSESSION_NL
    30466 @@ -9295,7 +9424,7 @@
     31926@@ -9295,7 +9468,7 @@
    3046731927                                                                  && !got_int)
    3046831928     {
     
    3047331933 }
    3047431934 #endif
    30475 @@ -9393,7 +9522,7 @@
     31935@@ -9393,7 +9566,7 @@
    3047631936 ex_ptag(eap)
    3047731937     exarg_T    *eap;
     
    3048231942 }
    3048331943 
    30484 @@ -9525,17 +9654,23 @@
     31944@@ -9525,17 +9698,23 @@
    3048531945 #define SPEC_CFILE  4
    3048631946                    "<sfile>",          /* ":so" file name */
     
    3051031970     };
    3051131971 
    30512 @@ -9560,6 +9695,7 @@
     31972@@ -9560,6 +9739,7 @@
    3051331973  *       '<cWORD>' to WORD under the cursor
    3051431974  *       '<cfile>' to path name under the cursor
     
    3051831978  *       '<abuf>'  to buffer number for autocommand
    3051931979  *       '<amatch>' to matching name for autocommand
    30520 @@ -9591,10 +9727,7 @@
     31980@@ -9591,10 +9771,7 @@
    3052131981 #ifdef FEAT_MODIFY_FNAME
    3052231982     int                skip_mod = FALSE;
     
    3052931989     *errormsg = NULL;
    3053031990     if (escaped != NULL)
    30531 @@ -9653,14 +9786,7 @@
     31991@@ -9653,14 +9830,7 @@
    3053231992                    valid = 0;      /* Must have ":p:h" to be valid */
    3053331993                }
     
    3054432004 
    3054532005        case SPEC_HASH:         /* '#' or "#99": alternate file */
    30546 @@ -9783,6 +9909,15 @@
     32006@@ -9783,6 +9953,15 @@
    3054732007                    return NULL;
    3054832008                }
     
    3056032020        case SPEC_CLIENT:       /* Source of last submitted input */
    3056132021                sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
    30562 @@ -9796,11 +9931,7 @@
     32022@@ -9796,11 +9975,7 @@
    3056332023        if (src[*usedlen] == '<')       /* remove the file name extension */
    3056432024        {
     
    3057232032        }
    3057332033 #ifdef FEAT_MODIFY_FNAME
    30574 @@ -10645,7 +10776,7 @@
     32034@@ -10645,7 +10820,7 @@
    3057532035     unsigned   *flagp;
    3057632036 {
     
    3058132041 
    3058232042     if (gap->ga_len == 0)
    30583 @@ -10660,11 +10791,19 @@
     32043@@ -10660,11 +10835,19 @@
    3058432044        {
    3058532045            if (fullname)
     
    3060332063     }
    3060432064     return put_eol(fd);
    30605 @@ -10707,7 +10846,7 @@
     32065@@ -10707,7 +10890,7 @@
    3060632066  * Write a file name to the session file.
    3060732067  * Takes care of the "slash" option in 'sessionoptions' and escapes special
     
    3061232072     static int
    3061332073 ses_put_fname(fd, name, flagp)
    30614 @@ -10716,49 +10855,32 @@
     32074@@ -10716,49 +10899,32 @@
    3061532075     unsigned   *flagp;
    3061632076 {
     
    3068232142 }
    3068332143 
    30684 @@ -10826,8 +10948,7 @@
     32144@@ -10826,8 +10992,7 @@
    3068532145            else if (vim_ispathsep(*p))
    3068632146            {
     
    3069232152                    *s++ = '-';
    3069332153                else
    30694 @@ -10910,7 +11031,7 @@
     32154@@ -10910,7 +11075,7 @@
    3069532155 
    3069632156 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
     
    3070132161  */
    3070232162     void
    30703 @@ -10921,7 +11042,7 @@
     32163@@ -10921,7 +11086,7 @@
    3070432164 {
    3070532165     if (fname == NULL)
     
    3071132171 
    3071232172diff -Naur vim73.orig/src/ex_getln.c vim73/src/ex_getln.c
    30713 --- vim73.orig/src/ex_getln.c   2012-06-03 23:09:52.956007482 +0000
    30714 +++ vim73/src/ex_getln.c        2012-06-03 23:09:55.884085403 +0000
     32173--- vim73.orig/src/ex_getln.c   2010-08-14 15:25:45.000000000 +0000
     32174+++ vim73/src/ex_getln.c        2012-07-20 20:31:17.557644623 +0000
    3071532175@@ -25,7 +25,7 @@
    3071632176     int                cmdlen;         /* number of chars in command line */
     
    3089332353     }
    3089432354 
    30895 @@ -2843,6 +2888,7 @@
     32355@@ -2719,6 +2764,11 @@
     32356     msg_no_more = TRUE;
     32357     if (ccline.cmdlen == ccline.cmdpos)
     32358        msg_putchar(' ');
     32359+#ifdef FEAT_MBYTE
     32360+    else if (has_mbyte)
     32361+       draw_cmdline(ccline.cmdpos,
     32362+                              (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos));
     32363+#endif
     32364     else
     32365        draw_cmdline(ccline.cmdpos, 1);
     32366     msg_no_more = FALSE;
     32367@@ -2843,6 +2893,7 @@
    3089632368        {
    3089732369            msg_no_more = TRUE;
     
    3090132373            /* Avoid clearing the rest of the line too often. */
    3090232374            if (cmdline_row != i || ccline.overstrike)
    30903 @@ -3023,7 +3069,7 @@
     32375@@ -3023,7 +3074,7 @@
    3090432376            int     len;
    3090532377 
     
    3091032382 #ifdef FEAT_MBYTE
    3091132383                if (has_mbyte)
    30912 @@ -3041,7 +3087,7 @@
     32384@@ -3041,7 +3092,7 @@
    3091332385                    --w;
    3091432386                }
     
    3091932391                p += len;
    3092032392        }
    30921 @@ -3258,6 +3304,24 @@
     32393@@ -3082,7 +3133,8 @@
     32394            else
     32395 #endif
     32396                c = *s++;
     32397-           if (cv == Ctrl_V || c == ESC || c == Ctrl_C || c == CAR || c == NL
     32398+           if (cv == Ctrl_V || c == ESC || c == Ctrl_C
     32399+                   || c == CAR || c == NL || c == Ctrl_L
     32400 #ifdef UNIX
     32401                    || c == intr_char
     32402 #endif
     32403@@ -3258,6 +3310,24 @@
    3092232404     return check_abbr(c, ccline.cmdbuff, ccline.cmdpos, 0);
    3092332405 }
     
    3094432426  * Return FAIL if this is not an appropriate context in which to do
    3094532427  * completion of anything, return OK if it is (even if there are no matches).
    30946 @@ -3316,10 +3380,14 @@
     32428@@ -3316,10 +3386,14 @@
    3094732429            p2 = NULL;
    3094832430        else
     
    3096132443            /* longest match: make sure it is not shorter, happens with :help */
    3096232444            if (p2 != NULL && type == WILD_LONGEST)
    30963 @@ -3396,6 +3464,7 @@
     32445@@ -3396,6 +3470,7 @@
    3096432446  * mode = WILD_PREV:       use previous match in multiple match, wrap to first
    3096532447  * mode = WILD_ALL:        return all matches concatenated
     
    3096932451  * options = WILD_LIST_NOTFOUND:    list entries without a match
    3097032452  * options = WILD_HOME_REPLACE:            do home_replace() for buffer names
    30971 @@ -3405,6 +3474,7 @@
     32453@@ -3405,6 +3480,7 @@
    3097232454  * options = WILD_KEEP_ALL:        don't remove 'wildignore' entries
    3097332455  * options = WILD_SILENT:          don't print warning messages
     
    3097732459  * The variables xp->xp_context and xp->xp_backslash must have been set!
    3097832460  */
    30979 @@ -3518,7 +3588,8 @@
     32461@@ -3518,7 +3594,8 @@
    3098032462            /*
    3098132463             * Check for matching suffixes in file names.
     
    3098732469                if (xp->xp_numfiles)
    3098832470                    non_suf_match = xp->xp_numfiles;
    30989 @@ -3674,6 +3745,7 @@
     32471@@ -3674,6 +3751,7 @@
    3099032472     if (options & WILD_ESCAPE)
    3099132473     {
     
    3099532477                || xp->xp_context == EXPAND_BUFFERS
    3099632478                || xp->xp_context == EXPAND_DIRECTORIES)
    30997 @@ -4338,6 +4410,7 @@
     32479@@ -4338,6 +4416,7 @@
    3099832480     char_u     ***matches;     /* return: array of pointers to matches */
    3099932481 {
     
    3100332485     if (xp->xp_context == EXPAND_UNSUCCESSFUL)
    3100432486     {
    31005 @@ -4356,9 +4429,11 @@
     32487@@ -4356,9 +4435,11 @@
    3100632488     if (file_str == NULL)
    3100732489        return EXPAND_UNSUCCESSFUL;
     
    3101732499        *matchcount = 0;
    3101832500        *matches = NULL;
    31019 @@ -4410,7 +4485,7 @@
     32501@@ -4410,7 +4491,7 @@
    3102032502     char_u     *pat;
    3102132503     int                *num_file;
     
    3102632508 #ifdef FEAT_CMDL_COMPL
    3102732509     regmatch_T regmatch;
    31028 @@ -4464,6 +4539,9 @@
     32510@@ -4464,6 +4545,9 @@
    3102932511            flags |= (EW_FILE | EW_PATH);
    3103032512        else
     
    3103632518        ret = expand_wildcards_eval(&pat, num_file, file, flags);
    3103732519        if (free_pat)
    31038 @@ -4501,13 +4579,25 @@
     32520@@ -4501,13 +4585,25 @@
    3103932521            || xp->xp_context == EXPAND_TAGS_LISTFILES)
    3104032522        return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
     
    3106632548     if (xp->xp_context == EXPAND_USER_LIST)
    3106732549        return ExpandUserList(xp, num_file, file);
    31068 @@ -4536,48 +4626,53 @@
     32550@@ -4536,48 +4632,53 @@
    3106932551            int         context;
    3107032552            char_u      *((*func)__ARGS((expand_T *, int)));
     
    3114132623        int     i;
    3114232624 
    31143 @@ -4591,7 +4686,8 @@
     32625@@ -4591,7 +4692,8 @@
    3114432626            {
    3114532627                if (tab[i].ic)
     
    3114732629-               ret = ExpandGeneric(xp, &regmatch, num_file, file, tab[i].func);
    3114832630+               ret = ExpandGeneric(xp, &regmatch, num_file, file,
    31149 +                                                tab[i].func, tab[i].escaped);
     32631+                                               tab[i].func, tab[i].escaped);
    3115032632                break;
    3115132633            }
    3115232634     }
    31153 @@ -4613,13 +4709,14 @@
     32635@@ -4613,13 +4715,14 @@
    3115432636  * Returns OK when no problems encountered, FAIL for error (out of memory).
    3115532637  */
     
    3116732649     int                i;
    3116832650     int                count = 0;
    31169 @@ -4644,7 +4741,10 @@
     32651@@ -4644,7 +4747,10 @@
    3117032652            {
    3117132653                if (round)
     
    3117932661 #ifdef FEAT_MENU
    3118032662                    if (func == get_menu_names && str != NULL)
    31181 @@ -4676,7 +4776,16 @@
     32663@@ -4676,7 +4782,16 @@
    3118232664 
    3118332665     /* Sort the results.  Keep menu's in the specified order. */
     
    3119732679 #ifdef FEAT_CMDL_COMPL
    3119832680     /* Reset the variables used for special highlight names expansion, so that
    31199 @@ -4728,7 +4837,11 @@
     32681@@ -4728,7 +4843,11 @@
    3120032682                            || (pat[1] == '.' && vim_ispathsep(pat[2])))))
    3120132683        path = (char_u *)".";
     
    3120932691     /*
    3121032692      * Go over all directories in $PATH.  Expand matches in that directory and
    31211 @@ -4949,57 +5062,68 @@
     32693@@ -4949,57 +5068,68 @@
    3121232694 /*
    3121332695  * Expand color scheme, compiler or filetype names:
     
    3130032782-    vim_free(all);
    3130132783+    if (ga.ga_len == 0)
    31302 +        return FAIL;
     32784+       return FAIL;
    3130332785 
    3130432786     /* Sort and remove duplicates which can happen when specifying multiple
     
    3130832790 
    3130932791     *file = ga.ga_data;
    31310 @@ -5127,6 +5251,34 @@
     32792@@ -5127,6 +5257,34 @@
    3131132793     NULL
    3131232794 };
     
    3134332825  * init_history() - Initialize the command line history.
    3134432826  * Also used to re-allocate the history when the size changes.
    31345 @@ -5220,13 +5372,15 @@
     32827@@ -5220,13 +5378,15 @@
    3134632828  * If 'move_to_front' is TRUE, matching entry is moved to end of history.
    3134732829  */
     
    3136032842     if (hisidx[type] < 0)
    3136132843        return FALSE;
    31362 @@ -5235,7 +5389,12 @@
     32844@@ -5235,7 +5395,12 @@
    3136332845     {
    3136432846        if (history[type][i].hisstr == NULL)
     
    3137432856            if (!move_to_front)
    3137532857                return TRUE;
    31376 @@ -5329,7 +5488,7 @@
     32858@@ -5329,7 +5494,7 @@
    3137732859        }
    3137832860        last_maptick = -1;
     
    3138332865        if (++hisidx[histype] == hislen)
    3138432866            hisidx[histype] = 0;
    31385 @@ -5803,7 +5962,7 @@
     32867@@ -5803,7 +5968,7 @@
    3138632868                                                              hist[i].hisnum);
    3138732869                    if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
     
    3139232874                        STRCAT(IObuff, hist[i].hisstr);
    3139332875                    msg_outtrans(IObuff);
    31394 @@ -5907,8 +6066,10 @@
     32876@@ -5907,8 +6072,10 @@
    3139532877        val = viminfo_readstring(virp, 1, TRUE);
    3139632878        if (val != NULL && *val != NUL)
     
    3140432886                /* Need to re-allocate to append the separator byte. */
    3140532887                len = STRLEN(val);
    31406 @@ -5920,7 +6081,7 @@
     32888@@ -5920,7 +6087,7 @@
    3140732889                        /* Search entry: Move the separator from the first
    3140832890                         * column to after the NUL. */
     
    3141332895                    else
    3141432896                    {
    31415 @@ -6147,9 +6308,7 @@
     32897@@ -6147,9 +6314,7 @@
    3141632898     curwin->w_p_rl = cmdmsg_rl;
    3141732899     cmdmsg_rl = FALSE;
     
    3142432906 # ifdef FEAT_AUTOCMD
    3142532907     /* Do execute autocommands for setting the filetype (load syntax). */
    31426 @@ -6287,6 +6446,12 @@
     32908@@ -6287,6 +6452,12 @@
    3142732909            ccline.cmdbuff = vim_strsave((char_u *)"qa");
    3142832910            cmdwin_result = CAR;
     
    3143732919            ccline.cmdbuff = vim_strsave(ml_get_curline());
    3143832920        if (ccline.cmdbuff == NULL)
    31439 @@ -6317,7 +6482,7 @@
     32921@@ -6317,7 +6488,7 @@
    3144032922        /* win_close() may have already wiped the buffer when 'bh' is
    3144132923         * set to 'wipe' */
     
    3144632928        /* Restore window sizes. */
    3144732929        win_size_restore(&winsizes);
     32930diff -Naur vim73.orig/src/farsi.c vim73/src/farsi.c
     32931--- vim73.orig/src/farsi.c      2010-05-15 11:04:10.000000000 +0000
     32932+++ vim73/src/farsi.c   2012-07-20 20:31:18.224311766 +0000
     32933@@ -1813,7 +1813,7 @@
     32934                ptr[i] = toF_leading(ptr[i]);
     32935                ++i;
     32936 
     32937-               while(canF_Rjoin(ptr[i]) && (i < llen))
     32938+               while (canF_Rjoin(ptr[i]) && i < llen)
     32939                {
     32940                    ptr[i] = toF_Rjoin(ptr[i]);
     32941                    if (F_isterm(ptr[i]) || !F_isalpha(ptr[i]))
    3144832942diff -Naur vim73.orig/src/feature.h vim73/src/feature.h
    31449 --- vim73.orig/src/feature.h    2012-06-03 23:09:52.952007375 +0000
    31450 +++ vim73/src/feature.h 2012-06-03 23:09:55.760082103 +0000
     32943--- vim73.orig/src/feature.h    2010-07-27 19:45:42.000000000 +0000
     32944+++ vim73/src/feature.h 2012-07-20 20:31:15.827643384 +0000
    3145132945@@ -506,15 +506,6 @@
    3145232946 #endif
     
    3151633010+#endif
    3151733011diff -Naur vim73.orig/src/fileio.c vim73/src/fileio.c
    31518 --- vim73.orig/src/fileio.c     2012-06-03 23:09:52.924006631 +0000
    31519 +++ vim73/src/fileio.c  2012-06-03 23:09:55.800083168 +0000
     33012--- vim73.orig/src/fileio.c     2010-08-14 12:20:54.000000000 +0000
     33013+++ vim73/src/fileio.c  2012-07-20 20:31:18.164311724 +0000
    3152033014@@ -11,14 +11,6 @@
    3152133015  * fileio.c: read from and write to a file
     
    3197433468 #  else
    3197533469     char_u     *p;
    31976 @@ -7682,6 +7674,7 @@
     33470@@ -7651,6 +7643,7 @@
     33471     {"CmdwinEnter",    EVENT_CMDWINENTER},
     33472     {"CmdwinLeave",    EVENT_CMDWINLEAVE},
     33473     {"ColorScheme",    EVENT_COLORSCHEME},
     33474+    {"CompleteDone",   EVENT_COMPLETEDONE},
     33475     {"CursorHold",     EVENT_CURSORHOLD},
     33476     {"CursorHoldI",    EVENT_CURSORHOLDI},
     33477     {"CursorMoved",    EVENT_CURSORMOVED},
     33478@@ -7682,9 +7675,11 @@
    3197733479     {"InsertChange",   EVENT_INSERTCHANGE},
    3197833480     {"InsertEnter",    EVENT_INSERTENTER},
     
    3198233484     {"QuickFixCmdPost",        EVENT_QUICKFIXCMDPOST},
    3198333485     {"QuickFixCmdPre", EVENT_QUICKFIXCMDPRE},
    31984 @@ -8744,6 +8737,8 @@
     33486+    {"QuitPre",                EVENT_QUITPRE},
     33487     {"RemoteReply",    EVENT_REMOTEREPLY},
     33488     {"SessionLoadPost",        EVENT_SESSIONLOADPOST},
     33489     {"ShellCmdPost",   EVENT_SHELLCMDPOST},
     33490@@ -8744,6 +8739,8 @@
    3198533491     int                retval;
    3198633492     aco_save_T aco;
     
    3199133497     /*
    3199233498      * This is a bit tricky: For some commands curwin->w_buffer needs to be
    31993 @@ -8760,11 +8755,15 @@
     33499@@ -8760,11 +8757,15 @@
    3199433500            aucmd_prepbuf(&aco, buf);
    3199533501 
     
    3201133517            /* restore the current window */
    3201233518            aucmd_restbuf(&aco);
    32013 @@ -8779,6 +8778,23 @@
     33519@@ -8779,6 +8780,23 @@
    3201433520 }
    3201533521 
     
    3203533541  * Search for a visible window containing the current buffer.  If there isn't
    3203633542  * one then use "aucmd_win".
    32037 @@ -8903,10 +8919,11 @@
     33543@@ -8901,12 +8919,13 @@
     33544                if (wp == aucmd_win)
     33545                {
    3203833546                    if (tp != curtab)
    32039                         goto_tabpage_tp(tp);
     33547-                       goto_tabpage_tp(tp);
     33548+                       goto_tabpage_tp(tp, TRUE);
    3204033549                    win_goto(aucmd_win);
    3204133550-                   break;
     
    3204833557        /* Remove the window and frame from the tree of frames. */
    3204933558        (void)winframe_remove(curwin, &dummy, NULL);
    32050 @@ -8965,6 +8982,10 @@
     33559@@ -8965,6 +8984,10 @@
    3205133560                    && buf_valid(aco->new_curbuf)
    3205233561                    && aco->new_curbuf->b_ml.ml_mfp != NULL)
     
    3205933568                curbuf = aco->new_curbuf;
    3206033569                curwin->w_buffer = curbuf;
    32061 @@ -9063,7 +9084,10 @@
     33570@@ -9063,7 +9086,10 @@
    3206233571 {
    3206333572     int                state;
     
    3207133580            && !ins_compl_active()
    3207233581 #endif
    32073 @@ -9094,6 +9118,15 @@
     33582@@ -9094,6 +9120,15 @@
    3207433583     return (first_autopat[(int)EVENT_CURSORMOVEDI] != NULL);
    3207533584 }
     
    3208733596 apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
    3208833597     event_T    event;
    32089 @@ -9954,6 +9987,8 @@
     33598@@ -9954,6 +9989,8 @@
    3209033599            if ((c == ';' || c == '>') && match == FALSE)
    3209133600            {
     
    3209633605                *pattern = c;       /* Restore the terminator */
    3209733606                type_start = pattern + 1;
    32098 @@ -10181,19 +10216,11 @@
     33607@@ -10181,19 +10218,11 @@
    3209933608                    ++p;
    3210033609                break;
     
    3211633625                break;
    3211733626            case '\\':
    32118 @@ -10304,3 +10331,55 @@
     33627@@ -10304,3 +10333,55 @@
    3211933628     }
    3212033629     return reg_pat;
     
    3217333682+#endif
    3217433683diff -Naur vim73.orig/src/fold.c vim73/src/fold.c
    32175 --- vim73.orig/src/fold.c       2012-06-03 23:09:52.944007163 +0000
    32176 +++ vim73/src/fold.c    2012-06-03 23:09:55.544076354 +0000
     33684--- vim73.orig/src/fold.c       2010-06-22 04:20:24.000000000 +0000
     33685+++ vim73/src/fold.c    2012-07-20 20:31:15.170976247 +0000
    3217733686@@ -1033,10 +1033,10 @@
    3217833687  * Init the fold info in a new window.
     
    3232233831 /* }}}1 */
    3232333832diff -Naur vim73.orig/src/getchar.c vim73/src/getchar.c
    32324 --- vim73.orig/src/getchar.c    2012-06-03 23:09:52.952007375 +0000
    32325 +++ vim73/src/getchar.c 2012-06-03 23:09:55.936086788 +0000
     33833--- vim73.orig/src/getchar.c    2010-08-08 13:00:33.000000000 +0000
     33834+++ vim73/src/getchar.c 2012-07-20 20:31:16.570977250 +0000
    3232633835@@ -418,12 +418,12 @@
    3232733836 
     
    3261134120                                            : p_tm)), typebuf.tb_change_cnt);
    3261234121 
    32613 @@ -3168,6 +3188,7 @@
     34122@@ -2799,7 +2819,8 @@
     34123                        edit_unputchar();
     34124                    if (State & CMDLINE)
     34125                        unputcmdline();
     34126-                   setcursor();        /* put cursor back where it belongs */
     34127+                   else
     34128+                       setcursor();    /* put cursor back where it belongs */
     34129                }
     34130 
     34131                if (c < 0)
     34132@@ -3168,6 +3189,7 @@
    3261434133     int                expr = FALSE;
    3261534134 #endif
     
    3261934138     keys = arg;
    3262034139     map_table = maphash;
    32621 @@ -3251,9 +3272,9 @@
     34140@@ -3251,9 +3273,9 @@
    3262234141     validate_maphash();
    3262334142 
     
    3263134150     p = keys;
    3263234151     do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
    32633 @@ -3266,6 +3287,7 @@
     34152@@ -3266,6 +3288,7 @@
    3263434153     }
    3263534154     if (*p != NUL)
     
    3263934158     rhs = p;
    3264034159     hasarg = (*rhs != NUL);
    32641 @@ -3288,6 +3310,7 @@
     34160@@ -3288,6 +3311,7 @@
    3264234161      */
    3264334162     if (haskey)
     
    3264734166     {
    3264834167        if (STRICMP(rhs, "<nop>") == 0)     /* "<Nop>" means nothing */
    32649 @@ -3298,7 +3321,7 @@
     34168@@ -3298,7 +3322,7 @@
    3265034169 
    3265134170 #ifdef FEAT_FKMAP
     
    3265634175      */
    3265734176     if (p_altkeymap && curwin->w_p_rl)
    32658 @@ -3556,6 +3579,8 @@
     34177@@ -3556,6 +3580,8 @@
    3265934178                                }
    3266034179                                vim_free(mp->m_str);
     
    3266534184                                mp->m_silent = silent;
    3266634185                                mp->m_mode = mode;
    32667 @@ -3633,10 +3658,12 @@
     34186@@ -3633,10 +3659,12 @@
    3266834187 
    3266934188     mp->m_keys = vim_strsave(keys);
     
    3267834197        retval = 4;     /* no mem */
    3267934198        goto theend;
    32680 @@ -3682,6 +3709,7 @@
     34199@@ -3682,6 +3710,7 @@
    3268134200     mp = *mpp;
    3268234201     vim_free(mp->m_keys);
     
    3268634205     vim_free(mp);
    3268734206 }
    32688 @@ -3851,12 +3879,57 @@
     34207@@ -3851,12 +3880,57 @@
    3268934208     }
    3269034209 }
     
    3274534264     if (msg_didout || msg_silent != 0)
    3274634265     {
    32747 @@ -3864,49 +3937,15 @@
     34266@@ -3864,49 +3938,15 @@
    3274834267        if (got_int)        /* 'q' typed at MORE prompt */
    3274934268            return;
     
    3280234321        msg_putchar(' ');
    3280334322 
    32804 @@ -3931,12 +3970,21 @@
     34323@@ -3931,12 +3971,21 @@
    3280534324        msg_putchar(' ');
    3280634325 
     
    3282734346     if (p_verbose > 0)
    3282834347        last_set_msg(mp->m_script_ID);
    32829 @@ -4287,11 +4335,7 @@
     34348@@ -4287,11 +4336,7 @@
    3283034349     int                scol;           /* starting column of the abbr. */
    3283134350     int                j;
     
    3283934358 #ifdef FEAT_LOCALMAP
    3284034359     mapblock_T *mp2;
    32841 @@ -4304,8 +4348,9 @@
     34360@@ -4304,8 +4349,9 @@
    3284234361 
    3284334362     if (typebuf.tb_no_abbr_cnt)        /* abbrev. are not recursive */
     
    3285134370 
    3285234371     /*
    32853 @@ -4478,12 +4523,25 @@
     34372@@ -4478,12 +4524,25 @@
    3285434373 {
    3285534374     char_u     *res;
     
    3287734396     /* Forbid changing text or using ":normal" to avoid most of the bad side
    3287834397      * effects.  Also restore the cursor position. */
    32879 @@ -4493,16 +4551,23 @@
     34398@@ -4493,16 +4552,23 @@
    3288034399 #endif
    3288134400     set_vim_var_char(c);  /* set v:char to the typed character */
     
    3290234421     vim_free(p);
    3290334422 
    32904 @@ -4995,19 +5060,21 @@
     34423@@ -4995,19 +5061,21 @@
    3290534424     sourcing_name = save_name;
    3290634425 }
     
    3292934448     int                hash;
    3293034449     int                len, minlen;
    32931 @@ -5062,7 +5129,17 @@
     34450@@ -5062,7 +5130,17 @@
    3293234451                            minlen = mp->m_keylen - 3;
    3293334452                    }
     
    3294834467        }
    3294934468diff -Naur vim73.orig/src/globals.h vim73/src/globals.h
    32950 --- vim73.orig/src/globals.h    2012-06-03 23:09:52.952007375 +0000
    32951 +++ vim73/src/globals.h 2012-06-03 23:09:55.404072629 +0000
     34469--- vim73.orig/src/globals.h    2010-07-23 19:20:45.000000000 +0000
     34470+++ vim73/src/globals.h 2012-07-20 20:31:18.067644988 +0000
    3295234471@@ -113,9 +113,9 @@
    3295334472  * When '$' is included in 'cpoptions' option set:
     
    3296234481 #ifdef FEAT_INS_EXPAND
    3296334482 /*
    32964 @@ -510,8 +510,13 @@
     34483@@ -510,9 +510,15 @@
    3296534484 EXTERN VimClipboard clip_plus; /* CLIPBOARD selection in X11 */
    3296634485 # else
     
    3296934488 # endif
    3297034489-EXTERN int     clip_unnamed INIT(= FALSE);
    32971 +
    32972 +#define CLIP_UNNAMED      1
    32973 +#define CLIP_UNNAMED_PLUS 2
     34490-EXTERN int     clip_autoselect INIT(= FALSE);
     34491+
     34492+# define CLIP_UNNAMED      1
     34493+# define CLIP_UNNAMED_PLUS 2
    3297434494+EXTERN int     clip_unnamed INIT(= 0); /* above two values or'ed */
    3297534495+
    32976  EXTERN int     clip_autoselect INIT(= FALSE);
     34496+EXTERN int     clip_autoselect_star INIT(= FALSE);
     34497+EXTERN int     clip_autoselect_plus INIT(= FALSE);
    3297734498 EXTERN int     clip_autoselectml INIT(= FALSE);
    3297834499 EXTERN int     clip_html INIT(= FALSE);
    32979 @@ -530,6 +535,10 @@
     34500 EXTERN regprog_T *clip_exclude_prog INIT(= NULL);
     34501@@ -530,6 +536,10 @@
    3298034502 EXTERN win_T   *prevwin INIT(= NULL);  /* previous window */
    3298134503 # define W_NEXT(wp) ((wp)->w_next)
     
    3298834510     for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \
    3298934511        for ((wp) = ((tp) == curtab) \
    32990 @@ -1052,10 +1061,6 @@
     34512@@ -728,9 +738,9 @@
     34513 #endif
     34514 
     34515 EXTERN pos_T   saved_cursor            /* w_cursor before formatting text. */
     34516-# ifdef DO_INIT
     34517+#ifdef DO_INIT
     34518        = INIT_POS_T(0, 0, 0)
     34519-# endif
     34520+#endif
     34521        ;
     34522 
     34523 /*
     34524@@ -798,9 +808,9 @@
     34525 # endif
     34526 EXTERN int     has_mbyte INIT(= 0);            /* any multi-byte encoding */
     34527 
     34528-#if defined(WIN3264) && defined(FEAT_MBYTE)
     34529+# if defined(WIN3264) && defined(FEAT_MBYTE)
     34530 EXTERN int     wide_WindowProc INIT(= FALSE);  /* use wide WindowProc() */
     34531-#endif
     34532+# endif
     34533 
     34534 /*
     34535  * To speed up BYTELEN() we fill a table with the byte lengths whenever
     34536@@ -1052,10 +1062,6 @@
    3299134537                        ;
    3299234538 #endif
     
    3299934545 EXTERN int     postponed_split INIT(= 0);  /* for CTRL-W CTRL-] command */
    3300034546 EXTERN int     postponed_split_flags INIT(= 0);  /* args for win_split() */
    33001 @@ -1512,7 +1517,7 @@
     34547@@ -1094,8 +1100,8 @@
     34548 EXTERN int  save_p_ls INIT(= -1);      /* Save 'laststatus' setting */
     34549 EXTERN int  save_p_wmh INIT(= -1);     /* Save 'winminheight' setting */
     34550 EXTERN int  wild_menu_showing INIT(= 0);
     34551-#define WM_SHOWN       1               /* wildmenu showing */
     34552-#define WM_SCROLLED    2               /* wildmenu showing with scroll */
     34553+# define WM_SHOWN      1               /* wildmenu showing */
     34554+# define WM_SCROLLED   2               /* wildmenu showing with scroll */
     34555 #endif
     34556 
     34557 #ifdef MSWIN
     34558@@ -1305,9 +1311,9 @@
     34559 EXTERN Atom    commProperty INIT(= None);
     34560 EXTERN char_u  *serverDelayedStartName INIT(= NULL);
     34561 # else
     34562-# ifdef PROTO
     34563+#  ifdef PROTO
     34564 typedef int HWND;
     34565-# endif
     34566+#  endif
     34567 EXTERN HWND    clientWindow INIT(= 0);
     34568 # endif
     34569 #endif
     34570@@ -1512,7 +1518,7 @@
    3300234571 EXTERN char_u e_sandbox[]      INIT(= N_("E48: Not allowed in sandbox"));
    3300334572 #endif
     
    3300834577 EXTERN char_u e_screenmode[]   INIT(= N_("E359: Screen mode setting not supported"));
    3300934578 #endif
    33010 @@ -1560,6 +1565,9 @@
     34579@@ -1560,6 +1566,9 @@
    3301134580        (defined(FEAT_INS_EXPAND) && defined(FEAT_COMPL_FUNC))
    3301234581 EXTERN char_u e_notset[]       INIT(= N_("E764: Option '%s' is not set"));
     
    3301934588 EXTERN short disallow_gui      INIT(= FALSE);
    3302034589diff -Naur vim73.orig/src/gui.c vim73/src/gui.c
    33021 --- vim73.orig/src/gui.c        2012-06-03 23:09:52.924006631 +0000
    33022 +++ vim73/src/gui.c     2012-06-03 23:09:55.908086042 +0000
     34590--- vim73.orig/src/gui.c        2010-08-08 13:01:18.000000000 +0000
     34591+++ vim73/src/gui.c     2012-07-20 20:31:18.074311659 +0000
    3302334592@@ -37,6 +37,24 @@
    3302434593 static void gui_set_bg_color __ARGS((char_u *name));
     
    3350535074        /* Always allow pasting */
    3350635075        if (button != MOUSE_MIDDLE)
     35076@@ -3008,7 +3154,7 @@
     35077     }
     35078 
     35079     if (clip_star.state != SELECT_CLEARED && !did_clip)
     35080-       clip_clear_selection();
     35081+       clip_clear_selection(&clip_star);
     35082 #endif
     35083 
     35084     /* Don't put events in the input queue now. */
    3350735085@@ -4893,7 +5039,7 @@
    3350835086                if (STRLEN(p) > 2000)
     
    3351535093        ga_clear(&error_ga);
    3351635094diff -Naur vim73.orig/src/gui.h vim73/src/gui.h
    33517 --- vim73.orig/src/gui.h        2012-06-03 23:09:52.924006631 +0000
    33518 +++ vim73/src/gui.h     2012-06-03 23:09:54.376045272 +0000
     35095--- vim73.orig/src/gui.h        2010-07-17 19:40:58.000000000 +0000
     35096+++ vim73/src/gui.h     2012-07-20 20:31:11.674307068 +0000
    3351935097@@ -52,10 +52,6 @@
    3352035098 # include <SegLoad.h>*/
     
    3357235150     PtWidget_t *vimTextArea;           /* PtRaw */
    3357335151diff -Naur vim73.orig/src/gui_athena.c vim73/src/gui_athena.c
    33574 --- vim73.orig/src/gui_athena.c 2012-06-03 23:09:52.944007163 +0000
    33575 +++ vim73/src/gui_athena.c      2012-06-03 23:09:53.612024941 +0000
     35152--- vim73.orig/src/gui_athena.c 2010-08-08 13:01:39.000000000 +0000
     35153+++ vim73/src/gui_athena.c      2012-07-20 20:31:09.277638673 +0000
    3357635154@@ -2117,13 +2117,14 @@
    3357735155 }
     
    3359135169     char_u             *p, *next;
    3359235170diff -Naur vim73.orig/src/gui_gtk.c vim73/src/gui_gtk.c
    33593 --- vim73.orig/src/gui_gtk.c    2012-06-03 23:09:52.952007375 +0000
    33594 +++ vim73/src/gui_gtk.c 2012-06-03 23:09:55.776082529 +0000
    33595 @@ -90,6 +90,11 @@
     35171--- vim73.orig/src/gui_gtk.c    2010-07-20 11:15:22.000000000 +0000
     35172+++ vim73/src/gui_gtk.c 2012-07-20 20:31:17.964311580 +0000
     35173@@ -90,6 +90,13 @@
    3359635174 static void entry_activate_cb(GtkWidget *widget, gpointer data);
    3359735175 static void entry_changed_cb(GtkWidget *entry, GtkWidget *dialog);
    3359835176 static void find_replace_cb(GtkWidget *widget, gpointer data);
     35177+#if defined(FEAT_BROWSE) || defined(PROTO)
    3359935178+static void recent_func_log_func(
    3360035179+       const gchar *log_domain,
     
    3360235181+       const gchar *message,
    3360335182+       gpointer user_data);
     35183+#endif
    3360435184 
    3360535185 #if defined(FEAT_TOOLBAR)
    3360635186 /*
    33607 @@ -839,6 +844,8 @@
     35187@@ -772,9 +779,6 @@
     35188 /*
     35189  * Implementation of the file selector related stuff
     35190  */
     35191-#if GTK_CHECK_VERSION(2,4,0)
     35192-# define USE_FILE_CHOOSER
     35193-#endif
     35194 
     35195 #ifndef USE_FILE_CHOOSER
     35196     static void
     35197@@ -833,12 +837,15 @@
     35198               char_u *dflt,
     35199               char_u *ext UNUSED,
     35200               char_u *initdir,
     35201-              char_u *filter UNUSED)
     35202+              char_u *filter)
     35203 {
     35204 #ifdef USE_FILE_CHOOSER
    3360835205     GtkWidget          *fc;
    3360935206 #endif
     
    3361135208+    guint              log_handler;
    3361235209+    const gchar                *domain = "Gtk";
     35210+    GtkFileFilter      *gfilter;
    3361335211 
    3361435212     title = CONVERT_TO_UTF8(title);
     
    3362635224     /* We create the dialog each time, so that the button text can be "Open"
    3362735225      * or "Save" according to the action. */
    33628 @@ -916,6 +928,7 @@
     35226@@ -865,6 +877,45 @@
     35227            NULL);
     35228     gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc),
     35229                                                       (const gchar *)dirbuf);
     35230+
     35231+    if (filter != NULL && *filter != NUL)
     35232+    {
     35233+       int     i = 0;
     35234+       char_u  *patt;
     35235+       char_u  *p = filter;
     35236+
     35237+       gfilter = gtk_file_filter_new();
     35238+       patt = alloc(STRLEN(filter));
     35239+       while (p != NULL && *p != NUL)
     35240+       {
     35241+           if (*p == '\n' || *p == ';' || *p == '\t')
     35242+           {
     35243+               STRNCPY(patt, filter, i);
     35244+               patt[i] = '\0';
     35245+               if (*p == '\t')
     35246+                   gtk_file_filter_set_name(gfilter, (gchar *)patt);
     35247+               else
     35248+               {
     35249+                   gtk_file_filter_add_pattern(gfilter, (gchar *)patt);
     35250+                   if (*p == '\n')
     35251+                   {
     35252+                       gtk_file_chooser_add_filter((GtkFileChooser *)fc,
     35253+                                                                    gfilter);
     35254+                       if (*(p + 1) != NUL)
     35255+                           gfilter = gtk_file_filter_new();
     35256+                   }
     35257+               }
     35258+               filter = ++p;
     35259+               i = 0;
     35260+           }
     35261+           else
     35262+           {
     35263+               p++;
     35264+               i++;
     35265+           }
     35266+       }
     35267+       vim_free(patt);
     35268+    }
     35269     if (saving && dflt != NULL && *dflt != NUL)
     35270        gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), (char *)dflt);
     35271 
     35272@@ -916,6 +967,7 @@
    3362935273     gtk_widget_show(gui.filedlg);
    3363035274     gtk_main();
     
    3363435278     CONVERT_TO_UTF8_FREE(title);
    3363535279     if (gui.browse_fname == NULL)
    33636 @@ -1268,7 +1281,8 @@
     35280@@ -1268,7 +1320,8 @@
    3363735281               char_u   *message,   /* message text */
    3363835282               char_u   *buttons,   /* names of buttons */
     
    3364435288     GtkWidget  *dialog;
    3364535289     GtkWidget  *entry = NULL;
    33646 @@ -1287,6 +1301,9 @@
     35290@@ -1287,6 +1340,9 @@
    3364735291        entry = gtk_entry_new();
    3364835292        gtk_widget_show(entry);
    3364935293 
    3365035294+       /* Make Enter work like pressing OK. */
    33651 +        gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
     35295+       gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
    3365235296+
    3365335297        text = CONVERT_TO_UTF8(textfield);
    3365435298        gtk_entry_set_text(GTK_ENTRY(entry), (const char *)text);
    3365535299        CONVERT_TO_UTF8_FREE(text);
    33656 @@ -1387,7 +1404,7 @@
     35300@@ -1387,7 +1443,7 @@
    3365735301     gtk_menu_popup(GTK_MENU(menu->submenu_id),
    3365835302                   NULL, NULL,
     
    3366335307 
    3366435308 /* Ugly global variable to pass "mouse_pos" flag from gui_make_popup() to
    33665 @@ -1795,7 +1812,6 @@
     35309@@ -1795,7 +1851,6 @@
    3366635310     char_u             *repl_text;
    3366735311     gboolean           direction_down;
     
    3367135315     flags = (int)(long)data;       /* avoid a lint warning here */
    3367235316 
    33673 @@ -1821,7 +1837,7 @@
     35317@@ -1821,7 +1876,7 @@
    3367435318 
    3367535319     repl_text = CONVERT_FROM_UTF8(repl_text);
     
    3368035324     CONVERT_FROM_UTF8_FREE(find_text);
    3368135325 }
    33682 @@ -1879,3 +1895,14 @@
     35326@@ -1879,3 +1934,15 @@
    3368335327      * backwards compatibility anyway. */
    3368435328     do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp");
    3368535329 }
    3368635330+
     35331+#if defined(FEAT_BROWSE) || defined(PROTO)
    3368735332+    static void
    3368835333+recent_func_log_func(const gchar *log_domain UNUSED,
     
    3369435339+    /* http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
    3369535340+}
    33696 +
     35341+#endif
    3369735342diff -Naur vim73.orig/src/gui_gtk_x11.c vim73/src/gui_gtk_x11.c
    33698 --- vim73.orig/src/gui_gtk_x11.c        2012-06-03 23:09:52.948007269 +0000
    33699 +++ vim73/src/gui_gtk_x11.c     2012-06-03 23:09:55.860084763 +0000
     35343--- vim73.orig/src/gui_gtk_x11.c        2010-08-15 11:52:15.000000000 +0000
     35344+++ vim73/src/gui_gtk_x11.c     2012-07-20 20:31:16.157643621 +0000
    3370035345@@ -86,7 +86,6 @@
    3370135346 
     
    3387435519 }
    3387535520diff -Naur vim73.orig/src/gui_mac.c vim73/src/gui_mac.c
    33876 --- vim73.orig/src/gui_mac.c    2012-06-03 23:09:52.920006524 +0000
    33877 +++ vim73/src/gui_mac.c 2012-06-03 23:09:55.024062516 +0000
     35521--- vim73.orig/src/gui_mac.c    2010-08-14 19:39:54.000000000 +0000
     35522+++ vim73/src/gui_mac.c 2012-07-20 20:31:13.584308441 +0000
    3387835523@@ -1480,7 +1480,7 @@
    3387935524  *
     
    3399735642 // of the tabs, not pointers to the tabs (which are invalid for a short time).
    3399835643diff -Naur vim73.orig/src/gui_motif.c vim73/src/gui_motif.c
    33999 --- vim73.orig/src/gui_motif.c  2012-06-03 23:09:52.944007163 +0000
    34000 +++ vim73/src/gui_motif.c       2012-06-03 23:09:53.616025047 +0000
     35644--- vim73.orig/src/gui_motif.c  2010-08-08 13:04:15.000000000 +0000
     35645+++ vim73/src/gui_motif.c       2012-07-20 20:31:09.287638679 +0000
    3400135646@@ -2549,13 +2549,14 @@
    3400235647 #endif
     
    3401635661     char_u             *p, *next;
    3401735662diff -Naur vim73.orig/src/gui_photon.c vim73/src/gui_photon.c
    34018 --- vim73.orig/src/gui_photon.c 2012-06-03 23:09:52.952007375 +0000
    34019 +++ vim73/src/gui_photon.c      2012-06-03 23:09:54.736054852 +0000
     35663--- vim73.orig/src/gui_photon.c 2010-05-15 11:04:08.000000000 +0000
     35664+++ vim73/src/gui_photon.c      2012-07-20 20:31:12.694307802 +0000
    3402035665@@ -32,9 +32,9 @@
    3402135666 #endif
     
    3718438829 
    3718538830diff -Naur vim73.orig/src/gui_riscos.c vim73/src/gui_riscos.c
    37186 --- vim73.orig/src/gui_riscos.c 2012-06-03 23:09:52.944007163 +0000
     38831--- vim73.orig/src/gui_riscos.c 2010-05-15 11:04:09.000000000 +0000
    3718738832+++ vim73/src/gui_riscos.c      1970-01-01 00:00:00.000000000 +0000
    3718838833@@ -1,3558 +0,0 @@
     
    4074642391-}
    4074742392diff -Naur vim73.orig/src/gui_riscos.h vim73/src/gui_riscos.h
    40748 --- vim73.orig/src/gui_riscos.h 2012-06-03 23:09:52.948007269 +0000
     42393--- vim73.orig/src/gui_riscos.h 2010-05-15 11:04:10.000000000 +0000
    4074942394+++ vim73/src/gui_riscos.h      1970-01-01 00:00:00.000000000 +0000
    4075042395@@ -1,32 +0,0 @@
     
    4078242427-void ro_open_main(int *block);
    4078342428diff -Naur vim73.orig/src/gui_w16.c vim73/src/gui_w16.c
    40784 --- vim73.orig/src/gui_w16.c    2012-06-03 23:09:52.944007163 +0000
    40785 +++ vim73/src/gui_w16.c 2012-06-03 23:09:55.320070394 +0000
     42429--- vim73.orig/src/gui_w16.c    2010-07-18 13:03:38.000000000 +0000
     42430+++ vim73/src/gui_w16.c 2012-07-20 20:31:14.477642416 +0000
    4078642431@@ -21,6 +21,12 @@
    4078742432  *
     
    4080842453     LPWORD     p, pnumitems;
    4080942454diff -Naur vim73.orig/src/gui_w32.c vim73/src/gui_w32.c
    40810 --- vim73.orig/src/gui_w32.c    2012-06-03 23:09:52.952007375 +0000
    40811 +++ vim73/src/gui_w32.c 2012-06-03 23:09:55.120065072 +0000
     42455--- vim73.orig/src/gui_w32.c    2010-08-08 13:05:26.000000000 +0000
     42456+++ vim73/src/gui_w32.c 2012-07-20 20:31:13.890975327 +0000
    4081242457@@ -289,13 +289,13 @@
    4081342458 
     
    4109242737 
    4109342738diff -Naur vim73.orig/src/gui_w48.c vim73/src/gui_w48.c
    41094 --- vim73.orig/src/gui_w48.c    2012-06-03 23:09:52.940007057 +0000
    41095 +++ vim73/src/gui_w48.c 2012-06-03 23:09:55.244068371 +0000
     42739--- vim73.orig/src/gui_w48.c    2010-07-27 19:46:04.000000000 +0000
     42740+++ vim73/src/gui_w48.c 2012-07-20 20:31:14.280975607 +0000
    4109642741@@ -328,6 +328,10 @@
    4109742742 static LRESULT _OnImeNotify(HWND hWnd, DWORD dwCommand, DWORD dwData);
     
    4128942934 
    4129042935diff -Naur vim73.orig/src/gui_x11.c vim73/src/gui_x11.c
    41291 --- vim73.orig/src/gui_x11.c    2012-06-03 23:09:52.920006524 +0000
    41292 +++ vim73/src/gui_x11.c 2012-06-03 23:09:53.348017915 +0000
     42936--- vim73.orig/src/gui_x11.c    2010-08-08 13:05:45.000000000 +0000
     42937+++ vim73/src/gui_x11.c 2012-07-20 20:31:08.337637993 +0000
    4129342938@@ -2895,6 +2895,11 @@
    4129442939            focus = gui.in_focus;
     
    4130442949         * char arrives, instead we use XtAppProcessEvent() to hang until an
    4130542950diff -Naur vim73.orig/src/gui_xmdlg.c vim73/src/gui_xmdlg.c
    41306 --- vim73.orig/src/gui_xmdlg.c  2012-06-03 23:09:52.948007269 +0000
    41307 +++ vim73/src/gui_xmdlg.c       2012-06-03 23:09:53.604024727 +0000
     42951--- vim73.orig/src/gui_xmdlg.c  2010-06-26 03:53:50.000000000 +0000
     42952+++ vim73/src/gui_xmdlg.c       2012-07-20 20:31:09.267638665 +0000
    4130842953@@ -688,7 +688,7 @@
    4130942954            do_dialog(VIM_ERROR,
     
    4132442969     }
    4132542970     else
     42971diff -Naur vim73.orig/src/gui_xmebw.c vim73/src/gui_xmebw.c
     42972--- vim73.orig/src/gui_xmebw.c  2010-07-14 14:48:14.000000000 +0000
     42973+++ vim73/src/gui_xmebw.c       2012-07-20 20:31:17.487644573 +0000
     42974@@ -375,11 +375,8 @@
     42975 
     42976     XGetGeometry(dpy, pix, &root, &x, &y, &width, &height, &border, &depth);
     42977 
     42978-    if (eb->enhancedbutton.label_location == (int)XmTOP
     42979-           || eb->enhancedbutton.label_location == (int)XmBOTTOM)
     42980-       shift = eb->primitive.shadow_thickness / 2;
     42981-    else
     42982-       shift = eb->primitive.shadow_thickness / 2;
     42983+    /* TODO: does the shift depend on label_location somehow? */
     42984+    shift = eb->primitive.shadow_thickness / 2;
     42985 
     42986     if (shift < 1)
     42987        shift = 1;
    4132642988diff -Naur vim73.orig/src/hardcopy.c vim73/src/hardcopy.c
    41327 --- vim73.orig/src/hardcopy.c   2012-06-03 23:09:52.948007269 +0000
    41328 +++ vim73/src/hardcopy.c        2012-06-03 23:09:53.916033030 +0000
     42989--- vim73.orig/src/hardcopy.c   2010-07-31 14:10:59.000000000 +0000
     42990+++ vim73/src/hardcopy.c        2012-07-20 20:31:10.217639350 +0000
    4132942991@@ -1759,18 +1759,25 @@
    4133042992     char       *name;
     
    4137443036+    struct prt_ps_resource_S *res_cidfont;
    4137543037+    struct prt_ps_resource_S *res_cmap;
    41376 +#endif
     43038 #endif
    4137743039+    int                retval = FALSE;
    4137843040+
     
    4139043052+#ifdef FEAT_MBYTE
    4139143053+           || res_cidfont == NULL || res_cmap == NULL
    41392  #endif
     43054+#endif
    4139343055+       )
    4139443056+       goto theend;
     
    4158343245     void
    4158443246diff -Naur vim73.orig/src/if_cscope.c vim73/src/if_cscope.c
    41585 --- vim73.orig/src/if_cscope.c  2012-06-03 23:09:52.940007057 +0000
    41586 +++ vim73/src/if_cscope.c       2012-06-03 23:09:54.260042184 +0000
     43247--- vim73.orig/src/if_cscope.c  2010-07-25 14:32:31.000000000 +0000
     43248+++ vim73/src/if_cscope.c       2012-07-20 20:31:11.340973493 +0000
    4158743249@@ -13,16 +13,10 @@
    4158843250 
     
    4174943411 /*
    4175043412diff -Naur vim73.orig/src/if_lua.c vim73/src/if_lua.c
    41751 --- vim73.orig/src/if_lua.c     2012-06-03 23:09:52.924006631 +0000
    41752 +++ vim73/src/if_lua.c  2012-06-03 23:09:55.724081145 +0000
     43413--- vim73.orig/src/if_lua.c     2010-08-12 20:12:04.000000000 +0000
     43414+++ vim73/src/if_lua.c  2012-07-20 20:31:17.324311122 +0000
    4175343415@@ -1,4 +1,4 @@
    4175443416-/* vi:set ts=8 sts=4 sw=4:
     
    4194943611+lua_Integer (*dll_lua_tointegerx) (lua_State *L, int idx, int *isnum);
    4195043612+void (*dll_lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
    41951 +        lua_CFunction k);
     43613+       lua_CFunction k);
    4195243614+int (*dll_lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
    41953 +        int ctx, lua_CFunction k);
     43615+       int ctx, lua_CFunction k);
    4195443616+void (*dll_lua_getglobal) (lua_State *L, const char *var);
    4195543617+void (*dll_lua_setglobal) (lua_State *L, const char *var);
     
    4207743739+{
    4207843740+    const char *msg = lua_pushfstring(L, "%s expected, got %s",
    42079 +            tname, luaL_typename(L, narg));
     43741+           tname, luaL_typename(L, narg));
    4208043742+    return luaL_argerror(L, narg, msg);
    4208143743+}
     
    4224643908 }
    4224743909 
    42248 @@ -479,89 +606,508 @@
     43910@@ -479,89 +606,372 @@
    4224943911     lua_pop(L, 2); /* original and modified strings */
    4225043912 }
     
    4228943951+       return 1; \
    4229043952+    }
     43953+
     43954+/* =======   List type   ======= */
     43955+
     43956+    static luaV_List *
     43957+luaV_newlist (lua_State *L, list_T *lis)
     43958+{
     43959+    luaV_List *l = (luaV_List *) lua_newuserdata(L, sizeof(luaV_List));
     43960+    *l = lis;
     43961+    lis->lv_refcount++; /* reference in Lua */
     43962+    luaV_setudata(L, lis); /* cache[lis] = udata */
     43963+    luaV_getfield(L, LUAVIM_LIST);
     43964+    lua_setmetatable(L, -2);
     43965+    return l;
     43966+}
     43967+
     43968+luaV_pushtype(list_T, list, luaV_List)
     43969+luaV_type_tostring(list, LUAVIM_LIST)
    4229143970 
    4229243971-/* =======   Buffer type   ======= */
     43972+    static int
     43973+luaV_list_gc (lua_State *L)
     43974+{
     43975+    list_unref(luaV_unbox(L, luaV_List, 1));
     43976+    return 0;
     43977+}
    4229343978 
    4229443979-    static luaV_Buffer *
    4229543980-luaV_newbuffer(lua_State *L, buf_T *buf)
    42296 +/* adapted from eval.c */
    42297 +
    42298 +#define listitem_alloc() (listitem_T *)alloc(sizeof(listitem_T))
    42299 +
    42300 +    static listitem_T *
    42301 +list_find (list_T *l, long n)
    42302 +{
    42303 +    listitem_T *li;
    42304 +    if (l == NULL || n < -l->lv_len || n >= l->lv_len)
    42305 +       return NULL;
    42306 +    if (n < 0) /* search backward? */
    42307 +       for (li = l->lv_last; n < -1; li = li->li_prev)
    42308 +           n++;
    42309 +    else /* search forward */
    42310 +       for (li = l->lv_first; n > 0; li = li->li_next)
    42311 +           n--;
    42312 +    return li;
    42313 +}
    42314 +
    42315 +    static void
    42316 +list_remove (list_T *l, listitem_T *li)
     43981+    static int
     43982+luaV_list_len (lua_State *L)
    4231743983 {
    4231843984-    luaV_Buffer *b = (luaV_Buffer *) lua_newuserdata(L, sizeof(luaV_Buffer));
     
    4232743993-    /* set metatable */
    4232843994-    luaV_getfield(L, LUAVIM_BUFFER);
    42329 +    listwatch_T *lw;
    42330 +    --l->lv_len;
    42331 +    /* fix watchers */
    42332 +    for (lw = l->lv_watch; lw != NULL; lw = lw->lw_next)
    42333 +       if (lw->lw_item == li)
    42334 +           lw->lw_item = li->li_next;
    42335 +    /* fix list pointers */
    42336 +    if (li->li_next == NULL) /* last? */
    42337 +       l->lv_last = li->li_prev;
    42338 +    else
    42339 +       li->li_next->li_prev = li->li_prev;
    42340 +    if (li->li_prev == NULL) /* first? */
    42341 +       l->lv_first = li->li_next;
    42342 +    else
    42343 +       li->li_prev->li_next = li->li_next;
    42344 +    l->lv_idx_item = NULL;
    42345 +}
    42346 +
    42347 +    static void
    42348 +list_append(list_T *l, listitem_T *item)
    42349 +{
    42350 +    if (l->lv_last == NULL) /* empty list? */
    42351 +       l->lv_first = item;
    42352 +    else
    42353 +       l->lv_last->li_next = item;
    42354 +    item->li_prev = l->lv_last;
    42355 +    item->li_next = NULL;
    42356 +    l->lv_last = item;
    42357 +    ++l->lv_len;
    42358 +}
    42359 +
    42360 +    static int
    42361 +list_insert_tv(list_T *l, typval_T *tv, listitem_T *item)
    42362 +{
    42363 +    listitem_T *ni = listitem_alloc();
    42364 +
    42365 +    if (ni == NULL)
    42366 +       return FAIL;
    42367 +    copy_tv(tv, &ni->li_tv);
    42368 +    if (item == NULL)
    42369 +       list_append(l, ni);
    42370 +    else
    42371 +    {
    42372 +       ni->li_prev = item->li_prev;
    42373 +       ni->li_next = item;
    42374 +       if (item->li_prev == NULL)
    42375 +       {
    42376 +           l->lv_first = ni;
    42377 +           ++l->lv_idx;
    42378 +       }
    42379 +       else
    42380 +       {
    42381 +           item->li_prev->li_next = ni;
    42382 +           l->lv_idx_item = NULL;
    42383 +       }
    42384 +       item->li_prev = ni;
    42385 +       ++l->lv_len;
    42386 +    }
    42387 +    return OK;
    42388 +}
    42389 +
    42390 +/* set references */
    42391 +
    42392 +static void set_ref_in_tv (typval_T *tv, int copyID);
    42393 +
    42394 +    static void
    42395 +set_ref_in_dict(dict_T *d, int copyID)
    42396 +{
    42397 +    hashtab_T *ht = &d->dv_hashtab;
    42398 +    int n = ht->ht_used;
    42399 +    hashitem_T *hi;
    42400 +    for (hi = ht->ht_array; n > 0; ++hi)
    42401 +       if (!HASHITEM_EMPTY(hi))
    42402 +       {
    42403 +           dictitem_T *di = dict_lookup(hi);
    42404 +           set_ref_in_tv(&di->di_tv, copyID);
    42405 +           --n;
    42406 +       }
    42407 +}
    42408 +
    42409 +    static void
    42410 +set_ref_in_list(list_T *l, int copyID)
    42411 +{
    42412 +    listitem_T *li;
    42413 +    for (li = l->lv_first; li != NULL; li = li->li_next)
    42414 +       set_ref_in_tv(&li->li_tv, copyID);
    42415 +}
    42416 +
    42417 +    static void
    42418 +set_ref_in_tv(typval_T *tv, int copyID)
    42419 +{
    42420 +    if (tv->v_type == VAR_LIST)
    42421 +    {
    42422 +       list_T *l = tv->vval.v_list;
    42423 +       if (l != NULL && l->lv_copyID != copyID)
    42424 +       {
    42425 +           l->lv_copyID = copyID;
    42426 +           set_ref_in_list(l, copyID);
    42427 +       }
    42428 +    }
    42429 +    else if (tv->v_type == VAR_DICT)
    42430 +    {
    42431 +       dict_T *d = tv->vval.v_dict;
    42432 +       if (d != NULL && d->dv_copyID != copyID)
    42433 +       {
    42434 +           d->dv_copyID = copyID;
    42435 +           set_ref_in_dict(d, copyID);
    42436 +       }
    42437 +    }
    42438 +}
    42439 +
    42440 +
    42441 +/* =======   List type   ======= */
    42442 +
    42443 +    static luaV_List *
    42444 +luaV_newlist (lua_State *L, list_T *lis)
    42445 +{
    42446 +    luaV_List *l = (luaV_List *) lua_newuserdata(L, sizeof(luaV_List));
    42447 +    *l = lis;
    42448 +    lis->lv_refcount++; /* reference in Lua */
    42449 +    luaV_setudata(L, lis); /* cache[lis] = udata */
    42450 +    luaV_getfield(L, LUAVIM_LIST);
    42451      lua_setmetatable(L, -2);
     43995-    lua_setmetatable(L, -2);
    4245243996-    return b;
    42453 +    return l;
     43997+    list_T *l = luaV_unbox(L, luaV_List, 1);
     43998+    lua_pushinteger(L, (l == NULL) ? 0 : (int) l->lv_len);
     43999+    return 1;
    4245444000 }
    4245544001 
    4245644002-    static luaV_Buffer *
    4245744003-luaV_pushbuffer (lua_State *L, buf_T *buf)
    42458 +luaV_pushtype(list_T, list, luaV_List)
    42459 +luaV_type_tostring(list, LUAVIM_LIST)
    42460 +
    4246144004+    static int
    42462 +luaV_list_gc (lua_State *L)
     44005+luaV_list_iter (lua_State *L)
    4246344006 {
    4246444007-    luaV_Buffer *b = NULL;
     
    4246944012-       lua_rawget(L, LUA_ENVIRONINDEX);
    4247044013-       if (lua_isnil(L, -1)) /* not interned? */
    42471 +    list_unref(luaV_unbox(L, luaV_List, 1));
    42472 +    return 0;
    42473 +}
    42474 +
    42475 +    static int
    42476 +luaV_list_len (lua_State *L)
    42477 +{
    42478 +    list_T *l = luaV_unbox(L, luaV_List, 1);
    42479 +    lua_pushinteger(L, (l == NULL) ? 0 : (int) l->lv_len);
    42480 +    return 1;
    42481 +}
    42482 +
    42483 +    static int
    42484 +luaV_list_iter (lua_State *L)
    42485 +{
    4248644014+    listitem_T *li = (listitem_T *) lua_touserdata(L, lua_upvalueindex(2));
    4248744015+    if (li == NULL) return 0;
     
    4252944057-           b = (luaV_Buffer *) lua_touserdata(L, -1);
    4253044058+           lua_pushnil(L);
    42531      }
    42532 -    return b;
     44059+    }
    4253344060+    else
    4253444061+       lua_pushnil(L);
     
    4254844075+    if (lua_isnil(L, 3)) /* remove? */
    4254944076+    {
    42550 +       list_remove(l, li);
     44077+       list_remove(l, li, li);
    4255144078+       clear_tv(&li->li_tv);
    4255244079+       vim_free(li);
    42553 +    }
     44080     }
     44081-    return b;
    4255444082+    else
    4255544083+    {
     
    4257644104+       lua_settop(L, 2);
    4257744105+       luaV_totypval(L, 2, &v);
    42578 +       copy_tv(&v, &li->li_tv);
    42579 +       list_append(l, li);
     44106+       list_append_tv(l, &v);
    4258044107+    }
    4258144108+    lua_settop(L, 1);
     
    4279644323        else if (strncmp(s,   "insert", 6) == 0
    4279744324                || strncmp(s, "next", 4) == 0
    42798 @@ -582,17 +1128,17 @@
     44325@@ -582,17 +992,17 @@
    4279944326     static int
    4280044327 luaV_buffer_newindex(lua_State *L)
     
    4281744344        {
    4281844345            curbuf = buf;
    42819 @@ -605,7 +1151,7 @@
     44346@@ -605,7 +1015,7 @@
    4282044347        }
    4282144348        else {
     
    4282644353                if (curwin->w_cursor.lnum >= n)
    4282744354                {
    42828 @@ -625,7 +1171,7 @@
     44355@@ -625,7 +1035,7 @@
    4282944356     else if (lua_isstring(L, 3)) /* update line */
    4283044357     {
     
    4283544362        {
    4283644363            curbuf = buf;
    42837 @@ -638,7 +1184,7 @@
     44364@@ -638,7 +1048,7 @@
    4283844365        }
    4283944366        else changed_bytes(n, 0);
     
    4284444371     }
    4284544372     else
    42846 @@ -649,8 +1195,9 @@
     44373@@ -649,8 +1059,9 @@
    4284744374     static int
    4284844375 luaV_buffer_insert(lua_State *L)
     
    4285644383     buf_T *buf;
    4285744384     luaL_checktype(L, 2, LUA_TSTRING);
    42858 @@ -662,7 +1209,7 @@
     44385@@ -662,7 +1073,7 @@
    4285944386     if (n > last) n = last;
    4286044387     /* insert */
     
    4286544392     {
    4286644393        curbuf = buf;
    42867 @@ -684,7 +1231,8 @@
     44394@@ -684,7 +1095,8 @@
    4286844395 luaV_buffer_next(lua_State *L)
    4286944396 {
     
    4287544402 }
    4287644403 
    42877 @@ -692,7 +1240,8 @@
     44404@@ -692,7 +1104,8 @@
    4287844405 luaV_buffer_previous(lua_State *L)
    4287944406 {
     
    4288544412 }
    4288644413 
    42887 @@ -700,8 +1249,7 @@
     44414@@ -700,8 +1113,7 @@
    4288844415 luaV_buffer_isvalid(lua_State *L)
    4288944416 {
     
    4289544422     return 1;
    4289644423 }
    42897 @@ -722,78 +1270,36 @@
     44424@@ -722,78 +1134,36 @@
    4289844425 
    4289944426 /* =======   Window type   ======= */
     
    4298544512     else if (strncmp(s,   "next", 4) == 0
    4298644513            || strncmp(s, "previous", 8) == 0
    42987 @@ -810,7 +1316,7 @@
     44514@@ -810,7 +1180,7 @@
    4298844515     static int
    4298944516 luaV_window_newindex (lua_State *L)
     
    4299444521     int v = luaL_checkinteger(L, 3);
    4299544522     if (strncmp(s, "line", 4) == 0)
    42996 @@ -818,9 +1324,9 @@
     44523@@ -818,9 +1188,9 @@
    4299744524 #ifdef HAVE_SANDBOX
    4299844525        luaV_checksandbox(L);
     
    4300644533     }
    4300744534     else if (strncmp(s, "col", 3) == 0)
    43008 @@ -828,7 +1334,7 @@
     44535@@ -828,7 +1198,7 @@
    4300944536 #ifdef HAVE_SANDBOX
    4301044537        luaV_checksandbox(L);
     
    4301544542     }
    4301644543 #ifdef FEAT_VERTSPLIT
    43017 @@ -838,7 +1344,7 @@
     44544@@ -838,7 +1208,7 @@
    4301844545 #ifdef FEAT_GUI
    4301944546        need_mouse_correct = TRUE;
     
    4302444551        curwin = win;
    4302544552     }
    43026 @@ -849,7 +1355,7 @@
     44553@@ -849,7 +1219,7 @@
    4302744554 #ifdef FEAT_GUI
    4302844555        need_mouse_correct = TRUE;
     
    4303344560        curwin = win;
    4303444561     }
    43035 @@ -862,7 +1368,8 @@
     44562@@ -862,7 +1232,8 @@
    4303644563 luaV_window_next(lua_State *L)
    4303744564 {
     
    4304344570 }
    4304444571 
    43045 @@ -870,7 +1377,8 @@
     44572@@ -870,7 +1241,8 @@
    4304644573 luaV_window_previous(lua_State *L)
    4304744574 {
     
    4305344580 }
    4305444581 
    43055 @@ -878,8 +1386,7 @@
     44582@@ -878,8 +1250,7 @@
    4305644583 luaV_window_isvalid(lua_State *L)
    4305744584 {
     
    4306344590     return 1;
    4306444591 }
    43065 @@ -925,6 +1432,31 @@
     44592@@ -925,6 +1296,31 @@
    4306644593 }
    4306744594 
     
    4309544622 {
    4309644623     do_cmdline_cmd((char_u *) luaL_checkstring(L, 1));
    43097 @@ -956,6 +1488,28 @@
     44624@@ -956,6 +1352,28 @@
    4309844625 }
    4309944626 
     
    4312444651 {
    4312544652     buf_T *buf;
    43126 @@ -981,15 +1535,10 @@
     44653@@ -981,15 +1399,10 @@
    4312744654                    break;
    4312844655            }
     
    4314244669 }
    4314344670 
    43144 @@ -1002,59 +1551,62 @@
     44671@@ -1002,59 +1415,62 @@
    4314544672        int n = lua_tointeger(L, 1);
    4314644673        for (win = firstwin; win != NULL; win = win->w_next, n--)
     
    4317044697     if (lua_isstring(L, 1)) s = (char_u *) lua_tostring(L, 1);
    4317144698-    b = luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
    43172 +    luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
    43173      return 1;
    43174  }
    43175  
    43176      static int
     44699-    return 1;
     44700-}
     44701-
     44702-    static int
    4317744703-luaV_isbuffer(lua_State *L)
    43178 +luaV_type(lua_State *L)
    43179  {
     44704-{
    4318044705-    lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_BUFFER) != NULL);
    4318144706-    return 1;
     
    4318644711-{
    4318744712-    lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_WINDOW) != NULL);
    43188 -    return 1;
    43189 -}
    43190 -
     44713+    luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
     44714     return 1;
     44715 }
     44716 
    4319144717-/* for freeing buffer and window objects; lightuserdata as arg */
    43192 -    static int
     44718     static int
    4319344719-luaV_free(lua_State *L)
    43194 -{
     44720+luaV_type(lua_State *L)
     44721 {
    4319544722-    lua_pushvalue(L, 1); /* lightudata */
    4319644723-    lua_rawget(L, LUA_ENVIRONINDEX);
     
    4323844765 
    4323944766 static const luaL_Reg luaV_module[] = {
    43240 @@ -1062,37 +1614,128 @@
     44767@@ -1062,37 +1478,128 @@
    4324144768     {"eval", luaV_eval},
    4324244769     {"beep", luaV_beep},
     
    4331244839+       }
    4331344840+       lua_pop(L, 2); /* metatable and value */
    43314 +       set_ref_in_tv(&tv, copyID);
     44841+       set_ref_in_item(&tv, copyID);
    4331544842+    }
    4331644843+    return 0;
     
    4337744904 }
    4337844905 
    43379 @@ -1123,7 +1766,7 @@
     44906@@ -1123,7 +1630,7 @@
    4338044907 static lua_State *L = NULL;
    4338144908 
     
    4338644913     return L != NULL;
    4338744914 }
    43388 @@ -1131,7 +1774,7 @@
     44915@@ -1131,7 +1638,7 @@
    4338944916     static int
    4339044917 lua_init(void)
     
    4339544922 #ifdef DYNAMIC_LUA
    4339644923        if (!lua_enabled(TRUE))
    43397 @@ -1148,7 +1791,7 @@
     44924@@ -1148,7 +1655,7 @@
    4339844925     void
    4339944926 lua_end(void)
     
    4340444931        lua_close(L);
    4340544932        L = NULL;
    43406 @@ -1191,7 +1834,7 @@
     44933@@ -1191,7 +1698,7 @@
    4340744934     }
    4340844935     luaV_setrange(L, eap->line1, eap->line2);
     
    4341344940     luaL_addlstring(&b, " end", 4); /* footer */
    4341444941     luaL_pushresult(&b);
    43415 @@ -1208,7 +1851,8 @@
     44942@@ -1208,7 +1715,8 @@
    4341644943     {
    4341744944        lua_pushvalue(L, -1); /* function */
     
    4342344950            luaV_emsg(L);
    4342444951            break;
    43425 @@ -1242,23 +1886,36 @@
     44952@@ -1242,23 +1750,36 @@
    4342644953     }
    4342744954 }
     
    4347244999 
    4347345000diff -Naur vim73.orig/src/if_mzsch.c vim73/src/if_mzsch.c
    43474 --- vim73.orig/src/if_mzsch.c   2012-06-03 23:09:52.952007375 +0000
    43475 +++ vim73/src/if_mzsch.c        2012-06-03 23:09:55.416072949 +0000
     45001--- vim73.orig/src/if_mzsch.c   2010-06-26 03:56:17.000000000 +0000
     45002+++ vim73/src/if_mzsch.c        2012-07-20 20:31:14.800975981 +0000
    4347645003@@ -31,8 +31,6 @@
    4347745004  * depend". */
     
    4363245159 
    4363345160diff -Naur vim73.orig/src/if_ole.h vim73/src/if_ole.h
    43634 --- vim73.orig/src/if_ole.h     2012-06-03 23:09:52.924006631 +0000
    43635 +++ vim73/src/if_ole.h  2012-06-03 23:09:54.208040801 +0000
     45161--- vim73.orig/src/if_ole.h     2010-05-15 11:04:07.000000000 +0000
     45162+++ vim73/src/if_ole.h  2012-07-20 20:31:11.164306700 +0000
    4363645163@@ -46,8 +46,11 @@
    4363745164 /* header files for imported files */
     
    4364945176 #define __IVim_INTERFACE_DEFINED__
    4365045177diff -Naur vim73.orig/src/if_perl.xs vim73/src/if_perl.xs
    43651 --- vim73.orig/src/if_perl.xs   2012-06-03 23:09:52.940007057 +0000
    43652 +++ vim73/src/if_perl.xs        2012-06-03 23:09:55.604077952 +0000
     45178--- vim73.orig/src/if_perl.xs   2010-07-22 09:33:37.000000000 +0000
     45179+++ vim73/src/if_perl.xs        2012-07-20 20:31:15.314309683 +0000
    4365345180@@ -106,7 +106,7 @@
    4365445181 #define close_dll dlclose
     
    4381345340                count = -count;
    4381445341diff -Naur vim73.orig/src/if_py_both.h vim73/src/if_py_both.h
    43815 --- vim73.orig/src/if_py_both.h 2012-06-03 23:09:52.948007269 +0000
    43816 +++ vim73/src/if_py_both.h      2012-06-03 23:09:55.732081359 +0000
     45342--- vim73.orig/src/if_py_both.h 2010-08-08 11:06:29.000000000 +0000
     45343+++ vim73/src/if_py_both.h      2012-07-20 20:31:17.820978145 +0000
     45344@@ -1,4 +1,4 @@
     45345-/* vi:set ts=8 sts=4 sw=4:
     45346+/* vi:set ts=8 sts=4 sw=4 noet:
     45347  *
     45348  * VIM - Vi IMproved   by Bram Moolenaar
     45349  *
    4381745350@@ -12,6 +12,12 @@
    4381845351  * Common code for if_python.c and if_python3.c.
     
    4384745380+    {"write",      OutputWrite,        1,          ""},
    4384845381+    {"writelines",  OutputWritelines,  1,          ""},
    43849 +    {"flush",       OutputFlush,        1,          ""},
     45382+    {"flush",      OutputFlush,        1,          ""},
    4385045383+    { NULL,        NULL,               0,          NULL}
    4385145384 };
     
    4387845411     Py_INCREF(Py_None);
    4387945412     return Py_None;
    43880 @@ -101,10 +116,10 @@
     45413@@ -90,7 +105,8 @@
     45414        return NULL;
     45415     Py_INCREF(list);
     45416 
     45417-    if (!PyList_Check(list)) {
     45418+    if (!PyList_Check(list))
     45419+    {
     45420        PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
     45421        Py_DECREF(list);
     45422        return NULL;
     45423@@ -101,10 +117,11 @@
    4388145424     for (i = 0; i < n; ++i)
    4388245425     {
     
    4388745430 
    4388845431-       if (!PyArg_Parse(line, "s#", &str, &len)) {
    43889 +       if (!PyArg_Parse(line, "et#", ENC_OPT, &str, &len)) {
     45432+       if (!PyArg_Parse(line, "et#", ENC_OPT, &str, &len))
     45433+       {
    4389045434            PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
    4389145435            Py_DECREF(list);
    4389245436            return NULL;
    43893 @@ -115,6 +130,7 @@
     45437@@ -115,6 +132,7 @@
    4389445438        writer((writefn)(error ? emsg : msg), (char_u *)str, len);
    4389545439        Python_Release_Vim();
     
    4389945443 
    4390045444     Py_DECREF(list);
    43901 @@ -122,52 +138,28 @@
     45445@@ -122,52 +140,28 @@
    4390245446     return Py_None;
    4390345447 }
     
    4392345467-    while (new_size < n)
    4392445468-       new_size += 80;
    43925 +    /* do nothing */
    43926 +    Py_INCREF(Py_None);
    43927 +    return Py_None;
    43928 +}
    43929  
     45469-
    4393045470-    if (new_size != buffer_size)
    4393145471-    {
     
    4393345473-       if (new_buffer == NULL)
    4393445474-           return;
     45475+    /* do nothing */
     45476+    Py_INCREF(Py_None);
     45477+    return Py_None;
     45478+}
    4393545479 
    4393645480-       if (buffer)
     
    4393945483-           vim_free(buffer);
    4394045484-       }
    43941 -
     45485 
    4394245486-       buffer = new_buffer;
    4394345487-       buffer_size = new_size;
     
    4396545509 
    4396645510     static void
    43967 @@ -175,30 +167,34 @@
     45511@@ -175,30 +169,34 @@
    4396845512 {
    4396945513     char_u *ptr;
     
    4401245556 
    4401345557 /***************/
    44014 @@ -543,7 +539,6 @@
     45558@@ -301,7 +299,7 @@
     45559 {
     45560     PyObject   *result;
     45561     PyObject   *newObj;
     45562-    char       ptrBuf[NUMBUFLEN];
     45563+    char       ptrBuf[sizeof(void *) * 2 + 3];
     45564 
     45565     /* Avoid infinite recursion */
     45566     if (depth > 100)
     45567@@ -316,9 +314,9 @@
     45568     if ((our_tv->v_type == VAR_LIST && our_tv->vval.v_list != NULL)
     45569            || (our_tv->v_type == VAR_DICT && our_tv->vval.v_dict != NULL))
    4401545570     {
    44016         long lnum;
    44017         long col;
     45571-       sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U,
     45572-               our_tv->v_type == VAR_LIST ? (long_u)our_tv->vval.v_list
     45573-                                          : (long_u)our_tv->vval.v_dict);
     45574+       sprintf(ptrBuf, "%p",
     45575+               our_tv->v_type == VAR_LIST ? (void *)our_tv->vval.v_list
     45576+                                          : (void *)our_tv->vval.v_dict);
     45577        result = PyDict_GetItemString(lookupDict, ptrBuf);
     45578        if (result != NULL)
     45579        {
     45580@@ -449,6 +447,57 @@
     45581 #endif
     45582 }
     45583 
     45584+static PyObject *ConvertToPyObject(typval_T *);
     45585+
     45586+    static PyObject *
     45587+VimEvalPy(PyObject *self UNUSED, PyObject *args UNUSED)
     45588+{
     45589+#ifdef FEAT_EVAL
     45590+    char       *expr;
     45591+    typval_T   *our_tv;
     45592+    PyObject   *result;
     45593+
     45594+    if (!PyArg_ParseTuple(args, "s", &expr))
     45595+       return NULL;
     45596+
     45597+    Py_BEGIN_ALLOW_THREADS
     45598+    Python_Lock_Vim();
     45599+    our_tv = eval_expr((char_u *)expr, NULL);
     45600+
     45601+    Python_Release_Vim();
     45602+    Py_END_ALLOW_THREADS
     45603+
     45604+    if (our_tv == NULL)
     45605+    {
     45606+       PyErr_SetVim(_("invalid expression"));
     45607+       return NULL;
     45608+    }
     45609+
     45610+    result = ConvertToPyObject(our_tv);
     45611+    Py_BEGIN_ALLOW_THREADS
     45612+    Python_Lock_Vim();
     45613+    free_tv(our_tv);
     45614+    Python_Release_Vim();
     45615+    Py_END_ALLOW_THREADS
     45616+
     45617+    return result;
     45618+#else
     45619+    PyErr_SetVim(_("expressions disabled at compile time"));
     45620+    return NULL;
     45621+#endif
     45622+}
     45623+
     45624+    static PyObject *
     45625+VimStrwidth(PyObject *self UNUSED, PyObject *args)
     45626+{
     45627+    char       *expr;
     45628+
     45629+    if (!PyArg_ParseTuple(args, "s", &expr))
     45630+       return NULL;
     45631+
     45632+    return PyLong_FromLong(mb_string2cells((char_u *)expr, (int)STRLEN(expr)));
     45633+}
     45634+
     45635 /*
     45636  * Vim module - Definitions
     45637  */
     45638@@ -457,6 +506,8 @@
     45639     /* name,        function,          calling,    documentation */
     45640     {"command",             VimCommand,        1,          "Execute a Vim ex-mode command" },
     45641     {"eval",        VimEval,           1,          "Evaluate an expression using Vim evaluator" },
     45642+    {"bindeval",     VimEvalPy,                1,          "Like eval(), but returns objects attached to vim ones"},
     45643+    {"strwidth",     VimStrwidth,      1,          "Screen string width, counts <Tab> as having width 1"},
     45644     { NULL,         NULL,              0,          NULL }
     45645 };
     45646 
     45647@@ -464,8 +515,7 @@
     45648 {
     45649     PyObject_HEAD
     45650     buf_T *buf;
     45651-}
     45652-BufferObject;
     45653+} BufferObject;
     45654 
     45655 #define INVALID_BUFFER_VALUE ((buf_T *)(-1))
     45656 
     45657@@ -509,161 +559,919 @@
     45658     win_T      *win;
     45659 } WindowObject;
     45660 
     45661-#define INVALID_WINDOW_VALUE ((win_T *)(-1))
     45662+static int ConvertFromPyObject(PyObject *, typval_T *);
     45663+static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *);
     45664 
     45665-    static int
     45666-CheckWindow(WindowObject *this)
     45667+typedef struct pylinkedlist_S {
     45668+    struct pylinkedlist_S      *pll_next;
     45669+    struct pylinkedlist_S      *pll_prev;
     45670+    PyObject                   *pll_obj;
     45671+} pylinkedlist_T;
     45672+
     45673+static pylinkedlist_T *lastdict = NULL;
     45674+static pylinkedlist_T *lastlist = NULL;
     45675+
     45676+    static void
     45677+pyll_remove(pylinkedlist_T *ref, pylinkedlist_T **last)
     45678 {
     45679-    if (this->win == INVALID_WINDOW_VALUE)
     45680+    if (ref->pll_prev == NULL)
     45681     {
     45682-       PyErr_SetVim(_("attempt to refer to deleted window"));
     45683-       return -1;
     45684+       if (ref->pll_next == NULL)
     45685+       {
     45686+           *last = NULL;
     45687+           return;
     45688+       }
     45689     }
     45690+    else
     45691+       ref->pll_prev->pll_next = ref->pll_next;
     45692 
     45693-    return 0;
     45694+    if (ref->pll_next == NULL)
     45695+       *last = ref->pll_prev;
     45696+    else
     45697+       ref->pll_next->pll_prev = ref->pll_prev;
     45698 }
     45699 
     45700-static int WindowSetattr(PyObject *, char *, PyObject *);
     45701-static PyObject *WindowRepr(PyObject *);
     45702+    static void
     45703+pyll_add(PyObject *self, pylinkedlist_T *ref, pylinkedlist_T **last)
     45704+{
     45705+    if (*last == NULL)
     45706+       ref->pll_prev = NULL;
     45707+    else
     45708+    {
     45709+       (*last)->pll_next = ref;
     45710+       ref->pll_prev = *last;
     45711+    }
     45712+    ref->pll_next = NULL;
     45713+    ref->pll_obj = self;
     45714+    *last = ref;
     45715+}
     45716 
     45717-    static int
     45718-WindowSetattr(PyObject *self, char *name, PyObject *val)
     45719+static PyTypeObject DictionaryType;
     45720+
     45721+typedef struct
     45722 {
     45723-    WindowObject *this = (WindowObject *)(self);
     45724+    PyObject_HEAD
     45725+    dict_T     *dict;
     45726+    pylinkedlist_T     ref;
     45727+} DictionaryObject;
     45728 
     45729-    if (CheckWindow(this))
     45730-       return -1;
     45731+    static PyObject *
     45732+DictionaryNew(dict_T *dict)
     45733+{
     45734+    DictionaryObject   *self;
     45735 
     45736-    if (strcmp(name, "buffer") == 0)
     45737+    self = PyObject_NEW(DictionaryObject, &DictionaryType);
     45738+    if (self == NULL)
     45739+       return NULL;
     45740+    self->dict = dict;
     45741+    ++dict->dv_refcount;
     45742+
     45743+    pyll_add((PyObject *)(self), &self->ref, &lastdict);
     45744+
     45745+    return (PyObject *)(self);
     45746+}
     45747+
     45748+    static int
     45749+pydict_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
     45750+{
     45751+    dict_T     *d;
     45752+    char_u     *key;
     45753+    dictitem_T *di;
     45754+    PyObject   *keyObject;
     45755+    PyObject   *valObject;
     45756+    Py_ssize_t iter = 0;
     45757+
     45758+    d = dict_alloc();
     45759+    if (d == NULL)
     45760     {
     45761-       PyErr_SetString(PyExc_TypeError, _("readonly attribute"));
     45762+       PyErr_NoMemory();
     45763        return -1;
     45764     }
     45765-    else if (strcmp(name, "cursor") == 0)
     45766+
     45767+    tv->v_type = VAR_DICT;
     45768+    tv->vval.v_dict = d;
     45769+
     45770+    while (PyDict_Next(obj, &iter, &keyObject, &valObject))
     45771     {
     45772-       long lnum;
     45773-       long col;
    4401845774-       long len;
    44019  
    44020         if (!PyArg_Parse(val, "(ll)", &lnum, &col))
     45775+       DICTKEY_DECL
     45776 
     45777-       if (!PyArg_Parse(val, "(ll)", &lnum, &col))
     45778+       if (keyObject == NULL)
     45779+           return -1;
     45780+       if (valObject == NULL)
    4402145781            return -1;
    44022 @@ -558,18 +553,15 @@
    44023         if (VimErrorCheck())
     45782 
     45783-       if (lnum <= 0 || lnum > this->win->w_buffer->b_ml.ml_line_count)
     45784+       DICTKEY_GET(-1)
     45785+
     45786+       di = dictitem_alloc(key);
     45787+
     45788+       DICTKEY_UNREF
     45789+
     45790+       if (di == NULL)
     45791        {
     45792-           PyErr_SetVim(_("cursor position outside buffer"));
     45793+           PyErr_NoMemory();
    4402445794            return -1;
     45795        }
     45796+       di->di_tv.v_lock = 0;
     45797 
     45798-       /* Check for keyboard interrupts */
     45799-       if (VimErrorCheck())
     45800+       if (_ConvertFromPyObject(valObject, &di->di_tv, lookupDict) == -1)
     45801+       {
     45802+           vim_free(di);
     45803            return -1;
     45804+       }
     45805+       if (dict_add(d, di) == FAIL)
     45806+       {
     45807+           vim_free(di);
     45808+           PyErr_SetVim(_("failed to add key to dictionary"));
     45809+           return -1;
     45810+       }
     45811+    }
     45812+    return 0;
     45813+}
    4402545814 
    4402645815-       /* When column is out of range silently correct it. */
     
    4402945818-           col = len;
    4403045819-
    44031         this->win->w_cursor.lnum = lnum;
    44032         this->win->w_cursor.col = col;
    44033  #ifdef FEAT_VIRTUALEDIT
    44034         this->win->w_cursor.coladd = 0;
    44035  #endif
     45820-       this->win->w_cursor.lnum = lnum;
     45821-       this->win->w_cursor.col = col;
     45822-#ifdef FEAT_VIRTUALEDIT
     45823-       this->win->w_cursor.coladd = 0;
     45824-#endif
    4403645825-       update_screen(VALID);
     45826+    static int
     45827+pymap_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
     45828+{
     45829+    dict_T     *d;
     45830+    char_u     *key;
     45831+    dictitem_T *di;
     45832+    PyObject   *list;
     45833+    PyObject   *litem;
     45834+    PyObject   *keyObject;
     45835+    PyObject   *valObject;
     45836+    Py_ssize_t lsize;
     45837 
     45838-       return 0;
     45839+    d = dict_alloc();
     45840+    if (d == NULL)
     45841+    {
     45842+       PyErr_NoMemory();
     45843+       return -1;
     45844     }
     45845-    else if (strcmp(name, "height") == 0)
     45846+
     45847+    tv->v_type = VAR_DICT;
     45848+    tv->vval.v_dict = d;
     45849+
     45850+    list = PyMapping_Items(obj);
     45851+    lsize = PyList_Size(list);
     45852+    while (lsize--)
     45853     {
     45854-       int     height;
     45855-       win_T   *savewin;
     45856+       DICTKEY_DECL
     45857 
     45858-       if (!PyArg_Parse(val, "i", &height))
     45859+       litem = PyList_GetItem(list, lsize);
     45860+       if (litem == NULL)
     45861+       {
     45862+           Py_DECREF(list);
     45863            return -1;
     45864+       }
     45865 
     45866-#ifdef FEAT_GUI
     45867-       need_mouse_correct = TRUE;
     45868-#endif
     45869-       savewin = curwin;
     45870-       curwin = this->win;
     45871-       win_setheight(height);
     45872-       curwin = savewin;
     45873-
     45874-       /* Check for keyboard interrupts */
     45875-       if (VimErrorCheck())
     45876+       keyObject = PyTuple_GetItem(litem, 0);
     45877+       if (keyObject == NULL)
     45878+       {
     45879+           Py_DECREF(list);
     45880+           Py_DECREF(litem);
     45881            return -1;
     45882+       }
     45883 
     45884-       return 0;
     45885-    }
     45886-#ifdef FEAT_VERTSPLIT
     45887-    else if (strcmp(name, "width") == 0)
     45888-    {
     45889-       int     width;
     45890-       win_T   *savewin;
     45891+       DICTKEY_GET(-1)
     45892 
     45893-       if (!PyArg_Parse(val, "i", &width))
     45894+       valObject = PyTuple_GetItem(litem, 1);
     45895+       if (valObject == NULL)
     45896+       {
     45897+           Py_DECREF(list);
     45898+           Py_DECREF(litem);
     45899            return -1;
     45900+       }
     45901 
     45902-#ifdef FEAT_GUI
     45903-       need_mouse_correct = TRUE;
     45904-#endif
     45905-       savewin = curwin;
     45906-       curwin = this->win;
     45907-       win_setwidth(width);
     45908-       curwin = savewin;
     45909+       di = dictitem_alloc(key);
     45910 
     45911-       /* Check for keyboard interrupts */
     45912-       if (VimErrorCheck())
     45913+       DICTKEY_UNREF
     45914+
     45915+       if (di == NULL)
     45916+       {
     45917+           Py_DECREF(list);
     45918+           Py_DECREF(litem);
     45919+           PyErr_NoMemory();
     45920            return -1;
     45921+       }
     45922+       di->di_tv.v_lock = 0;
     45923 
     45924-       return 0;
     45925-    }
     45926-#endif
     45927-    else
     45928-    {
     45929-       PyErr_SetString(PyExc_AttributeError, name);
     45930-       return -1;
     45931+       if (_ConvertFromPyObject(valObject, &di->di_tv, lookupDict) == -1)
     45932+       {
     45933+           vim_free(di);
     45934+           Py_DECREF(list);
     45935+           Py_DECREF(litem);
     45936+           return -1;
     45937+       }
     45938+       if (dict_add(d, di) == FAIL)
     45939+       {
     45940+           vim_free(di);
     45941+           Py_DECREF(list);
     45942+           Py_DECREF(litem);
     45943+           PyErr_SetVim(_("failed to add key to dictionary"));
     45944+           return -1;
     45945+       }
     45946+       Py_DECREF(litem);
     45947     }
     45948+    Py_DECREF(list);
     45949+    return 0;
     45950+}
     45951+
     45952+    static PyInt
     45953+DictionaryLength(PyObject *self)
     45954+{
     45955+    return ((PyInt) ((((DictionaryObject *)(self))->dict->dv_hashtab.ht_used)));
     45956 }
     45957 
     45958     static PyObject *
     45959-WindowRepr(PyObject *self)
     45960+DictionaryItem(PyObject *self, PyObject *keyObject)
     45961 {
     45962-    static char repr[100];
     45963-    WindowObject *this = (WindowObject *)(self);
     45964+    char_u     *key;
     45965+    dictitem_T *val;
     45966+    DICTKEY_DECL
     45967 
     45968-    if (this->win == INVALID_WINDOW_VALUE)
     45969-    {
     45970-       vim_snprintf(repr, 100, _("<window object (deleted) at %p>"), (self));
     45971-       return PyString_FromString(repr);
     45972-    }
     45973-    else
     45974-    {
     45975-       int     i = 0;
     45976-       win_T   *w;
     45977+    DICTKEY_GET(NULL)
     45978 
     45979-       for (w = firstwin; w != NULL && w != this->win; w = W_NEXT(w))
     45980-           ++i;
     45981+    val = dict_find(((DictionaryObject *) (self))->dict, key, -1);
     45982 
     45983-       if (w == NULL)
     45984-           vim_snprintf(repr, 100, _("<window object (unknown) at %p>"),
     45985-                                                                     (self));
     45986-       else
     45987-           vim_snprintf(repr, 100, _("<window %d>"), i);
     45988+    DICTKEY_UNREF
     45989 
     45990-       return PyString_FromString(repr);
     45991-    }
     45992+    return ConvertToPyObject(&val->di_tv);
     45993 }
     45994 
     45995-/*
     45996- * Window list object - Implementation
     45997- */
     45998     static PyInt
     45999-WinListLength(PyObject *self UNUSED)
     46000+DictionaryAssItem(PyObject *self, PyObject *keyObject, PyObject *valObject)
     46001 {
     46002-    win_T      *w = firstwin;
     46003-    PyInt      n = 0;
     46004+    char_u     *key;
     46005+    typval_T   tv;
     46006+    dict_T     *d = ((DictionaryObject *)(self))->dict;
     46007+    dictitem_T *di;
     46008+    DICTKEY_DECL
     46009 
     46010-    while (w != NULL)
     46011+    if (d->dv_lock)
     46012+    {
     46013+       PyErr_SetVim(_("dict is locked"));
     46014+       return -1;
     46015+    }
     46016+
     46017+    DICTKEY_GET(-1)
     46018+
     46019+    di = dict_find(d, key, -1);
     46020+
     46021+    if (valObject == NULL)
     46022+    {
     46023+       hashitem_T      *hi;
     46024+
     46025+       if (di == NULL)
     46026+       {
     46027+           PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
     46028+           return -1;
     46029+       }
     46030+       hi = hash_find(&d->dv_hashtab, di->di_key);
     46031+       hash_remove(&d->dv_hashtab, hi);
     46032+       dictitem_free(di);
     46033+       return 0;
     46034+    }
     46035+
     46036+    if (ConvertFromPyObject(valObject, &tv) == -1)
     46037+       return -1;
     46038+
     46039+    if (di == NULL)
     46040+    {
     46041+       di = dictitem_alloc(key);
     46042+       if (di == NULL)
     46043+       {
     46044+           PyErr_NoMemory();
     46045+           return -1;
     46046+       }
     46047+       di->di_tv.v_lock = 0;
     46048+
     46049+       if (dict_add(d, di) == FAIL)
     46050+       {
     46051+           vim_free(di);
     46052+           PyErr_SetVim(_("failed to add key to dictionary"));
     46053+           return -1;
     46054+       }
     46055+    }
     46056+    else
     46057+       clear_tv(&di->di_tv);
     46058+
     46059+    DICTKEY_UNREF
     46060+
     46061+    copy_tv(&tv, &di->di_tv);
     46062+    return 0;
     46063+}
     46064+
     46065+    static PyObject *
     46066+DictionaryListKeys(PyObject *self)
     46067+{
     46068+    dict_T     *dict = ((DictionaryObject *)(self))->dict;
     46069+    long_u     todo = dict->dv_hashtab.ht_used;
     46070+    Py_ssize_t i = 0;
     46071+    PyObject   *r;
     46072+    hashitem_T *hi;
     46073+
     46074+    r = PyList_New(todo);
     46075+    for (hi = dict->dv_hashtab.ht_array; todo > 0; ++hi)
     46076+    {
     46077+       if (!HASHITEM_EMPTY(hi))
     46078+       {
     46079+           PyList_SetItem(r, i, PyBytes_FromString((char *)(hi->hi_key)));
     46080+           --todo;
     46081+           ++i;
     46082+       }
     46083+    }
     46084+    return r;
     46085+}
     46086+
     46087+static struct PyMethodDef DictionaryMethods[] = {
     46088+    {"keys", (PyCFunction)DictionaryListKeys, METH_NOARGS, ""},
     46089+    { NULL,        NULL,               0,          NULL }
     46090+};
     46091+
     46092+static PyTypeObject ListType;
     46093+
     46094+typedef struct
     46095+{
     46096+    PyObject_HEAD
     46097+    list_T     *list;
     46098+    pylinkedlist_T     ref;
     46099+} ListObject;
     46100+
     46101+    static PyObject *
     46102+ListNew(list_T *list)
     46103+{
     46104+    ListObject *self;
     46105+
     46106+    self = PyObject_NEW(ListObject, &ListType);
     46107+    if (self == NULL)
     46108+       return NULL;
     46109+    self->list = list;
     46110+    ++list->lv_refcount;
     46111+
     46112+    pyll_add((PyObject *)(self), &self->ref, &lastlist);
     46113+
     46114+    return (PyObject *)(self);
     46115+}
     46116+
     46117+    static int
     46118+list_py_concat(list_T *l, PyObject *obj, PyObject *lookupDict)
     46119+{
     46120+    Py_ssize_t i;
     46121+    Py_ssize_t lsize = PySequence_Size(obj);
     46122+    PyObject   *litem;
     46123+    listitem_T *li;
     46124+
     46125+    for(i=0; i<lsize; i++)
     46126+    {
     46127+       li = listitem_alloc();
     46128+       if (li == NULL)
     46129+       {
     46130+           PyErr_NoMemory();
     46131+           return -1;
     46132+       }
     46133+       li->li_tv.v_lock = 0;
     46134+
     46135+       litem = PySequence_GetItem(obj, i);
     46136+       if (litem == NULL)
     46137+           return -1;
     46138+       if (_ConvertFromPyObject(litem, &li->li_tv, lookupDict) == -1)
     46139+           return -1;
     46140+
     46141+       list_append(l, li);
     46142+    }
     46143+    return 0;
     46144+}
     46145+
     46146+    static int
     46147+pyseq_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
     46148+{
     46149+    list_T     *l;
     46150+
     46151+    l = list_alloc();
     46152+    if (l == NULL)
     46153+    {
     46154+       PyErr_NoMemory();
     46155+       return -1;
     46156+    }
     46157+
     46158+    tv->v_type = VAR_LIST;
     46159+    tv->vval.v_list = l;
     46160+
     46161+    if (list_py_concat(l, obj, lookupDict) == -1)
     46162+       return -1;
     46163+
     46164+    return 0;
     46165+}
     46166+
     46167+    static int
     46168+pyiter_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
     46169+{
     46170+    PyObject   *iterator = PyObject_GetIter(obj);
     46171+    PyObject   *item;
     46172+    list_T     *l;
     46173+    listitem_T *li;
     46174+
     46175+    l = list_alloc();
     46176+
     46177+    if (l == NULL)
     46178+    {
     46179+       PyErr_NoMemory();
     46180+       return -1;
     46181+    }
     46182+
     46183+    tv->vval.v_list = l;
     46184+    tv->v_type = VAR_LIST;
     46185+
     46186+
     46187+    if (iterator == NULL)
     46188+       return -1;
     46189+
     46190+    while ((item = PyIter_Next(obj)))
     46191+    {
     46192+       li = listitem_alloc();
     46193+       if (li == NULL)
     46194+       {
     46195+           PyErr_NoMemory();
     46196+           return -1;
     46197+       }
     46198+       li->li_tv.v_lock = 0;
     46199+
     46200+       if (_ConvertFromPyObject(item, &li->li_tv, lookupDict) == -1)
     46201+           return -1;
     46202+
     46203+       list_append(l, li);
     46204+
     46205+       Py_DECREF(item);
     46206+    }
     46207+
     46208+    Py_DECREF(iterator);
     46209+    return 0;
     46210+}
     46211+
     46212+    static PyInt
     46213+ListLength(PyObject *self)
     46214+{
     46215+    return ((PyInt) (((ListObject *) (self))->list->lv_len));
     46216+}
     46217+
     46218+    static PyObject *
     46219+ListItem(PyObject *self, Py_ssize_t index)
     46220+{
     46221+    listitem_T *li;
     46222+
     46223+    if (index>=ListLength(self))
     46224+    {
     46225+       PyErr_SetString(PyExc_IndexError, "list index out of range");
     46226+       return NULL;
     46227+    }
     46228+    li = list_find(((ListObject *) (self))->list, (long) index);
     46229+    if (li == NULL)
     46230+    {
     46231+       PyErr_SetVim(_("internal error: failed to get vim list item"));
     46232+       return NULL;
     46233+    }
     46234+    return ConvertToPyObject(&li->li_tv);
     46235+}
     46236+
     46237+#define PROC_RANGE \
     46238+    if (last < 0) {\
     46239+       if (last < -size) \
     46240+           last = 0; \
     46241+       else \
     46242+           last += size; \
     46243+    } \
     46244+    if (first < 0) \
     46245+       first = 0; \
     46246+    if (first > size) \
     46247+       first = size; \
     46248+    if (last > size) \
     46249+       last = size;
     46250+
     46251+    static PyObject *
     46252+ListSlice(PyObject *self, Py_ssize_t first, Py_ssize_t last)
     46253+{
     46254+    PyInt      i;
     46255+    PyInt      size = ListLength(self);
     46256+    PyInt      n;
     46257+    PyObject   *list;
     46258+    int                reversed = 0;
     46259+
     46260+    PROC_RANGE
     46261+    if (first >= last)
     46262+       first = last;
     46263+
     46264+    n = last-first;
     46265+    list = PyList_New(n);
     46266+    if (list == NULL)
     46267+       return NULL;
     46268+
     46269+    for (i = 0; i < n; ++i)
     46270+    {
     46271+       PyObject        *item = ListItem(self, i);
     46272+       if (item == NULL)
     46273+       {
     46274+           Py_DECREF(list);
     46275+           return NULL;
     46276+       }
     46277+
     46278+       if ((PyList_SetItem(list, ((reversed)?(n-i-1):(i)), item)))
     46279+       {
     46280+           Py_DECREF(item);
     46281+           Py_DECREF(list);
     46282+           return NULL;
     46283+       }
     46284+    }
     46285+
     46286+    return list;
     46287+}
     46288+
     46289+    static int
     46290+ListAssItem(PyObject *self, Py_ssize_t index, PyObject *obj)
     46291+{
     46292+    typval_T   tv;
     46293+    list_T     *l = ((ListObject *) (self))->list;
     46294+    listitem_T *li;
     46295+    Py_ssize_t length = ListLength(self);
     46296+
     46297+    if (l->lv_lock)
     46298+    {
     46299+       PyErr_SetVim(_("list is locked"));
     46300+       return -1;
     46301+    }
     46302+    if (index>length || (index==length && obj==NULL))
     46303+    {
     46304+       PyErr_SetString(PyExc_IndexError, "list index out of range");
     46305+       return -1;
     46306+    }
     46307+
     46308+    if (obj == NULL)
     46309+    {
     46310+       li = list_find(l, (long) index);
     46311+       list_remove(l, li, li);
     46312+       clear_tv(&li->li_tv);
     46313+       vim_free(li);
     46314+       return 0;
     46315+    }
     46316+
     46317+    if (ConvertFromPyObject(obj, &tv) == -1)
     46318+       return -1;
     46319+
     46320+    if (index == length)
     46321+    {
     46322+       if (list_append_tv(l, &tv) == FAIL)
     46323+       {
     46324+           PyErr_SetVim(_("Failed to add item to list"));
     46325+           return -1;
     46326+       }
     46327+    }
     46328+    else
     46329+    {
     46330+       li = list_find(l, (long) index);
     46331+       clear_tv(&li->li_tv);
     46332+       copy_tv(&tv, &li->li_tv);
     46333+    }
     46334+    return 0;
     46335+}
     46336+
     46337+    static int
     46338+ListAssSlice(PyObject *self, Py_ssize_t first, Py_ssize_t last, PyObject *obj)
     46339+{
     46340+    PyInt      size = ListLength(self);
     46341+    Py_ssize_t i;
     46342+    Py_ssize_t lsize;
     46343+    PyObject   *litem;
     46344+    listitem_T *li;
     46345+    listitem_T *next;
     46346+    typval_T   v;
     46347+    list_T     *l = ((ListObject *) (self))->list;
     46348+
     46349+    if (l->lv_lock)
     46350+    {
     46351+       PyErr_SetVim(_("list is locked"));
     46352+       return -1;
     46353+    }
     46354+
     46355+    PROC_RANGE
     46356+
     46357+    if (first == size)
     46358+       li = NULL;
     46359+    else
     46360+    {
     46361+       li = list_find(l, (long) first);
     46362+       if (li == NULL)
     46363+       {
     46364+           PyErr_SetVim(_("internal error: no vim list item"));
     46365+           return -1;
     46366+       }
     46367+       if (last > first)
     46368+       {
     46369+           i = last - first;
     46370+           while (i-- && li != NULL)
     46371+           {
     46372+               next = li->li_next;
     46373+               listitem_remove(l, li);
     46374+               li = next;
     46375+           }
     46376+       }
     46377+    }
     46378+
     46379+    if (obj == NULL)
     46380+       return 0;
     46381+
     46382+    if (!PyList_Check(obj))
     46383+    {
     46384+       PyErr_SetString(PyExc_TypeError, _("can only assign lists to slice"));
     46385+       return -1;
     46386+    }
     46387+
     46388+    lsize = PyList_Size(obj);
     46389+
     46390+    for(i=0; i<lsize; i++)
     46391+    {
     46392+       litem = PyList_GetItem(obj, i);
     46393+       if (litem == NULL)
     46394+           return -1;
     46395+       if (ConvertFromPyObject(litem, &v) == -1)
     46396+           return -1;
     46397+       if (list_insert_tv(l, &v, li) == FAIL)
     46398+       {
     46399+           PyErr_SetVim(_("internal error: failed to add item to list"));
     46400+           return -1;
     46401+       }
     46402+    }
     46403+    return 0;
     46404+}
     46405+
     46406+    static PyObject *
     46407+ListConcatInPlace(PyObject *self, PyObject *obj)
     46408+{
     46409+    list_T     *l = ((ListObject *) (self))->list;
     46410+    PyObject   *lookup_dict;
     46411+
     46412+    if (l->lv_lock)
     46413+    {
     46414+       PyErr_SetVim(_("list is locked"));
     46415+       return NULL;
     46416+    }
     46417+
     46418+    if (!PySequence_Check(obj))
     46419+    {
     46420+       PyErr_SetString(PyExc_TypeError, _("can only concatenate with lists"));
     46421+       return NULL;
     46422+    }
     46423+
     46424+    lookup_dict = PyDict_New();
     46425+    if (list_py_concat(l, obj, lookup_dict) == -1)
     46426+    {
     46427+       Py_DECREF(lookup_dict);
     46428+       return NULL;
     46429+    }
     46430+    Py_DECREF(lookup_dict);
     46431+
     46432+    Py_INCREF(self);
     46433+    return self;
     46434+}
     46435+
     46436+static struct PyMethodDef ListMethods[] = {
     46437+    {"extend", (PyCFunction)ListConcatInPlace, METH_O, ""},
     46438+    { NULL,        NULL,               0,          NULL }
     46439+};
     46440+
     46441+typedef struct
     46442+{
     46443+    PyObject_HEAD
     46444+    char_u     *name;
     46445+} FunctionObject;
     46446+
     46447+static PyTypeObject FunctionType;
     46448+
     46449+    static PyObject *
     46450+FunctionNew(char_u *name)
     46451+{
     46452+    FunctionObject     *self;
     46453+
     46454+    self = PyObject_NEW(FunctionObject, &FunctionType);
     46455+    if (self == NULL)
     46456+       return NULL;
     46457+    self->name = PyMem_New(char_u, STRLEN(name) + 1);
     46458+    if (self->name == NULL)
     46459+    {
     46460+       PyErr_NoMemory();
     46461+       return NULL;
     46462+    }
     46463+    STRCPY(self->name, name);
     46464+    func_ref(name);
     46465+    return (PyObject *)(self);
     46466+}
     46467+
     46468+    static PyObject *
     46469+FunctionCall(PyObject *self, PyObject *argsObject, PyObject *kwargs)
     46470+{
     46471+    FunctionObject     *this = (FunctionObject *)(self);
     46472+    char_u     *name = this->name;
     46473+    typval_T   args;
     46474+    typval_T   selfdicttv;
     46475+    typval_T   rettv;
     46476+    dict_T     *selfdict = NULL;
     46477+    PyObject   *selfdictObject;
     46478+    PyObject   *result;
     46479+    int                error;
     46480+
     46481+    if (ConvertFromPyObject(argsObject, &args) == -1)
     46482+       return NULL;
     46483+
     46484+    if (kwargs != NULL)
     46485+    {
     46486+       selfdictObject = PyDict_GetItemString(kwargs, "self");
     46487+       if (selfdictObject != NULL)
     46488+       {
     46489+           if (!PyDict_Check(selfdictObject))
     46490+           {
     46491+               PyErr_SetString(PyExc_TypeError, _("'self' argument must be a dictionary"));
     46492+               clear_tv(&args);
     46493+               return NULL;
     46494+           }
     46495+           if (ConvertFromPyObject(selfdictObject, &selfdicttv) == -1)
     46496+               return NULL;
     46497+           selfdict = selfdicttv.vval.v_dict;
     46498+       }
     46499+    }
     46500+
     46501+    error = func_call(name, &args, selfdict, &rettv);
     46502+    if (error != OK)
     46503+    {
     46504+       result = NULL;
     46505+       PyErr_SetVim(_("failed to run function"));
     46506+    }
     46507+    else
     46508+       result = ConvertToPyObject(&rettv);
     46509+
     46510+    /* FIXME Check what should really be cleared. */
     46511+    clear_tv(&args);
     46512+    clear_tv(&rettv);
     46513+    /*
     46514+     * if (selfdict!=NULL)
     46515+     *     clear_tv(selfdicttv);
     46516+     */
     46517+
     46518+    return result;
     46519+}
     46520+
     46521+static struct PyMethodDef FunctionMethods[] = {
     46522+    {"__call__",    (PyCFunction)FunctionCall, METH_VARARGS|METH_KEYWORDS, ""},
     46523+    { NULL,        NULL,               0,          NULL }
     46524+};
     46525+
     46526+#define INVALID_WINDOW_VALUE ((win_T *)(-1))
     46527+
     46528+    static int
     46529+CheckWindow(WindowObject *this)
     46530+{
     46531+    if (this->win == INVALID_WINDOW_VALUE)
     46532+    {
     46533+       PyErr_SetVim(_("attempt to refer to deleted window"));
     46534+       return -1;
     46535+    }
     46536+
     46537+    return 0;
     46538+}
     46539+
     46540+static int WindowSetattr(PyObject *, char *, PyObject *);
     46541+static PyObject *WindowRepr(PyObject *);
     46542+
     46543+    static int
     46544+WindowSetattr(PyObject *self, char *name, PyObject *val)
     46545+{
     46546+    WindowObject *this = (WindowObject *)(self);
     46547+
     46548+    if (CheckWindow(this))
     46549+       return -1;
     46550+
     46551+    if (strcmp(name, "buffer") == 0)
     46552+    {
     46553+       PyErr_SetString(PyExc_TypeError, _("readonly attribute"));
     46554+       return -1;
     46555+    }
     46556+    else if (strcmp(name, "cursor") == 0)
     46557+    {
     46558+       long lnum;
     46559+       long col;
     46560+
     46561+       if (!PyArg_Parse(val, "(ll)", &lnum, &col))
     46562+           return -1;
     46563+
     46564+       if (lnum <= 0 || lnum > this->win->w_buffer->b_ml.ml_line_count)
     46565+       {
     46566+           PyErr_SetVim(_("cursor position outside buffer"));
     46567+           return -1;
     46568+       }
     46569+
     46570+       /* Check for keyboard interrupts */
     46571+       if (VimErrorCheck())
     46572+           return -1;
     46573+
     46574+       this->win->w_cursor.lnum = lnum;
     46575+       this->win->w_cursor.col = col;
     46576+#ifdef FEAT_VIRTUALEDIT
     46577+       this->win->w_cursor.coladd = 0;
     46578+#endif
    4403746579+       /* When column is out of range silently correct it. */
    4403846580+       check_cursor_col_win(this->win);
    44039  
     46581+
    4404046582+       update_screen(VALID);
    44041         return 0;
    44042      }
    44043      else if (strcmp(name, "height") == 0)
    44044 @@ -698,6 +690,7 @@
     46583+       return 0;
     46584+    }
     46585+    else if (strcmp(name, "height") == 0)
     46586+    {
     46587+       int     height;
     46588+       win_T   *savewin;
     46589+
     46590+       if (!PyArg_Parse(val, "i", &height))
     46591+           return -1;
     46592+
     46593+#ifdef FEAT_GUI
     46594+       need_mouse_correct = TRUE;
     46595+#endif
     46596+       savewin = curwin;
     46597+       curwin = this->win;
     46598+       win_setheight(height);
     46599+       curwin = savewin;
     46600+
     46601+       /* Check for keyboard interrupts */
     46602+       if (VimErrorCheck())
     46603+           return -1;
     46604+
     46605+       return 0;
     46606+    }
     46607+#ifdef FEAT_VERTSPLIT
     46608+    else if (strcmp(name, "width") == 0)
     46609+    {
     46610+       int     width;
     46611+       win_T   *savewin;
     46612+
     46613+       if (!PyArg_Parse(val, "i", &width))
     46614+           return -1;
     46615+
     46616+#ifdef FEAT_GUI
     46617+       need_mouse_correct = TRUE;
     46618+#endif
     46619+       savewin = curwin;
     46620+       curwin = this->win;
     46621+       win_setwidth(width);
     46622+       curwin = savewin;
     46623+
     46624+       /* Check for keyboard interrupts */
     46625+       if (VimErrorCheck())
     46626+           return -1;
     46627+
     46628+       return 0;
     46629+    }
     46630+#endif
     46631+    else
     46632+    {
     46633+       PyErr_SetString(PyExc_AttributeError, name);
     46634+       return -1;
     46635+    }
     46636+}
     46637+
     46638+    static PyObject *
     46639+WindowRepr(PyObject *self)
     46640+{
     46641+    static char repr[100];
     46642+    WindowObject *this = (WindowObject *)(self);
     46643+
     46644+    if (this->win == INVALID_WINDOW_VALUE)
     46645+    {
     46646+       vim_snprintf(repr, 100, _("<window object (deleted) at %p>"), (self));
     46647+       return PyString_FromString(repr);
     46648+    }
     46649+    else
     46650+    {
     46651+       int     i = 0;
     46652+       win_T   *w;
     46653+
     46654+       for (w = firstwin; w != NULL && w != this->win; w = W_NEXT(w))
     46655+           ++i;
     46656+
     46657+       if (w == NULL)
     46658+           vim_snprintf(repr, 100, _("<window object (unknown) at %p>"),
     46659+                                                                     (self));
     46660+       else
     46661+           vim_snprintf(repr, 100, _("<window %d>"), i);
     46662+
     46663+       return PyString_FromString(repr);
     46664+    }
     46665+}
     46666+
     46667+/*
     46668+ * Window list object - Implementation
     46669+ */
     46670+    static PyInt
     46671+WinListLength(PyObject *self UNUSED)
     46672+{
     46673+    win_T      *w = firstwin;
     46674+    PyInt      n = 0;
     46675+
     46676+    while (w != NULL)
     46677     {
     46678        ++n;
     46679        w = W_NEXT(w);
     46680@@ -698,6 +1506,7 @@
    4404546681 {
    4404646682     const char *str;
     
    4405046686     PyInt i;
    4405146687     char *p;
    44052 @@ -708,8 +701,9 @@
     46688@@ -708,8 +1517,9 @@
    4405346689        return NULL;
    4405446690     }
     
    4406246698     /*
    4406346699      * Error checking: String must not contain newlines, as we
    44064 @@ -748,6 +742,7 @@
     46700@@ -748,6 +1558,7 @@
    4406546701     }
    4406646702 
     
    4407046706     return save;
    4407146707 }
    44072 @@ -834,7 +829,8 @@
    44073      invalidate_botline();
    44074  }
    44075  
    44076 -/* Replace a line in the specified buffer. The line number is
     46708@@ -831,42 +1642,142 @@
     46709            check_cursor_col();
     46710        changed_cline_bef_curs();
     46711     }
     46712-    invalidate_botline();
     46713+    invalidate_botline();
     46714+}
     46715+
    4407746716+/*
    4407846717+ * Replace a line in the specified buffer. The line number is
    44079   * in Vim format (1-based). The replacement line is given as
    44080   * a Python string object. The object is checked for validity
    44081   * and correct format. Errors are returned as a value of FAIL.
    44082 @@ -925,6 +921,193 @@
    44083      }
     46718+ * in Vim format (1-based). The replacement line is given as
     46719+ * a Python string object. The object is checked for validity
     46720+ * and correct format. Errors are returned as a value of FAIL.
     46721+ * The return value is OK on success.
     46722+ * If OK is returned and len_change is not NULL, *len_change
     46723+ * is set to the change in the buffer length.
     46724+ */
     46725+    static int
     46726+SetBufferLine(buf_T *buf, PyInt n, PyObject *line, PyInt *len_change)
     46727+{
     46728+    /* First of all, we check the thpe of the supplied Python object.
     46729+     * There are three cases:
     46730+     *   1. NULL, or None - this is a deletion.
     46731+     *   2. A string      - this is a replacement.
     46732+     *   3. Anything else - this is an error.
     46733+     */
     46734+    if (line == Py_None || line == NULL)
     46735+    {
     46736+       buf_T *savebuf = curbuf;
     46737+
     46738+       PyErr_Clear();
     46739+       curbuf = buf;
     46740+
     46741+       if (u_savedel((linenr_T)n, 1L) == FAIL)
     46742+           PyErr_SetVim(_("cannot save undo information"));
     46743+       else if (ml_delete((linenr_T)n, FALSE) == FAIL)
     46744+           PyErr_SetVim(_("cannot delete line"));
     46745+       else
     46746+       {
     46747+           if (buf == curwin->w_buffer)
     46748+               py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
     46749+           deleted_lines_mark((linenr_T)n, 1L);
     46750+       }
     46751+
     46752+       curbuf = savebuf;
     46753+
     46754+       if (PyErr_Occurred() || VimErrorCheck())
     46755+           return FAIL;
     46756+
     46757+       if (len_change)
     46758+           *len_change = -1;
     46759+
     46760+       return OK;
     46761+    }
     46762+    else if (PyString_Check(line))
     46763+    {
     46764+       char *save = StringToLine(line);
     46765+       buf_T *savebuf = curbuf;
     46766+
     46767+       if (save == NULL)
     46768+           return FAIL;
     46769+
     46770+       /* We do not need to free "save" if ml_replace() consumes it. */
     46771+       PyErr_Clear();
     46772+       curbuf = buf;
     46773+
     46774+       if (u_savesub((linenr_T)n) == FAIL)
     46775+       {
     46776+           PyErr_SetVim(_("cannot save undo information"));
     46777+           vim_free(save);
     46778+       }
     46779+       else if (ml_replace((linenr_T)n, (char_u *)save, FALSE) == FAIL)
     46780+       {
     46781+           PyErr_SetVim(_("cannot replace line"));
     46782+           vim_free(save);
     46783+       }
     46784+       else
     46785+           changed_bytes((linenr_T)n, 0);
     46786+
     46787+       curbuf = savebuf;
     46788+
     46789+       /* Check that the cursor is not beyond the end of the line now. */
     46790+       if (buf == curwin->w_buffer)
     46791+           check_cursor_col();
     46792+
     46793+       if (PyErr_Occurred() || VimErrorCheck())
     46794+           return FAIL;
     46795+
     46796+       if (len_change)
     46797+           *len_change = 0;
     46798+
     46799+       return OK;
     46800+    }
     46801+    else
     46802+    {
     46803+       PyErr_BadArgument();
     46804+       return FAIL;
     46805+    }
    4408446806 }
    4408546807 
     46808-/* Replace a line in the specified buffer. The line number is
     46809- * in Vim format (1-based). The replacement line is given as
     46810- * a Python string object. The object is checked for validity
     46811- * and correct format. Errors are returned as a value of FAIL.
     46812- * The return value is OK on success.
    4408646813+/* Replace a range of lines in the specified buffer. The line numbers are in
    4408746814+ * Vim format (1-based). The range is from lo up to, but not including, hi.
     
    4408946816+ * list is checked for validity and correct format. Errors are returned as a
    4409046817+ * value of FAIL.  The return value is OK on success.
    44091 + * If OK is returned and len_change is not NULL, *len_change
    44092 + * is set to the change in the buffer length.
    44093 + */
    44094 +    static int
     46818  * If OK is returned and len_change is not NULL, *len_change
     46819  * is set to the change in the buffer length.
     46820  */
     46821     static int
     46822-SetBufferLine(buf_T *buf, PyInt n, PyObject *line, PyInt *len_change)
    4409546823+SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
    44096 +{
    44097 +    /* First of all, we check the thpe of the supplied Python object.
    44098 +     * There are three cases:
    44099 +     *   1. NULL, or None - this is a deletion.
     46824 {
     46825     /* First of all, we check the thpe of the supplied Python object.
     46826      * There are three cases:
     46827      *   1. NULL, or None - this is a deletion.
     46828-     *   2. A string      - this is a replacement.
    4410046829+     *   2. A list        - this is a replacement.
    44101 +     *   3. Anything else - this is an error.
    44102 +     */
     46830      *   3. Anything else - this is an error.
     46831      */
     46832-    if (line == Py_None || line == NULL)
    4410346833+    if (list == Py_None || list == NULL)
    44104 +    {
     46834     {
     46835-       buf_T *savebuf = curbuf;
    4410546836+       PyInt   i;
    4410646837+       PyInt   n = (int)(hi - lo);
    4410746838+       buf_T   *savebuf = curbuf;
    44108 +
    44109 +       PyErr_Clear();
    44110 +       curbuf = buf;
    44111 +
     46839 
     46840        PyErr_Clear();
     46841        curbuf = buf;
     46842 
     46843-       if (u_savedel((linenr_T)n, 1L) == FAIL)
    4411246844+       if (u_savedel((linenr_T)lo, (long)n) == FAIL)
    44113 +           PyErr_SetVim(_("cannot save undo information"));
    44114 +       else
    44115 +       {
     46845            PyErr_SetVim(_("cannot save undo information"));
     46846-       else if (ml_delete((linenr_T)n, FALSE) == FAIL)
     46847-           PyErr_SetVim(_("cannot delete line"));
     46848        else
     46849        {
    4411646850+           for (i = 0; i < n; ++i)
    4411746851+           {
     
    4412246856+               }
    4412346857+           }
    44124 +           if (buf == curwin->w_buffer)
     46858            if (buf == curwin->w_buffer)
     46859-               py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
     46860-           deleted_lines_mark((linenr_T)n, 1L);
    4412546861+               py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
    4412646862+           deleted_lines_mark((linenr_T)lo, (long)i);
    44127 +       }
    44128 +
    44129 +       curbuf = savebuf;
    44130 +
    44131 +       if (PyErr_Occurred() || VimErrorCheck())
    44132 +           return FAIL;
    44133 +
    44134 +       if (len_change)
     46863        }
     46864 
     46865        curbuf = savebuf;
     46866@@ -875,46 +1786,135 @@
     46867            return FAIL;
     46868 
     46869        if (len_change)
     46870-           *len_change = -1;
    4413546871+           *len_change = -n;
    44136 +
    44137 +       return OK;
    44138 +    }
     46872 
     46873        return OK;
     46874     }
     46875-    else if (PyString_Check(line))
    4413946876+    else if (PyList_Check(list))
    44140 +    {
     46877     {
     46878-       char *save = StringToLine(line);
     46879-       buf_T *savebuf = curbuf;
    4414146880+       PyInt   i;
    4414246881+       PyInt   new_len = PyList_Size(list);
     
    4414546884+       char    **array;
    4414646885+       buf_T   *savebuf;
    44147 +
     46886 
     46887-       if (save == NULL)
     46888-           return FAIL;
    4414846889+       if (new_len == 0)       /* avoid allocating zero bytes */
    4414946890+           array = NULL;
     
    4417346914+
    4417446915+       savebuf = curbuf;
    44175 +
    44176 +       PyErr_Clear();
    44177 +       curbuf = buf;
    44178 +
     46916 
     46917-       /* We do not need to free "save" if ml_replace() consumes it. */
     46918        PyErr_Clear();
     46919        curbuf = buf;
     46920 
     46921-       if (u_savesub((linenr_T)n) == FAIL)
     46922-       {
    4417946923+       if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
    44180 +           PyErr_SetVim(_("cannot save undo information"));
     46924            PyErr_SetVim(_("cannot save undo information"));
     46925-           vim_free(save);
    4418146926+
    4418246927+       /* If the size of the range is reducing (ie, new_len < old_len) we
     
    4419346938+               }
    4419446939+           extra -= i;
    44195 +       }
     46940        }
     46941-       else if (ml_replace((linenr_T)n, (char_u *)save, FALSE) == FAIL)
    4419646942+
    4419746943+       /* For as long as possible, replace the existing old_len with the
     
    4420046946+        */
    4420146947+       if (!PyErr_Occurred())
    44202 +       {
     46948        {
     46949-           PyErr_SetVim(_("cannot replace line"));
     46950-           vim_free(save);
    4420346951+           for (i = 0; i < old_len && i < new_len; ++i)
    4420446952+               if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
     
    4420846956+                   break;
    4420946957+               }
    44210 +       }
    44211 +       else
     46958        }
     46959        else
     46960-           changed_bytes((linenr_T)n, 0);
    4421246961+           i = 0;
    44213 +
     46962 
     46963-       curbuf = savebuf;
    4421446964+       /* Now we may need to insert the remaining new old_len. If we do, we
    4421546965+        * must free the strings as we finish with them (we can't pass the
     
    4425147001+                                                 (long)MAXLNUM, (long)extra);
    4425247002+       changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
    44253 +
    44254 +       if (buf == curwin->w_buffer)
     47003 
     47004-       /* Check that the cursor is not beyond the end of the line now. */
     47005        if (buf == curwin->w_buffer)
     47006-           check_cursor_col();
    4425547007+           py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
    4425647008+
    4425747009+       curbuf = savebuf;
    44258 +
    44259 +       if (PyErr_Occurred() || VimErrorCheck())
    44260 +           return FAIL;
    44261 +
    44262 +       if (len_change)
     47010 
     47011        if (PyErr_Occurred() || VimErrorCheck())
     47012            return FAIL;
     47013 
     47014        if (len_change)
     47015-           *len_change = 0;
    4426347016+           *len_change = new_len - old_len;
    44264 +
    44265 +       return OK;
    44266 +    }
    44267 +    else
    44268 +    {
    44269 +       PyErr_BadArgument();
    44270 +       return FAIL;
    44271 +    }
    44272 +}
    44273  
     47017 
     47018        return OK;
     47019     }
     47020@@ -925,7 +1925,6 @@
     47021     }
     47022 }
     47023 
     47024-
    4427447025 /* Insert a number of lines into the specified buffer after the specifed line.
    4427547026  * The line number is in Vim format (1-based). The lines to be inserted are
    44276 @@ -1130,6 +1313,40 @@
     47027  * given as a Python list of string objects or as a single string. The lines
     47028@@ -1130,6 +2129,40 @@
    4427747029     return 0;
    4427847030 }
     
    4431547067     static PyObject *
    4431647068 RBAppend(BufferObject *self, PyObject *args, PyInt start, PyInt end, PyInt *new_end)
    44317 @@ -1267,6 +1484,9 @@
     47069@@ -1267,6 +2300,9 @@
    4431847070     {"append",     BufferAppend,       1,          "Append data to Vim buffer" },
    4431947071     {"mark",       BufferMark,         1,          "Return (row,col) representing position of named mark" },
     
    4432547077 };
    4432647078 
     47079@@ -1347,3 +2383,270 @@
     47080     { NULL,        NULL,               0,          NULL }
     47081 };
     47082 
     47083+    static void
     47084+set_ref_in_py(const int copyID)
     47085+{
     47086+    pylinkedlist_T     *cur;
     47087+    dict_T     *dd;
     47088+    list_T     *ll;
     47089+
     47090+    if (lastdict != NULL)
     47091+       for(cur = lastdict ; cur != NULL ; cur = cur->pll_prev)
     47092+       {
     47093+           dd = ((DictionaryObject *) (cur->pll_obj))->dict;
     47094+           if (dd->dv_copyID != copyID)
     47095+           {
     47096+               dd->dv_copyID = copyID;
     47097+               set_ref_in_ht(&dd->dv_hashtab, copyID);
     47098+           }
     47099+       }
     47100+
     47101+    if (lastlist != NULL)
     47102+       for(cur = lastlist ; cur != NULL ; cur = cur->pll_prev)
     47103+       {
     47104+           ll = ((ListObject *) (cur->pll_obj))->list;
     47105+           if (ll->lv_copyID != copyID)
     47106+           {
     47107+               ll->lv_copyID = copyID;
     47108+               set_ref_in_list(ll, copyID);
     47109+           }
     47110+       }
     47111+}
     47112+
     47113+    static int
     47114+set_string_copy(char_u *str, typval_T *tv)
     47115+{
     47116+    tv->vval.v_string = vim_strsave(str);
     47117+    if (tv->vval.v_string == NULL)
     47118+    {
     47119+       PyErr_NoMemory();
     47120+       return -1;
     47121+    }
     47122+    return 0;
     47123+}
     47124+
     47125+#ifdef FEAT_EVAL
     47126+typedef int (*pytotvfunc)(PyObject *, typval_T *, PyObject *);
     47127+
     47128+    static int
     47129+convert_dl(PyObject *obj, typval_T *tv,
     47130+                                   pytotvfunc py_to_tv, PyObject *lookupDict)
     47131+{
     47132+    PyObject   *capsule;
     47133+    char       hexBuf[sizeof(void *) * 2 + 3];
     47134+
     47135+    sprintf(hexBuf, "%p", obj);
     47136+
     47137+# ifdef PY_USE_CAPSULE
     47138+    capsule = PyDict_GetItemString(lookupDict, hexBuf);
     47139+# else
     47140+    capsule = (PyObject *)PyDict_GetItemString(lookupDict, hexBuf);
     47141+# endif
     47142+    if (capsule == NULL)
     47143+    {
     47144+# ifdef PY_USE_CAPSULE
     47145+       capsule = PyCapsule_New(tv, NULL, NULL);
     47146+# else
     47147+       capsule = PyCObject_FromVoidPtr(tv, NULL);
     47148+# endif
     47149+       PyDict_SetItemString(lookupDict, hexBuf, capsule);
     47150+       Py_DECREF(capsule);
     47151+       if (py_to_tv(obj, tv, lookupDict) == -1)
     47152+       {
     47153+           tv->v_type = VAR_UNKNOWN;
     47154+           return -1;
     47155+       }
     47156+       /* As we are not using copy_tv which increments reference count we must
     47157+        * do it ourself. */
     47158+       switch(tv->v_type)
     47159+       {
     47160+           case VAR_DICT: ++tv->vval.v_dict->dv_refcount; break;
     47161+           case VAR_LIST: ++tv->vval.v_list->lv_refcount; break;
     47162+       }
     47163+    }
     47164+    else
     47165+    {
     47166+       typval_T        *v;
     47167+
     47168+# ifdef PY_USE_CAPSULE
     47169+       v = PyCapsule_GetPointer(capsule, NULL);
     47170+# else
     47171+       v = PyCObject_AsVoidPtr(capsule);
     47172+# endif
     47173+       copy_tv(v, tv);
     47174+    }
     47175+    return 0;
     47176+}
     47177+
     47178+    static int
     47179+ConvertFromPyObject(PyObject *obj, typval_T *tv)
     47180+{
     47181+    PyObject   *lookup_dict;
     47182+    int                r;
     47183+
     47184+    lookup_dict = PyDict_New();
     47185+    r = _ConvertFromPyObject(obj, tv, lookup_dict);
     47186+    Py_DECREF(lookup_dict);
     47187+    return r;
     47188+}
     47189+
     47190+    static int
     47191+_ConvertFromPyObject(PyObject *obj, typval_T *tv, PyObject *lookupDict)
     47192+{
     47193+    if (obj->ob_type == &DictionaryType)
     47194+    {
     47195+       tv->v_type = VAR_DICT;
     47196+       tv->vval.v_dict = (((DictionaryObject *)(obj))->dict);
     47197+       ++tv->vval.v_dict->dv_refcount;
     47198+    }
     47199+    else if (obj->ob_type == &ListType)
     47200+    {
     47201+       tv->v_type = VAR_LIST;
     47202+       tv->vval.v_list = (((ListObject *)(obj))->list);
     47203+       ++tv->vval.v_list->lv_refcount;
     47204+    }
     47205+    else if (obj->ob_type == &FunctionType)
     47206+    {
     47207+       if (set_string_copy(((FunctionObject *) (obj))->name, tv) == -1)
     47208+           return -1;
     47209+
     47210+       tv->v_type = VAR_FUNC;
     47211+       func_ref(tv->vval.v_string);
     47212+    }
     47213+#if PY_MAJOR_VERSION >= 3
     47214+    else if (PyBytes_Check(obj))
     47215+    {
     47216+       char_u  *result = (char_u *) PyBytes_AsString(obj);
     47217+
     47218+       if (result == NULL)
     47219+           return -1;
     47220+
     47221+       if (set_string_copy(result, tv) == -1)
     47222+           return -1;
     47223+
     47224+       tv->v_type = VAR_STRING;
     47225+    }
     47226+    else if (PyUnicode_Check(obj))
     47227+    {
     47228+       PyObject        *bytes;
     47229+       char_u  *result;
     47230+
     47231+       bytes = PyString_AsBytes(obj);
     47232+       if (bytes == NULL)
     47233+           return -1;
     47234+
     47235+       result = (char_u *) PyBytes_AsString(bytes);
     47236+       if (result == NULL)
     47237+           return -1;
     47238+
     47239+       if (set_string_copy(result, tv) == -1)
     47240+       {
     47241+           Py_XDECREF(bytes);
     47242+           return -1;
     47243+       }
     47244+       Py_XDECREF(bytes);
     47245+
     47246+       tv->v_type = VAR_STRING;
     47247+    }
     47248+#else
     47249+    else if (PyUnicode_Check(obj))
     47250+    {
     47251+       PyObject        *bytes;
     47252+       char_u  *result;
     47253+
     47254+       bytes = PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, NULL);
     47255+       if (bytes == NULL)
     47256+           return -1;
     47257+
     47258+       result=(char_u *) PyString_AsString(bytes);
     47259+       if (result == NULL)
     47260+           return -1;
     47261+
     47262+       if (set_string_copy(result, tv) == -1)
     47263+       {
     47264+           Py_XDECREF(bytes);
     47265+           return -1;
     47266+       }
     47267+       Py_XDECREF(bytes);
     47268+
     47269+       tv->v_type = VAR_STRING;
     47270+    }
     47271+    else if (PyString_Check(obj))
     47272+    {
     47273+       char_u  *result = (char_u *) PyString_AsString(obj);
     47274+
     47275+       if (result == NULL)
     47276+           return -1;
     47277+
     47278+       if (set_string_copy(result, tv) == -1)
     47279+           return -1;
     47280+
     47281+       tv->v_type = VAR_STRING;
     47282+    }
     47283+    else if (PyInt_Check(obj))
     47284+    {
     47285+       tv->v_type = VAR_NUMBER;
     47286+       tv->vval.v_number = (varnumber_T) PyInt_AsLong(obj);
     47287+    }
     47288+#endif
     47289+    else if (PyLong_Check(obj))
     47290+    {
     47291+       tv->v_type = VAR_NUMBER;
     47292+       tv->vval.v_number = (varnumber_T) PyLong_AsLong(obj);
     47293+    }
     47294+    else if (PyDict_Check(obj))
     47295+       return convert_dl(obj, tv, pydict_to_tv, lookupDict);
     47296+#ifdef FEAT_FLOAT
     47297+    else if (PyFloat_Check(obj))
     47298+    {
     47299+       tv->v_type = VAR_FLOAT;
     47300+       tv->vval.v_float = (float_T) PyFloat_AsDouble(obj);
     47301+    }
     47302+#endif
     47303+    else if (PyIter_Check(obj))
     47304+       return convert_dl(obj, tv, pyiter_to_tv, lookupDict);
     47305+    else if (PySequence_Check(obj))
     47306+       return convert_dl(obj, tv, pyseq_to_tv, lookupDict);
     47307+    else if (PyMapping_Check(obj))
     47308+       return convert_dl(obj, tv, pymap_to_tv, lookupDict);
     47309+    else
     47310+    {
     47311+       PyErr_SetString(PyExc_TypeError, _("unable to convert to vim structure"));
     47312+       return -1;
     47313+    }
     47314+    return 0;
     47315+}
     47316+
     47317+    static PyObject *
     47318+ConvertToPyObject(typval_T *tv)
     47319+{
     47320+    if (tv == NULL)
     47321+    {
     47322+       PyErr_SetVim(_("NULL reference passed"));
     47323+       return NULL;
     47324+    }
     47325+    switch (tv->v_type)
     47326+    {
     47327+       case VAR_STRING:
     47328+           return PyBytes_FromString((char *) tv->vval.v_string);
     47329+       case VAR_NUMBER:
     47330+           return PyLong_FromLong((long) tv->vval.v_number);
     47331+#ifdef FEAT_FLOAT
     47332+       case VAR_FLOAT:
     47333+           return PyFloat_FromDouble((double) tv->vval.v_float);
     47334+#endif
     47335+       case VAR_LIST:
     47336+           return ListNew(tv->vval.v_list);
     47337+       case VAR_DICT:
     47338+           return DictionaryNew(tv->vval.v_dict);
     47339+       case VAR_FUNC:
     47340+           return FunctionNew(tv->vval.v_string);
     47341+       case VAR_UNKNOWN:
     47342+           Py_INCREF(Py_None);
     47343+           return Py_None;
     47344+       default:
     47345+           PyErr_SetVim(_("internal error: invalid value type"));
     47346+           return NULL;
     47347+    }
     47348+}
     47349+#endif
    4432747350diff -Naur vim73.orig/src/if_python.c vim73/src/if_python.c
    44328 --- vim73.orig/src/if_python.c  2012-06-03 23:09:52.924006631 +0000
    44329 +++ vim73/src/if_python.c       2012-06-03 23:09:54.636052191 +0000
    44330 @@ -56,6 +56,10 @@
     47351--- vim73.orig/src/if_python.c  2010-08-13 13:59:41.000000000 +0000
     47352+++ vim73/src/if_python.c       2012-07-20 20:31:17.824311481 +0000
     47353@@ -1,4 +1,4 @@
     47354-/* vi:set ts=8 sts=4 sw=4:
     47355+/* vi:set ts=8 sts=4 sw=4 noet:
     47356  *
     47357  * VIM - Vi IMproved   by Bram Moolenaar
     47358  *
     47359@@ -56,6 +56,12 @@
    4433147360 
    4433247361 static void init_structs(void);
    4433347362 
     47363+#define PyBytes_FromString PyString_FromString
     47364+
    4433447365+/* No-op conversion functions, use with care! */
    4433547366+#define PyString_AsBytes(obj) (obj)
     
    4433947370 /* Use this to be able to generate prototypes without python being used. */
    4434047371 # define PyObject Py_ssize_t
    44341 @@ -102,7 +106,7 @@
     47372@@ -65,6 +71,10 @@
     47373 # define PySequenceMethods Py_ssize_t
     47374 #endif
     47375 
     47376+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
     47377+# define PY_USE_CAPSULE
     47378+#endif
     47379+
     47380 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
     47381 # define PyInt Py_ssize_t
     47382 # define PyInquiry lenfunc
     47383@@ -102,7 +112,7 @@
    4434247384 #  include <dlfcn.h>
    4434347385 #  define FARPROC void*
     
    4434847390 #  else
    4434947391 #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
    44350 @@ -110,7 +114,7 @@
     47392@@ -110,7 +120,7 @@
    4435147393 #  define close_dll dlclose
    4435247394 #  define symbol_from_dll dlsym
     
    4435747399 #  define symbol_from_dll GetProcAddress
    4435847400 # endif
    44359 @@ -129,6 +133,7 @@
     47401@@ -118,17 +128,21 @@
     47402 /* This makes if_python.c compile without warnings against Python 2.5
     47403  * on Win32 and Win64. */
     47404 # undef PyRun_SimpleString
     47405+# undef PyRun_String
     47406 # undef PyArg_Parse
     47407 # undef PyArg_ParseTuple
     47408 # undef Py_BuildValue
     47409 # undef Py_InitModule4
     47410 # undef Py_InitModule4_64
     47411+# undef PyObject_CallMethod
     47412 
     47413 /*
     47414  * Wrapper defines
    4436047415  */
    4436147416 # define PyArg_Parse dll_PyArg_Parse
    4436247417 # define PyArg_ParseTuple dll_PyArg_ParseTuple
    4436347418+# define PyMem_Free dll_PyMem_Free
     47419+# define PyMem_Malloc dll_PyMem_Malloc
    4436447420 # define PyDict_SetItemString dll_PyDict_SetItemString
    4436547421 # define PyErr_BadArgument dll_PyErr_BadArgument
    4436647422 # define PyErr_Clear dll_PyErr_Clear
    44367 @@ -165,9 +170,11 @@
     47423@@ -145,35 +159,67 @@
     47424 # endif
     47425 # define PyInt_AsLong dll_PyInt_AsLong
     47426 # define PyInt_FromLong dll_PyInt_FromLong
     47427+# define PyLong_AsLong dll_PyLong_AsLong
     47428+# define PyLong_FromLong dll_PyLong_FromLong
     47429 # define PyInt_Type (*dll_PyInt_Type)
     47430+# define PyLong_Type (*dll_PyLong_Type)
     47431 # define PyList_GetItem dll_PyList_GetItem
     47432 # define PyList_Append dll_PyList_Append
     47433 # define PyList_New dll_PyList_New
     47434 # define PyList_SetItem dll_PyList_SetItem
     47435 # define PyList_Size dll_PyList_Size
     47436 # define PyList_Type (*dll_PyList_Type)
     47437+# define PySequence_Check dll_PySequence_Check
     47438+# define PySequence_Size dll_PySequence_Size
     47439+# define PySequence_GetItem dll_PySequence_GetItem
     47440+# define PyTuple_Size dll_PyTuple_Size
     47441+# define PyTuple_GetItem dll_PyTuple_GetItem
     47442+# define PyTuple_Type (*dll_PyTuple_Type)
     47443 # define PyImport_ImportModule dll_PyImport_ImportModule
     47444 # define PyDict_New dll_PyDict_New
     47445 # define PyDict_GetItemString dll_PyDict_GetItemString
     47446+# define PyDict_Next dll_PyDict_Next
     47447+# ifdef PyMapping_Items
     47448+#  define PY_NO_MAPPING_ITEMS
     47449+# else
     47450+#  define PyMapping_Items dll_PyMapping_Items
     47451+# endif
     47452+# define PyObject_CallMethod dll_PyObject_CallMethod
     47453+# define PyMapping_Check dll_PyMapping_Check
     47454+# define PyIter_Next dll_PyIter_Next
     47455 # define PyModule_GetDict dll_PyModule_GetDict
     47456 # define PyRun_SimpleString dll_PyRun_SimpleString
     47457+# define PyRun_String dll_PyRun_String
     47458 # define PyString_AsString dll_PyString_AsString
     47459 # define PyString_FromString dll_PyString_FromString
     47460 # define PyString_FromStringAndSize dll_PyString_FromStringAndSize
     47461 # define PyString_Size dll_PyString_Size
     47462 # define PyString_Type (*dll_PyString_Type)
     47463+# define PyUnicode_Type (*dll_PyUnicode_Type)
     47464+# undef PyUnicode_AsEncodedString
     47465+# define PyUnicode_AsEncodedString py_PyUnicode_AsEncodedString
     47466+# define PyFloat_AsDouble dll_PyFloat_AsDouble
     47467+# define PyFloat_FromDouble dll_PyFloat_FromDouble
     47468+# define PyFloat_Type (*dll_PyFloat_Type)
     47469+# define PyImport_AddModule (*dll_PyImport_AddModule)
    4436847470 # define PySys_SetObject dll_PySys_SetObject
    4436947471 # define PySys_SetArgv dll_PySys_SetArgv
     
    4437747479 # define Py_Finalize dll_Py_Finalize
    4437847480 # define Py_IsInitialized dll_Py_IsInitialized
    44379 @@ -187,6 +194,7 @@
     47481 # define _PyObject_New dll__PyObject_New
     47482+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
     47483+#  define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented)
     47484+# endif
     47485 # define _Py_NoneStruct (*dll__Py_NoneStruct)
     47486 # define PyObject_Init dll__PyObject_Init
     47487+# define PyObject_GetIter dll_PyObject_GetIter
     47488 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
     47489 #  define PyType_IsSubtype dll_PyType_IsSubtype
     47490 # endif
     47491@@ -181,12 +227,21 @@
     47492 #  define PyObject_Malloc dll_PyObject_Malloc
     47493 #  define PyObject_Free dll_PyObject_Free
     47494 # endif
     47495+# ifdef PY_USE_CAPSULE
     47496+#  define PyCapsule_New dll_PyCapsule_New
     47497+#  define PyCapsule_GetPointer dll_PyCapsule_GetPointer
     47498+# else
     47499+#  define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr
     47500+#  define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr
     47501+# endif
     47502 
     47503 /*
     47504  * Pointers for dynamic link
    4438047505  */
    4438147506 static int(*dll_PyArg_Parse)(PyObject *, char *, ...);
    4438247507 static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...);
    4438347508+static int(*dll_PyMem_Free)(void *);
     47509+static void* (*dll_PyMem_Malloc)(size_t);
    4438447510 static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
    4438547511 static int(*dll_PyErr_BadArgument)(void);
    4438647512 static void(*dll_PyErr_Clear)(void);
    44387 @@ -223,9 +231,11 @@
     47513@@ -200,37 +255,66 @@
     47514 # ifdef PY_CAN_RECURSE
     47515 static PyGILState_STATE        (*dll_PyGILState_Ensure)(void);
     47516 static void (*dll_PyGILState_Release)(PyGILState_STATE);
     47517-#endif
     47518+# endif
     47519 static long(*dll_PyInt_AsLong)(PyObject *);
     47520 static PyObject*(*dll_PyInt_FromLong)(long);
     47521+static long(*dll_PyLong_AsLong)(PyObject *);
     47522+static PyObject*(*dll_PyLong_FromLong)(long);
     47523 static PyTypeObject* dll_PyInt_Type;
     47524+static PyTypeObject* dll_PyLong_Type;
     47525 static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt);
     47526 static PyObject*(*dll_PyList_Append)(PyObject *, PyObject *);
     47527 static PyObject*(*dll_PyList_New)(PyInt size);
     47528 static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *);
     47529 static PyInt(*dll_PyList_Size)(PyObject *);
     47530 static PyTypeObject* dll_PyList_Type;
     47531+static int (*dll_PySequence_Check)(PyObject *);
     47532+static PyInt(*dll_PySequence_Size)(PyObject *);
     47533+static PyObject*(*dll_PySequence_GetItem)(PyObject *, PyInt);
     47534+static PyInt(*dll_PyTuple_Size)(PyObject *);
     47535+static PyObject*(*dll_PyTuple_GetItem)(PyObject *, PyInt);
     47536+static PyTypeObject* dll_PyTuple_Type;
     47537 static PyObject*(*dll_PyImport_ImportModule)(const char *);
     47538 static PyObject*(*dll_PyDict_New)(void);
     47539 static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *);
     47540+static int (*dll_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **);
     47541+# ifndef PY_NO_MAPPING_ITEMS
     47542+static PyObject* (*dll_PyMapping_Items)(PyObject *);
     47543+# endif
     47544+static PyObject* (*dll_PyObject_CallMethod)(PyObject *, char *, PyObject *);
     47545+static int (*dll_PyMapping_Check)(PyObject *);
     47546+static PyObject* (*dll_PyIter_Next)(PyObject *);
     47547 static PyObject*(*dll_PyModule_GetDict)(PyObject *);
     47548 static int(*dll_PyRun_SimpleString)(char *);
     47549+static PyObject *(*dll_PyRun_String)(char *, int, PyObject *, PyObject *);
     47550 static char*(*dll_PyString_AsString)(PyObject *);
     47551 static PyObject*(*dll_PyString_FromString)(const char *);
     47552 static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt);
     47553 static PyInt(*dll_PyString_Size)(PyObject *);
     47554 static PyTypeObject* dll_PyString_Type;
     47555+static PyTypeObject* dll_PyUnicode_Type;
     47556+static PyObject *(*py_PyUnicode_AsEncodedString)(PyObject *, char *, char *);
     47557+static double(*dll_PyFloat_AsDouble)(PyObject *);
     47558+static PyObject*(*dll_PyFloat_FromDouble)(double);
     47559+static PyTypeObject* dll_PyFloat_Type;
    4438847560 static int(*dll_PySys_SetObject)(char *, PyObject *);
    4438947561 static int(*dll_PySys_SetArgv)(int, char **);
     
    4439347565 static PyObject*(*dll_Py_FindMethod)(struct PyMethodDef[], PyObject *, char *);
    4439447566 static PyObject*(*dll_Py_InitModule4)(char *, struct PyMethodDef *, char *, PyObject *, int);
     47567+static PyObject*(*dll_PyImport_AddModule)(char *);
    4439547568+static void(*dll_Py_SetPythonHome)(char *home);
    4439647569 static void(*dll_Py_Initialize)(void);
    4439747570 static void(*dll_Py_Finalize)(void);
    4439847571 static int(*dll_Py_IsInitialized)(void);
    44399 @@ -267,6 +277,7 @@
     47572 static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *);
     47573 static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *);
     47574+static PyObject* (*dll_PyObject_GetIter)(PyObject *);
     47575+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
     47576+static iternextfunc dll__PyObject_NextNotImplemented;
     47577+# endif
     47578 static PyObject* dll__Py_NoneStruct;
     47579 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
     47580 static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
     47581@@ -239,6 +323,13 @@
     47582 static void* (*dll_PyObject_Malloc)(size_t);
     47583 static void (*dll_PyObject_Free)(void*);
     47584 # endif
     47585+# ifdef PY_USE_CAPSULE
     47586+static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
     47587+static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *);
     47588+# else
     47589+static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *));
     47590+static void* (*dll_PyCObject_AsVoidPtr)(PyObject *);
     47591+# endif
     47592 
     47593 static HINSTANCE hinstPython = 0; /* Instance of python.dll */
     47594 
     47595@@ -267,6 +358,8 @@
    4440047596 {
    4440147597     {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
    4440247598     {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
    4440347599+    {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free},
     47600+    {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc},
    4440447601     {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
    4440547602     {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument},
    4440647603     {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear},
    44407 @@ -303,6 +314,7 @@
     47604@@ -283,38 +376,67 @@
     47605 # endif
     47606     {"PyInt_AsLong", (PYTHON_PROC*)&dll_PyInt_AsLong},
     47607     {"PyInt_FromLong", (PYTHON_PROC*)&dll_PyInt_FromLong},
     47608+    {"PyLong_AsLong", (PYTHON_PROC*)&dll_PyLong_AsLong},
     47609+    {"PyLong_FromLong", (PYTHON_PROC*)&dll_PyLong_FromLong},
     47610     {"PyInt_Type", (PYTHON_PROC*)&dll_PyInt_Type},
     47611+    {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type},
     47612     {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem},
     47613     {"PyList_Append", (PYTHON_PROC*)&dll_PyList_Append},
     47614     {"PyList_New", (PYTHON_PROC*)&dll_PyList_New},
     47615     {"PyList_SetItem", (PYTHON_PROC*)&dll_PyList_SetItem},
     47616     {"PyList_Size", (PYTHON_PROC*)&dll_PyList_Size},
     47617     {"PyList_Type", (PYTHON_PROC*)&dll_PyList_Type},
     47618+    {"PySequence_GetItem", (PYTHON_PROC*)&dll_PySequence_GetItem},
     47619+    {"PySequence_Size", (PYTHON_PROC*)&dll_PySequence_Size},
     47620+    {"PySequence_Check", (PYTHON_PROC*)&dll_PySequence_Check},
     47621+    {"PyTuple_GetItem", (PYTHON_PROC*)&dll_PyTuple_GetItem},
     47622+    {"PyTuple_Size", (PYTHON_PROC*)&dll_PyTuple_Size},
     47623+    {"PyTuple_Type", (PYTHON_PROC*)&dll_PyTuple_Type},
     47624     {"PyImport_ImportModule", (PYTHON_PROC*)&dll_PyImport_ImportModule},
     47625     {"PyDict_GetItemString", (PYTHON_PROC*)&dll_PyDict_GetItemString},
     47626+    {"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next},
     47627     {"PyDict_New", (PYTHON_PROC*)&dll_PyDict_New},
     47628+# ifndef PY_NO_MAPPING_ITEMS
     47629+    {"PyMapping_Items", (PYTHON_PROC*)&dll_PyMapping_Items},
     47630+# endif
     47631+    {"PyObject_CallMethod", (PYTHON_PROC*)&dll_PyObject_CallMethod},
     47632+    {"PyMapping_Check", (PYTHON_PROC*)&dll_PyMapping_Check},
     47633+    {"PyIter_Next", (PYTHON_PROC*)&dll_PyIter_Next},
     47634     {"PyModule_GetDict", (PYTHON_PROC*)&dll_PyModule_GetDict},
     47635     {"PyRun_SimpleString", (PYTHON_PROC*)&dll_PyRun_SimpleString},
     47636+    {"PyRun_String", (PYTHON_PROC*)&dll_PyRun_String},
     47637     {"PyString_AsString", (PYTHON_PROC*)&dll_PyString_AsString},
     47638     {"PyString_FromString", (PYTHON_PROC*)&dll_PyString_FromString},
     47639     {"PyString_FromStringAndSize", (PYTHON_PROC*)&dll_PyString_FromStringAndSize},
     47640     {"PyString_Size", (PYTHON_PROC*)&dll_PyString_Size},
     47641     {"PyString_Type", (PYTHON_PROC*)&dll_PyString_Type},
     47642+    {"PyUnicode_Type", (PYTHON_PROC*)&dll_PyUnicode_Type},
     47643+    {"PyFloat_Type", (PYTHON_PROC*)&dll_PyFloat_Type},
     47644+    {"PyFloat_AsDouble", (PYTHON_PROC*)&dll_PyFloat_AsDouble},
     47645+    {"PyFloat_FromDouble", (PYTHON_PROC*)&dll_PyFloat_FromDouble},
     47646+    {"PyImport_AddModule", (PYTHON_PROC*)&dll_PyImport_AddModule},
    4440847647     {"PySys_SetObject", (PYTHON_PROC*)&dll_PySys_SetObject},
    4440947648     {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
     
    4441247651     {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
    4441347652     {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
    44414  # if (PY_VERSION_HEX >= 0x02050000) && SIZEOF_SIZE_T != SIZEOF_INT
    44415 @@ -310,6 +322,7 @@
     47653-# if (PY_VERSION_HEX >= 0x02050000) && SIZEOF_SIZE_T != SIZEOF_INT
     47654+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
     47655+       && SIZEOF_SIZE_T != SIZEOF_INT
     47656     {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
    4441647657 # else
    4441747658     {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
     
    4442147662     {"Py_Finalize", (PYTHON_PROC*)&dll_Py_Finalize},
    4442247663     {"Py_IsInitialized", (PYTHON_PROC*)&dll_Py_IsInitialized},
    44423 @@ -349,13 +362,14 @@
     47664     {"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New},
     47665     {"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init},
     47666+    {"PyObject_GetIter", (PYTHON_PROC*)&dll_PyObject_GetIter},
     47667+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
     47668+    {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented},
     47669+# endif
     47670     {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct},
     47671 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
     47672     {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype},
     47673@@ -323,6 +445,13 @@
     47674     {"PyObject_Malloc", (PYTHON_PROC*)&dll_PyObject_Malloc},
     47675     {"PyObject_Free", (PYTHON_PROC*)&dll_PyObject_Free},
     47676 # endif
     47677+# ifdef PY_USE_CAPSULE
     47678+    {"PyCapsule_New", (PYTHON_PROC*)&dll_PyCapsule_New},
     47679+    {"PyCapsule_GetPointer", (PYTHON_PROC*)&dll_PyCapsule_GetPointer},
     47680+# else
     47681+    {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr},
     47682+    {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr},
     47683+# endif
     47684     {"", NULL},
     47685 };
     47686 
     47687@@ -348,14 +477,16 @@
     47688 python_runtime_link_init(char *libname, int verbose)
    4442447689 {
    4442547690     int i;
     47691+    void *ucs_as_encoded_string;
    4442647692 
    4442747693-#if !defined(PY_NO_RTLD_GLOBAL) && defined(UNIX) && defined(FEAT_PYTHON3)
     
    4443847704     }
    4443947705 #endif
    44440 @@ -543,6 +557,10 @@
     47706@@ -382,6 +513,25 @@
     47707            return FAIL;
     47708        }
     47709     }
     47710+
     47711+    /* Load unicode functions separately as only the ucs2 or the ucs4 functions
     47712+     * will be present in the library. */
     47713+    ucs_as_encoded_string = symbol_from_dll(hinstPython,
     47714+                                            "PyUnicodeUCS2_AsEncodedString");
     47715+    if (ucs_as_encoded_string == NULL)
     47716+       ucs_as_encoded_string = symbol_from_dll(hinstPython,
     47717+                                            "PyUnicodeUCS4_AsEncodedString");
     47718+    if (ucs_as_encoded_string != NULL)
     47719+       py_PyUnicode_AsEncodedString = ucs_as_encoded_string;
     47720+    else
     47721+    {
     47722+       close_dll(hinstPython);
     47723+       hinstPython = 0;
     47724+       if (verbose)
     47725+           EMSG2(_(e_loadfunc), "PyUnicode_UCSX_*");
     47726+       return FAIL;
     47727+    }
     47728+
     47729     return OK;
     47730 }
     47731 
     47732@@ -420,10 +570,25 @@
     47733 
     47734 static PyObject *BufferNew (buf_T *);
     47735 static PyObject *WindowNew(win_T *);
     47736+static PyObject *DictionaryNew(dict_T *);
     47737 static PyObject *LineToString(const char *);
     47738 
     47739 static PyTypeObject RangeType;
     47740 
     47741+static int initialised = 0;
     47742+#define PYINITIALISED initialised
     47743+
     47744+/* Add conversion from PyInt? */
     47745+#define DICTKEY_GET(err) \
     47746+    if (!PyString_Check(keyObject)) \
     47747+    { \
     47748+       PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \
     47749+       return err; \
     47750+    } \
     47751+    key = (char_u *) PyString_AsString(keyObject);
     47752+#define DICTKEY_UNREF
     47753+#define DICTKEY_DECL
     47754+
     47755 /*
     47756  * Include the code shared with if_python3.c
     47757  */
     47758@@ -437,6 +602,8 @@
     47759 static PyInt RangeStart;
     47760 static PyInt RangeEnd;
     47761 
     47762+static PyObject *globals;
     47763+
     47764 static void PythonIO_Flush(void);
     47765 static int PythonIO_Init(void);
     47766 static int PythonMod_Init(void);
     47767@@ -452,8 +619,6 @@
     47768  * 1. Python interpreter main program.
     47769  */
     47770 
     47771-static int initialised = 0;
     47772-
     47773 #if PYTHON_API_VERSION < 1007 /* Python 1.4 */
     47774 typedef PyObject PyThreadState;
     47775 #endif
     47776@@ -543,6 +708,10 @@
    4444147777        }
    4444247778 #endif
     
    4444947785 
    4445047786 #if !defined(MACOS) || defined(MACOS_X_UNIX)
    44451 @@ -773,7 +791,7 @@
     47787@@ -563,6 +732,8 @@
     47788        if (PythonMod_Init())
     47789            goto fail;
     47790 
     47791+       globals = PyModule_GetDict(PyImport_AddModule("__main__"));
     47792+
     47793        /* Remove the element from sys.path that was added because of our
     47794         * argv[0] value in PythonMod_Init().  Previously we used an empty
     47795         * string, but dependinding on the OS we then get an empty entry or
     47796@@ -591,7 +762,7 @@
     47797  * External interface
     47798  */
     47799     static void
     47800-DoPythonCommand(exarg_T *eap, const char *cmd)
     47801+DoPythonCommand(exarg_T *eap, const char *cmd, typval_T *rettv)
     47802 {
     47803 #ifndef PY_CAN_RECURSE
     47804     static int         recursive = 0;
     47805@@ -621,8 +792,16 @@
     47806     if (Python_Init())
     47807        goto theend;
     47808 
     47809-    RangeStart = eap->line1;
     47810-    RangeEnd = eap->line2;
     47811+    if (rettv == NULL)
     47812+    {
     47813+       RangeStart = eap->line1;
     47814+       RangeEnd = eap->line2;
     47815+    }
     47816+    else
     47817+    {
     47818+       RangeStart = (PyInt) curwin->w_cursor.lnum;
     47819+       RangeEnd = RangeStart;
     47820+    }
     47821     Python_Release_Vim();          /* leave vim */
     47822 
     47823 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
     47824@@ -640,7 +819,23 @@
     47825 
     47826     Python_RestoreThread();        /* enter python */
     47827 
     47828-    PyRun_SimpleString((char *)(cmd));
     47829+    if (rettv == NULL)
     47830+       PyRun_SimpleString((char *)(cmd));
     47831+    else
     47832+    {
     47833+       PyObject        *r;
     47834+
     47835+       r = PyRun_String((char *)(cmd), Py_eval_input, globals, globals);
     47836+       if (r == NULL)
     47837+           EMSG(_("E858: Eval did not return a valid python object"));
     47838+       else
     47839+       {
     47840+           if (ConvertFromPyObject(r, rettv) == -1)
     47841+               EMSG(_("E859: Failed to convert returned python object to vim value"));
     47842+           Py_DECREF(r);
     47843+       }
     47844+       PyErr_Clear();
     47845+    }
     47846 
     47847     Python_SaveThread();           /* leave python */
     47848 
     47849@@ -662,7 +857,7 @@
     47850 #ifndef PY_CAN_RECURSE
     47851     --recursive;
     47852 #endif
     47853-    return;        /* keeps lint happy */
     47854+    return;
     47855 }
     47856 
     47857 /*
     47858@@ -677,9 +872,9 @@
     47859     if (!eap->skip)
     47860     {
     47861        if (script == NULL)
     47862-           DoPythonCommand(eap, (char *)eap->arg);
     47863+           DoPythonCommand(eap, (char *)eap->arg, NULL);
     47864        else
     47865-           DoPythonCommand(eap, (char *)script);
     47866+           DoPythonCommand(eap, (char *)script, NULL);
     47867     }
     47868     vim_free(script);
     47869 }
     47870@@ -725,7 +920,7 @@
     47871     *p++ = '\0';
     47872 
     47873     /* Execute the file */
     47874-    DoPythonCommand(eap, buffer);
     47875+    DoPythonCommand(eap, buffer, NULL);
     47876 }
     47877 
     47878 /******************************************************
     47879@@ -747,14 +942,16 @@
     47880     static int
     47881 OutputSetattr(PyObject *self, char *name, PyObject *val)
     47882 {
     47883-    if (val == NULL) {
     47884+    if (val == NULL)
     47885+    {
     47886        PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
     47887        return -1;
     47888     }
     47889 
     47890     if (strcmp(name, "softspace") == 0)
     47891     {
     47892-       if (!PyInt_Check(val)) {
     47893+       if (!PyInt_Check(val))
     47894+       {
     47895            PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
     47896            return -1;
     47897        }
     47898@@ -773,7 +970,7 @@
    4445247899 PythonIO_Init(void)
    4445347900 {
     
    4445847905     return PythonIO_Init_io();
    4445947906 }
    44460 @@ -823,44 +841,6 @@
     47907@@ -782,6 +979,9 @@
     47908  * 3. Implementation of the Vim module for Python
     47909  */
     47910 
     47911+static PyObject *ConvertToPyObject(typval_T *);
     47912+static int ConvertFromPyObject(PyObject *, typval_T *);
     47913+
     47914 /* Window type - Implementation functions
     47915  * --------------------------------------
     47916  */
     47917@@ -823,44 +1023,6 @@
    4446147918 static PyObject *CurrentGetattr(PyObject *, char *);
    4446247919 static int CurrentSetattr(PyObject *, char *, PyObject *);
     
    4450347960     (PyInquiry)                BufferLength,       /* sq_length,    len(x)   */
    4450447961     (binaryfunc)       0, /* BufferConcat, */       /* sq_concat,    x+y      */
    44505 @@ -1028,7 +1008,7 @@
     47962@@ -1028,7 +1190,7 @@
    4450647963     static PyInt
    4450747964 BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
     
    4451247969                      NULL);
    4451347970 }
    44514 @@ -1078,7 +1058,7 @@
     47971@@ -1078,7 +1240,7 @@
    4451547972     static PyInt
    4451647973 RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
     
    4452147978                      ((RangeObject *)(self))->end,
    4452247979                      &((RangeObject *)(self))->end);
    44523 @@ -1395,12 +1375,12 @@
     47980@@ -1395,12 +1557,12 @@
    4452447981     static char *(argv[2]) = {"/must>not&exist/foo", NULL};
    4452547982 
     
    4454047997     /* Set sys.argv[] to avoid a crash in warn(). */
    4454147998     PySys_SetArgv(1, argv);
    44542 @@ -1425,194 +1405,6 @@
     47999@@ -1425,194 +1587,6 @@
    4454348000  * 4. Utility functions for handling the interface between Vim and Python.
    4454448001  */
     
    4473548192  * All internal newlines are replaced by null characters.
    4473648193  *
     48194@@ -1649,6 +1623,172 @@
     48195     return result;
     48196 }
     48197 
     48198+static void DictionaryDestructor(PyObject *);
     48199+static PyObject *DictionaryGetattr(PyObject *, char*);
     48200+
     48201+static PyMappingMethods DictionaryAsMapping = {
     48202+    (PyInquiry)                DictionaryLength,
     48203+    (binaryfunc)       DictionaryItem,
     48204+    (objobjargproc)    DictionaryAssItem,
     48205+};
     48206+
     48207+static PyTypeObject DictionaryType = {
     48208+    PyObject_HEAD_INIT(0)
     48209+    0,
     48210+    "vimdictionary",
     48211+    sizeof(DictionaryObject),
     48212+    0,
     48213+
     48214+    (destructor)  DictionaryDestructor,
     48215+    (printfunc)   0,
     48216+    (getattrfunc) DictionaryGetattr,
     48217+    (setattrfunc) 0,
     48218+    (cmpfunc)     0,
     48219+    (reprfunc)    0,
     48220+
     48221+    0,                     /* as number */
     48222+    0,                     /* as sequence */
     48223+    &DictionaryAsMapping,   /* as mapping */
     48224+
     48225+    (hashfunc)    0,
     48226+    (ternaryfunc) 0,
     48227+    (reprfunc)    0,
     48228+};
     48229+
     48230+    static void
     48231+DictionaryDestructor(PyObject *self)
     48232+{
     48233+    DictionaryObject   *this = ((DictionaryObject *) (self));
     48234+
     48235+    pyll_remove(&this->ref, &lastdict);
     48236+    dict_unref(this->dict);
     48237+
     48238+    Py_DECREF(self);
     48239+}
     48240+
     48241+    static PyObject *
     48242+DictionaryGetattr(PyObject *self, char *name)
     48243+{
     48244+    return Py_FindMethod(DictionaryMethods, self, name);
     48245+}
     48246+
     48247+static void ListDestructor(PyObject *);
     48248+static PyObject *ListGetattr(PyObject *, char *);
     48249+
     48250+static PySequenceMethods ListAsSeq = {
     48251+    (PyInquiry)                        ListLength,
     48252+    (binaryfunc)               0,
     48253+    (PyIntArgFunc)             0,
     48254+    (PyIntArgFunc)             ListItem,
     48255+    (PyIntIntArgFunc)          ListSlice,
     48256+    (PyIntObjArgProc)          ListAssItem,
     48257+    (PyIntIntObjArgProc)       ListAssSlice,
     48258+    (objobjproc)               0,
     48259+#if PY_MAJOR_VERSION >= 2
     48260+    (binaryfunc)               ListConcatInPlace,
     48261+    0,
     48262+#endif
     48263+};
     48264+
     48265+static PyTypeObject ListType = {
     48266+    PyObject_HEAD_INIT(0)
     48267+    0,
     48268+    "vimlist",
     48269+    sizeof(ListObject),
     48270+    0,
     48271+
     48272+    (destructor)  ListDestructor,
     48273+    (printfunc)   0,
     48274+    (getattrfunc) ListGetattr,
     48275+    (setattrfunc) 0,
     48276+    (cmpfunc)     0,
     48277+    (reprfunc)    0,
     48278+
     48279+    0,                     /* as number */
     48280+    &ListAsSeq,                    /* as sequence */
     48281+    0,                     /* as mapping */
     48282+
     48283+    (hashfunc)    0,
     48284+    (ternaryfunc) 0,
     48285+    (reprfunc)    0,
     48286+};
     48287+
     48288+    static void
     48289+ListDestructor(PyObject *self)
     48290+{
     48291+    ListObject *this = ((ListObject *) (self));
     48292+
     48293+    pyll_remove(&this->ref, &lastlist);
     48294+    list_unref(this->list);
     48295+
     48296+    Py_DECREF(self);
     48297+}
     48298+
     48299+    static PyObject *
     48300+ListGetattr(PyObject *self, char *name)
     48301+{
     48302+    return Py_FindMethod(ListMethods, self, name);
     48303+}
     48304+
     48305+static void FunctionDestructor(PyObject *);
     48306+static PyObject *FunctionGetattr(PyObject *, char *);
     48307+
     48308+static PyTypeObject FunctionType = {
     48309+    PyObject_HEAD_INIT(0)
     48310+    0,
     48311+    "vimfunction",
     48312+    sizeof(FunctionObject),
     48313+    0,
     48314+
     48315+    (destructor)  FunctionDestructor,
     48316+    (printfunc)   0,
     48317+    (getattrfunc) FunctionGetattr,
     48318+    (setattrfunc) 0,
     48319+    (cmpfunc)     0,
     48320+    (reprfunc)    0,
     48321+
     48322+    0,                     /* as number */
     48323+    0,                     /* as sequence */
     48324+    0,                     /* as mapping */
     48325+
     48326+    (hashfunc)    0,
     48327+    (ternaryfunc) FunctionCall,
     48328+    (reprfunc)    0,
     48329+};
     48330+
     48331+    static void
     48332+FunctionDestructor(PyObject *self)
     48333+{
     48334+    FunctionObject     *this = (FunctionObject *) (self);
     48335+
     48336+    func_unref(this->name);
     48337+    PyMem_Del(this->name);
     48338+
     48339+    Py_DECREF(self);
     48340+}
     48341+
     48342+    static PyObject *
     48343+FunctionGetattr(PyObject *self, char *name)
     48344+{
     48345+    FunctionObject     *this = (FunctionObject *)(self);
     48346+
     48347+    if (strcmp(name, "name") == 0)
     48348+       return PyString_FromString((char *)(this->name));
     48349+    else
     48350+       return Py_FindMethod(FunctionMethods, self, name);
     48351+}
     48352+
     48353+    void
     48354+do_pyeval (char_u *str, typval_T *rettv)
     48355+{
     48356+    DoPythonCommand(NULL, (char *) str, rettv);
     48357+    switch(rettv->v_type)
     48358+    {
     48359+       case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
     48360+       case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
     48361+       case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
     48362+    }
     48363+}
     48364 
     48365 /* Don't generate a prototype for the next function, it generates an error on
     48366  * newer Python versions. */
     48367@@ -1661,6 +1801,12 @@
     48368 }
     48369 #endif /* Python 1.4 */
     48370 
     48371+    void
     48372+set_ref_in_python (int copyID)
     48373+{
     48374+    set_ref_in_py(copyID);
     48375+}
     48376+
     48377     static void
     48378 init_structs(void)
     48379 {
    4473748380diff -Naur vim73.orig/src/if_python3.c vim73/src/if_python3.c
    44738 --- vim73.orig/src/if_python3.c 2012-06-03 23:09:52.940007057 +0000
    44739 +++ vim73/src/if_python3.c      2012-06-03 23:09:55.312070180 +0000
     48381--- vim73.orig/src/if_python3.c 2010-08-13 13:59:40.000000000 +0000
     48382+++ vim73/src/if_python3.c      2012-07-20 20:31:17.787644787 +0000
    4474048383@@ -22,8 +22,8 @@
    4474148384  * Adaptations to support both python3.x and python2.x
     
    4474948392 #include "vim.h"
    4475048393 
    44751 @@ -68,19 +68,28 @@
     48394@@ -68,19 +68,31 @@
    4475248395 
    4475348396 static void init_structs(void);
     
    4476048403+#endif
    4476148404+
     48405+/* Python 3 does not support CObjects, always use Capsules */
     48406+#define PY_USE_CAPSULE
     48407+
    4476248408 #define PyInt Py_ssize_t
    4476348409 #define PyString_Check(obj) PyUnicode_Check(obj)
    4476448410-#define PyString_AsString(obj) _PyUnicode_AsString(obj)
    4476548411-#define PyString_Size(obj) PyUnicode_GET_SIZE(obj)
    44766 +#define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER);
     48412+#define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER)
    4476748413+#define PyString_FreeBytes(obj) Py_XDECREF(bytes)
    4476848414+#define PyString_AsString(obj) PyBytes_AsString(obj)
     
    4478248428 #  else
    4478348429 #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
    44784 @@ -88,7 +97,7 @@
     48430@@ -88,7 +100,7 @@
    4478548431 #  define close_dll dlclose
    4478648432 #  define symbol_from_dll dlsym
     
    4479148437 #  define symbol_from_dll GetProcAddress
    4479248438 # endif
    44793 @@ -99,6 +108,7 @@
     48439@@ -99,6 +111,8 @@
    4479448440 # define PyArg_Parse py3_PyArg_Parse
    4479548441 # undef PyArg_ParseTuple
    4479648442 # define PyArg_ParseTuple py3_PyArg_ParseTuple
    4479748443+# define PyMem_Free py3_PyMem_Free
     48444+# define PyMem_Malloc py3_PyMem_Malloc
    4479848445 # define PyDict_SetItemString py3_PyDict_SetItemString
    4479948446 # define PyErr_BadArgument py3_PyErr_BadArgument
    4480048447 # define PyErr_Clear py3_PyErr_Clear
    44801 @@ -132,6 +142,7 @@
     48448@@ -118,29 +132,54 @@
     48449 # define PyList_New py3_PyList_New
     48450 # define PyList_SetItem py3_PyList_SetItem
     48451 # define PyList_Size py3_PyList_Size
     48452+# define PySequence_Check py3_PySequence_Check
     48453+# define PySequence_Size py3_PySequence_Size
     48454+# define PySequence_GetItem py3_PySequence_GetItem
     48455+# define PyTuple_Size py3_PyTuple_Size
     48456+# define PyTuple_GetItem py3_PyTuple_GetItem
     48457 # define PySlice_GetIndicesEx py3_PySlice_GetIndicesEx
     48458 # define PyImport_ImportModule py3_PyImport_ImportModule
     48459+# define PyImport_AddModule py3_PyImport_AddModule
     48460 # define PyObject_Init py3__PyObject_Init
     48461 # define PyDict_New py3_PyDict_New
     48462 # define PyDict_GetItemString py3_PyDict_GetItemString
     48463+# define PyDict_Next py3_PyDict_Next
     48464+# define PyMapping_Check py3_PyMapping_Check
     48465+# define PyMapping_Items py3_PyMapping_Items
     48466+# define PyIter_Next py3_PyIter_Next
     48467+# define PyObject_GetIter py3_PyObject_GetIter
     48468 # define PyModule_GetDict py3_PyModule_GetDict
     48469 #undef PyRun_SimpleString
     48470 # define PyRun_SimpleString py3_PyRun_SimpleString
     48471+#undef PyRun_String
     48472+# define PyRun_String py3_PyRun_String
     48473 # define PySys_SetObject py3_PySys_SetObject
     48474 # define PySys_SetArgv py3_PySys_SetArgv
     48475 # define PyType_Type (*py3_PyType_Type)
    4480248476 # define PyType_Ready py3_PyType_Ready
    4480348477 #undef Py_BuildValue
     
    4480748481 # define Py_Finalize py3_Py_Finalize
    4480848482 # define Py_IsInitialized py3_Py_IsInitialized
    44809 @@ -139,8 +150,13 @@
     48483 # define _Py_NoneStruct (*py3__Py_NoneStruct)
     48484+# define _PyObject_NextNotImplemented (*py3__PyObject_NextNotImplemented)
    4481048485 # define PyModule_AddObject py3_PyModule_AddObject
    4481148486 # define PyImport_AppendInittab py3_PyImport_AppendInittab
     
    4481548490+# undef PyBytes_AsString
    4481648491+# define PyBytes_AsString py3_PyBytes_AsString
     48492+# undef PyBytes_FromString
     48493+# define PyBytes_FromString py3_PyBytes_FromString
     48494+# define PyFloat_FromDouble py3_PyFloat_FromDouble
     48495+# define PyFloat_AsDouble py3_PyFloat_AsDouble
    4481748496 # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
    4481848497 # define PySlice_Type (*py3_PySlice_Type)
     48498+# define PyFloat_Type (*py3_PyFloat_Type)
    4481948499+# define PyErr_NewException py3_PyErr_NewException
    4482048500 # ifdef Py_DEBUG
    4482148501 #  define _Py_NegativeRefcount py3__Py_NegativeRefcount
    4482248502 #  define _Py_RefTotal (*py3__Py_RefTotal)
    44823 @@ -156,8 +172,8 @@
     48503@@ -156,8 +195,11 @@
    4482448504 # define PyModule_Create2 py3_PyModule_Create2
    4482548505 # undef PyUnicode_FromString
     
    4482948509+# undef PyUnicode_Decode
    4483048510+# define PyUnicode_Decode py3_PyUnicode_Decode
     48511+# define PyType_IsSubtype py3_PyType_IsSubtype
     48512+# define PyCapsule_New py3_PyCapsule_New
     48513+# define PyCapsule_GetPointer py3_PyCapsule_GetPointer
    4483148514 
    4483248515 # ifdef Py_DEBUG
    4483348516 #  undef PyObject_NEW
    44834 @@ -170,6 +186,7 @@
     48517@@ -170,6 +212,7 @@
    4483548518  * Pointers for dynamic link
    4483648519  */
     
    4484048523 static PyObject* (*py3_PyList_New)(Py_ssize_t size);
    4484148524 static PyGILState_STATE (*py3_PyGILState_Ensure)(void);
    44842 @@ -177,7 +194,7 @@
     48525@@ -177,27 +220,40 @@
    4484348526 static int (*py3_PySys_SetObject)(char *, PyObject *);
    4484448527 static PyObject* (*py3_PyList_Append)(PyObject *, PyObject *);
    4484548528 static Py_ssize_t (*py3_PyList_Size)(PyObject *);
    4484648529-static int (*py3_PySlice_GetIndicesEx)(PySliceObject *r, Py_ssize_t length,
     48530+static int (*py3_PySequence_Check)(PyObject *);
     48531+static Py_ssize_t (*py3_PySequence_Size)(PyObject *);
     48532+static PyObject* (*py3_PySequence_GetItem)(PyObject *, Py_ssize_t);
     48533+static Py_ssize_t (*py3_PyTuple_Size)(PyObject *);
     48534+static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
     48535+static int (*py3_PyMapping_Check)(PyObject *);
     48536+static PyObject* (*py3_PyMapping_Items)(PyObject *);
    4484748537+static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
    4484848538                     Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
    4484948539 static PyObject* (*py3_PyErr_NoMemory)(void);
    4485048540 static void (*py3_Py_Finalize)(void);
    44851 @@ -197,7 +214,8 @@
     48541 static void (*py3_PyErr_SetString)(PyObject *, const char *);
     48542 static int (*py3_PyRun_SimpleString)(char *);
     48543+static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *);
     48544 static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t);
     48545 static PyObject* (*py3_PyImport_ImportModule)(const char *);
     48546+static PyObject* (*py3_PyImport_AddModule)(const char *);
     48547 static int (*py3_PyErr_BadArgument)(void);
     48548 static PyTypeObject* py3_PyType_Type;
     48549 static PyObject* (*py3_PyErr_Occurred)(void);
     48550 static PyObject* (*py3_PyModule_GetDict)(PyObject *);
     48551 static int (*py3_PyList_SetItem)(PyObject *, Py_ssize_t, PyObject *);
     48552 static PyObject* (*py3_PyDict_GetItemString)(PyObject *, const char *);
     48553+static int (*py3_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **);
     48554 static PyObject* (*py3_PyLong_FromLong)(long);
     48555 static PyObject* (*py3_PyDict_New)(void);
     48556+static PyObject* (*py3_PyIter_Next)(PyObject *);
     48557+static PyObject* (*py3_PyObject_GetIter)(PyObject *);
     48558 static PyObject* (*py3_Py_BuildValue)(char *, ...);
    4485248559 static int (*py3_PyType_Ready)(PyTypeObject *type);
    4485348560 static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
     
    4485948566 static void (*py3_PyErr_SetNone)(PyObject *);
    4486048567 static void (*py3_PyEval_InitThreads)(void);
    44861 @@ -205,6 +223,7 @@
     48568@@ -205,18 +261,30 @@
    4486248569 static PyThreadState*(*py3_PyEval_SaveThread)(void);
    4486348570 static int (*py3_PyArg_Parse)(PyObject *, char *, ...);
    4486448571 static int (*py3_PyArg_ParseTuple)(PyObject *, char *, ...);
    4486548572+static int (*py3_PyMem_Free)(void *);
     48573+static void* (*py3_PyMem_Malloc)(size_t);
    4486648574 static int (*py3_Py_IsInitialized)(void);
    4486748575 static void (*py3_PyErr_Clear)(void);
    4486848576 static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
    44869 @@ -212,11 +231,14 @@
     48577+static iternextfunc py3__PyObject_NextNotImplemented;
     48578 static PyObject* py3__Py_NoneStruct;
    4487048579 static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o);
    4487148580 static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void));
     
    4487348582+static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors);
    4487448583+static char* (*py3_PyBytes_AsString)(PyObject *bytes);
     48584+static PyObject* (*py3_PyBytes_FromString)(char *str);
     48585+static PyObject* (*py3_PyFloat_FromDouble)(double num);
     48586+static double (*py3_PyFloat_AsDouble)(PyObject *);
    4487548587 static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name);
    4487648588 static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
     
    4487848590 static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds);
    4487948591 static PyTypeObject* py3_PySlice_Type;
     48592+static PyTypeObject* py3_PyFloat_Type;
    4488048593+static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
     48594+static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
     48595+static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *);
    4488148596 # ifdef Py_DEBUG
    4488248597     static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
    4488348598     static Py_ssize_t* py3__Py_RefTotal;
    44884 @@ -254,8 +276,10 @@
     48599@@ -227,6 +295,7 @@
     48600     static void (*py3_PyObject_Free)(void*);
     48601     static void* (*py3_PyObject_Malloc)(size_t);
     48602 # endif
     48603+static int (*py3_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
     48604 
     48605 static HINSTANCE hinstPy3 = 0; /* Instance of python.dll */
     48606 
     48607@@ -254,27 +323,42 @@
    4488548608 } py3_funcname_table[] =
    4488648609 {
     
    4489048613     {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
    4489148614+    {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
     48615+    {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc},
    4489248616     {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
    4489348617     {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure},
    4489448618     {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release},
    44895 @@ -286,7 +310,6 @@
     48619     {"PySys_SetObject", (PYTHON_PROC*)&py3_PySys_SetObject},
     48620     {"PyList_Append", (PYTHON_PROC*)&py3_PyList_Append},
     48621     {"PyList_Size", (PYTHON_PROC*)&py3_PyList_Size},
     48622+    {"PySequence_Check", (PYTHON_PROC*)&py3_PySequence_Check},
     48623+    {"PySequence_Size", (PYTHON_PROC*)&py3_PySequence_Size},
     48624+    {"PySequence_GetItem", (PYTHON_PROC*)&py3_PySequence_GetItem},
     48625+    {"PyTuple_Size", (PYTHON_PROC*)&py3_PyTuple_Size},
     48626+    {"PyTuple_GetItem", (PYTHON_PROC*)&py3_PyTuple_GetItem},
     48627     {"PySlice_GetIndicesEx", (PYTHON_PROC*)&py3_PySlice_GetIndicesEx},
     48628     {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory},
     48629     {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize},
     48630     {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString},
     48631     {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString},
     48632+    {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String},
     48633     {"PyList_GetItem", (PYTHON_PROC*)&py3_PyList_GetItem},
     48634     {"PyImport_ImportModule", (PYTHON_PROC*)&py3_PyImport_ImportModule},
     48635+    {"PyImport_AddModule", (PYTHON_PROC*)&py3_PyImport_AddModule},
     48636     {"PyErr_BadArgument", (PYTHON_PROC*)&py3_PyErr_BadArgument},
     48637     {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
     48638     {"PyErr_Occurred", (PYTHON_PROC*)&py3_PyErr_Occurred},
     48639     {"PyModule_GetDict", (PYTHON_PROC*)&py3_PyModule_GetDict},
     48640     {"PyList_SetItem", (PYTHON_PROC*)&py3_PyList_SetItem},
     48641     {"PyDict_GetItemString", (PYTHON_PROC*)&py3_PyDict_GetItemString},
     48642+    {"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next},
     48643+    {"PyMapping_Check", (PYTHON_PROC*)&py3_PyMapping_Check},
     48644+    {"PyMapping_Items", (PYTHON_PROC*)&py3_PyMapping_Items},
     48645+    {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next},
     48646+    {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
     48647     {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
     48648     {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
     48649     {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
     48650@@ -286,19 +370,25 @@
    4489648651     {"PyEval_RestoreThread", (PYTHON_PROC*)&py3_PyEval_RestoreThread},
    4489748652     {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread},
     
    4489948654-    {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
    4490048655     {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized},
     48656+    {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&py3__PyObject_NextNotImplemented},
    4490148657     {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct},
    4490248658     {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
    44903 @@ -294,11 +317,13 @@
     48659     {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init},
    4490448660     {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject},
    4490548661     {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab},
    4490648662     {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString},
    4490748663+    {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString},
     48664+    {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString},
     48665+    {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble},
     48666+    {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble},
    4490848667     {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr},
    4490948668     {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
     
    4491148670     {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew},
    4491248671     {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
     48672+    {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type},
    4491348673+    {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
    4491448674 # ifdef Py_DEBUG
    4491548675     {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
    4491648676     {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal},
    44917 @@ -334,15 +359,16 @@
     48677@@ -309,6 +399,9 @@
     48678     {"PyObject_Malloc", (PYTHON_PROC*)&py3_PyObject_Malloc},
     48679     {"PyObject_Free", (PYTHON_PROC*)&py3_PyObject_Free},
     48680 # endif
     48681+    {"PyType_IsSubtype", (PYTHON_PROC*)&py3_PyType_IsSubtype},
     48682+    {"PyCapsule_New", (PYTHON_PROC*)&py3_PyCapsule_New},
     48683+    {"PyCapsule_GetPointer", (PYTHON_PROC*)&py3_PyCapsule_GetPointer},
     48684     {"", NULL},
     48685 };
     48686 
     48687@@ -334,15 +427,16 @@
    4491848688 py3_runtime_link_init(char *libname, int verbose)
    4491948689 {
     
    4493548705     }
    4493648706 # endif
    44937 @@ -374,19 +400,24 @@
     48707@@ -374,19 +468,24 @@
    4493848708     /* Load unicode functions separately as only the ucs2 or the ucs4 functions
    4493948709      * will be present in the library. */
     
    4496748737     else
    4496848738     {
    44969 @@ -437,6 +468,7 @@
     48739@@ -437,14 +536,45 @@
    4497048740 static PyObject *BufferNew (buf_T *);
    4497148741 static PyObject *WindowNew(win_T *);
     
    4497548745 static PyTypeObject RangeType;
    4497648746 
    44977 @@ -539,14 +571,18 @@
     48747+static int py3initialised = 0;
     48748+
     48749+#define PYINITIALISED py3initialised
     48750+
     48751+/* Add conversion from PyInt? */
     48752+#define DICTKEY_GET(err) \
     48753+    if (PyBytes_Check(keyObject)) \
     48754+       key = (char_u *) PyBytes_AsString(keyObject); \
     48755+    else if (PyUnicode_Check(keyObject)) \
     48756+    { \
     48757+       bytes = PyString_AsBytes(keyObject); \
     48758+       if (bytes == NULL) \
     48759+           return err; \
     48760+       key = (char_u *) PyBytes_AsString(bytes); \
     48761+       if (key == NULL) \
     48762+           return err; \
     48763+    } \
     48764+    else \
     48765+    { \
     48766+       PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \
     48767+       return err; \
     48768+    }
     48769+#define DICTKEY_UNREF \
     48770+    if (bytes != NULL) \
     48771+       Py_XDECREF(bytes);
     48772+
     48773+#define DICTKEY_DECL PyObject *bytes = NULL;
     48774+
     48775 /*
     48776  * Include the code shared with if_python.c
     48777  */
     48778 #include "if_py_both.h"
     48779 
     48780+#define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0)
     48781+
     48782     static void
     48783 call_PyObject_Free(void *p)
     48784 {
     48785@@ -474,6 +604,8 @@
     48786 static Py_ssize_t RangeStart;
     48787 static Py_ssize_t RangeEnd;
     48788 
     48789+static PyObject *globals;
     48790+
     48791 static int PythonIO_Init(void);
     48792 static void PythonIO_Fini(void);
     48793 PyMODINIT_FUNC Py3Init_vim(void);
     48794@@ -482,8 +614,6 @@
     48795  * 1. Python interpreter main program.
     48796  */
     48797 
     48798-static int py3initialised = 0;
     48799-
     48800 static PyGILState_STATE pygilstate = PyGILState_UNLOCKED;
     48801 
     48802     void
     48803@@ -539,14 +669,18 @@
    4497848804 
    4497948805        init_structs();
     
    4499648822 #ifdef DYNAMIC_PYTHON3
    4499748823        get_py3_exceptions();
    44998 @@ -560,8 +596,11 @@
     48824@@ -557,11 +691,16 @@
     48825 
     48826        PyImport_AppendInittab("vim", Py3Init_vim);
     48827 
     48828+       globals = PyModule_GetDict(PyImport_AddModule("__main__"));
     48829+
    4499948830        /* Remove the element from sys.path that was added because of our
    4500048831         * argv[0] value in Py3Init_vim().  Previously we used an empty
     
    4501048841        // lock is created and acquired in PyEval_InitThreads() and thread
    4501148842        // state is created in Py_Initialize()
    45012 @@ -598,6 +637,8 @@
     48843@@ -590,7 +729,7 @@
     48844  * External interface
     48845  */
     48846     static void
     48847-DoPy3Command(exarg_T *eap, const char *cmd)
     48848+DoPy3Command(exarg_T *eap, const char *cmd, typval_T *rettv)
     48849 {
     48850 #if defined(MACOS) && !defined(MACOS_X_UNIX)
     48851     GrafPtr            oldPort;
     48852@@ -598,6 +737,8 @@
    4501348853 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
    4501448854     char               *saved_locale;
     
    4501948859 #if defined(MACOS) && !defined(MACOS_X_UNIX)
    4502048860     GetPort(&oldPort);
    45021 @@ -627,7 +668,14 @@
     48861@@ -608,8 +749,16 @@
     48862     if (Python3_Init())
     48863        goto theend;
     48864 
     48865-    RangeStart = eap->line1;
     48866-    RangeEnd = eap->line2;
     48867+    if (rettv == NULL)
     48868+    {
     48869+       RangeStart = eap->line1;
     48870+       RangeEnd = eap->line2;
     48871+    }
     48872+    else
     48873+    {
     48874+       RangeStart = (PyInt) curwin->w_cursor.lnum;
     48875+       RangeEnd = RangeStart;
     48876+    }
     48877     Python_Release_Vim();          /* leave vim */
     48878 
     48879 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
     48880@@ -627,7 +776,31 @@
    4502248881 
    4502348882     pygilstate = PyGILState_Ensure();
     
    4503048889+    cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", CODEC_ERROR_HANDLER);
    4503148890+    Py_XDECREF(cmdstr);
    45032 +    PyRun_SimpleString(PyBytes_AsString(cmdbytes));
     48891+    if (rettv == NULL)
     48892+       PyRun_SimpleString(PyBytes_AsString(cmdbytes));
     48893+    else
     48894+    {
     48895+       PyObject        *r;
     48896+
     48897+       r = PyRun_String(PyBytes_AsString(cmdbytes), Py_eval_input,
     48898+                        globals, globals);
     48899+       if (r == NULL)
     48900+           EMSG(_("E860: Eval did not return a valid python 3 object"));
     48901+       else
     48902+       {
     48903+           if (ConvertFromPyObject(r, rettv) == -1)
     48904+               EMSG(_("E861: Failed to convert returned python 3 object to vim value"));
     48905+           Py_DECREF(r);
     48906+       }
     48907+       PyErr_Clear();
     48908+    }
    4503348909+    Py_XDECREF(cmdbytes);
    4503448910 
    4503548911     PyGILState_Release(pygilstate);
    4503648912 
    45037 @@ -686,7 +734,10 @@
     48913@@ -661,9 +834,9 @@
     48914     if (!eap->skip)
     48915     {
     48916        if (script == NULL)
     48917-           DoPy3Command(eap, (char *)eap->arg);
     48918+           DoPy3Command(eap, (char *)eap->arg, NULL);
     48919        else
     48920-           DoPy3Command(eap, (char *)script);
     48921+           DoPy3Command(eap, (char *)script, NULL);
     48922     }
     48923     vim_free(script);
     48924 }
     48925@@ -686,7 +859,10 @@
    4503848926      * different options under Windows, meaning that stdio pointers aren't
    4503948927      * compatible between the two. Yuk.
     
    4504748935      * We need to escape any backslashes or single quotes in the file name, so that
    4504848936      * Python won't mangle the file name.
    45049 @@ -709,8 +760,8 @@
     48937@@ -709,8 +885,8 @@
    4505048938            return;
    4505148939        if (i==0)
     
    4505848946        else
    4505948947        {
    45060 @@ -805,8 +856,8 @@
     48948@@ -721,7 +897,7 @@
     48949 
     48950 
     48951     /* Execute the file */
     48952-    DoPy3Command(eap, buffer);
     48953+    DoPy3Command(eap, buffer, NULL);
     48954 }
     48955 
     48956 /******************************************************
     48957@@ -751,14 +927,16 @@
     48958     if (PyUnicode_Check(nameobj))
     48959        name = _PyUnicode_AsString(nameobj);
     48960 
     48961-    if (val == NULL) {
     48962+    if (val == NULL)
     48963+    {
     48964        PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
     48965        return -1;
     48966     }
     48967 
     48968     if (strcmp(name, "softspace") == 0)
     48969     {
     48970-       if (!PyLong_Check(val)) {
     48971+       if (!PyLong_Check(val))
     48972+       {
     48973            PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
     48974            return -1;
     48975        }
     48976@@ -805,8 +983,8 @@
    4506148977 
    4506248978 static Py_ssize_t BufferLength(PyObject *);
     
    4506948985 
    4507048986 /* Line range type - Implementation functions
    45071 @@ -815,8 +866,9 @@
     48987@@ -815,8 +993,9 @@
    4507248988 
    4507348989 #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType)
     
    4508048996 /* Current objects type - Implementation functions
    4508148997  * -----------------------------------------------
    45082 @@ -828,7 +880,7 @@
     48998@@ -828,7 +1007,7 @@
    4508348999     (ssizeargfunc)     0,                  /* sq_repeat,    x*n      */
    4508449000     (ssizeargfunc)     BufferItem,         /* sq_item,      x[i]     */
     
    4508949005     0,                                     /* sq_contains */
    4509049006     0,                                     /* sq_inplace_concat */
    45091 @@ -838,7 +890,7 @@
     49007@@ -838,7 +1017,7 @@
    4509249008 PyMappingMethods BufferAsMapping = {
    4509349009     /* mp_length       */ (lenfunc)BufferLength,
     
    4509849014 
    4509949015 
    45100 @@ -890,6 +942,8 @@
     49016@@ -890,6 +1069,8 @@
    4510149017 
    4510249018     if (this->buf && this->buf != INVALID_BUFFER_VALUE)
     
    4510749023 
    4510849024     static PyObject *
    45109 @@ -908,13 +962,18 @@
     49025@@ -908,13 +1089,18 @@
    4511049026        return Py_BuildValue("s", this->buf->b_ffname);
    4511149027     else if (strcmp(name, "number") == 0)
     
    4512849044 {
    4512949045     static char repr[100];
    45130 @@ -968,15 +1027,6 @@
     49046@@ -968,37 +1154,64 @@
    4513149047               (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count);
    4513249048 }
     
    4514449060 BufferSubscript(PyObject *self, PyObject* idx)
    4514549061 {
    45146 @@ -986,19 +1036,45 @@
    45147      } else if (PySlice_Check(idx)) {
     49062-    if (PyLong_Check(idx)) {
     49063+    if (PyLong_Check(idx))
     49064+    {
     49065        long _idx = PyLong_AsLong(idx);
     49066        return BufferItem(self,_idx);
     49067-    } else if (PySlice_Check(idx)) {
     49068+    } else if (PySlice_Check(idx))
     49069+    {
    4514849070        Py_ssize_t start, stop, step, slicelen;
    4514949071 
     
    4515249074              (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
    4515349075              &start, &stop,
    45154               &step, &slicelen) < 0) {
     49076-             &step, &slicelen) < 0) {
     49077+             &step, &slicelen) < 0)
     49078+       {
    4515549079            return NULL;
    4515649080        }
    4515749081-       return BufferSlice(self,start,stop+1);
     49082-    } else {
    4515849083+       return BufferSlice(self, start, stop);
    45159      } else {
     49084+    }
     49085+    else
     49086+    {
    4516049087        PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
    4516149088        return NULL;
     
    4516649093+BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
    4516749094+{
    45168 +    if (PyLong_Check(idx)) {
     49095+    if (PyLong_Check(idx))
     49096+    {
    4516949097+       long n = PyLong_AsLong(idx);
    4517049098+       return RBAsItem((BufferObject *)(self), n, val, 1,
    4517149099+                   (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
    4517249100+                   NULL);
    45173 +    } else if (PySlice_Check(idx)) {
     49101+    } else if (PySlice_Check(idx))
     49102+    {
    4517449103+       Py_ssize_t start, stop, step, slicelen;
    4517549104+
     
    4517749106+             (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
    4517849107+             &start, &stop,
    45179 +             &step, &slicelen) < 0) {
     49108+             &step, &slicelen) < 0)
     49109+       {
    4518049110+           return -1;
    4518149111+       }
     
    4518349113+                         (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
    4518449114+                         NULL);
    45185 +    } else {
     49115+    }
     49116+    else
     49117+    {
    4518649118+       PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
    4518749119+       return -1;
     
    4519249124     (lenfunc)          RangeLength,     /* sq_length,    len(x)   */
    4519349125     (binaryfunc)       0,               /* RangeConcat, sq_concat,  x+y   */
    45194 @@ -1015,7 +1091,7 @@
     49126@@ -1015,7 +1228,7 @@
    4519549127 PyMappingMethods RangeAsMapping = {
    4519649128     /* mp_length       */ (lenfunc)RangeLength,
     
    4520149133 
    4520249134 /* Line range object - Implementation
    45203 @@ -1025,6 +1101,7 @@
     49135@@ -1025,6 +1238,7 @@
    4520449136 RangeDestructor(PyObject *self)
    4520549137 {
     
    4520949141 
    4521049142     static PyObject *
    45211 @@ -1053,6 +1130,15 @@
     49143@@ -1053,28 +1267,70 @@
    4521249144                    &((RangeObject *)(self))->end);
    4521349145 }
     
    4522549157 RangeSubscript(PyObject *self, PyObject* idx)
    4522649158 {
    45227 @@ -1062,19 +1148,42 @@
    45228      } else if (PySlice_Check(idx)) {
     49159-    if (PyLong_Check(idx)) {
     49160+    if (PyLong_Check(idx))
     49161+    {
     49162        long _idx = PyLong_AsLong(idx);
     49163        return RangeItem(self,_idx);
     49164-    } else if (PySlice_Check(idx)) {
     49165+    } else if (PySlice_Check(idx))
     49166+    {
    4522949167        Py_ssize_t start, stop, step, slicelen;
    4523049168 
     
    4523349171                ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
    4523449172                &start, &stop,
    45235                 &step, &slicelen) < 0) {
     49173-               &step, &slicelen) < 0) {
     49174+               &step, &slicelen) < 0)
     49175+       {
    4523649176            return NULL;
    4523749177        }
    4523849178-       return RangeSlice(self,start,stop+1);
     49179-    } else {
    4523949180+       return RangeSlice(self, start, stop);
    45240      } else {
     49181+    }
     49182+    else
     49183+    {
    4524149184        PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
    4524249185        return NULL;
     
    4524749190+RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
    4524849191+{
    45249 +    if (PyLong_Check(idx)) {
     49192+    if (PyLong_Check(idx))
     49193+    {
    4525049194+       long n = PyLong_AsLong(idx);
    4525149195+       return RangeAsItem(self, n, val);
    45252 +    } else if (PySlice_Check(idx)) {
     49196+    } else if (PySlice_Check(idx))
     49197+    {
    4525349198+       Py_ssize_t start, stop, step, slicelen;
    4525449199+
     
    4525649201+               ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
    4525749202+               &start, &stop,
    45258 +               &step, &slicelen) < 0) {
     49203+               &step, &slicelen) < 0)
     49204+       {
    4525949205+           return -1;
    4526049206+       }
    4526149207+       return RangeAsSlice(self, start, stop, val);
    45262 +    } else {
     49208+    }
     49209+    else
     49210+    {
    4526349211+       PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
    4526449212+       return -1;
     
    4527049218  */
    4527149219 
    45272 @@ -1152,6 +1261,8 @@
     49220@@ -1152,6 +1408,8 @@
    4527349221 
    4527449222     if (this->win && this->win != INVALID_WINDOW_VALUE)
     
    4527949227 
    4528049228     static PyObject *
    45281 @@ -1343,8 +1454,11 @@
     49229@@ -1279,6 +1537,147 @@
     49230     }
     49231 }
     49232 
     49233+/* Dictionary object - Definitions
     49234+ */
     49235+
     49236+static PyInt DictionaryLength(PyObject *);
     49237+
     49238+static PyMappingMethods DictionaryAsMapping = {
     49239+    /* mp_length       */ (lenfunc) DictionaryLength,
     49240+    /* mp_subscript     */ (binaryfunc) DictionaryItem,
     49241+    /* mp_ass_subscript */ (objobjargproc) DictionaryAssItem,
     49242+};
     49243+
     49244+static PyTypeObject DictionaryType;
     49245+
     49246+    static void
     49247+DictionaryDestructor(PyObject *self)
     49248+{
     49249+    DictionaryObject *this = (DictionaryObject *)(self);
     49250+
     49251+    pyll_remove(&this->ref, &lastdict);
     49252+    dict_unref(this->dict);
     49253+
     49254+    Py_TYPE(self)->tp_free((PyObject*)self);
     49255+}
     49256+
     49257+/* List object - Definitions
     49258+ */
     49259+
     49260+static PyInt ListLength(PyObject *);
     49261+static PyObject *ListItem(PyObject *, Py_ssize_t);
     49262+
     49263+static PySequenceMethods ListAsSeq = {
     49264+    (lenfunc)          ListLength,      /* sq_length,    len(x)   */
     49265+    (binaryfunc)       0,               /* RangeConcat, sq_concat,  x+y   */
     49266+    (ssizeargfunc)     0,               /* RangeRepeat, sq_repeat,  x*n   */
     49267+    (ssizeargfunc)     ListItem,        /* sq_item,      x[i]     */
     49268+    (void *)           0,               /* was_sq_slice,     x[i:j]   */
     49269+    (ssizeobjargproc)  ListAssItem,     /* sq_as_item,  x[i]=v   */
     49270+    (void *)           0,               /* was_sq_ass_slice, x[i:j]=v */
     49271+    0,                                  /* sq_contains */
     49272+    (binaryfunc)       ListConcatInPlace,/* sq_inplace_concat */
     49273+    0,                                  /* sq_inplace_repeat */
     49274+};
     49275+
     49276+static PyObject *ListSubscript(PyObject *, PyObject *);
     49277+static Py_ssize_t ListAsSubscript(PyObject *, PyObject *, PyObject *);
     49278+
     49279+static PyMappingMethods ListAsMapping = {
     49280+    /* mp_length       */ (lenfunc) ListLength,
     49281+    /* mp_subscript     */ (binaryfunc) ListSubscript,
     49282+    /* mp_ass_subscript */ (objobjargproc) ListAsSubscript,
     49283+};
     49284+
     49285+static PyTypeObject ListType;
     49286+
     49287+    static PyObject *
     49288+ListSubscript(PyObject *self, PyObject* idxObject)
     49289+{
     49290+    if (PyLong_Check(idxObject))
     49291+    {
     49292+       long idx = PyLong_AsLong(idxObject);
     49293+       return ListItem(self, idx);
     49294+    }
     49295+    else if (PySlice_Check(idxObject))
     49296+    {
     49297+       Py_ssize_t start, stop, step, slicelen;
     49298+
     49299+       if (PySlice_GetIndicesEx(idxObject, ListLength(self), &start, &stop,
     49300+                                &step, &slicelen) < 0)
     49301+           return NULL;
     49302+       return ListSlice(self, start, stop);
     49303+    }
     49304+    else
     49305+    {
     49306+       PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
     49307+       return NULL;
     49308+    }
     49309+}
     49310+
     49311+    static Py_ssize_t
     49312+ListAsSubscript(PyObject *self, PyObject *idxObject, PyObject *obj)
     49313+{
     49314+    if (PyLong_Check(idxObject))
     49315+    {
     49316+       long idx = PyLong_AsLong(idxObject);
     49317+       return ListAssItem(self, idx, obj);
     49318+    }
     49319+    else if (PySlice_Check(idxObject))
     49320+    {
     49321+       Py_ssize_t start, stop, step, slicelen;
     49322+
     49323+       if (PySlice_GetIndicesEx(idxObject, ListLength(self), &start, &stop,
     49324+                                &step, &slicelen) < 0)
     49325+           return -1;
     49326+       return ListAssSlice(self, start, stop, obj);
     49327+    }
     49328+    else
     49329+    {
     49330+       PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
     49331+       return -1;
     49332+    }
     49333+}
     49334+
     49335+    static void
     49336+ListDestructor(PyObject *self)
     49337+{
     49338+    ListObject *this = (ListObject *)(self);
     49339+
     49340+    pyll_remove(&this->ref, &lastlist);
     49341+    list_unref(this->list);
     49342+
     49343+    Py_TYPE(self)->tp_free((PyObject*)self);
     49344+}
     49345+
     49346+/* Function object - Definitions
     49347+ */
     49348+
     49349+    static void
     49350+FunctionDestructor(PyObject *self)
     49351+{
     49352+    FunctionObject     *this = (FunctionObject *) (self);
     49353+
     49354+    func_unref(this->name);
     49355+    PyMem_Del(this->name);
     49356+
     49357+    Py_TYPE(self)->tp_free((PyObject*)self);
     49358+}
     49359+
     49360+    static PyObject *
     49361+FunctionGetattro(PyObject *self, PyObject *nameobj)
     49362+{
     49363+    FunctionObject     *this = (FunctionObject *)(self);
     49364+    char       *name = "";
     49365+    if (PyUnicode_Check(nameobj))
     49366+       name = _PyUnicode_AsString(nameobj);
     49367+
     49368+    if (strcmp(name, "name") == 0)
     49369+       return PyUnicode_FromString((char *)(this->name));
     49370+
     49371+    return PyObject_GenericGetAttr(self, nameobj);
     49372+}
     49373+
     49374 /* External interface
     49375  */
     49376 
     49377@@ -1338,13 +1737,19 @@
     49378     PyType_Ready(&BufListType);
     49379     PyType_Ready(&WinListType);
     49380     PyType_Ready(&CurrentType);
     49381+    PyType_Ready(&DictionaryType);
     49382+    PyType_Ready(&ListType);
     49383+    PyType_Ready(&FunctionType);
     49384 
     49385     /* Set sys.argv[] to avoid a crash in warn(). */
    4528249386     PySys_SetArgv(1, argv);
    4528349387 
     
    4529249396     PyModule_AddObject(mod, "error", VimError);
    4529349397     Py_INCREF((PyObject *)(void *)&TheBufferList);
    45294 @@ -1397,7 +1511,7 @@
     49398@@ -1397,12 +1802,30 @@
    4529549399     }
    4529649400     *p = '\0';
     
    4530149405     vim_free(tmp);
    4530249406     return result;
     49407 }
     49408 
     49409+    void
     49410+do_py3eval (char_u *str, typval_T *rettv)
     49411+{
     49412+    DoPy3Command(NULL, (char *) str, rettv);
     49413+    switch(rettv->v_type)
     49414+    {
     49415+       case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
     49416+       case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
     49417+       case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
     49418+    }
     49419+}
     49420+
     49421+    void
     49422+set_ref_in_python3 (int copyID)
     49423+{
     49424+    set_ref_in_py(copyID);
     49425+}
     49426+
     49427     static void
     49428 init_structs(void)
     49429 {
     49430@@ -1484,6 +1907,35 @@
     49431     CurrentType.tp_flags = Py_TPFLAGS_DEFAULT;
     49432     CurrentType.tp_doc = "vim current object";
     49433 
     49434+    vim_memset(&DictionaryType, 0, sizeof(DictionaryType));
     49435+    DictionaryType.tp_name = "vim.dictionary";
     49436+    DictionaryType.tp_basicsize = sizeof(DictionaryObject);
     49437+    DictionaryType.tp_dealloc = DictionaryDestructor;
     49438+    DictionaryType.tp_as_mapping = &DictionaryAsMapping;
     49439+    DictionaryType.tp_flags = Py_TPFLAGS_DEFAULT;
     49440+    DictionaryType.tp_doc = "dictionary pushing modifications to vim structure";
     49441+    DictionaryType.tp_methods = DictionaryMethods;
     49442+
     49443+    vim_memset(&ListType, 0, sizeof(ListType));
     49444+    ListType.tp_name = "vim.list";
     49445+    ListType.tp_dealloc = ListDestructor;
     49446+    ListType.tp_basicsize = sizeof(ListObject);
     49447+    ListType.tp_as_sequence = &ListAsSeq;
     49448+    ListType.tp_as_mapping = &ListAsMapping;
     49449+    ListType.tp_flags = Py_TPFLAGS_DEFAULT;
     49450+    ListType.tp_doc = "list pushing modifications to vim structure";
     49451+    ListType.tp_methods = ListMethods;
     49452+
     49453+    vim_memset(&FunctionType, 0, sizeof(FunctionType));
     49454+    FunctionType.tp_name = "vim.list";
     49455+    FunctionType.tp_basicsize = sizeof(FunctionObject);
     49456+    FunctionType.tp_getattro = FunctionGetattro;
     49457+    FunctionType.tp_dealloc = FunctionDestructor;
     49458+    FunctionType.tp_call = FunctionCall;
     49459+    FunctionType.tp_flags = Py_TPFLAGS_DEFAULT;
     49460+    FunctionType.tp_doc = "object that calls vim function";
     49461+    FunctionType.tp_methods = FunctionMethods;
     49462+
     49463     vim_memset(&vimmodule, 0, sizeof(vimmodule));
     49464     vimmodule.m_name = "vim";
     49465     vimmodule.m_doc = vim_module_doc;
    4530349466diff -Naur vim73.orig/src/if_ruby.c vim73/src/if_ruby.c
    45304 --- vim73.orig/src/if_ruby.c    2012-06-03 23:09:52.948007269 +0000
    45305 +++ vim73/src/if_ruby.c 2012-06-03 23:09:55.752081889 +0000
     49467--- vim73.orig/src/if_ruby.c    2010-06-30 19:33:12.000000000 +0000
     49468+++ vim73/src/if_ruby.c 2012-07-20 20:31:15.810976706 +0000
    4530649469@@ -4,12 +4,17 @@
    4530749470  *
     
    4569649859 
    4569749860diff -Naur vim73.orig/src/if_sniff.c vim73/src/if_sniff.c
    45698 --- vim73.orig/src/if_sniff.c   2012-06-03 23:09:52.924006631 +0000
    45699 +++ vim73/src/if_sniff.c        2012-06-03 23:09:53.508022172 +0000
     49861--- vim73.orig/src/if_sniff.c   2010-05-15 11:04:06.000000000 +0000
     49862+++ vim73/src/if_sniff.c        2012-07-20 20:31:08.870971712 +0000
    4570049863@@ -9,7 +9,6 @@
    4570149864 
     
    4570749870 # include <assert.h>
    4570849871diff -Naur vim73.orig/src/if_tcl.c vim73/src/if_tcl.c
    45709 --- vim73.orig/src/if_tcl.c     2012-06-03 23:09:52.920006524 +0000
    45710 +++ vim73/src/if_tcl.c  2012-06-03 23:09:55.492074972 +0000
     49872--- vim73.orig/src/if_tcl.c     2010-08-08 13:07:25.000000000 +0000
     49873+++ vim73/src/if_tcl.c  2012-07-20 20:31:14.990976118 +0000
    4571149874@@ -74,18 +74,18 @@
    4571249875 #endif
     
    4593550098        line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
    4593650099        if (line)
     50100diff -Naur vim73.orig/src/if_xcmdsrv.c vim73/src/if_xcmdsrv.c
     50101--- vim73.orig/src/if_xcmdsrv.c 2010-05-15 11:04:08.000000000 +0000
     50102+++ vim73/src/if_xcmdsrv.c      2012-07-20 20:31:17.997644938 +0000
     50103@@ -572,61 +572,55 @@
     50104 {
     50105     time_t         start;
     50106     time_t         now;
     50107-    time_t         lastChk = 0;
     50108     XEvent         event;
     50109-    XPropertyEvent *e = (XPropertyEvent *)&event;
     50110-#   define SEND_MSEC_POLL 50
     50111+
     50112+#define UI_MSEC_DELAY 50
     50113+#define SEND_MSEC_POLL 500
     50114+#ifndef HAVE_SELECT
     50115+    struct pollfd   fds;
     50116+
     50117+    fds.fd = ConnectionNumber(dpy);
     50118+    fds.events = POLLIN;
     50119+#else
     50120+    fd_set         fds;
     50121+    struct timeval  tv;
     50122+
     50123+    tv.tv_sec = 0;
     50124+    tv.tv_usec =  SEND_MSEC_POLL * 1000;
     50125+    FD_ZERO(&fds);
     50126+    FD_SET(ConnectionNumber(dpy), &fds);
     50127+#endif
     50128 
     50129     time(&start);
     50130-    while (endCond(endData) == 0)
     50131+    while (TRUE)
     50132     {
     50133+       while (XCheckWindowEvent(dpy, commWindow, PropertyChangeMask, &event))
     50134+           serverEventProc(dpy, &event);
     50135+
     50136+       if (endCond(endData) != 0)
     50137+           break;
     50138+       if (!WindowValid(dpy, w))
     50139+           break;
     50140        time(&now);
     50141        if (seconds >= 0 && (now - start) >= seconds)
     50142            break;
     50143-       if (now != lastChk)
     50144-       {
     50145-           lastChk = now;
     50146-           if (!WindowValid(dpy, w))
     50147-               break;
     50148-           /*
     50149-            * Sometimes the PropertyChange event doesn't come.
     50150-            * This can be seen in eg: vim -c 'echo remote_expr("gvim", "3+2")'
     50151-            */
     50152-           serverEventProc(dpy, NULL);
     50153-       }
     50154+
     50155+       /* Just look out for the answer without calling back into Vim */
     50156        if (localLoop)
     50157        {
     50158-           /* Just look out for the answer without calling back into Vim */
     50159 #ifndef HAVE_SELECT
     50160-           struct pollfd   fds;
     50161-
     50162-           fds.fd = ConnectionNumber(dpy);
     50163-           fds.events = POLLIN;
     50164            if (poll(&fds, 1, SEND_MSEC_POLL) < 0)
     50165                break;
     50166 #else
     50167-           fd_set          fds;
     50168-           struct timeval  tv;
     50169-
     50170-           tv.tv_sec = 0;
     50171-           tv.tv_usec =  SEND_MSEC_POLL * 1000;
     50172-           FD_ZERO(&fds);
     50173-           FD_SET(ConnectionNumber(dpy), &fds);
     50174-           if (select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &tv) < 0)
     50175+           if (select(FD_SETSIZE, &fds, NULL, NULL, &tv) < 0)
     50176                break;
     50177 #endif
     50178-           while (XEventsQueued(dpy, QueuedAfterReading) > 0)
     50179-           {
     50180-               XNextEvent(dpy, &event);
     50181-               if (event.type == PropertyNotify && e->window == commWindow)
     50182-                   serverEventProc(dpy, &event);
     50183-           }
     50184        }
     50185        else
     50186        {
     50187            if (got_int)
     50188                break;
     50189-           ui_delay((long)SEND_MSEC_POLL, TRUE);
     50190+           ui_delay((long)UI_MSEC_DELAY, TRUE);
     50191            ui_breakcheck();
     50192        }
     50193     }
     50194@@ -655,7 +649,6 @@
     50195        if (SendInit(dpy) < 0)
     50196            return NULL;
     50197     }
     50198-    ga_init2(&ga, 1, 100);
     50199 
     50200     /*
     50201      * Read the registry property.
     50202@@ -1198,9 +1191,8 @@
     50203        if ((*p == 'c' || *p == 'k') && (p[1] == 0))
     50204        {
     50205            Window      resWindow;
     50206-           char_u      *name, *script, *serial, *end, *res;
     50207+           char_u      *name, *script, *serial, *end;
     50208            Bool        asKeys = *p == 'k';
     50209-           garray_T    reply;
     50210            char_u      *enc;
     50211 
     50212            /*
     50213@@ -1256,50 +1248,52 @@
     50214            if (script == NULL || name == NULL)
     50215                continue;
     50216 
     50217-           /*
     50218-            * Initialize the result property, so that we're ready at any
     50219-            * time if we need to return an error.
     50220-            */
     50221-           if (resWindow != None)
     50222-           {
     50223-               ga_init2(&reply, 1, 100);
     50224+            if (serverName != NULL && STRICMP(name, serverName) == 0)
     50225+            {
     50226+                script = serverConvert(enc, script, &tofree);
     50227+                if (asKeys)
     50228+                    server_to_input_buf(script);
     50229+                else
     50230+                {
     50231+                    char_u      *res;
     50232+
     50233+                    res = eval_client_expr_to_string(script);
     50234+                   if (resWindow != None)
     50235+                   {
     50236+                       garray_T    reply;
     50237+
     50238+                       /* Initialize the result property. */
     50239+                       ga_init2(&reply, 1, 100);
     50240 #ifdef FEAT_MBYTE
     50241-               ga_grow(&reply, 50 + STRLEN(p_enc));
     50242-               sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
     50243+                       ga_grow(&reply, 50 + STRLEN(p_enc));
     50244+                       sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
     50245                                                   0, 0, p_enc, 0, serial, 0);
     50246-               reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
     50247+                       reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
     50248 #else
     50249-               ga_grow(&reply, 50);
     50250-               sprintf(reply.ga_data, "%cr%c-s %s%c-r ", 0, 0, serial, 0);
     50251-               reply.ga_len = 10 + STRLEN(serial);
     50252+                       ga_grow(&reply, 50);
     50253+                       sprintf(reply.ga_data, "%cr%c-s %s%c-r ",
     50254+                                                            0, 0, serial, 0);
     50255+                       reply.ga_len = 10 + STRLEN(serial);
     50256 #endif
     50257-           }
     50258-           res = NULL;
     50259-           if (serverName != NULL && STRICMP(name, serverName) == 0)
     50260-           {
     50261-               script = serverConvert(enc, script, &tofree);
     50262-               if (asKeys)
     50263-                   server_to_input_buf(script);
     50264-               else
     50265-                   res = eval_client_expr_to_string(script);
     50266-               vim_free(tofree);
     50267-           }
     50268-           if (resWindow != None)
     50269-           {
     50270-               if (res != NULL)
     50271-                   ga_concat(&reply, res);
     50272-               else if (asKeys == 0)
     50273-               {
     50274-                   ga_concat(&reply, (char_u *)_(e_invexprmsg));
     50275-                   ga_append(&reply, 0);
     50276-                   ga_concat(&reply, (char_u *)"-c 1");
     50277-               }
     50278-               ga_append(&reply, NUL);
     50279-               (void)AppendPropCarefully(dpy, resWindow, commProperty,
     50280-                                          reply.ga_data, reply.ga_len);
     50281-               ga_clear(&reply);
     50282-           }
     50283-           vim_free(res);
     50284+
     50285+                       /* Evaluate the expression and return the result. */
     50286+                       if (res != NULL)
     50287+                           ga_concat(&reply, res);
     50288+                       else
     50289+                       {
     50290+                           ga_concat(&reply, (char_u *)_(e_invexprmsg));
     50291+                           ga_append(&reply, 0);
     50292+                           ga_concat(&reply, (char_u *)"-c 1");
     50293+                       }
     50294+                       ga_append(&reply, NUL);
     50295+                       (void)AppendPropCarefully(dpy, resWindow, commProperty,
     50296+                                                reply.ga_data, reply.ga_len);
     50297+                       ga_clear(&reply);
     50298+                   }
     50299+                    vim_free(res);
     50300+                }
     50301+                vim_free(tofree);
     50302+            }
     50303        }
     50304        else if (*p == 'r' && p[1] == 0)
     50305        {
    4593750306diff -Naur vim73.orig/src/integration.c vim73/src/integration.c
    45938 --- vim73.orig/src/integration.c        2012-06-03 23:09:52.952007375 +0000
    45939 +++ vim73/src/integration.c     2012-06-03 23:09:53.532022810 +0000
     50307--- vim73.orig/src/integration.c        2010-08-08 13:09:21.000000000 +0000
     50308+++ vim73/src/integration.c     2012-07-20 20:31:08.974305120 +0000
    4594050309@@ -33,7 +33,6 @@
    4594150310 #include <sys/un.h>
     
    4594750316 #include <sys/param.h>
    4594850317diff -Naur vim73.orig/src/keymap.h vim73/src/keymap.h
    45949 --- vim73.orig/src/keymap.h     2012-06-03 23:09:52.948007269 +0000
    45950 +++ vim73/src/keymap.h  2012-06-03 23:09:55.220067733 +0000
     50318--- vim73.orig/src/keymap.h     2010-07-25 13:14:04.000000000 +0000
     50319+++ vim73/src/keymap.h  2012-07-20 20:31:14.177642201 +0000
    4595150320@@ -92,13 +92,13 @@
    4595250321  */
     
    4598550354 #define K_TEAROFF      TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
    4598650355diff -Naur vim73.orig/src/link.sh vim73/src/link.sh
    45987 --- vim73.orig/src/link.sh      2012-06-03 23:09:52.924006631 +0000
    45988 +++ vim73/src/link.sh   2012-06-03 23:09:53.304016743 +0000
     50356--- vim73.orig/src/link.sh      2010-07-21 19:43:29.000000000 +0000
     50357+++ vim73/src/link.sh   2012-07-20 20:31:08.227637914 +0000
    4598950358@@ -5,7 +5,7 @@
    4599050359 # libraries when they exist, but this doesn't mean they are needed for Vim.
     
    4603150400 #
    4603250401diff -Naur vim73.orig/src/macros.h vim73/src/macros.h
    46033 --- vim73.orig/src/macros.h     2012-06-03 23:09:52.952007375 +0000
    46034 +++ vim73/src/macros.h  2012-06-03 23:09:53.080010781 +0000
    46035 @@ -285,3 +285,17 @@
     50402--- vim73.orig/src/macros.h     2010-07-17 19:41:21.000000000 +0000
     50403+++ vim73/src/macros.h  2012-07-20 20:31:18.307645159 +0000
     50404@@ -259,6 +259,8 @@
     50405  * PTR2CHAR(): get character from pointer.
     50406  */
     50407 #ifdef FEAT_MBYTE
     50408+/* Get the length of the character p points to */
     50409+# define MB_PTR2LEN(p)         (has_mbyte ? (*mb_ptr2len)(p) : 1)
     50410 /* Advance multi-byte pointer, skip over composing chars. */
     50411 # define mb_ptr_adv(p)     p += has_mbyte ? (*mb_ptr2len)(p) : 1
     50412 /* Advance multi-byte pointer, do not skip over composing chars. */
     50413@@ -272,6 +274,7 @@
     50414 # define MB_CHARLEN(p)     (has_mbyte ? mb_charlen(p) : (int)STRLEN(p))
     50415 # define PTR2CHAR(p)       (has_mbyte ? mb_ptr2char(p) : (int)*(p))
     50416 #else
     50417+# define MB_PTR2LEN(p)         1
     50418 # define mb_ptr_adv(p)         ++p
     50419 # define mb_cptr_adv(p)                ++p
     50420 # define mb_ptr_back(s, p)     --p
     50421@@ -285,3 +288,17 @@
    4603650422 #else
    4603750423 # define DO_AUTOCHDIR
     
    4605250438+#endif
    4605350439diff -Naur vim73.orig/src/main.c vim73/src/main.c
    46054 --- vim73.orig/src/main.c       2012-06-03 23:09:52.920006524 +0000
    46055 +++ vim73/src/main.c    2012-06-03 23:09:55.792082954 +0000
     50440--- vim73.orig/src/main.c       2010-08-08 13:09:55.000000000 +0000
     50441+++ vim73/src/main.c    2012-07-20 20:31:15.920976784 +0000
    4605650442@@ -7,10 +7,6 @@
    4605750443  * See README.txt for an overview of the Vim source code.
     
    4645350839  * When FEAT_FKMAP is defined, also compile the Farsi source code.
    4645450840diff -Naur vim73.orig/src/mark.c vim73/src/mark.c
    46455 --- vim73.orig/src/mark.c       2012-06-03 23:09:52.932006845 +0000
    46456 +++ vim73/src/mark.c    2012-06-03 23:09:53.736028239 +0000
    46457 @@ -1750,7 +1750,10 @@
     50841--- vim73.orig/src/mark.c       2010-08-13 09:14:35.000000000 +0000
     50842+++ vim73/src/mark.c    2012-07-20 20:31:17.910978208 +0000
     50843@@ -98,6 +98,19 @@
     50844        return OK;
     50845     }
     50846 
     50847+#ifdef FEAT_VISUAL
     50848+    if (c == '<')
     50849+    {
     50850+       curbuf->b_visual.vi_start = *pos;
     50851+       return OK;
     50852+    }
     50853+    if (c == '>')
     50854+    {
     50855+       curbuf->b_visual.vi_end = *pos;
     50856+       return OK;
     50857+    }
     50858+#endif
     50859+
     50860 #ifndef EBCDIC
     50861     if (c > 'z')           /* some islower() and isupper() cannot handle
     50862                                characters above 127 */
     50863@@ -1750,7 +1763,10 @@
    4645850864            {
    4645950865                if (line[1] != NUL)
     
    4646850874                        case '"': curbuf->b_last_cursor = pos; break;
    4646950875diff -Naur vim73.orig/src/mbyte.c vim73/src/mbyte.c
    46470 --- vim73.orig/src/mbyte.c      2012-06-03 23:09:52.940007057 +0000
    46471 +++ vim73/src/mbyte.c   2012-06-03 23:09:55.956087319 +0000
     50876--- vim73.orig/src/mbyte.c      2010-07-18 13:05:44.000000000 +0000
     50877+++ vim73/src/mbyte.c   2012-07-20 20:31:16.520977215 +0000
    4647250878@@ -132,6 +132,7 @@
    4647350879 static int dbcs_char2cells __ARGS((int c));
     
    4692251328        if (input_style & XIMPreeditArea)
    4692351329diff -Naur vim73.orig/src/memfile.c vim73/src/memfile.c
    46924 --- vim73.orig/src/memfile.c    2012-06-03 23:09:52.940007057 +0000
    46925 +++ vim73/src/memfile.c 2012-06-03 23:09:54.088037608 +0000
     51330--- vim73.orig/src/memfile.c    2010-06-21 02:59:57.000000000 +0000
     51331+++ vim73/src/memfile.c 2012-07-20 20:31:10.797639769 +0000
    4692651332@@ -32,10 +32,6 @@
    4692751333  * file is opened.
     
    4733451740diff -Naur vim73.orig/src/memfile_test.c vim73/src/memfile_test.c
    4733551741--- vim73.orig/src/memfile_test.c       1970-01-01 00:00:00.000000000 +0000
    47336 +++ vim73/src/memfile_test.c    2012-06-03 23:09:53.800029943 +0000
     51742+++ vim73/src/memfile_test.c    2012-07-20 20:31:09.837639076 +0000
    4733751743@@ -0,0 +1,145 @@
    4733851744+/* vi:set ts=8 sts=4 sw=4:
     
    4748251888+}
    4748351889diff -Naur vim73.orig/src/memline.c vim73/src/memline.c
    47484 --- vim73.orig/src/memline.c    2012-06-03 23:09:52.940007057 +0000
    47485 +++ vim73/src/memline.c 2012-06-03 23:09:54.908059430 +0000
     51890--- vim73.orig/src/memline.c    2010-08-08 13:11:46.000000000 +0000
     51891+++ vim73/src/memline.c 2012-07-20 20:31:13.220974846 +0000
    4748651892@@ -42,10 +42,6 @@
    4748751893  *  mf_get().
     
    4776952175                        if (process_still_running && choice >= 4)
    4777052176diff -Naur vim73.orig/src/menu.c vim73/src/menu.c
    47771 --- vim73.orig/src/menu.c       2012-06-03 23:09:52.940007057 +0000
    47772 +++ vim73/src/menu.c    2012-06-03 23:09:53.876031965 +0000
     52177--- vim73.orig/src/menu.c       2010-07-14 14:49:01.000000000 +0000
     52178+++ vim73/src/menu.c    2012-07-20 20:31:10.130972621 +0000
    4777352179@@ -1394,7 +1394,8 @@
    4777452180     int                idx;
     
    4781652222                {
    4781752223diff -Naur vim73.orig/src/message.c vim73/src/message.c
    47818 --- vim73.orig/src/message.c    2012-06-03 23:09:52.956007482 +0000
    47819 +++ vim73/src/message.c 2012-06-03 23:09:55.664079548 +0000
     52224--- vim73.orig/src/message.c    2010-08-04 18:10:02.000000000 +0000
     52225+++ vim73/src/message.c 2012-07-20 20:31:15.594309884 +0000
    4782052226@@ -39,7 +39,6 @@
    4782152227 static void msg_screen_putchar __ARGS((int c, int attr));
     
    4840852814        case 2: return VIM_NO;
    4840952815diff -Naur vim73.orig/src/misc1.c vim73/src/misc1.c
    48410 --- vim73.orig/src/misc1.c      2012-06-03 23:09:52.944007163 +0000
    48411 +++ vim73/src/misc1.c   2012-06-03 23:09:55.940086894 +0000
     52816--- vim73.orig/src/misc1.c      2010-08-15 11:24:05.000000000 +0000
     52817+++ vim73/src/misc1.c   2012-07-20 20:31:17.904311537 +0000
    4841252818@@ -363,7 +363,7 @@
    4841352819 
     
    4842852834            todo -= (int)curbuf->b_p_ts;
    4842952835            ++ind_len;
    48430 @@ -1561,6 +1561,9 @@
     52836@@ -423,27 +423,36 @@
     52837 {
     52838     colnr_T    col;
     52839     pos_T      pos;
     52840-    regmmatch_T        regmatch;
     52841+
     52842+    regmatch_T regmatch;
     52843+    int                lead_len = 0;   /* length of comment leader */
     52844 
     52845     if (lnum > curbuf->b_ml.ml_line_count)
     52846        return -1;
     52847     pos.lnum = 0;
     52848+
     52849+#ifdef FEAT_COMMENTS
     52850+    /* In format_lines() (i.e. not insert mode), fo+=q is needed too...  */
     52851+    if ((State & INSERT) || has_format_option(FO_Q_COMS))
     52852+       lead_len = get_leader_len(ml_get(lnum), NULL, FALSE, TRUE);
     52853+#endif
     52854     regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
     52855     if (regmatch.regprog != NULL)
     52856     {
     52857-       regmatch.rmm_ic = FALSE;
     52858-       regmatch.rmm_maxcol = 0;
     52859-       if (vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
     52860-                                                           (colnr_T)0, NULL))
     52861+       regmatch.rm_ic = FALSE;
     52862+
     52863+       /* vim_regexec() expects a pointer to a line.  This lets us
     52864+        * start matching for the flp beyond any comment leader...  */
     52865+       if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
     52866        {
     52867-           pos.lnum = regmatch.endpos[0].lnum + lnum;
     52868-           pos.col = regmatch.endpos[0].col;
     52869+           pos.lnum = lnum;
     52870+           pos.col = (colnr_T)(*regmatch.endp - ml_get(lnum));
     52871 #ifdef FEAT_VIRTUALEDIT
     52872            pos.coladd = 0;
     52873 #endif
     52874        }
     52875-       vim_free(regmatch.regprog);
     52876     }
     52877+    vim_free(regmatch.regprog);
     52878 
     52879     if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
     52880        return -1;
     52881@@ -502,14 +511,18 @@
     52882  *         OPENLINE_DO_COM     format comments
     52883  *         OPENLINE_KEEPTRAIL  keep trailing spaces
     52884  *         OPENLINE_MARKFIX    adjust mark positions after the line break
     52885+ *         OPENLINE_COM_LIST   format comments with list or 2nd line indent
     52886+ *
     52887+ * "second_line_indent": indent for after ^^D in Insert mode or if flag
     52888+ *                       OPENLINE_COM_LIST
     52889  *
     52890  * Return TRUE for success, FALSE for failure
     52891  */
     52892     int
     52893-open_line(dir, flags, old_indent)
     52894+open_line(dir, flags, second_line_indent)
     52895     int                dir;            /* FORWARD or BACKWARD */
     52896     int                flags;
     52897-    int                old_indent;     /* indent for after ^^D in Insert mode */
     52898+    int                second_line_indent;
     52899 {
     52900     char_u     *saved_line;            /* copy of the original line */
     52901     char_u     *next_line = NULL;      /* copy of the next line */
     52902@@ -650,8 +663,8 @@
     52903         * count white space on current line
     52904         */
     52905        newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
     52906-       if (newindent == 0)
     52907-           newindent = old_indent;     /* for ^^D command in insert mode */
     52908+       if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
     52909+           newindent = second_line_indent; /* for ^^D command in insert mode */
     52910 
     52911 #ifdef FEAT_SMARTINDENT
     52912        /*
     52913@@ -671,7 +684,7 @@
     52914            ptr = saved_line;
     52915 # ifdef FEAT_COMMENTS
     52916            if (flags & OPENLINE_DO_COM)
     52917-               lead_len = get_leader_len(ptr, NULL, FALSE);
     52918+               lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
     52919            else
     52920                lead_len = 0;
     52921 # endif
     52922@@ -693,7 +706,7 @@
     52923                }
     52924 # ifdef FEAT_COMMENTS
     52925                if (flags & OPENLINE_DO_COM)
     52926-                   lead_len = get_leader_len(ptr, NULL, FALSE);
     52927+                   lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
     52928                else
     52929                    lead_len = 0;
     52930                if (lead_len > 0)
     52931@@ -836,7 +849,7 @@
     52932      */
     52933     end_comment_pending = NUL;
     52934     if (flags & OPENLINE_DO_COM)
     52935-       lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD);
     52936+       lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD, TRUE);
     52937     else
     52938        lead_len = 0;
     52939     if (lead_len > 0)
     52940@@ -1007,9 +1020,9 @@
     52941        }
     52942        if (lead_len)
     52943        {
     52944-           /* allocate buffer (may concatenate p_exta later) */
     52945-           leader = alloc(lead_len + lead_repl_len + extra_space +
     52946-                                                             extra_len + 1);
     52947+           /* allocate buffer (may concatenate p_extra later) */
     52948+           leader = alloc(lead_len + lead_repl_len + extra_space + extra_len
     52949+                    + (second_line_indent > 0 ? second_line_indent : 0) + 1);
     52950            allocated = leader;             /* remember to free it later */
     52951 
     52952            if (leader == NULL)
     52953@@ -1304,6 +1317,21 @@
     52954     /* concatenate leader and p_extra, if there is a leader */
     52955     if (lead_len)
     52956     {
     52957+       if (flags & OPENLINE_COM_LIST && second_line_indent > 0)
     52958+       {
     52959+           int i;
     52960+           int padding = second_line_indent
     52961+                                         - (newindent + (int)STRLEN(leader));
     52962+
     52963+           /* Here whitespace is inserted after the comment char.
     52964+            * Below, set_indent(newindent, SIN_INSERT) will insert the
     52965+            * whitespace needed before the comment char. */
     52966+           for (i = 0; i < padding; i++)
     52967+           {
     52968+               STRCAT(leader, " ");
     52969+               newcol++;
     52970+           }
     52971+       }
     52972        STRCAT(leader, p_extra);
     52973        p_extra = leader;
     52974        did_ai = TRUE;      /* So truncating blanks works with comments */
     52975@@ -1548,28 +1576,35 @@
     52976  * When "flags" is not NULL, it is set to point to the flags of the recognized
     52977  * comment leader.
     52978  * "backward" must be true for the "O" command.
     52979+ * If "include_space" is set, include trailing whitespace while calculating the
     52980+ * length.
     52981  */
     52982     int
     52983-get_leader_len(line, flags, backward)
     52984+get_leader_len(line, flags, backward, include_space)
     52985     char_u     *line;
     52986     char_u     **flags;
     52987     int                backward;
     52988+    int                include_space;
     52989 {
     52990     int                i, j;
     52991+    int                result;
     52992     int                got_com = FALSE;
     52993     int                found_one;
    4843152994     char_u     part_buf[COM_MAX_LEN];  /* buffer for one option part */
    4843252995     char_u     *string;                /* pointer to comment string */
     
    4843652999+    char_u     *saved_flags = NULL;
    4843753000 
    48438      i = 0;
     53001-    i = 0;
     53002+    result = i = 0;
    4843953003     while (vim_iswhite(line[i]))    /* leading white space is ignored */
    48440 @@ -1569,7 +1572,7 @@
     53004        ++i;
     53005 
    4844153006     /*
    4844253007      * Repeat to match several nested comment strings.
     
    4844753012        /*
    4844853013         * scan through the 'comments' option for a match
    48449 @@ -1577,82 +1580,104 @@
     53014@@ -1577,29 +1612,161 @@
    4845053015        found_one = FALSE;
    4845153016        for (list = curbuf->b_p_com; *list; )
     
    4848953054                continue;
    4849053055 
    48491 -           /*
    48492 -            * Line contents and string must match.
    4849353056+           /* Line contents and string must match.
    48494              * When string starts with white space, must have some white space
    48495              * (but the amount does not need to match, there might be a mix of
    48496 -            * TABs and spaces).
    48497 -            */
     53057+            * When string starts with white space, must have some white space
     53058+            * (but the amount does not need to match, there might be a mix of
    4849853059+            * TABs and spaces). */
    48499             if (vim_iswhite(string[0]))
    48500             {
    48501                 if (i == 0 || !vim_iswhite(line[i - 1]))
    48502 -                   continue;
     53060+           if (vim_iswhite(string[0]))
     53061+           {
     53062+               if (i == 0 || !vim_iswhite(line[i - 1]))
    4850353063+                   continue;  /* missing shite space */
    48504                 while (vim_iswhite(string[0]))
    48505                     ++string;
    48506             }
    48507             for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
    48508                 ;
    48509             if (string[j] != NUL)
    48510 -               continue;
     53064+               while (vim_iswhite(string[0]))
     53065+                   ++string;
     53066+           }
     53067+           for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
     53068+               ;
     53069+           if (string[j] != NUL)
    4851153070+               continue;  /* string doesn't match */
    48512  
    48513 -           /*
    48514 -            * When 'b' flag used, there must be white space or an
    48515 -            * end-of-line after the string in the line.
    48516 -            */
     53071+
    4851753072+           /* When 'b' flag used, there must be white space or an
    4851853073+            * end-of-line after the string in the line. */
    48519             if (vim_strchr(part_buf, COM_BLANK) != NULL
    48520                            && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
    48521                 continue;
    48522  
    48523 -           /*
    48524 -            * We have found a match, stop searching.
    48525 -            */
    48526 -           i += j;
    48527 -           got_com = TRUE;
     53074+           if (vim_strchr(part_buf, COM_BLANK) != NULL
     53075+                          && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
     53076+               continue;
     53077+
    4852853078+           /* We have found a match, stop searching unless this is a middle
    4852953079+            * comment. The middle comment can be a substring of the end
     
    4854753097+           if (middle_match_len == 0)
    4854853098+               i += j;
    48549             found_one = TRUE;
    48550             break;
    48551         }
    48552  
    48553 -       /*
    48554 -        * No match found, stop scanning.
    48555 -        */
     53099+           found_one = TRUE;
     53100+           break;
     53101+       }
     53102+
    4855653103+       if (middle_match_len != 0)
    4855753104+       {
     
    4856553112+
    4856653113+       /* No match found, stop scanning. */
    48567         if (!found_one)
     53114+       if (!found_one)
     53115+           break;
     53116+
     53117+       result = i;
     53118+
     53119+       /* Include any trailing white space. */
     53120+       while (vim_iswhite(line[i]))
     53121+           ++i;
     53122+
     53123+       if (include_space)
     53124+           result = i;
     53125+
     53126+       /* If this comment doesn't nest, stop here. */
     53127+       got_com = TRUE;
     53128+       if (vim_strchr(part_buf, COM_NEST) == NULL)
     53129+           break;
     53130+    }
     53131+    return result;
     53132+}
     53133+
     53134+/*
     53135+ * Return the offset at which the last comment in line starts. If there is no
     53136+ * comment in the whole line, -1 is returned.
     53137+ *
     53138+ * When "flags" is not null, it is set to point to the flags describing the
     53139+ * recognized comment leader.
     53140+ */
     53141+    int
     53142+get_last_leader_offset(line, flags)
     53143+    char_u     *line;
     53144+    char_u     **flags;
     53145+{
     53146+    int                result = -1;
     53147+    int                i, j;
     53148+    int                lower_check_bound = 0;
     53149+    char_u     *string;
     53150+    char_u     *com_leader;
     53151+    char_u     *com_flags;
     53152+    char_u     *list;
     53153+    int                found_one;
     53154+    char_u     part_buf[COM_MAX_LEN];  /* buffer for one option part */
     53155+
     53156+    /*
     53157+     * Repeat to match several nested comment strings.
     53158+     */
     53159+    i = (int)STRLEN(line);
     53160+    while (--i >= lower_check_bound)
     53161+    {
     53162+       /*
     53163+        * scan through the 'comments' option for a match
     53164+        */
     53165+       found_one = FALSE;
     53166+       for (list = curbuf->b_p_com; *list; )
     53167+       {
     53168+           char_u *flags_save = list;
     53169+
     53170+           /*
     53171+            * Get one option part into part_buf[].  Advance list to next one.
     53172+            * put string at start of string.
     53173+            */
     53174+           (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
     53175+           string = vim_strchr(part_buf, ':');
     53176+           if (string == NULL) /* If everything is fine, this cannot actually
     53177+                                * happen. */
     53178+           {
     53179+               continue;
     53180+           }
     53181+           *string++ = NUL;    /* Isolate flags from string. */
     53182+           com_leader = string;
     53183+
     53184            /*
     53185             * Line contents and string must match.
     53186             * When string starts with white space, must have some white space
     53187@@ -1614,7 +1781,7 @@
     53188                    ++string;
     53189            }
     53190            for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
     53191-               ;
     53192+               /* do nothing */;
     53193            if (string[j] != NUL)
     53194                continue;
     53195 
     53196@@ -1623,37 +1790,77 @@
     53197             * end-of-line after the string in the line.
     53198             */
     53199            if (vim_strchr(part_buf, COM_BLANK) != NULL
     53200-                          && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
     53201+                   && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
     53202+           {
     53203                continue;
     53204+           }
     53205 
     53206            /*
     53207             * We have found a match, stop searching.
     53208             */
     53209-           i += j;
     53210-           got_com = TRUE;
     53211            found_one = TRUE;
     53212+
     53213+           if (flags)
     53214+               *flags = flags_save;
     53215+           com_flags = flags_save;
     53216+
    4856853217            break;
     53218        }
     53219 
     53220-       /*
     53221-        * No match found, stop scanning.
     53222-        */
     53223-       if (!found_one)
     53224-           break;
     53225+       if (found_one)
     53226+       {
     53227+           char_u  part_buf2[COM_MAX_LEN];     /* buffer for one option part */
     53228+           int     len1, len2, off;
    4856953229 
    4857053230-       /*
    4857153231-        * Include any trailing white space.
    4857253232-        */
    48573 +       /* Include any trailing white space. */
    48574         while (vim_iswhite(line[i]))
    48575             ++i;
     53233-       while (vim_iswhite(line[i]))
     53234-           ++i;
     53235+           result = i;
     53236+           /*
     53237+            * If this comment nests, continue searching.
     53238+            */
     53239+           if (vim_strchr(part_buf, COM_NEST) != NULL)
     53240+               continue;
    4857653241 
    4857753242-       /*
    4857853243-        * If this comment doesn't nest, stop here.
    4857953244-        */
    48580 +       /* If this comment doesn't nest, stop here. */
    48581 +       got_com = TRUE;
    48582         if (vim_strchr(part_buf, COM_NEST) == NULL)
    48583             break;
     53245-       if (vim_strchr(part_buf, COM_NEST) == NULL)
     53246-           break;
     53247+           lower_check_bound = i;
     53248+
     53249+           /* Let's verify whether the comment leader found is a substring
     53250+            * of other comment leaders. If it is, let's adjust the
     53251+            * lower_check_bound so that we make sure that we have determined
     53252+            * the comment leader correctly.
     53253+            */
     53254+
     53255+           while (vim_iswhite(*com_leader))
     53256+               ++com_leader;
     53257+           len1 = (int)STRLEN(com_leader);
     53258+
     53259+           for (list = curbuf->b_p_com; *list; )
     53260+           {
     53261+               char_u *flags_save = list;
     53262+
     53263+               (void)copy_option_part(&list, part_buf2, COM_MAX_LEN, ",");
     53264+               if (flags_save == com_flags)
     53265+                   continue;
     53266+               string = vim_strchr(part_buf2, ':');
     53267+               ++string;
     53268+               while (vim_iswhite(*string))
     53269+                   ++string;
     53270+               len2 = (int)STRLEN(string);
     53271+               if (len2 == 0)
     53272+                   continue;
     53273+
     53274+               /* Now we have to verify whether string ends with a substring
     53275+                * beginning the com_leader. */
     53276+               for (off = (len2 > i ? i : len2); off > 0 && off + len1 > len2;)
     53277+               {
     53278+                   --off;
     53279+                   if (!STRNCMP(string + off, com_leader, len2 - off))
     53280+                   {
     53281+                       if (i - off < lower_check_bound)
     53282+                           lower_check_bound = i - off;
     53283+                   }
     53284+               }
     53285+           }
     53286+       }
    4858453287     }
    48585 +
    48586      return (got_com ? i : 0);
     53288-    return (got_com ? i : 0);
     53289+    return result;
    4858753290 }
    4858853291 #endif
    48589 @@ -1907,7 +1932,7 @@
     53292 
     53293@@ -1907,7 +2114,7 @@
    4859053294     int                c;
    4859153295 {
     
    4859653300 
    4859753301     n = (*mb_char2bytes)(c, buf);
    48598 @@ -2919,7 +2944,7 @@
     53302@@ -2919,7 +3126,7 @@
    4859953303     buf_T      *buf;
    4860053304     int                ff;     /* also reset 'fileformat' */
     
    4860553309        buf->b_changed = 0;
    4860653310        ml_setflags(buf);
    48607 @@ -3080,8 +3105,9 @@
     53311@@ -3080,8 +3287,9 @@
    4860853312     int
    4860953313 get_keystroke()
     
    4861753321     int                n;
    4861853322     int                save_mapped_ctrl_c = mapped_ctrl_c;
    48619 @@ -3093,12 +3119,29 @@
     53323@@ -3093,12 +3301,29 @@
    4862053324        cursor_on();
    4862153325        out_flush();
     
    4862953333+       else if (maxlen < 10)
    4863053334+       {
    48631 +           /* Need some more space. This migth happen when receiving a long
     53335+           /* Need some more space. This might happen when receiving a long
    4863253336+            * escape sequence. */
    4863353337+           buflen += 100;
     
    4865253356        {
    4865353357            /* Replace zero and CSI by a special key code. */
    48654 @@ -3110,14 +3153,23 @@
     53358@@ -3110,14 +3335,23 @@
    4865553359            ++waited;       /* keep track of the waiting time */
    4865653360 
     
    4868053384 
    4868153385        /* Handle modifier and/or special key code. */
    48682 @@ -3169,7 +3221,7 @@
     53386@@ -3169,7 +3403,7 @@
    4868353387        {
    4868453388            if (MB_BYTE2LEN(n) > len)
     
    4868953393        }
    4869053394 #endif
    48691 @@ -3179,6 +3231,7 @@
     53395@@ -3179,6 +3413,7 @@
    4869253396 #endif
    4869353397        break;
     
    4869753401     mapped_ctrl_c = save_mapped_ctrl_c;
    4869853402     return n;
    48699 @@ -3323,19 +3376,23 @@
     53403@@ -3323,19 +3558,23 @@
    4870053404        if (pn == 1)
    4870153405        {
     
    4872653430        {
    4872753431            set_keep_msg(msg_buf, 0);
    48728 @@ -3492,7 +3549,7 @@
     53432@@ -3492,7 +3731,7 @@
    4872953433     if (enc_utf8 && var != NULL)
    4873053434     {
     
    4873553439        /* Convert from active codepage to UTF-8.  Other conversions are
    4873653440         * not done, because they would fail for non-ASCII characters. */
    48737 @@ -3859,11 +3916,13 @@
     53441@@ -3859,11 +4098,13 @@
    4873853442  * Vim's version of getenv().
    4873953443  * Special handling of $HOME, $VIM and $VIMRUNTIME.
     
    4875053454     char_u     *p;
    4875153455     char_u     *pend;
    48752 @@ -3885,7 +3944,7 @@
     53456@@ -3885,7 +4126,7 @@
    4875353457        if (enc_utf8)
    4875453458        {
     
    4875953463            /* Convert from active codepage to UTF-8.  Other conversions are
    4876053464             * not done, because they would fail for non-ASCII characters. */
    48761 @@ -3929,7 +3988,7 @@
     53465@@ -3929,7 +4170,7 @@
    4876253466            if (enc_utf8)
    4876353467            {
     
    4876853472                /* Convert from active codepage to UTF-8.  Other conversions
    4876953473                 * are not done, because they would fail for non-ASCII
    48770 @@ -3937,7 +3996,7 @@
     53474@@ -3937,7 +4178,7 @@
    4877153475                acp_to_enc(p, (int)STRLEN(p), &pp, &len);
    4877253476                if (pp != NULL)
     
    4877753481                    p = pp;
    4877853482                    *mustfree = TRUE;
    48779 @@ -4074,17 +4133,6 @@
     53483@@ -4074,17 +4315,6 @@
    4878053484        {
    4878153485            vim_setenv((char_u *)"VIMRUNTIME", p);
     
    4879553499        else
    4879653500        {
    48797 @@ -4162,6 +4210,22 @@
     53501@@ -4162,6 +4392,22 @@
    4879853502        putenv((char *)envbuf);
    4879953503     }
     
    4881853522 
    4881953523 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
    48820 @@ -4549,25 +4613,21 @@
     53524@@ -4220,7 +4466,7 @@
     53525 {
     53526     size_t     dirlen = 0, envlen = 0;
     53527     size_t     len;
     53528-    char_u     *homedir_env;
     53529+    char_u     *homedir_env, *homedir_env_orig;
     53530     char_u     *p;
     53531 
     53532     if (src == NULL)
     53533@@ -4246,13 +4492,31 @@
     53534        dirlen = STRLEN(homedir);
     53535 
     53536 #ifdef VMS
     53537-    homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
     53538+    homedir_env_orig = homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
     53539 #else
     53540-    homedir_env = mch_getenv((char_u *)"HOME");
     53541+    homedir_env_orig = homedir_env = mch_getenv((char_u *)"HOME");
     53542 #endif
     53543-
     53544+    /* Empty is the same as not set. */
     53545     if (homedir_env != NULL && *homedir_env == NUL)
     53546        homedir_env = NULL;
     53547+
     53548+#if defined(FEAT_MODIFY_FNAME) || defined(WIN3264)
     53549+    if (homedir_env != NULL && vim_strchr(homedir_env, '~') != NULL)
     53550+    {
     53551+       int     usedlen = 0;
     53552+       int     flen;
     53553+       char_u  *fbuf = NULL;
     53554+
     53555+       flen = (int)STRLEN(homedir_env);
     53556+       (void)modify_fname((char_u *)":p", &usedlen,
     53557+                                                 &homedir_env, &fbuf, &flen);
     53558+       flen = (int)STRLEN(homedir_env);
     53559+       if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
     53560+           /* Remove the trailing / that is added to a directory. */
     53561+           homedir_env[flen - 1] = NUL;
     53562+    }
     53563+#endif
     53564+
     53565     if (homedir_env != NULL)
     53566        envlen = STRLEN(homedir_env);
     53567 
     53568@@ -4306,6 +4570,9 @@
     53569     /* if (dstlen == 0) out of space, what to do??? */
     53570 
     53571     *dst = NUL;
     53572+
     53573+    if (homedir_env != homedir_env_orig)
     53574+       vim_free(homedir_env);
     53575 }
     53576 
     53577 /*
     53578@@ -4549,25 +4816,21 @@
    4882153579 vim_ispathsep(c)
    4882253580     int c;
     
    4885253610 
    4885353611 #if defined(FEAT_SEARCHPATH) || defined(PROTO)
    48854 @@ -4907,11 +4967,12 @@
     53612@@ -4752,8 +5015,8 @@
     53613     char_u  *
     53614 FullName_save(fname, force)
     53615     char_u     *fname;
     53616-    int                force;      /* force expansion, even when it already looks
     53617-                              like a full path name */
     53618+    int                force;          /* force expansion, even when it already looks
     53619+                                * like a full path name */
     53620 {
     53621     char_u     *buf;
     53622     char_u     *new_fname = NULL;
     53623@@ -4907,11 +5170,12 @@
    4885553624 static int     cin_islinecomment __ARGS((char_u *));
    4885653625 static int     cin_isterminated __ARGS((char_u *, int, int));
     
    4886653635 static int     cin_isbreak __ARGS((char_u *));
    4886753636 static int     cin_is_cpp_baseclass __ARGS((colnr_T *col));
    48868 @@ -4923,6 +4984,7 @@
     53637@@ -4923,6 +5187,7 @@
    4886953638 static int     corr_ind_maxparen __ARGS((int ind_maxparen, pos_T *startpos));
    4887053639 static int     find_last_paren __ARGS((char_u *l, int start, int end));
     
    4887453643 static int     ind_hash_comment = 0;   /* # starts a comment */
    4887553644 
    48876 @@ -4968,7 +5030,7 @@
     53645@@ -4968,7 +5233,7 @@
    4887753646 }
    4887853647 
     
    4888353652  */
    4888453653     static int
    48885 @@ -5101,6 +5163,9 @@
     53654@@ -5101,6 +5366,9 @@
    4888653655     if (STRNCMP(s, "typedef", 7) == 0 && !vim_isIDc(s[7]))
    4888753656        s = cin_skipcomment(s + 7);
     
    4889353662        return TRUE;
    4889453663 
    48895 @@ -5185,6 +5250,50 @@
     53664@@ -5185,6 +5453,50 @@
    4889653665     return (*(s = cin_skipcomment(s + i)) == ':' && s[1] != ':');
    4889753666 }
     
    4894453713  * Return a pointer to the first non-empty non-comment character after a ':'.
    4894553714  * Return NULL if not found.
    48946 @@ -5383,8 +5492,7 @@
     53715@@ -5383,8 +5695,7 @@
    4894753716 cin_ispreproc(s)
    4894853717     char_u *s;
     
    4895453723     return FALSE;
    4895553724 }
    48956 @@ -5444,8 +5552,11 @@
     53725@@ -5444,8 +5755,11 @@
    4895753726 }
    4895853727 
     
    4896753736  * both apply in order to determine initializations).
    4896853737  */
    48969 @@ -5455,21 +5566,35 @@
     53738@@ -5455,21 +5769,35 @@
    4897053739     int                incl_open;      /* include '{' at the end as terminator */
    4897153740     int                incl_comma;     /* recognize a trailing comma */
     
    4900653775        if (*s)
    4900753776            s++;
    49008 @@ -5485,21 +5610,41 @@
     53777@@ -5485,21 +5813,41 @@
    4900953778  * "sp" points to a string with the line.  When looking at other lines it must
    4901053779  * be restored to the line.  When it's NULL fetch lines here.
     
    4904953818     {
    4905053819        if (cin_iscomment(s))   /* ignore comments */
    49051 @@ -5525,18 +5670,38 @@
     53820@@ -5525,18 +5873,38 @@
    4905253821                retval = TRUE;
    4905353822            goto done;
     
    4909253861 
    4909353862 done:
    49094 @@ -5607,6 +5772,52 @@
     53863@@ -5607,6 +5975,52 @@
    4909553864 }
    4909653865 
     
    4914553914  *    do
    4914653915  *       nothing;
    49147 @@ -5754,7 +5965,9 @@
     53916@@ -5754,7 +6168,9 @@
    4914853917                continue;
    4914953918        }
     
    4915653925            if (s[1] == ':')
    4915753926            {
    49158 @@ -5958,7 +6171,7 @@
     53927@@ -5958,7 +6374,7 @@
    4915953928 
    4916053929 /*
     
    4916553934     static pos_T *
    4916653935 find_match_paren(ind_maxparen, ind_maxcomment)     /* XXX */
    49167 @@ -6008,7 +6221,7 @@
     53936@@ -6008,7 +6424,7 @@
    4916853937 
    4916953938 /*
     
    4917453943     static int
    4917553944 find_last_paren(l, start, end)
    49176 @@ -6021,7 +6234,7 @@
     53945@@ -6021,7 +6437,7 @@
    4917753946 
    4917853947     curwin->w_cursor.col = 0;              /* default is start of line */
     
    4918353952        i = (int)(cin_skipcomment(l + i) - l); /* ignore parens in comments */
    4918453953        i = (int)(skip_string(l + i) - l);    /* ignore parens in quotes */
    49185 @@ -6222,6 +6435,17 @@
     53954@@ -6222,6 +6638,17 @@
    4918653955      */
    4918753956     int ind_keep_case_label = 0;
     
    4920153970     int                amount;
    4920253971     int                scope_amount;
    49203 @@ -6262,8 +6486,10 @@
     53972@@ -6257,19 +6684,23 @@
     53973     int                whilelevel;
     53974     linenr_T   lnum;
     53975     char_u     *options;
     53976+    char_u     *digits;
     53977     int                fraction = 0;       /* init for GCC */
     53978     int                divider;
    4920453979     int                n;
    4920553980     int                iscase;
     
    4921253987     for (options = curbuf->b_p_cino; *options; )
    4921353988     {
    49214 @@ -6335,6 +6561,8 @@
     53989        l = options++;
     53990        if (*options == '-')
     53991            ++options;
     53992+       digits = options;           /* remember where the digits start */
     53993        n = getdigits(&options);
     53994        divider = 0;
     53995        if (*options == '.')        /* ".5s" means a fraction */
     53996@@ -6286,7 +6717,7 @@
     53997        }
     53998        if (*options == 's')        /* "2s" means two times 'shiftwidth' */
     53999        {
     54000-           if (n == 0 && fraction == 0)
     54001+           if (options == digits)
     54002                n = curbuf->b_p_sw;     /* just "s" is one 'shiftwidth' */
     54003            else
     54004            {
     54005@@ -6335,6 +6766,8 @@
    4921554006            case 'J': ind_js = n; break;
    4921654007            case 'l': ind_keep_case_label = n; break;
     
    4922154012        if (*options == ',')
    4922254013            ++options;
    49223 @@ -6424,6 +6652,8 @@
     54014@@ -6424,6 +6857,8 @@
    4922454015        /* find how indented the line beginning the comment is */
    4922554016        getvcol(curwin, trypos, &col, NULL, NULL);
     
    4923054021        p = curbuf->b_p_com;
    4923154022        while (*p != NUL)
    49232 @@ -6636,6 +6866,33 @@
     54023@@ -6636,6 +7071,33 @@
    4923354024        if (amount == -1)
    4923454025        {
     
    4926454055            amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
    4926554056            look = skipwhite(look);
    49266 @@ -6660,7 +6917,7 @@
     54057@@ -6660,7 +7122,7 @@
    4926754058                curwin->w_cursor.lnum = save_lnum;
    4926854059                look = ml_get(our_paren_pos.lnum) + look_col;
     
    4927354064                                                    && ignore_paren_col == 0))
    4927454065            {
    49275 @@ -6731,7 +6988,8 @@
     54066@@ -6731,7 +7193,8 @@
    4927654067            {
    4927754068                /* Line up with the start of the matching paren line. */
     
    4928354074            {
    4928454075                if (cur_amount != MAXCOL)
    49285 @@ -6764,11 +7022,15 @@
     54076@@ -6764,11 +7227,15 @@
    4928654077                {
    4928754078                    curwin->w_cursor.lnum = our_paren_pos.lnum;
     
    4930254093                /*
    4930354094                 * For a line starting with ')' use the minimum of the two
    49304 @@ -6838,7 +7100,7 @@
     54095@@ -6838,7 +7305,7 @@
    4930554096             *                  ldfd) {
    4930654097             *              }
     
    4931154102                amount = get_indent();
    4931254103            else
    49313 @@ -6901,11 +7163,24 @@
     54104@@ -6901,11 +7368,24 @@
    4931454105            if (start_brace == BRACE_IN_COL0)       /* '{' is in column 0 */
    4931554106            {
     
    4933654127                {
    4933754128                    /* Compensate for adding ind_open_extra later. */
    49338 @@ -7014,7 +7289,8 @@
     54129@@ -7014,7 +7494,8 @@
    4933954130                         * (it's a variable declaration).
    4934054131                         */
     
    4934654137                            /* if the line is terminated with another ','
    4934754138                             * it is a continued variable initialization.
    49348 @@ -7076,12 +7352,59 @@
     54139@@ -7076,12 +7557,59 @@
    4934954140                        else
    4935054141                            amount += ind_continuation;
     
    4941154202                    break;
    4941254203                }
    49413 @@ -7466,17 +7789,25 @@
     54204@@ -7466,17 +7994,25 @@
    4941454205 
    4941554206                        /*
     
    4944454235 
    4944554236                    /*
    49446 @@ -7757,8 +8088,8 @@
     54237@@ -7757,8 +8293,8 @@
    4944754238                         * If we're at the end of a block, skip to the start of
    4944854239                         * that block.
     
    4945554246                                                            != NULL) /* XXX */
    4945654247                        {
    49457 @@ -7820,7 +8151,9 @@
     54248@@ -7820,7 +8356,9 @@
    4945854249                && vim_strchr(theline, '}') == NULL
    4945954250                && !cin_ends_in(theline, (char_u *)":", NULL)
     
    4946654257        {
    4946754258            amount = ind_func_type;
    49468 @@ -7926,7 +8259,8 @@
     54259@@ -7926,7 +8464,8 @@
    4946954260                 * If the line looks like a function declaration, and we're
    4947054261                 * not in a comment, put it the left margin.
     
    4947654267                l = ml_get_curline();
    4947754268 
    49478 @@ -7947,11 +8281,35 @@
     54269@@ -7947,11 +8486,35 @@
    4947954270                    break;
    4948054271 
     
    4951354304                    amount = ind_param;
    4951454305                    break;
    49515 @@ -8856,11 +9214,15 @@
     54306@@ -8856,11 +9419,15 @@
    4951654307     }
    4951754308 
     
    4953054321        vim_free(buf);
    4953154322        return 0;
    49532 @@ -8928,7 +9290,10 @@
     54323@@ -8928,7 +9495,10 @@
    4953354324         * all entries found with "matchname". */
    4953454325        if ((p[0] != '.' || starts_with_dot)
     
    4954254333 #ifdef WIN3264
    4954354334            STRCPY(s, p);
    49544 @@ -9096,6 +9461,7 @@
     54335@@ -9096,6 +9666,7 @@
    4954554336 
    4954654337     /*
     
    4955054341      */
    4955154342     p = buf;
    49552 @@ -9115,7 +9481,12 @@
     54343@@ -9115,7 +9686,12 @@
    4955354344            s = p + 1;
    4955454345        }
     
    4956454355 #ifdef FEAT_MBYTE
    4956554356        if (has_mbyte)
    49566 @@ -9132,7 +9503,7 @@
     54357@@ -9132,7 +9708,7 @@
    4956754358     e = p;
    4956854359     *e = NUL;
     
    4957354364      * component. */
    4957454365     for (p = buf + wildoff; p < s; ++p)
    49575 @@ -9161,12 +9532,19 @@
     54366@@ -9161,12 +9737,19 @@
    4957654367 #ifdef CASE_INSENSITIVE_FILENAME
    4957754368     regmatch.rm_ic = TRUE;             /* Behave like Terminal.app */
     
    4959554386        vim_free(buf);
    4959654387        return 0;
    49597 @@ -9196,7 +9574,10 @@
     54388@@ -9196,7 +9779,10 @@
    4959854389            if (dp == NULL)
    4959954390                break;
     
    4960754398                STRCPY(s, dp->d_name);
    4960854399                len = STRLEN(buf);
    49609 @@ -9317,7 +9698,8 @@
     54400@@ -9317,7 +9903,8 @@
    4961054401            continue;  /* it's different when it's shorter */
    4961154402 
     
    4961754408     }
    4961854409 
    49619 @@ -9642,7 +10024,7 @@
     54410@@ -9642,7 +10229,7 @@
    4962054411     if (paths == NULL)
    4962154412        return 0;
     
    4962754418        return 0;
    4962854419diff -Naur vim73.orig/src/misc2.c vim73/src/misc2.c
    49629 --- vim73.orig/src/misc2.c      2012-06-03 23:09:52.948007269 +0000
    49630 +++ vim73/src/misc2.c   2012-06-03 23:09:55.524075823 +0000
     54420--- vim73.orig/src/misc2.c      2010-08-13 09:14:35.000000000 +0000
     54421+++ vim73/src/misc2.c   2012-07-20 20:31:17.620978002 +0000
    4963154422@@ -200,7 +200,6 @@
    4963254423        }
     
    4972254513 #endif
    4972354514 }
    49724 @@ -1003,8 +1012,12 @@
     54515@@ -806,6 +815,7 @@
     54516 #else
     54517 # define KEEP_ROOM (2 * 8192L)
     54518 #endif
     54519+#define KEEP_ROOM_KB (KEEP_ROOM / 1024L)
     54520 
     54521 /*
     54522  * Note: if unsigned is 16 bits we can only allocate up to 64K with alloc().
     54523@@ -931,7 +941,7 @@
     54524            allocated = 0;
     54525 # endif
     54526            /* 3. check for available memory: call mch_avail_mem() */
     54527-           if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing)
     54528+           if (mch_avail_mem(TRUE) < KEEP_ROOM_KB && !releasing)
     54529            {
     54530                free((char *)p);        /* System is low... no go! */
     54531                p = NULL;
     54532@@ -1003,8 +1013,12 @@
    4972554533     {
    4972654534        /* Don't hide this message */
     
    4973654544 }
    4973754545 
    49738 @@ -1160,7 +1173,7 @@
     54546@@ -1160,7 +1174,7 @@
    4973954547     for (buf = firstbuf; buf != NULL; )
    4974054548     {
     
    4974554553            buf = nextbuf;      /* didn't work, try next one */
    4974654554        else
    49747 @@ -1223,7 +1236,7 @@
     54555@@ -1223,7 +1237,7 @@
    4974854556 #endif
    4974954557 
     
    4975454562     char_u *
    4975554563 vim_strsave(string)
    49756 @@ -1239,6 +1252,12 @@
     54564@@ -1239,6 +1253,12 @@
    4975754565     return p;
    4975854566 }
     
    4976754575 vim_strnsave(string, len)
    4976854576     char_u     *string;
    49769 @@ -1540,7 +1559,7 @@
     54577@@ -1540,7 +1560,7 @@
    4977054578            if (enc_utf8)
    4977154579            {
     
    4977654584 
    4977754585                c = utf_ptr2char(p);
    49778 @@ -1549,21 +1568,21 @@
     54586@@ -1549,21 +1569,21 @@
    4977954587                /* Reallocate string when byte count changes.  This is rare,
    4978054588                 * thus it's OK to do another malloc()/free(). */
     
    4980354611            else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
    4980454612                p += l;         /* skip multi-byte character */
    49805 @@ -1642,6 +1661,28 @@
     54613@@ -1642,6 +1662,28 @@
    4980654614 }
    4980754615 
     
    4983254640  * "sep_chars".
    4983354641  * The part is copied into "buf[maxlen]".
    49834 @@ -2023,24 +2064,22 @@
     54642@@ -2023,24 +2065,22 @@
    4983554643     garray_T   *gap;
    4983654644     int                n;
     
    4986454672     }
    4986554673     return OK;
    49866 @@ -2109,6 +2148,25 @@
     54674@@ -2109,6 +2149,25 @@
    4986754675     }
    4986854676 }
     
    4989054698  * functions that use lookup tables for various things, generally to do with
    4989154699  * special key codes.
    49892 @@ -2356,10 +2414,21 @@
     54700@@ -2356,10 +2415,21 @@
    4989354701     {'<',              (char_u *)"lt"},
    4989454702 
     
    4991254720     {K_LEFTMOUSE_NM,   (char_u *)"LeftMouseNM"},
    4991354721     {K_LEFTDRAG,       (char_u *)"LeftDrag"},
    49914 @@ -2698,6 +2767,7 @@
     54722@@ -2698,6 +2768,7 @@
    4991554723     int                bit;
    4991654724     int                key;
     
    4992054728     src = *srcp;
    4992154729     if (src[0] != '<')
    49922 @@ -2710,26 +2780,32 @@
     54730@@ -2710,26 +2781,32 @@
    4992354731        if (*bp == '-')
    4992454732        {
     
    4996454772        modifiers = 0x0;
    4996554773        for (bp = src + 1; bp < last_dash; bp++)
    49966 @@ -2748,16 +2824,32 @@
     54774@@ -2748,16 +2825,32 @@
    4996754775         */
    4996854776        if (bp >= last_dash)
     
    5000554813 
    5000654814            /*
    50007 @@ -3131,17 +3223,31 @@
     54815@@ -3131,17 +3224,31 @@
    5000854816            retval = mch_call_shell(cmd, opt);
    5000954817        else
     
    5004054848 #ifdef FEAT_GUI
    5004154849        --hold_gui_events;
    50042 @@ -3191,7 +3297,7 @@
     54850@@ -3191,7 +3298,7 @@
    5004354851 #if defined(FEAT_MBYTE) || defined(PROTO)
    5004454852 /*
     
    5004954857  */
    5005054858     int
    50051 @@ -3199,7 +3305,7 @@
     54859@@ -3199,7 +3306,7 @@
    5005254860     char_u     *b;
    5005354861     char_u     *p;
     
    5005854866 }
    5005954867 #endif
    50060 @@ -4210,6 +4316,8 @@
     54868@@ -4210,6 +4317,8 @@
    5006154869 static int ff_path_in_stoplist __ARGS((char_u *, int, char_u **));
    5006254870 #endif
     
    5006754875 /*
    5006854876  * if someone likes findfirst/findnext, here are the functions
    50069 @@ -4506,6 +4614,11 @@
     54877@@ -4506,6 +4615,11 @@
    5007054878        len = 0;
    5007154879        while (*wc_part != NUL)
     
    5007954887            {
    5008054888                ff_expand_buffer[len++] = *wc_part++;
    50081 @@ -4551,6 +4664,12 @@
     54889@@ -4551,6 +4665,12 @@
    5008254890     }
    5008354891 
     
    5009254900     add_pathsep(ff_expand_buffer);
    5009354901     STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path);
    50094 @@ -4597,9 +4716,8 @@
     54902@@ -4597,9 +4717,8 @@
    5009554903     {
    5009654904        if (r_ptr[0] == '\\' && r_ptr[1] == ';')
     
    5010454912            r_ptr++;
    5010554913        }
    50106 @@ -4858,10 +4976,13 @@
     54914@@ -4858,10 +4977,13 @@
    5010754915                        stackp->ffs_filearray_size = 0;
    5010854916                }
     
    5011954927                stackp->ffs_filearray_cur = 0;
    5012054928                stackp->ffs_stage = 0;
    50121 @@ -6443,3 +6564,23 @@
     54929@@ -6443,3 +6565,23 @@
    5012254930 #endif
    5012354931 
     
    5014454952+#endif
    5014554953diff -Naur vim73.orig/src/move.c vim73/src/move.c
    50146 --- vim73.orig/src/move.c       2012-06-03 23:09:52.920006524 +0000
    50147 +++ vim73/src/move.c    2012-06-03 23:09:55.652079228 +0000
     54954--- vim73.orig/src/move.c       2010-08-08 13:12:31.000000000 +0000
     54955+++ vim73/src/move.c    2012-07-20 20:31:15.540976512 +0000
    5014854956@@ -362,7 +362,7 @@
    5014954957 #endif
     
    5023555043diff -Naur vim73.orig/src/msvc2010.bat vim73/src/msvc2010.bat
    5023655044--- vim73.orig/src/msvc2010.bat 1970-01-01 00:00:00.000000000 +0000
    50237 +++ vim73/src/msvc2010.bat      2012-06-03 23:09:54.252041972 +0000
     55045+++ vim73/src/msvc2010.bat      2012-07-20 20:31:11.317640143 +0000
    5023855046@@ -0,0 +1,7 @@
    5023955047+@echo off
     
    5024555053+call "%VS100COMNTOOLS%%vsvars32.bat"
    5024655054diff -Naur vim73.orig/src/netbeans.c vim73/src/netbeans.c
    50247 --- vim73.orig/src/netbeans.c   2012-06-03 23:09:52.948007269 +0000
    50248 +++ vim73/src/netbeans.c        2012-06-03 23:09:55.748081783 +0000
     55055--- vim73.orig/src/netbeans.c   2010-08-09 20:48:09.000000000 +0000
     55056+++ vim73/src/netbeans.c        2012-07-20 20:31:15.804310035 +0000
    5024955057@@ -14,12 +14,15 @@
    5025055058  * which are *between* characters, whereas vim uses line number
     
    5090155709 
    5090255710diff -Naur vim73.orig/src/normal.c vim73/src/normal.c
    50903 --- vim73.orig/src/normal.c     2012-06-03 23:09:52.948007269 +0000
    50904 +++ vim73/src/normal.c  2012-06-03 23:09:55.900085828 +0000
     55711--- vim73.orig/src/normal.c     2010-07-31 13:25:19.000000000 +0000
     55712+++ vim73/src/normal.c  2012-07-20 20:31:18.050978309 +0000
    5090555713@@ -20,15 +20,18 @@
    5090655714  */
     
    5101255820 # ifdef FEAT_VIRTUALEDIT
    5101355821     int                    include_line_break = FALSE;
     55822@@ -1419,7 +1451,7 @@
     55823      * This could call do_pending_operator() recursively, but that's OK
     55824      * because gui_yank will be TRUE for the nested call.
     55825      */
     55826-    if (clip_star.available
     55827+    if ((clip_star.available || clip_plus.available)
     55828            && oap->op_type != OP_NOP
     55829            && !gui_yank
     55830 # ifdef FEAT_VISUAL
    5101455831@@ -1517,22 +1549,31 @@
    5101555832 #ifdef FEAT_VISUAL
     
    5113455951                }
    5113555952            }
     55953@@ -1910,7 +1968,7 @@
     55954                beep_flush();
     55955            else
     55956            {
     55957-               (void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE);
     55958+               (void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE, TRUE);
     55959                auto_format(FALSE, TRUE);
     55960            }
     55961            break;
    5113655962@@ -1920,7 +1978,10 @@
    5113755963            VIsual_reselect = FALSE;        /* don't reselect now */
     
    5122356049 #else
    5122456050     EMSG(_("E775: Eval feature not available"));
     56051@@ -4342,7 +4426,7 @@
     56052            break;
     56053        }
     56054 #ifdef FEAT_COMMENTS
     56055-       if (get_leader_len(ml_get_curline(), NULL, FALSE) > 0)
     56056+       if (get_leader_len(ml_get_curline(), NULL, FALSE, TRUE) > 0)
     56057        {
     56058            /* Ignore this line, continue at start of next line. */
     56059            ++curwin->w_cursor.lnum;
    5122556060@@ -4501,6 +4585,7 @@
    5122656061                }
     
    5134756182     }
    5134856183 }
    51349 @@ -8524,7 +8643,7 @@
     56184@@ -8274,10 +8393,12 @@
     56185 
     56186 #ifdef FEAT_WINDOWS
     56187     case 't':
     56188-       goto_tabpage((int)cap->count0);
     56189+       if (!checkclearop(oap))
     56190+           goto_tabpage((int)cap->count0);
     56191        break;
     56192     case 'T':
     56193-       goto_tabpage(-(int)cap->count1);
     56194+       if (!checkclearop(oap))
     56195+           goto_tabpage(-(int)cap->count1);
     56196        break;
     56197 #endif
     56198 
     56199@@ -8524,7 +8645,7 @@
    5135056200     else
    5135156201        curwin->w_curswant = 0;
     
    5135656206 }
    5135756207 
    51358 @@ -8736,7 +8855,7 @@
     56208@@ -8736,7 +8857,7 @@
    5135956209        {
    5136056210            --pp->col;
     
    5136556215        }
    5136656216        else if (pp->lnum > 1)
    51367 @@ -9261,7 +9380,7 @@
     56217@@ -9205,7 +9326,7 @@
     56218        {
     56219            prep_redo(cap->oap->regname, cap->count0,
     56220                         NUL, cap->cmdchar, NUL, NUL, cap->nchar);
     56221-           (void)do_join(cap->count0, cap->nchar == NUL, TRUE);
     56222+           (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE);
     56223        }
     56224     }
     56225 }
     56226@@ -9261,7 +9382,7 @@
    5136856227 # ifdef FEAT_CLIPBOARD
    5136956228            adjust_clip_reg(&regname);
     
    5137556234 # endif
    5137656235diff -Naur vim73.orig/src/ops.c vim73/src/ops.c
    51377 --- vim73.orig/src/ops.c        2012-06-03 23:09:52.940007057 +0000
    51378 +++ vim73/src/ops.c     2012-06-03 23:09:55.844084339 +0000
    51379 @@ -1584,9 +1584,11 @@
     56236--- vim73.orig/src/ops.c        2010-08-01 12:16:08.000000000 +0000
     56237+++ vim73/src/ops.c     2012-07-20 20:31:18.057644980 +0000
     56238@@ -112,6 +112,9 @@
     56239 # endif
     56240 #endif
     56241 static void    dis_msg __ARGS((char_u *p, int skip_esc));
     56242+#if defined(FEAT_COMMENTS) || defined(PROTO)
     56243+static char_u  *skip_comment __ARGS((char_u *line, int process, int include_space, int *is_comment));
     56244+#endif
     56245 #ifdef FEAT_VISUAL
     56246 static void    block_prep __ARGS((oparg_T *oap, struct block_def *, linenr_T, int));
     56247 #endif
     56248@@ -959,8 +962,14 @@
     56249      * selection too. */
     56250     if (name == '*' && clip_star.available)
     56251     {
     56252-       if (clip_isautosel())
     56253-           clip_update_selection();
     56254+       if (clip_isautosel_star())
     56255+           clip_update_selection(&clip_star);
     56256+       may_get_selection(name);
     56257+    }
     56258+    if (name == '+' && clip_plus.available)
     56259+    {
     56260+       if (clip_isautosel_plus())
     56261+           clip_update_selection(&clip_plus);
     56262        may_get_selection(name);
     56263     }
     56264 #endif
     56265@@ -1584,9 +1593,11 @@
    5138056266 adjust_clip_reg(rp)
    5138156267     int                *rp;
     
    5139256278        *rp = 0;
    5139356279     if (!clip_plus.available && *rp == '+')
    51394 @@ -1646,9 +1648,12 @@
     56280@@ -1646,9 +1657,12 @@
    5139556281            && !oap->block_mode
    5139656282 #endif
     
    5140656292        if (*ptr == NUL && inindent(0))
    5140756293            oap->motion_type = MLINE;
    51408 @@ -1715,9 +1720,14 @@
     56294@@ -1715,9 +1729,14 @@
    5140956295                did_yank = TRUE;
    5141056296        }
     
    5141756303+       if ((
    5141856304+#ifdef FEAT_CLIPBOARD
    51419 +            ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
    51420 +            ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
     56305+           ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
     56306+           ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
    5142156307+#endif
    5142256308+           oap->regname == 0) && oap->motion_type != MLINE
     
    5142456310        {
    5142556311            oap->regname = '-';
    51426 @@ -1918,38 +1928,66 @@
     56312@@ -1918,38 +1937,66 @@
    5142756313                    curwin->w_cursor.coladd = 0;
    5142856314            }
     
    5149556381+           }
    5149656382+           if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
    51497 +               (void)do_join(2, FALSE, FALSE);
     56383+               (void)do_join(2, FALSE, FALSE, FALSE);
    5149856384        }
    5149956385     }
    5150056386 
    51501 @@ -2569,7 +2607,8 @@
     56387@@ -2569,7 +2616,8 @@
    5150256388        firstline = ml_get(oap->start.lnum) + bd.textcol;
    5150356389        if (oap->op_type == OP_APPEND)
     
    5150956395            ins_text = vim_strnsave(firstline, (int)ins_len);
    5151056396            if (ins_text != NULL)
    51511 @@ -2842,6 +2881,9 @@
     56397@@ -2842,6 +2890,9 @@
    5151256398     char_u             *p;
    5151356399     char_u             *pnew;
     
    5151956405                                    /* check for read-only register */
    5152056406     if (oap->regname != 0 && !valid_yank_reg(oap->regname, TRUE))
    51521 @@ -3000,6 +3042,8 @@
     56407@@ -3000,6 +3051,8 @@
    5152256408                        }
    5152356409 #endif
     
    5152856414 #ifdef FEAT_VIRTUALEDIT
    5152956415                            || is_oneChar
    51530 @@ -3008,8 +3052,6 @@
     56416@@ -3008,8 +3061,6 @@
    5153156417                        bd.textlen = 0;
    5153256418                    else
     
    5153756423                    }
    5153856424                    bd.textstart = p + startcol;
    51539 @@ -3115,7 +3157,8 @@
     56425@@ -3115,7 +3166,8 @@
    5154056426      */
    5154156427     if (clip_star.available
     
    5154756433        if (curr != &(y_regs[STAR_REGISTER]))
    5154856434            /* Copy the text from register 0 to the clipboard register. */
    51549 @@ -3123,6 +3166,9 @@
     56435@@ -3123,6 +3175,9 @@
    5155056436 
    5155156437        clip_own_selection(&clip_star);
     
    5155756443 
    5155856444 # ifdef FEAT_X11
    51559 @@ -3130,12 +3176,18 @@
     56445@@ -3130,12 +3185,19 @@
    5156056446      * If we were yanking to the '+' register, send result to selection.
    5156156447      * Also copy to the '*' register, in case auto-select is off.
     
    5157556461        clip_gen_set_selection(&clip_plus);
    5157656462-       if (!clip_isautosel())
    51577 +       if (!clip_isautosel() && !did_star && curr == &(y_regs[PLUS_REGISTER]))
     56463+       if (!clip_isautosel_star() && !did_star
     56464+                                         && curr == &(y_regs[PLUS_REGISTER]))
    5157856465        {
    5157956466            copy_yank_reg(&(y_regs[STAR_REGISTER]));
    5158056467            clip_own_selection(&clip_star);
    51581 @@ -3293,8 +3345,8 @@
     56468@@ -3293,8 +3355,8 @@
    5158256469        if (regname == '=')
    5158356470        {
     
    5159056477            {
    5159156478                y_size = 0;
    51592 @@ -3310,7 +3362,7 @@
     56479@@ -3310,7 +3372,7 @@
    5159356480                        if (y_array != NULL)
    5159456481                            *ptr = NUL;
     
    5159956486                        {
    5160056487                            y_type = MLINE;
    51601 @@ -3979,7 +4031,12 @@
     56488@@ -3979,7 +4041,12 @@
    5160256489     for (i = -1; i < NUM_REGISTERS && !got_int; ++i)
    5160356490     {
     
    5161356500 
    5161456501 #ifdef FEAT_CLIPBOARD
    51615 @@ -4153,9 +4210,10 @@
     56502@@ -4140,22 +4207,101 @@
     56503     ui_breakcheck();
     56504 }
     56505 
     56506+#if defined(FEAT_COMMENTS) || defined(PROTO)
     56507+/*
     56508+ * If "process" is TRUE and the line begins with a comment leader (possibly
     56509+ * after some white space), return a pointer to the text after it. Put a boolean
     56510+ * value indicating whether the line ends with an unclosed comment in
     56511+ * "is_comment".
     56512+ * line - line to be processed,
     56513+ * process - if FALSE, will only check whether the line ends with an unclosed
     56514+ *          comment,
     56515+ * include_space - whether to also skip space following the comment leader,
     56516+ * is_comment - will indicate whether the current line ends with an unclosed
     56517+ *             comment.
     56518+ */
     56519+    static char_u *
     56520+skip_comment(line, process, include_space, is_comment)
     56521+    char_u   *line;
     56522+    int      process;
     56523+    int             include_space;
     56524+    int      *is_comment;
     56525+{
     56526+    char_u *comment_flags = NULL;
     56527+    int    lead_len;
     56528+    int    leader_offset = get_last_leader_offset(line, &comment_flags);
     56529+
     56530+    *is_comment = FALSE;
     56531+    if (leader_offset != -1)
     56532+    {
     56533+       /* Let's check whether the line ends with an unclosed comment.
     56534+        * If the last comment leader has COM_END in flags, there's no comment.
     56535+        */
     56536+       while (*comment_flags)
     56537+       {
     56538+           if (*comment_flags == COM_END
     56539+                   || *comment_flags == ':')
     56540+               break;
     56541+           ++comment_flags;
     56542+       }
     56543+       if (*comment_flags != COM_END)
     56544+           *is_comment = TRUE;
     56545+    }
     56546+
     56547+    if (process == FALSE)
     56548+       return line;
     56549+
     56550+    lead_len = get_leader_len(line, &comment_flags, FALSE, include_space);
     56551+
     56552+    if (lead_len == 0)
     56553+       return line;
     56554+
     56555+    /* Find:
     56556+     * - COM_END,
     56557+     * - colon,
     56558+     * whichever comes first.
     56559+     */
     56560+    while (*comment_flags)
     56561+    {
     56562+       if (*comment_flags == COM_END
     56563+               || *comment_flags == ':')
     56564+       {
     56565+           break;
     56566+       }
     56567+       ++comment_flags;
     56568+    }
     56569+
     56570+    /* If we found a colon, it means that we are not processing a line
     56571+     * starting with a closing part of a three-part comment. That's good,
     56572+     * because we don't want to remove those as this would be annoying.
     56573+     */
     56574+    if (*comment_flags == ':' || *comment_flags == NUL)
     56575+       line += lead_len;
     56576+
     56577+    return line;
     56578+}
     56579+#endif
     56580+
     56581 /*
     56582  * Join 'count' lines (minimal 2) at cursor position.
     56583  * When "save_undo" is TRUE save lines for undo first.
     56584+ * Set "use_formatoptions" to FALSE when e.g. processing
     56585+ * backspace and comment leaders should not be removed.
     56586  *
     56587  * return FAIL for failure, OK otherwise
     56588  */
     56589     int
     56590-do_join(count, insert_space, save_undo)
     56591+do_join(count, insert_space, save_undo, use_formatoptions)
     56592     long    count;
     56593     int            insert_space;
    5161656594     int            save_undo;
     56595+    int            use_formatoptions UNUSED;
    5161756596 {
    5161856597     char_u     *curr = NULL;
     
    5162556604     int                endcurr2 = NUL;
    5162656605     int                currsize = 0;   /* size of the current line */
    51627 @@ -4181,7 +4239,7 @@
     56606@@ -4163,6 +4309,13 @@
     56607     linenr_T   t;
     56608     colnr_T    col = 0;
     56609     int                ret = OK;
     56610+#if defined(FEAT_COMMENTS) || defined(PROTO)
     56611+    int                *comments = NULL;
     56612+    int                remove_comments = (use_formatoptions == TRUE)
     56613+                                 && has_format_option(FO_REMOVE_COMS);
     56614+    int                prev_was_comment;
     56615+#endif
     56616+
     56617 
     56618     if (save_undo && u_save((linenr_T)(curwin->w_cursor.lnum - 1),
     56619                            (linenr_T)(curwin->w_cursor.lnum + count)) == FAIL)
     56620@@ -4174,6 +4327,17 @@
     56621     spaces = lalloc_clear((long_u)count, TRUE);
     56622     if (spaces == NULL)
     56623        return FAIL;
     56624+#if defined(FEAT_COMMENTS) || defined(PROTO)
     56625+    if (remove_comments)
     56626+    {
     56627+       comments = (int *)lalloc_clear((long_u)count * sizeof(int), TRUE);
     56628+       if (comments == NULL)
     56629+       {
     56630+           vim_free(spaces);
     56631+           return FAIL;
     56632+       }
     56633+    }
     56634+#endif
     56635 
     56636     /*
     56637      * Don't move anything, just compute the final line length
     56638@@ -4181,7 +4345,26 @@
    5162856639      */
    5162956640     for (t = 0; t < count; ++t)
     
    5163156642-       curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
    5163256643+       curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
     56644+#if defined(FEAT_COMMENTS) || defined(PROTO)
     56645+       if (remove_comments)
     56646+       {
     56647+           /* We don't want to remove the comment leader if the
     56648+            * previous line is not a comment. */
     56649+           if (t > 0 && prev_was_comment)
     56650+           {
     56651+
     56652+               char_u *new_curr = skip_comment(curr, TRUE, insert_space,
     56653+                                                          &prev_was_comment);
     56654+               comments[t] = (int)(new_curr - curr);
     56655+               curr = new_curr;
     56656+           }
     56657+           else
     56658+               curr = skip_comment(curr, FALSE, insert_space,
     56659+                                                          &prev_was_comment);
     56660+       }
     56661+#endif
     56662+
    5163356663        if (insert_space && t > 0)
    5163456664        {
    5163556665            curr = skipwhite(curr);
    51636 @@ -4265,10 +4323,10 @@
     56666@@ -4265,10 +4448,14 @@
    5163756667            copy_spaces(cend, (size_t)(spaces[t]));
    5163856668        }
     
    5164456674-       curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
    5164556675+       curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
     56676+#if defined(FEAT_COMMENTS) || defined(PROTO)
     56677+       if (remove_comments)
     56678+           curr += comments[t - 1];
     56679+#endif
    5164656680        if (insert_space && t > 1)
    5164756681            curr = skipwhite(curr);
    5164856682        currsize = (int)STRLEN(curr);
    51649 @@ -4388,7 +4446,7 @@
     56683@@ -4306,6 +4493,10 @@
     56684 
     56685 theend:
     56686     vim_free(spaces);
     56687+#if defined(FEAT_COMMENTS) || defined(PROTO)
     56688+    if (remove_comments)
     56689+       vim_free(comments);
     56690+#endif
     56691     return ret;
     56692 }
     56693 
     56694@@ -4388,7 +4579,7 @@
    5165056695 #endif
    5165156696 
     
    5165656701     void
    5165756702 op_format(oap, keep_cursor)
    51658 @@ -5712,7 +5770,9 @@
     56703@@ -4539,9 +4730,11 @@
     56704     char_u     *leader_flags = NULL;   /* flags for leader of current line */
     56705     char_u     *next_leader_flags;     /* flags for leader of next line */
     56706     int                do_comments;            /* format comments */
     56707+    int                do_comments_list = 0;   /* format comments with 'n' or '2' */
     56708 #endif
     56709     int                advance = TRUE;
     56710-    int                second_indent = -1;
     56711+    int                second_indent = -1;     /* indent for second line (comment
     56712+                                        * aware) */
     56713     int                do_second_indent;
     56714     int                do_number_indent;
     56715     int                do_trail_white;
     56716@@ -4644,18 +4837,46 @@
     56717            if (first_par_line
     56718                    && (do_second_indent || do_number_indent)
     56719                    && prev_is_end_par
     56720-                   && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count
     56721+                   && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
     56722+           {
     56723+               if (do_second_indent && !lineempty(curwin->w_cursor.lnum + 1))
     56724+               {
     56725 #ifdef FEAT_COMMENTS
     56726-                   && leader_len == 0
     56727-                   && next_leader_len == 0
     56728+                   if (leader_len == 0 && next_leader_len == 0)
     56729+                   {
     56730+                       /* no comment found */
     56731 #endif
     56732-                   )
     56733-           {
     56734-               if (do_second_indent
     56735-                       && !lineempty(curwin->w_cursor.lnum + 1))
     56736-                   second_indent = get_indent_lnum(curwin->w_cursor.lnum + 1);
     56737+                       second_indent =
     56738+                                  get_indent_lnum(curwin->w_cursor.lnum + 1);
     56739+#ifdef FEAT_COMMENTS
     56740+                   }
     56741+                   else
     56742+                   {
     56743+                       second_indent = next_leader_len;
     56744+                       do_comments_list = 1;
     56745+                   }
     56746+#endif
     56747+               }
     56748                else if (do_number_indent)
     56749-                   second_indent = get_number_indent(curwin->w_cursor.lnum);
     56750+               {
     56751+#ifdef FEAT_COMMENTS
     56752+                   if (leader_len == 0 && next_leader_len == 0)
     56753+                   {
     56754+                       /* no comment found */
     56755+#endif
     56756+                       second_indent =
     56757+                                    get_number_indent(curwin->w_cursor.lnum);
     56758+#ifdef FEAT_COMMENTS
     56759+                   }
     56760+                   else
     56761+                   {
     56762+                       /* get_number_indent() is now "comment aware"... */
     56763+                       second_indent =
     56764+                                    get_number_indent(curwin->w_cursor.lnum);
     56765+                       do_comments_list = 1;
     56766+                   }
     56767+#endif
     56768+               }
     56769            }
     56770 
     56771            /*
     56772@@ -4694,6 +4915,8 @@
     56773                insertchar(NUL, INSCHAR_FORMAT
     56774 #ifdef FEAT_COMMENTS
     56775                        + (do_comments ? INSCHAR_DO_COM : 0)
     56776+                       + (do_comments && do_comments_list
     56777+                                                      ? INSCHAR_COM_LIST : 0)
     56778 #endif
     56779                        + (avoid_fex ? INSCHAR_NO_FEX : 0), second_indent);
     56780                State = old_State;
     56781@@ -4730,7 +4953,7 @@
     56782                                                      (long)-next_leader_len);
     56783 #endif
     56784                curwin->w_cursor.lnum--;
     56785-               if (do_join(2, TRUE, FALSE) == FAIL)
     56786+               if (do_join(2, TRUE, FALSE, FALSE) == FAIL)
     56787                {
     56788                    beep_flush();
     56789                    break;
     56790@@ -4786,7 +5009,7 @@
     56791 
     56792     ptr = ml_get(lnum);
     56793     if (do_comments)
     56794-       *leader_len = get_leader_len(ptr, leader_flags, FALSE);
     56795+       *leader_len = get_leader_len(ptr, leader_flags, FALSE, TRUE);
     56796     else
     56797        *leader_len = 0;
     56798 
     56799@@ -5712,7 +5935,9 @@
    5165956800     }
    5166056801 }
     
    5166756808 clip_yank_selection(type, str, len, cbd)
    5166856809     int                type;
    51669 @@ -6069,9 +6129,6 @@
     56810@@ -6069,9 +6294,6 @@
    5167056811     if (yank_type == MBLOCK)
    5167156812        yank_type = MAUTO;
     
    5167756818 
    5167856819 # ifdef FEAT_CLIPBOARD
    51679 @@ -6092,13 +6149,14 @@
     56820@@ -6092,13 +6314,14 @@
    5168056821  * is appended.
    5168156822  */
     
    5169456835     long       start;
    5169556836     long       i;
    51696 @@ -6115,6 +6173,12 @@
     56837@@ -6115,6 +6338,12 @@
    5169756838     if (y_ptr->y_array == NULL)                /* NULL means empty register */
    5169856839        y_ptr->y_size = 0;
     
    5170756848      * Count the number of lines within the string
    5170856849      */
    51709 @@ -6261,7 +6325,7 @@
     56850@@ -6236,7 +6465,7 @@
     56851     long       chars = 0;
     56852     int                is_word = 0;
     56853 
     56854-    for (i = 0; line[i] && i < limit; )
     56855+    for (i = 0; i < limit && line[i] != NUL; )
     56856     {
     56857        if (is_word)
     56858        {
     56859@@ -6261,7 +6490,7 @@
    5171056860     *wc += words;
    5171156861 
     
    5171756867        chars += eol_size;
    5171856868diff -Naur vim73.orig/src/option.c vim73/src/option.c
    51719 --- vim73.orig/src/option.c     2012-06-03 23:09:52.952007375 +0000
    51720 +++ vim73/src/option.c  2012-06-03 23:09:55.676079868 +0000
     56869--- vim73.orig/src/option.c     2010-08-04 18:49:18.000000000 +0000
     56870+++ vim73/src/option.c  2012-07-20 20:31:18.180978402 +0000
    5172156871@@ -140,9 +140,6 @@
    5172256872 #define PV_MOD         OPT_BUF(BV_MOD)
     
    5194457094 #ifdef FEAT_WILDMENU
    5194557095                            (char_u *)&p_wmnu, PV_NONE,
     57096@@ -3145,7 +3154,7 @@
     57097        {
     57098 #ifdef HAVE_AVAIL_MEM
     57099            /* Use amount of memory available at this moment. */
     57100-           n = (mch_avail_mem(FALSE) >> 11);
     57101+           n = (mch_avail_mem(FALSE) >> 1);
     57102 #else
     57103 # ifdef HAVE_TOTAL_MEM
     57104            /* Use amount of memory available to Vim. */
    5194657105@@ -3843,6 +3852,8 @@
    5194757106 # ifndef OS2   /* Always use bourne shell style redirection if we reach this */
     
    5207257231     check_string_option(&buf->b_p_cinw);
    5207357232 #endif
     57233@@ -6635,7 +6702,7 @@
     57234     {
     57235        for (s = *varp; *s;)
     57236        {
     57237-           while(*s == ',' || *s == ' ')
     57238+           while (*s == ',' || *s == ' ')
     57239                s++;
     57240            if (!*s)
     57241                break;
    5207457242@@ -6999,8 +7066,10 @@
    5207557243     }
     
    5209557263     {
    5209657264        if (*s == '-' || *s == '+')
    52097 @@ -7304,7 +7376,7 @@
     57265@@ -7304,8 +7376,9 @@
    5209857266     static char_u *
    5209957267 check_clipboard_option()
    5210057268 {
    5210157269-    int                new_unnamed = FALSE;
     57270-    int                new_autoselect = FALSE;
    5210257271+    int                new_unnamed = 0;
    52103      int                new_autoselect = FALSE;
     57272+    int                new_autoselect_star = FALSE;
     57273+    int                new_autoselect_plus = FALSE;
    5210457274     int                new_autoselectml = FALSE;
    5210557275     int                new_html = FALSE;
    52106 @@ -7316,9 +7388,15 @@
     57276     regprog_T  *new_exclude_prog = NULL;
     57277@@ -7316,17 +7389,29 @@
    5210757278     {
    5210857279        if (STRNCMP(p, "unnamed", 7) == 0 && (p[7] == ',' || p[7] == NUL))
     
    5211257283            p += 7;
    5211357284        }
    52114 +        else if (STRNCMP(p, "unnamedplus", 11) == 0
     57285+       else if (STRNCMP(p, "unnamedplus", 11) == 0
    5211557286+                                           && (p[11] == ',' || p[11] == NUL))
    5211657287+       {
     
    5211957290+       }
    5212057291        else if (STRNCMP(p, "autoselect", 10) == 0
    52121                                         && (p[10] == ',' || p[10] == NUL))
     57292-                                       && (p[10] == ',' || p[10] == NUL))
     57293+                                           && (p[10] == ',' || p[10] == NUL))
    5212257294        {
    52123 @@ -7483,14 +7561,36 @@
     57295-           new_autoselect = TRUE;
     57296+           new_autoselect_star = TRUE;
     57297            p += 10;
     57298        }
     57299+       else if (STRNCMP(p, "autoselectplus", 14) == 0
     57300+                                           && (p[14] == ',' || p[14] == NUL))
     57301+       {
     57302+           new_autoselect_plus = TRUE;
     57303+           p += 14;
     57304+       }
     57305        else if (STRNCMP(p, "autoselectml", 12) == 0
     57306-                                       && (p[12] == ',' || p[12] == NUL))
     57307+                                           && (p[12] == ',' || p[12] == NUL))
     57308        {
     57309            new_autoselectml = TRUE;
     57310            p += 12;
     57311@@ -7355,7 +7440,8 @@
     57312     if (errmsg == NULL)
     57313     {
     57314        clip_unnamed = new_unnamed;
     57315-       clip_autoselect = new_autoselect;
     57316+       clip_autoselect_star = new_autoselect_star;
     57317+       clip_autoselect_plus = new_autoselect_plus;
     57318        clip_autoselectml = new_autoselectml;
     57319        clip_html = new_html;
     57320        vim_free(clip_exclude_prog);
     57321@@ -7483,14 +7569,36 @@
    5212457322        compatible_set();
    5212557323     }
     
    5216157359        /* If 'relativenumber' is set, reset 'number'. */
    5216257360        if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
    52163 @@ -7735,8 +7835,6 @@
     57361@@ -7735,8 +7843,6 @@
    5216457362     {
    5216557363        if (curwin->w_p_wrap)
     
    5217057368 
    5217157369 #ifdef FEAT_WINDOWS
    52172 @@ -7763,9 +7861,9 @@
     57370@@ -7763,9 +7869,9 @@
    5217357371 #ifdef FEAT_BEVAL
    5217457372     else if ((int *)varp == &p_beval)
     
    5218257380     }
    5218357381 #endif
    52184 @@ -7798,6 +7896,10 @@
     57382@@ -7798,6 +7904,10 @@
    5218557383        /* Only de-activate it here, it will be enabled when changing mode. */
    5218657384        if (p_imdisable)
     
    5219357391 #endif
    5219457392 
    52195 @@ -7959,31 +8061,8 @@
     57393@@ -7959,31 +8069,8 @@
    5219657394            curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
    5219757395 # endif
     
    5222557423 
    5222657424     /*
    52227 @@ -7993,7 +8072,9 @@
     57425@@ -7993,7 +8080,9 @@
    5222857426     options[opt_idx].flags |= P_WAS_SET;
    5222957427 
     
    5223657434 
    5223757435     return NULL;
    52238 @@ -8508,8 +8589,9 @@
     57436@@ -8508,8 +8597,9 @@
    5223957437     options[opt_idx].flags |= P_WAS_SET;
    5224057438 
     
    5224857446 
    5224957447     return errmsg;
    52250 @@ -8523,8 +8605,8 @@
     57448@@ -8523,8 +8613,8 @@
    5225157449     long_u     flags;
    5225257450 {
     
    5225957457 #ifdef FEAT_WINDOWS
    5226057458     if ((flags & P_RSTAT) || all)      /* mark all status lines dirty */
    52261 @@ -8535,7 +8617,7 @@
     57459@@ -8535,7 +8625,7 @@
    5226257460        changed_window_setting();
    5226357461     if (flags & P_RBUF)
     
    5226857466     else if (all)
    5226957467        redraw_all_later(NOT_VALID);
    52270 @@ -9172,7 +9254,7 @@
     57468@@ -9172,7 +9262,7 @@
    5227157469     int                expand;
    5227257470 {
     
    5227757475     if (fprintf(fd, "%s %s=", cmd, name) < 0)
    5227857476        return FAIL;
    52279 @@ -9190,9 +9272,16 @@
     57477@@ -9190,9 +9280,16 @@
    5228057478        }
    5228157479        else if (expand)
     
    5229457492        else if (put_escstr(fd, *valuep, 2) == FAIL)
    5229557493            return FAIL;
    52296 @@ -9645,9 +9734,6 @@
     57494@@ -9645,9 +9742,6 @@
    5229757495        case PV_MA:     return (char_u *)&(curbuf->b_p_ma);
    5229857496        case PV_MOD:    return (char_u *)&(curbuf->b_changed);
     
    5230457502 #ifdef FEAT_TEXTOBJ
    5230557503        case PV_QE:     return (char_u *)&(curbuf->b_p_qe);
    52306 @@ -9756,6 +9842,9 @@
     57504@@ -9756,6 +9850,9 @@
    5230757505 #ifdef FEAT_SCROLLBIND
    5230857506     to->wo_scb = from->wo_scb;
     
    5231457512     to->wo_spell = from->wo_spell;
    5231557513 #endif
    52316 @@ -9995,9 +10084,6 @@
     57514@@ -9995,9 +10092,6 @@
    5231757515            /* Don't copy 'filetype', it must be detected */
    5231857516            buf->b_p_ft = empty_option;
     
    5232457522 #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
    5232557523            buf->b_p_cinw = vim_strsave(p_cinw);
    52326 @@ -10011,7 +10097,7 @@
     57524@@ -10011,7 +10105,7 @@
    5232757525            buf->b_p_smc = p_smc;
    5232857526 #endif
     
    5233357531            buf->b_s.b_p_spf = vim_strsave(p_spf);
    5233457532            buf->b_s.b_p_spl = vim_strsave(p_spl);
    52335 @@ -10877,7 +10963,8 @@
     57533@@ -10877,7 +10971,8 @@
    5233657534 shortmess(x)
    5233757535     int            x;
     
    5234357541                && vim_strchr((char_u *)SHM_A, x) != NULL));
    5234457542 }
    52345 @@ -11284,16 +11371,19 @@
     57543@@ -11284,16 +11379,19 @@
    5234657544  * from when editing started (save_file_ff() called).
    5234757545  * Also when 'endofline' was changed and 'binary' is set, or when 'bomb' was
     
    5236757565        return FALSE;
    5236857566diff -Naur vim73.orig/src/option.h vim73/src/option.h
    52369 --- vim73.orig/src/option.h     2012-06-03 23:09:52.920006524 +0000
    52370 +++ vim73/src/option.h  2012-06-03 23:09:55.460074120 +0000
     57567--- vim73.orig/src/option.h     2010-07-25 14:15:02.000000000 +0000
     57568+++ vim73/src/option.h  2012-07-20 20:31:18.070978324 +0000
    5237157569@@ -33,7 +33,7 @@
    5237257570 #     ifdef EBCDIC
     
    5237857576 #    endif
    5237957577 #   endif
    52380 @@ -169,10 +169,12 @@
     57578@@ -104,10 +104,11 @@
     57579 #define FO_ONE_LETTER  '1'
     57580 #define FO_WHITE_PAR   'w'     /* trailing white space continues paragr. */
     57581 #define FO_AUTO                'a'     /* automatic formatting */
     57582+#define FO_REMOVE_COMS 'j'     /* remove comment leaders when joining lines */
     57583 
     57584 #define DFLT_FO_VI     "vt"
     57585 #define DFLT_FO_VIM    "tcq"
     57586-#define FO_ALL         "tcroq2vlb1mMBn,aw"     /* for do_set() */
     57587+#define FO_ALL         "tcroq2vlb1mMBn,awj"    /* for do_set() */
     57588 
     57589 /* characters for the p_cpo option: */
     57590 #define CPO_ALTREAD    'a'     /* ":read" sets alternate file name */
     57591@@ -169,10 +170,12 @@
    5238157592 #define CPO_SUBPERCENT '/'     /* % in :s string uses previous one */
    5238257593 #define CPO_BACKSL     '\\'    /* \ is not special in [] */
     
    5239357604 /* characters for p_ww option: */
    5239457605 #define WW_ALL         "bshl<>[],~"
    52395 @@ -391,6 +393,7 @@
     57606@@ -226,6 +229,7 @@
     57607 #define GO_MENUS       'm'             /* use menu bar */
     57608 #define GO_NOSYSMENU   'M'             /* don't source system menu */
     57609 #define GO_POINTER     'p'             /* pointer enter/leave callbacks */
     57610+#define GO_ASELPLUS    'P'             /* autoselectPlus */
     57611 #define GO_RIGHT       'r'             /* use right scrollbar */
     57612 #define GO_VRIGHT      'R'             /* right scrollbar with vert split */
     57613 #define GO_TEAROFF     't'             /* add tear-off menu items */
     57614@@ -391,6 +395,7 @@
    5239657615 EXTERN char_u  *p_cpo;         /* 'cpoptions' */
    5239757616 #ifdef FEAT_CSCOPE
     
    5240157620 EXTERN char_u  *p_csqf;        /* 'cscopequickfix' */
    5240257621 #  define      CSQF_CMDS   "sgdctefi"
    52403 @@ -709,6 +712,7 @@
     57622@@ -709,6 +714,7 @@
    5240457623 #endif
    5240557624 EXTERN char_u  *p_shq;         /* 'shellquote' */
     
    5240957628 #ifdef AMIGA
    5241057629 EXTERN long    p_st;           /* 'shelltype' */
    52411 @@ -816,7 +820,7 @@
     57630@@ -816,7 +822,7 @@
    5241257631 EXTERN char_u  *p_ttym;        /* 'ttymouse' */
    5241357632 EXTERN unsigned ttym_flags;
     
    5241857637 # define TTYM_XTERM            0x01
    5241957638 # define TTYM_XTERM2           0x02
    52420 @@ -824,6 +828,7 @@
     57639@@ -824,6 +830,7 @@
    5242157640 # define TTYM_NETTERM          0x08
    5242257641 # define TTYM_JSBTERM          0x10
     
    5242657645 EXTERN char_u  *p_udir;        /* 'undodir' */
    5242757646 EXTERN long    p_ul;           /* 'undolevels' */
    52428 @@ -854,7 +859,11 @@
     57647@@ -854,7 +861,11 @@
    5242957648 # define VE_ONEMORE    8
    5243057649 #endif
     
    5243957658 #ifdef FEAT_CMDL_COMPL
    5244057659 EXTERN char_u  *p_wop;         /* 'wildoptions' */
    52441 @@ -872,6 +881,7 @@
     57660@@ -872,6 +883,7 @@
    5244257661 EXTERN char_u  *p_ww;          /* 'whichwrap' */
    5244357662 EXTERN long    p_wc;           /* 'wildchar' */
     
    5244757666 #ifdef FEAT_WILDMENU
    5244857667 EXTERN int     p_wmnu;         /* 'wildmenu' */
    52449 @@ -979,9 +989,6 @@
     57668@@ -979,9 +991,6 @@
    5245057669     , BV_MOD
    5245157670     , BV_MPS
     
    5245857677 #endif
    5245957678diff -Naur vim73.orig/src/os_amiga.c vim73/src/os_amiga.c
    52460 --- vim73.orig/src/os_amiga.c   2012-06-03 23:09:52.920006524 +0000
    52461 +++ vim73/src/os_amiga.c        2012-06-03 23:09:54.876058577 +0000
     57679--- vim73.orig/src/os_amiga.c   2010-05-15 11:04:08.000000000 +0000
     57680+++ vim73/src/os_amiga.c        2012-07-20 20:31:17.630978008 +0000
     57681@@ -191,16 +191,16 @@
     57682 }
     57683 
     57684 /*
     57685- * Return amount of memory still available.
     57686+ * Return amount of memory still available in Kbyte.
     57687  */
     57688     long_u
     57689 mch_avail_mem(special)
     57690     int            special;
     57691 {
     57692 #ifdef __amigaos4__
     57693-    return (long_u)AvailMem(MEMF_ANY);
     57694+    return (long_u)AvailMem(MEMF_ANY) >> 10;
     57695 #else
     57696-    return (long_u)AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY);
     57697+    return (long_u)(AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY)) >> 10;
     57698 #endif
     57699 }
     57700 
    5246257701@@ -1022,7 +1022,7 @@
    5246357702 
     
    5247057709     id = (struct InfoData *)(((long)id_a + 3L) & ~3L);
    5247157710diff -Naur vim73.orig/src/os_mac_conv.c vim73/src/os_mac_conv.c
    52472 --- vim73.orig/src/os_mac_conv.c        2012-06-03 23:09:52.932006845 +0000
    52473 +++ vim73/src/os_mac_conv.c     2012-06-03 23:09:54.876058577 +0000
     57711--- vim73.orig/src/os_mac_conv.c        2010-07-14 11:50:20.000000000 +0000
     57712+++ vim73/src/os_mac_conv.c     2012-07-20 20:31:13.047641389 +0000
    5247457713@@ -14,6 +14,8 @@
    5247557714  */
     
    5249157730      * there is an incomplete byte sequence.  Only do up to 6 bytes to avoid
    5249257731diff -Naur vim73.orig/src/os_macosx.m vim73/src/os_macosx.m
    52493 --- vim73.orig/src/os_macosx.m  2012-06-03 23:09:52.948007269 +0000
    52494 +++ vim73/src/os_macosx.m       2012-06-03 23:09:54.356044740 +0000
     57732--- vim73.orig/src/os_macosx.m  2010-08-15 10:56:50.000000000 +0000
     57733+++ vim73/src/os_macosx.m       2012-07-20 20:31:11.617640360 +0000
    5249557734@@ -15,6 +15,11 @@
    5249657735     Error: MACOS 9 is no longer supported in Vim 7
     
    5256057799     int len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
    5256157800diff -Naur vim73.orig/src/os_msdos.c vim73/src/os_msdos.c
    52562 --- vim73.orig/src/os_msdos.c   2012-06-03 23:09:52.952007375 +0000
    52563 +++ vim73/src/os_msdos.c        2012-06-03 23:09:54.320043782 +0000
     57801--- vim73.orig/src/os_msdos.c   2010-05-15 11:04:07.000000000 +0000
     57802+++ vim73/src/os_msdos.c        2012-07-20 20:31:17.634311344 +0000
    5256457803@@ -21,7 +21,6 @@
    5256557804  * Some functions are also used for Win16 (MS-Windows 3.1).
     
    5257057809 
    5257157810 #include <conio.h>
     57811@@ -551,15 +550,15 @@
     57812 #endif
     57813 
     57814 /*
     57815- * Return amount of memory currently available.
     57816+ * Return amount of memory currently available in Kbyte.
     57817  */
     57818     long_u
     57819 mch_avail_mem(int special)
     57820 {
     57821 #ifdef DJGPP
     57822-    return _go32_dpmi_remaining_virtual_memory();
     57823+    return _go32_dpmi_remaining_virtual_memory() >> 10;
     57824 #else
     57825-    return coreleft();
     57826+    return coreleft() >> 10;
     57827 #endif
     57828 }
     57829 
    5257257830@@ -2233,7 +2232,7 @@
    5257357831     void
     
    5259557853        /* Did we get anything? */
    5259657854diff -Naur vim73.orig/src/os_mswin.c vim73/src/os_mswin.c
    52597 --- vim73.orig/src/os_mswin.c   2012-06-03 23:09:52.952007375 +0000
    52598 +++ vim73/src/os_mswin.c        2012-06-03 23:09:54.944060388 +0000
     57855--- vim73.orig/src/os_mswin.c   2010-07-27 19:39:05.000000000 +0000
     57856+++ vim73/src/os_mswin.c        2012-07-20 20:31:13.320974919 +0000
    5259957857@@ -22,7 +22,6 @@
    5260057858 # endif
     
    5301958277 
    5302058278diff -Naur vim73.orig/src/os_qnx.c vim73/src/os_qnx.c
    53021 --- vim73.orig/src/os_qnx.c     2012-06-03 23:09:52.948007269 +0000
    53022 +++ vim73/src/os_qnx.c  2012-06-03 23:09:54.784056130 +0000
     58279--- vim73.orig/src/os_qnx.c     2010-05-24 09:42:44.000000000 +0000
     58280+++ vim73/src/os_qnx.c  2012-07-20 20:31:12.814307887 +0000
    5302358281@@ -24,10 +24,10 @@
    5302458282 #if defined(FEAT_GUI_PHOTON)
     
    5318558443 #endif
    5318658444diff -Naur vim73.orig/src/os_riscos.c vim73/src/os_riscos.c
    53187 --- vim73.orig/src/os_riscos.c  2012-06-03 23:09:52.940007057 +0000
     58445--- vim73.orig/src/os_riscos.c  2010-05-15 11:04:08.000000000 +0000
    5318858446+++ vim73/src/os_riscos.c       1970-01-01 00:00:00.000000000 +0000
    5318958447@@ -1,1292 +0,0 @@
     
    5448159739-}
    5448259740diff -Naur vim73.orig/src/os_riscos.h vim73/src/os_riscos.h
    54483 --- vim73.orig/src/os_riscos.h  2012-06-03 23:09:52.940007057 +0000
     59741--- vim73.orig/src/os_riscos.h  2010-05-23 12:16:06.000000000 +0000
    5448459742+++ vim73/src/os_riscos.h       1970-01-01 00:00:00.000000000 +0000
    5448559743@@ -1,166 +0,0 @@
     
    5465159909-#define mch_setenv(name, val, x) setenv(name, val, x)
    5465259910diff -Naur vim73.orig/src/os_unix.c vim73/src/os_unix.c
    54653 --- vim73.orig/src/os_unix.c    2012-06-03 23:09:52.940007057 +0000
    54654 +++ vim73/src/os_unix.c 2012-06-03 23:09:55.740081571 +0000
     59911--- vim73.orig/src/os_unix.c    2010-08-08 13:14:04.000000000 +0000
     59912+++ vim73/src/os_unix.c 2012-07-20 20:31:15.784310019 +0000
    5465559913@@ -154,6 +154,13 @@
    5465659914 
     
    5526560523        return FALSE;
    5526660524diff -Naur vim73.orig/src/os_unix.h vim73/src/os_unix.h
    55267 --- vim73.orig/src/os_unix.h    2012-06-03 23:09:52.920006524 +0000
    55268 +++ vim73/src/os_unix.h 2012-06-03 23:09:53.744028453 +0000
     60525--- vim73.orig/src/os_unix.h    2010-05-23 12:16:14.000000000 +0000
     60526+++ vim73/src/os_unix.h 2012-07-20 20:31:09.687638968 +0000
    5526960527@@ -184,10 +184,6 @@
    5527060528 
     
    5527960537 #endif
    5528060538diff -Naur vim73.orig/src/os_win16.c vim73/src/os_win16.c
    55281 --- vim73.orig/src/os_win16.c   2012-06-03 23:09:52.920006524 +0000
    55282 +++ vim73/src/os_win16.c        2012-06-03 23:09:54.876058577 +0000
     60539--- vim73.orig/src/os_win16.c   2010-06-26 04:03:31.000000000 +0000
     60540+++ vim73/src/os_win16.c        2012-07-20 20:31:17.634311344 +0000
    5528360541@@ -20,13 +20,11 @@
    5528460542 # pragma warn -obs
     
    5530760565                {
    5530860566                    PostQuitMessage(msg.wParam);
     60567@@ -381,13 +379,13 @@
     60568 
     60569 
     60570 /*
     60571- * How much memory is available?
     60572+ * How much memory is available in Kbyte?
     60573  */
     60574     long_u
     60575 mch_avail_mem(
     60576     int special)
     60577 {
     60578-    return GetFreeSpace(0);
     60579+    return GetFreeSpace(0) >> 10;
     60580 }
     60581 
     60582 
    5530960583diff -Naur vim73.orig/src/os_win32.c vim73/src/os_win32.c
    55310 --- vim73.orig/src/os_win32.c   2012-06-03 23:09:52.956007482 +0000
    55311 +++ vim73/src/os_win32.c        2012-06-03 23:09:55.524075823 +0000
     60584--- vim73.orig/src/os_win32.c   2010-07-14 14:49:36.000000000 +0000
     60585+++ vim73/src/os_win32.c        2012-07-20 20:31:18.294311815 +0000
    5531260586@@ -20,7 +20,6 @@
    5531360587  * Roger Knobbe <rogerk@wonderware.com> did the initial port of Vim 3.0.
     
    5534160615 /* Win32 Console handles for input and output */
    5534260616 static HANDLE g_hConIn  = INVALID_HANDLE_VALUE;
    55343 @@ -206,42 +212,96 @@
     60617@@ -206,55 +212,109 @@
    5534460618 static int suppress_winsize = 1;       /* don't fiddle with console */
    5534560619 #endif
     
    5541960693+    int            l = (int)STRLEN(p);
    5542060694+    int            n;
    55421 +
     60695 
     60696-       did_set_PATH = TRUE;
    5542260697+    while (*p != NUL)
    5542360698+    {
     
    5543160706+       p += n;
    5543260707+       l -= n;
    55433 +    }
    55434 +}
    55435 +
     60708     }
     60709 }
     60710 
    5543660711+/*
    5543760712+ * Load library "name".
     
    5544260717+    HINSTANCE dll = NULL;
    5544360718+    char old_dir[MAXPATHL];
    55444  
    55445 -       did_set_PATH = TRUE;
     60719+
    5544660720+    if (exe_path == NULL)
    5544760721+       get_exe_name();
     
    5545460728+       dll = LoadLibrary(name);
    5545560729+       mch_chdir(old_dir);
    55456      }
     60730+    }
    5545760731+    return dll;
    55458  }
    55459  
     60732+}
     60733+
    5546060734 #if defined(DYNAMIC_GETTEXT) || defined(PROTO)
    55461 @@ -254,7 +314,7 @@
     60735 # ifndef GETTEXT_DLL
     60736 #  define GETTEXT_DLL "libintl.dll"
     60737 # endif
     60738-/* Dummy funcitons */
     60739+/* Dummy functions */
     60740 static char *null_libintl_gettext(const char *);
     60741 static char *null_libintl_textdomain(const char *);
    5546260742 static char *null_libintl_bindtextdomain(const char *, const char *);
    5546360743 static char *null_libintl_bind_textdomain_codeset(const char *, const char *);
     
    5554160821     }
    5554260822 }
     60823@@ -1342,7 +1409,7 @@
     60824 
     60825 
     60826 /*
     60827- * mch_inchar(): low-level input funcion.
     60828+ * mch_inchar(): low-level input function.
     60829  * Get one or more characters from the keyboard or the mouse.
     60830  * If time == 0, do not wait for characters.
     60831  * If time == n, wait a short time for characters.
    5554360832@@ -1615,6 +1682,35 @@
    5554460833     return TRUE;
     
    5587261161+    ret = PeekNamedPipe(g_hChildStd_OUT_Rd, /* pipe to query */
    5587361162+                       NULL,               /* optional buffer */
    55874 +                       0,                  /* buffe size */
     61163+                       0,                  /* buffer size */
    5587561164+                       NULL,               /* number of read bytes */
    5587661165+                       &availableBytes,    /* available bytes total */
     
    5587961168+    repeatCount = 0;
    5588061169+    /* We got real data in the pipe, read it */
    55881 +    while (ret != 0 && availableBytes > 0 && availableBytes > 0)
     61170+    while (ret != 0 && availableBytes > 0)
    5588261171+    {
    5588361172+       repeatCount++;
     
    5605961348+                 NULL,                 /* Thread security attributes */
    5606061349+
    56061 +                 // this command can be litigeous, handle inheritence was
     61350+                 // this command can be litigious, handle inheritance was
    5606261351+                 // deactivated for pending temp file, but, if we deactivate
    5606361352+                 // it, the pipes don't work for some reason.
     
    5653261821            )
    5653361822     {
     61823@@ -4273,18 +4992,34 @@
     61824 
     61825 
     61826 /*
     61827- * How much memory is available?
     61828+ * How much memory is available in Kbyte?
     61829  * Return sum of available physical and page file memory.
     61830  */
     61831 /*ARGSUSED*/
     61832     long_u
     61833 mch_avail_mem(int special)
     61834 {
     61835-    MEMORYSTATUS       ms;
     61836+#ifdef MEMORYSTATUSEX
     61837+    PlatformId();
     61838+    if (g_PlatformId == VER_PLATFORM_WIN32_NT)
     61839+    {
     61840+       MEMORYSTATUSEX  ms;
     61841+
     61842+       /* Need to use GlobalMemoryStatusEx() when there is more memory than
     61843+        * what fits in 32 bits. But it's not always available. */
     61844+       ms.dwLength = sizeof(MEMORYSTATUSEX);
     61845+       GlobalMemoryStatusEx(&ms);
     61846+       return (long_u)((ms.ullAvailPhys + ms.ullAvailPageFile) >> 10);
     61847+    }
     61848+    else
     61849+#endif
     61850+    {
     61851+       MEMORYSTATUS    ms;
     61852 
     61853-    ms.dwLength = sizeof(MEMORYSTATUS);
     61854-    GlobalMemoryStatus(&ms);
     61855-    return (long_u) (ms.dwAvailPhys + ms.dwAvailPageFile);
     61856+       ms.dwLength = sizeof(MEMORYSTATUS);
     61857+       GlobalMemoryStatus(&ms);
     61858+       return (long_u)((ms.dwAvailPhys + ms.dwAvailPageFile) >> 10);
     61859+    }
     61860 }
     61861 
     61862 #ifdef FEAT_MBYTE
    5653461863diff -Naur vim73.orig/src/os_win32.h vim73/src/os_win32.h
    56535 --- vim73.orig/src/os_win32.h   2012-06-03 23:09:52.940007057 +0000
    56536 +++ vim73/src/os_win32.h        2012-06-03 23:09:54.588050913 +0000
     61864--- vim73.orig/src/os_win32.h   2010-05-31 19:50:24.000000000 +0000
     61865+++ vim73/src/os_win32.h        2012-07-20 20:31:12.314307528 +0000
    5653761866@@ -191,5 +191,19 @@
    5653861867 #ifdef __BORLANDC__
     
    5655761886 #endif
    5655861887diff -Naur vim73.orig/src/popupmnu.c vim73/src/popupmnu.c
    56559 --- vim73.orig/src/popupmnu.c   2012-06-03 23:09:52.948007269 +0000
    56560 +++ vim73/src/popupmnu.c        2012-06-03 23:09:53.272015892 +0000
     61888--- vim73.orig/src/popupmnu.c   2010-08-08 13:14:58.000000000 +0000
     61889+++ vim73/src/popupmnu.c        2012-07-20 20:31:08.150971192 +0000
    5656161890@@ -558,8 +558,11 @@
    5656261891            win_T       *curwin_save = curwin;
     
    5657361902 
    5657461903diff -Naur vim73.orig/src/proto/buffer.pro vim73/src/proto/buffer.pro
    56575 --- vim73.orig/src/proto/buffer.pro     2012-06-03 23:09:52.948007269 +0000
    56576 +++ vim73/src/proto/buffer.pro  2012-06-03 23:09:55.472074438 +0000
     61904--- vim73.orig/src/proto/buffer.pro     2010-08-15 12:30:19.000000000 +0000
     61905+++ vim73/src/proto/buffer.pro  2012-07-20 20:31:18.014311616 +0000
    5657761906@@ -1,7 +1,7 @@
    5657861907 /* buffer.c */
     
    5658461913 void buf_freeall __ARGS((buf_T *buf, int flags));
    5658561914 void goto_buffer __ARGS((exarg_T *eap, int start, int dir, int count));
     61915@@ -60,6 +60,7 @@
     61916 int buf_findsign_id __ARGS((buf_T *buf, linenr_T lnum));
     61917 int buf_findsigntype_id __ARGS((buf_T *buf, linenr_T lnum, int typenr));
     61918 int buf_signcount __ARGS((buf_T *buf, linenr_T lnum));
     61919+void buf_delete_signs __ARGS((buf_T *buf));
     61920 void buf_delete_all_signs __ARGS((void));
     61921 void sign_list_placed __ARGS((buf_T *rbuf));
     61922 void sign_mark_adjust __ARGS((linenr_T line1, linenr_T line2, long amount, long amount_after));
    5658661923diff -Naur vim73.orig/src/proto/edit.pro vim73/src/proto/edit.pro
    56587 --- vim73.orig/src/proto/edit.pro       2012-06-03 23:09:52.944007163 +0000
    56588 +++ vim73/src/proto/edit.pro    2012-06-03 23:09:55.816083593 +0000
     61924--- vim73.orig/src/proto/edit.pro       2010-08-15 12:30:22.000000000 +0000
     61925+++ vim73/src/proto/edit.pro    2012-07-20 20:31:16.054310214 +0000
    5658961926@@ -39,4 +39,5 @@
    5659061927 int hkmap __ARGS((int c));
     
    5659461931 /* vim: set ft=c : */
    5659561932diff -Naur vim73.orig/src/proto/eval.pro vim73/src/proto/eval.pro
    56596 --- vim73.orig/src/proto/eval.pro       2012-06-03 23:09:52.944007163 +0000
    56597 +++ vim73/src/proto/eval.pro    2012-06-03 23:09:54.748055172 +0000
     61933--- vim73.orig/src/proto/eval.pro       2010-08-15 12:30:23.000000000 +0000
     61934+++ vim73/src/proto/eval.pro    2012-07-20 20:31:18.257645124 +0000
    5659861935@@ -23,6 +23,7 @@
    5659961936 list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
     
    5660461941 long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
    5660561942 void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
    56606 @@ -52,6 +53,7 @@
     61943@@ -45,13 +46,23 @@
     61944 list_T *list_alloc __ARGS((void));
     61945 void list_unref __ARGS((list_T *l));
     61946 void list_free __ARGS((list_T *l, int recurse));
     61947+listitem_T *listitem_alloc __ARGS((void));
     61948+void listitem_remove __ARGS((list_T *l, listitem_T *item));
     61949 dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
     61950+listitem_T *list_find __ARGS((list_T *l, long n));
     61951 char_u *list_find_str __ARGS((list_T *l, long idx));
     61952+void list_append __ARGS((list_T *l, listitem_T *item));
     61953 int list_append_tv __ARGS((list_T *l, typval_T *tv));
     61954 int list_append_dict __ARGS((list_T *list, dict_T *dict));
    5660761955 int list_append_string __ARGS((list_T *l, char_u *str, int len));
     61956+int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
     61957+void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
    5660861958 int garbage_collect __ARGS((void));
     61959+void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
     61960+void set_ref_in_list __ARGS((list_T *l, int copyID));
     61961+void set_ref_in_item __ARGS((typval_T *tv, int copyID));
    5660961962 dict_T *dict_alloc __ARGS((void));
    5661061963+void dict_unref __ARGS((dict_T *d));
     
    5661261965 void dictitem_free __ARGS((dictitem_T *item));
    5661361966 int dict_add __ARGS((dict_T *d, dictitem_T *item));
     61967@@ -62,6 +73,7 @@
     61968 long get_dict_number __ARGS((dict_T *d, char_u *key));
     61969 char_u *get_function_name __ARGS((expand_T *xp, int idx));
     61970 char_u *get_expr_name __ARGS((expand_T *xp, int idx));
     61971+int func_call __ARGS((char_u *name, typval_T *args, dict_T *selfdict, typval_T *rettv));
     61972 long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit));
     61973 void set_vim_var_nr __ARGS((int idx, long val));
     61974 long get_vim_var_nr __ARGS((int idx));
     61975@@ -81,7 +93,7 @@
     61976 char_u *get_tv_string_chk __ARGS((typval_T *varp));
     61977 char_u *get_var_value __ARGS((char_u *name));
     61978 void new_script_vars __ARGS((scid_T id));
     61979-void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var));
     61980+void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var, int scope));
     61981 void vars_clear __ARGS((hashtab_T *ht));
     61982 void copy_tv __ARGS((typval_T *from, typval_T *to));
     61983 void ex_echo __ARGS((exarg_T *eap));
     61984@@ -92,6 +104,8 @@
     61985 void func_dump_profile __ARGS((FILE *fd));
     61986 char_u *get_user_func_name __ARGS((expand_T *xp, int idx));
     61987 void ex_delfunction __ARGS((exarg_T *eap));
     61988+void func_unref __ARGS((char_u *name));
     61989+void func_ref __ARGS((char_u *name));
     61990 void ex_return __ARGS((exarg_T *eap));
     61991 int do_return __ARGS((exarg_T *eap, int reanimate, int is_cmd, void *rettv));
     61992 void discard_pending_return __ARGS((void *rettv));
    5661461993diff -Naur vim73.orig/src/proto/ex_cmds.pro vim73/src/proto/ex_cmds.pro
    56615 --- vim73.orig/src/proto/ex_cmds.pro    2012-06-03 23:09:52.944007163 +0000
    56616 +++ vim73/src/proto/ex_cmds.pro 2012-06-03 23:09:55.780082635 +0000
     61994--- vim73.orig/src/proto/ex_cmds.pro    2010-08-15 12:30:24.000000000 +0000
     61995+++ vim73/src/proto/ex_cmds.pro 2012-07-20 20:31:15.897643435 +0000
    5661761996@@ -23,6 +23,7 @@
    5661861997 void ex_update __ARGS((exarg_T *eap));
     
    5662462003 int not_writing __ARGS((void));
    5662562004diff -Naur vim73.orig/src/proto/ex_cmds2.pro vim73/src/proto/ex_cmds2.pro
    56626 --- vim73.orig/src/proto/ex_cmds2.pro   2012-06-03 23:09:52.944007163 +0000
    56627 +++ vim73/src/proto/ex_cmds2.pro        2012-06-03 23:09:54.204040695 +0000
     62005--- vim73.orig/src/proto/ex_cmds2.pro   2010-08-15 12:30:25.000000000 +0000
     62006+++ vim73/src/proto/ex_cmds2.pro        2012-07-20 20:31:17.374311158 +0000
     62007@@ -42,7 +42,7 @@
     62008 int check_fname __ARGS((void));
     62009 int buf_write_all __ARGS((buf_T *buf, int forceit));
     62010 int get_arglist __ARGS((garray_T *gap, char_u *str));
     62011-int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp));
     62012+int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp, int wig));
     62013 void set_arglist __ARGS((char_u *str));
     62014 void check_arg_idx __ARGS((win_T *win));
     62015 void ex_args __ARGS((exarg_T *eap));
    5662862016@@ -83,5 +83,7 @@
    5662962017 char_u *get_mess_lang __ARGS((void));
     
    5663562023 /* vim: set ft=c : */
    5663662024diff -Naur vim73.orig/src/proto/ex_docmd.pro vim73/src/proto/ex_docmd.pro
    56637 --- vim73.orig/src/proto/ex_docmd.pro   2012-06-03 23:09:52.944007163 +0000
    56638 +++ vim73/src/proto/ex_docmd.pro        2012-06-03 23:09:55.316070287 +0000
     62025--- vim73.orig/src/proto/ex_docmd.pro   2010-08-15 12:30:26.000000000 +0000
     62026+++ vim73/src/proto/ex_docmd.pro        2012-07-20 20:31:14.470975744 +0000
    5663962027@@ -1,7 +1,7 @@
    5664062028 /* ex_docmd.c */
     
    5664762035 int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
    5664862036diff -Naur vim73.orig/src/proto/ex_getln.pro vim73/src/proto/ex_getln.pro
    56649 --- vim73.orig/src/proto/ex_getln.pro   2012-06-03 23:09:52.944007163 +0000
    56650 +++ vim73/src/proto/ex_getln.pro        2012-06-03 23:09:54.204040695 +0000
     62037--- vim73.orig/src/proto/ex_getln.pro   2010-08-15 12:30:27.000000000 +0000
     62038+++ vim73/src/proto/ex_getln.pro        2012-07-20 20:31:11.154306693 +0000
    5665162039@@ -31,7 +31,7 @@
    5665262040 char_u *addstar __ARGS((char_u *fname, int len, int context));
     
    5665962047 int get_histtype __ARGS((char_u *name));
    5666062048diff -Naur vim73.orig/src/proto/fileio.pro vim73/src/proto/fileio.pro
    56661 --- vim73.orig/src/proto/fileio.pro     2012-06-03 23:09:52.944007163 +0000
    56662 +++ vim73/src/proto/fileio.pro  2012-06-03 23:09:55.536076142 +0000
     62049--- vim73.orig/src/proto/fileio.pro     2010-08-15 12:30:28.000000000 +0000
     62050+++ vim73/src/proto/fileio.pro  2012-07-20 20:31:15.164309576 +0000
    5666362051@@ -35,6 +35,7 @@
    5666462052 void do_autocmd __ARGS((char_u *arg, int forceit));
     
    5668562073 /* vim: set ft=c : */
    5668662074diff -Naur vim73.orig/src/proto/getchar.pro vim73/src/proto/getchar.pro
    56687 --- vim73.orig/src/proto/getchar.pro    2012-06-03 23:09:52.944007163 +0000
    56688 +++ vim73/src/proto/getchar.pro 2012-06-03 23:09:55.352071245 +0000
     62075--- vim73.orig/src/proto/getchar.pro    2010-08-15 12:30:29.000000000 +0000
     62076+++ vim73/src/proto/getchar.pro 2012-07-20 20:31:14.557642473 +0000
    5668962077@@ -4,8 +4,9 @@
    5669062078 char_u *get_inserted __ARGS((void));
     
    5671662104 /* vim: set ft=c : */
    5671762105diff -Naur vim73.orig/src/proto/gui_athena.pro vim73/src/proto/gui_athena.pro
    56718 --- vim73.orig/src/proto/gui_athena.pro 2012-06-03 23:09:52.944007163 +0000
    56719 +++ vim73/src/proto/gui_athena.pro      2012-06-03 23:09:53.620025153 +0000
     62106--- vim73.orig/src/proto/gui_athena.pro 2010-08-15 12:31:06.000000000 +0000
     62107+++ vim73/src/proto/gui_athena.pro      2012-07-20 20:31:09.297638687 +0000
    5672062108@@ -27,5 +27,5 @@
    5672162109 void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
     
    5672662114 /* vim: set ft=c : */
    5672762115diff -Naur vim73.orig/src/proto/gui_gtk.pro vim73/src/proto/gui_gtk.pro
    56728 --- vim73.orig/src/proto/gui_gtk.pro    2012-06-03 23:09:52.944007163 +0000
    56729 +++ vim73/src/proto/gui_gtk.pro 2012-06-03 23:09:53.620025153 +0000
     62116--- vim73.orig/src/proto/gui_gtk.pro    2010-08-15 12:31:03.000000000 +0000
     62117+++ vim73/src/proto/gui_gtk.pro 2012-07-20 20:31:09.297638687 +0000
    5673062118@@ -13,7 +13,7 @@
    5673162119 void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
     
    5673862126 void gui_mch_find_dialog __ARGS((exarg_T *eap));
    5673962127diff -Naur vim73.orig/src/proto/gui_gtk_x11.pro vim73/src/proto/gui_gtk_x11.pro
    56740 --- vim73.orig/src/proto/gui_gtk_x11.pro        2012-06-03 23:09:52.944007163 +0000
    56741 +++ vim73/src/proto/gui_gtk_x11.pro     2012-06-03 23:09:55.860084763 +0000
     62128--- vim73.orig/src/proto/gui_gtk_x11.pro        2010-08-15 12:31:07.000000000 +0000
     62129+++ vim73/src/proto/gui_gtk_x11.pro     2012-07-20 20:31:16.160976957 +0000
    5674262130@@ -4,6 +4,7 @@
    5674362131 void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
     
    5675762145 void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
    5675862146diff -Naur vim73.orig/src/proto/gui_mac.pro vim73/src/proto/gui_mac.pro
    56759 --- vim73.orig/src/proto/gui_mac.pro    2012-06-03 23:09:52.944007163 +0000
    56760 +++ vim73/src/proto/gui_mac.pro 2012-06-03 23:09:53.620025153 +0000
     62147--- vim73.orig/src/proto/gui_mac.pro    2010-08-14 19:40:45.000000000 +0000
     62148+++ vim73/src/proto/gui_mac.pro 2012-07-20 20:31:09.297638687 +0000
    5676162149@@ -81,7 +81,7 @@
    5676262150 int gui_mch_get_mouse_y __ARGS((void));
     
    5676962157 void gui_mch_show_tabline __ARGS((int showit));
    5677062158diff -Naur vim73.orig/src/proto/gui_motif.pro vim73/src/proto/gui_motif.pro
    56771 --- vim73.orig/src/proto/gui_motif.pro  2012-06-03 23:09:52.944007163 +0000
    56772 +++ vim73/src/proto/gui_motif.pro       2012-06-03 23:09:53.620025153 +0000
     62159--- vim73.orig/src/proto/gui_motif.pro  2010-08-15 12:31:04.000000000 +0000
     62160+++ vim73/src/proto/gui_motif.pro       2012-07-20 20:31:09.297638687 +0000
    5677362161@@ -29,7 +29,7 @@
    5677462162 void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
     
    5678162169 void gui_mch_show_toolbar __ARGS((int showit));
    5678262170diff -Naur vim73.orig/src/proto/gui_photon.pro vim73/src/proto/gui_photon.pro
    56783 --- vim73.orig/src/proto/gui_photon.pro 2012-06-03 23:09:52.944007163 +0000
    56784 +++ vim73/src/proto/gui_photon.pro      2012-06-03 23:09:53.620025153 +0000
     62171--- vim73.orig/src/proto/gui_photon.pro 2010-08-15 12:31:10.000000000 +0000
     62172+++ vim73/src/proto/gui_photon.pro      2012-07-20 20:31:09.297638687 +0000
    5678562173@@ -8,7 +8,7 @@
    5678662174 void gui_mch_update __ARGS((void));
     
    5679362181 void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
    5679462182diff -Naur vim73.orig/src/proto/gui_riscos.pro vim73/src/proto/gui_riscos.pro
    56795 --- vim73.orig/src/proto/gui_riscos.pro 2012-06-03 23:09:52.944007163 +0000
     62183--- vim73.orig/src/proto/gui_riscos.pro 2010-05-15 11:04:08.000000000 +0000
    5679662184+++ vim73/src/proto/gui_riscos.pro      1970-01-01 00:00:00.000000000 +0000
    5679762185@@ -1,66 +0,0 @@
     
    5686362251-/* vim: set ft=c : */
    5686462252diff -Naur vim73.orig/src/proto/gui_w16.pro vim73/src/proto/gui_w16.pro
    56865 --- vim73.orig/src/proto/gui_w16.pro    2012-06-03 23:09:52.944007163 +0000
    56866 +++ vim73/src/proto/gui_w16.pro 2012-06-03 23:09:53.620025153 +0000
     62253--- vim73.orig/src/proto/gui_w16.pro    2010-08-15 12:31:09.000000000 +0000
     62254+++ vim73/src/proto/gui_w16.pro 2012-07-20 20:31:09.300972023 +0000
    5686762255@@ -74,6 +74,6 @@
    5686862256 void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
     
    5687462262 /* vim: set ft=c : */
    5687562263diff -Naur vim73.orig/src/proto/gui_w32.pro vim73/src/proto/gui_w32.pro
    56876 --- vim73.orig/src/proto/gui_w32.pro    2012-06-03 23:09:52.944007163 +0000
    56877 +++ vim73/src/proto/gui_w32.pro 2012-06-03 23:09:53.620025153 +0000
     62264--- vim73.orig/src/proto/gui_w32.pro    2010-08-15 12:31:09.000000000 +0000
     62265+++ vim73/src/proto/gui_w32.pro 2012-07-20 20:31:09.300972023 +0000
    5687862266@@ -81,7 +81,7 @@
    5687962267 void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
     
    5688662274 void *gui_mch_register_sign __ARGS((char_u *signfile));
    5688762275diff -Naur vim73.orig/src/proto/if_lua.pro vim73/src/proto/if_lua.pro
    56888 --- vim73.orig/src/proto/if_lua.pro     2012-06-03 23:09:52.948007269 +0000
    56889 +++ vim73/src/proto/if_lua.pro  2012-06-03 23:09:55.704080614 +0000
     62276--- vim73.orig/src/proto/if_lua.pro     2010-07-22 19:29:02.000000000 +0000
     62277+++ vim73/src/proto/if_lua.pro  2012-07-20 20:31:15.690976620 +0000
    5689062278@@ -6,4 +6,6 @@
    5689162279 void ex_luafile __ARGS((exarg_T *eap));
     
    5689662284 /* vim: set ft=c : */
    5689762285diff -Naur vim73.orig/src/proto/if_mzsch.pro vim73/src/proto/if_mzsch.pro
    56898 --- vim73.orig/src/proto/if_mzsch.pro   2012-06-03 23:09:52.944007163 +0000
    56899 +++ vim73/src/proto/if_mzsch.pro        2012-06-03 23:09:55.416072949 +0000
     62286--- vim73.orig/src/proto/if_mzsch.pro   2010-05-15 11:04:08.000000000 +0000
     62287+++ vim73/src/proto/if_mzsch.pro        2012-07-20 20:31:14.807642652 +0000
    5690062288@@ -14,6 +14,7 @@
    5690162289 void mzvim_reset_timer __ARGS((void));
     
    5690762295+int vim_main2 __ARGS((int argc, char **argv));
    5690862296 /* vim: set ft=c : */
     62297diff -Naur vim73.orig/src/proto/if_python.pro vim73/src/proto/if_python.pro
     62298--- vim73.orig/src/proto/if_python.pro  2010-08-15 12:30:35.000000000 +0000
     62299+++ vim73/src/proto/if_python.pro       2012-07-20 20:31:17.334311130 +0000
     62300@@ -6,4 +6,6 @@
     62301 void ex_pyfile __ARGS((exarg_T *eap));
     62302 void python_buffer_free __ARGS((buf_T *buf));
     62303 void python_window_free __ARGS((win_T *win));
     62304+void do_pyeval __ARGS((char_u *str, typval_T *rettv));
     62305+void set_ref_in_python __ARGS((int copyID));
     62306 /* vim: set ft=c : */
     62307diff -Naur vim73.orig/src/proto/if_python3.pro vim73/src/proto/if_python3.pro
     62308--- vim73.orig/src/proto/if_python3.pro 2010-08-15 12:30:36.000000000 +0000
     62309+++ vim73/src/proto/if_python3.pro      2012-07-20 20:31:17.337644466 +0000
     62310@@ -6,4 +6,6 @@
     62311 void ex_py3file __ARGS((exarg_T *eap));
     62312 void python3_buffer_free __ARGS((buf_T *buf));
     62313 void python3_window_free __ARGS((win_T *win));
     62314+void do_py3eval __ARGS((char_u *str, typval_T *rettv));
     62315+void set_ref_in_python3 __ARGS((int copyID));
     62316 /* vim: set ft=c : */
    5690962317diff -Naur vim73.orig/src/proto/mbyte.pro vim73/src/proto/mbyte.pro
    56910 --- vim73.orig/src/proto/mbyte.pro      2012-06-03 23:09:52.944007163 +0000
    56911 +++ vim73/src/proto/mbyte.pro   2012-06-03 23:09:54.572050488 +0000
     62318--- vim73.orig/src/proto/mbyte.pro      2010-08-15 12:30:44.000000000 +0000
     62319+++ vim73/src/proto/mbyte.pro   2012-07-20 20:31:12.267640827 +0000
    5691262320@@ -2,6 +2,7 @@
    5691362321 int enc_canon_props __ARGS((char_u *name));
     
    5692862336 int mb_charlen_len __ARGS((char_u *str, int len));
    5692962337diff -Naur vim73.orig/src/proto/message.pro vim73/src/proto/message.pro
    56930 --- vim73.orig/src/proto/message.pro    2012-06-03 23:09:52.944007163 +0000
    56931 +++ vim73/src/proto/message.pro 2012-06-03 23:09:55.664079548 +0000
     62338--- vim73.orig/src/proto/message.pro    2010-08-15 12:30:41.000000000 +0000
     62339+++ vim73/src/proto/message.pro 2012-07-20 20:31:15.597643219 +0000
    5693262340@@ -4,7 +4,7 @@
    5693362341 int msg_attr __ARGS((char_u *s, int attr));
     
    5696462372 int vim_dialog_yesno __ARGS((int type, char_u *title, char_u *message, int dflt));
    5696562373 int vim_dialog_yesnocancel __ARGS((int type, char_u *title, char_u *message, int dflt));
     62374diff -Naur vim73.orig/src/proto/misc1.pro vim73/src/proto/misc1.pro
     62375--- vim73.orig/src/proto/misc1.pro      2010-08-15 12:30:42.000000000 +0000
     62376+++ vim73/src/proto/misc1.pro   2012-07-20 20:31:16.614310614 +0000
     62377@@ -6,7 +6,8 @@
     62378 int set_indent __ARGS((int size, int flags));
     62379 int get_number_indent __ARGS((linenr_T lnum));
     62380 int open_line __ARGS((int dir, int flags, int old_indent));
     62381-int get_leader_len __ARGS((char_u *line, char_u **flags, int backward));
     62382+int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int do_skip_space));
     62383+int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
     62384 int plines __ARGS((linenr_T lnum));
     62385 int plines_win __ARGS((win_T *wp, linenr_T lnum, int winheight));
     62386 int plines_nofill __ARGS((linenr_T lnum));
    5696662387diff -Naur vim73.orig/src/proto/misc2.pro vim73/src/proto/misc2.pro
    56967 --- vim73.orig/src/proto/misc2.pro      2012-06-03 23:09:52.944007163 +0000
    56968 +++ vim73/src/proto/misc2.pro   2012-06-03 23:09:55.148065818 +0000
     62388--- vim73.orig/src/proto/misc2.pro      2010-08-15 12:30:42.000000000 +0000
     62389+++ vim73/src/proto/misc2.pro   2012-07-20 20:31:13.947642036 +0000
    5696962390@@ -14,6 +14,7 @@
    5697062391 linenr_T get_cursor_rel_lnum __ARGS((win_T *wp, linenr_T lnum));
     
    5699762418+int has_non_ascii __ARGS((char_u *s));
    5699862419 /* vim: set ft=c : */
     62420diff -Naur vim73.orig/src/proto/ops.pro vim73/src/proto/ops.pro
     62421--- vim73.orig/src/proto/ops.pro        2010-08-15 12:30:45.000000000 +0000
     62422+++ vim73/src/proto/ops.pro     2012-07-20 20:31:16.614310614 +0000
     62423@@ -36,7 +36,7 @@
     62424 int preprocs_left __ARGS((void));
     62425 int get_register_name __ARGS((int num));
     62426 void ex_display __ARGS((exarg_T *eap));
     62427-int do_join __ARGS((long count, int insert_space, int save_undo));
     62428+int do_join __ARGS((long count, int insert_space, int save_undo, int use_formatoptions));
     62429 void op_format __ARGS((oparg_T *oap, int keep_cursor));
     62430 void op_formatexpr __ARGS((oparg_T *oap));
     62431 int fex_format __ARGS((linenr_T lnum, long count, int c));
    5699962432diff -Naur vim73.orig/src/proto/option.pro vim73/src/proto/option.pro
    57000 --- vim73.orig/src/proto/option.pro     2012-06-03 23:09:52.944007163 +0000
    57001 +++ vim73/src/proto/option.pro  2012-06-03 23:09:53.628025365 +0000
     62433--- vim73.orig/src/proto/option.pro     2010-08-15 12:30:46.000000000 +0000
     62434+++ vim73/src/proto/option.pro  2012-07-20 20:31:09.320972037 +0000
    5700262435@@ -54,6 +54,6 @@
    5700362436 int option_was_set __ARGS((char_u *name));
     
    5700962442 /* vim: set ft=c : */
    5701062443diff -Naur vim73.orig/src/proto/os_riscos.pro vim73/src/proto/os_riscos.pro
    57011 --- vim73.orig/src/proto/os_riscos.pro  2012-06-03 23:09:52.944007163 +0000
     62444--- vim73.orig/src/proto/os_riscos.pro  2010-08-15 12:31:16.000000000 +0000
    5701262445+++ vim73/src/proto/os_riscos.pro       1970-01-01 00:00:00.000000000 +0000
    5701362446@@ -1,49 +0,0 @@
     
    5706262495-/* vim: set ft=c : */
    5706362496diff -Naur vim73.orig/src/proto/os_win32.pro vim73/src/proto/os_win32.pro
    57064 --- vim73.orig/src/proto/os_win32.pro   2012-06-03 23:09:52.944007163 +0000
    57065 +++ vim73/src/proto/os_win32.pro        2012-06-03 23:09:54.016035691 +0000
     62497--- vim73.orig/src/proto/os_win32.pro   2010-08-15 12:31:14.000000000 +0000
     62498+++ vim73/src/proto/os_win32.pro        2012-07-20 20:31:10.627639646 +0000
    5706662499@@ -1,4 +1,5 @@
    5706762500 /* os_win32.c */
     
    5708162514 int mch_nodetype __ARGS((char_u *name));
    5708262515diff -Naur vim73.orig/src/proto/term.pro vim73/src/proto/term.pro
    57083 --- vim73.orig/src/proto/term.pro       2012-06-03 23:09:52.944007163 +0000
    57084 +++ vim73/src/proto/term.pro    2012-06-03 23:09:55.364071565 +0000
     62516--- vim73.orig/src/proto/term.pro       2010-08-15 12:30:56.000000000 +0000
     62517+++ vim73/src/proto/term.pro    2012-07-20 20:31:14.587642496 +0000
    5708562518@@ -50,7 +50,7 @@
    5708662519 char_u *get_termcode __ARGS((int i));
     
    5709262525 int find_term_bykeys __ARGS((char_u *src));
    5709362526 void show_termcodes __ARGS((void));
     62527diff -Naur vim73.orig/src/proto/ui.pro vim73/src/proto/ui.pro
     62528--- vim73.orig/src/proto/ui.pro 2010-08-15 12:30:57.000000000 +0000
     62529+++ vim73/src/proto/ui.pro      2012-07-20 20:31:18.070978324 +0000
     62530@@ -11,17 +11,17 @@
     62531 void ui_new_shellsize __ARGS((void));
     62532 void ui_breakcheck __ARGS((void));
     62533 void clip_init __ARGS((int can_use));
     62534-void clip_update_selection __ARGS((void));
     62535+void clip_update_selection __ARGS((VimClipboard *clip));
     62536 void clip_own_selection __ARGS((VimClipboard *cbd));
     62537 void clip_lose_selection __ARGS((VimClipboard *cbd));
     62538-void clip_copy_selection __ARGS((void));
     62539 void clip_auto_select __ARGS((void));
     62540-int clip_isautosel __ARGS((void));
     62541+int clip_isautosel_star __ARGS((void));
     62542+int clip_isautosel_plus __ARGS((void));
     62543 void clip_modeless __ARGS((int button, int is_click, int is_drag));
     62544 void clip_start_selection __ARGS((int col, int row, int repeated_click));
     62545 void clip_process_selection __ARGS((int button, int col, int row, int_u repeated_click));
     62546 void clip_may_redraw_selection __ARGS((int row, int col, int len));
     62547-void clip_clear_selection __ARGS((void));
     62548+void clip_clear_selection __ARGS((VimClipboard *cbd));
     62549 void clip_may_clear_selection __ARGS((int row1, int row2));
     62550 void clip_scroll_selection __ARGS((int rows));
     62551 void clip_copy_modeless_selection __ARGS((int both));
    5709462552diff -Naur vim73.orig/src/proto/window.pro vim73/src/proto/window.pro
    57095 --- vim73.orig/src/proto/window.pro     2012-06-03 23:09:52.944007163 +0000
    57096 +++ vim73/src/proto/window.pro  2012-06-03 23:09:55.484074758 +0000
     62553--- vim73.orig/src/proto/window.pro     2010-08-15 12:30:59.000000000 +0000
     62554+++ vim73/src/proto/window.pro  2012-07-20 20:31:18.337645181 +0000
    5709762555@@ -1,13 +1,14 @@
    5709862556 /* window.c */
     
    5711162569 void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
    5711262570 void win_free_all __ARGS((void));
     62571@@ -26,7 +27,7 @@
     62572 tabpage_T *find_tabpage __ARGS((int n));
     62573 int tabpage_index __ARGS((tabpage_T *ftp));
     62574 void goto_tabpage __ARGS((int n));
     62575-void goto_tabpage_tp __ARGS((tabpage_T *tp));
     62576+void goto_tabpage_tp __ARGS((tabpage_T *tp, int trigger_autocmds));
     62577 void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
     62578 void tabpage_move __ARGS((int nr));
     62579 void win_goto __ARGS((win_T *wp));
     62580@@ -50,6 +51,8 @@
     62581 void win_setminheight __ARGS((void));
     62582 void win_drag_status_line __ARGS((win_T *dragwin, int offset));
     62583 void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
     62584+void win_new_height __ARGS((win_T *wp, int height));
     62585+void win_new_width __ARGS((win_T *wp, int width));
     62586 void win_comp_scroll __ARGS((win_T *wp));
     62587 void command_height __ARGS((void));
     62588 void last_status __ARGS((int morewin));
    5711362589diff -Naur vim73.orig/src/proto.h vim73/src/proto.h
    57114 --- vim73.orig/src/proto.h      2012-06-03 23:09:52.940007057 +0000
    57115 +++ vim73/src/proto.h   2012-06-03 23:09:54.096037821 +0000
     62590--- vim73.orig/src/proto.h      2010-07-17 15:28:51.000000000 +0000
     62591+++ vim73/src/proto.h   2012-07-20 20:31:10.807639777 +0000
    5711662592@@ -62,9 +62,6 @@
    5711762593 # ifdef __BEOS__
     
    5713562611 #  endif
    5713662612diff -Naur vim73.orig/src/pty.c vim73/src/pty.c
    57137 --- vim73.orig/src/pty.c        2012-06-03 23:09:52.952007375 +0000
    57138 +++ vim73/src/pty.c     2012-06-03 23:09:55.244068371 +0000
     62613--- vim73.orig/src/pty.c        2010-07-24 18:23:01.000000000 +0000
     62614+++ vim73/src/pty.c     2012-07-20 20:31:14.287642279 +0000
    5713962615@@ -14,6 +14,10 @@
    5714062616  * It has been modified to work better with Vim.
     
    5718862664        close(f);
    5718962665diff -Naur vim73.orig/src/quickfix.c vim73/src/quickfix.c
    57190 --- vim73.orig/src/quickfix.c   2012-06-03 23:09:52.940007057 +0000
    57191 +++ vim73/src/quickfix.c        2012-06-03 23:09:55.964087533 +0000
     62666--- vim73.orig/src/quickfix.c   2010-08-09 20:12:14.000000000 +0000
     62667+++ vim73/src/quickfix.c        2012-07-20 20:31:17.374311158 +0000
    5719262668@@ -126,12 +126,14 @@
    5719362669 static win_T   *qf_find_win __ARGS((qf_info_T *qi));
     
    5759163067     }
    5759263068     if (au_name != NULL)
     63069@@ -3122,7 +3189,7 @@
     63070            ;
     63071 
     63072     /* parse the list of arguments */
     63073-    if (get_arglist_exp(p, &fcount, &fnames) == FAIL)
     63074+    if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL)
     63075        goto theend;
     63076     if (fcount == 0)
     63077     {
    5759363078@@ -3130,6 +3197,11 @@
    5759463079        goto theend;
     
    5795563440        qf_jump(qi, 0, 0, FALSE);
    5795663441diff -Naur vim73.orig/src/regexp.c vim73/src/regexp.c
    57957 --- vim73.orig/src/regexp.c     2012-06-03 23:09:52.956007482 +0000
    57958 +++ vim73/src/regexp.c  2012-06-03 23:09:54.512048891 +0000
     63442--- vim73.orig/src/regexp.c     2010-07-12 20:41:48.000000000 +0000
     63443+++ vim73/src/regexp.c  2012-07-20 20:31:12.114307384 +0000
    5795963444@@ -666,8 +666,12 @@
    5796063445 static void    regc __ARGS((int b));
     
    5834363828            can_f_submatch = FALSE;
    5834463829diff -Naur vim73.orig/src/screen.c vim73/src/screen.c
    58345 --- vim73.orig/src/screen.c     2012-06-03 23:09:52.948007269 +0000
    58346 +++ vim73/src/screen.c  2012-06-03 23:09:55.944087000 +0000
    58347 @@ -764,9 +764,13 @@
     63830--- vim73.orig/src/screen.c     2010-08-13 13:21:27.000000000 +0000
     63831+++ vim73/src/screen.c  2012-07-20 20:31:18.064311652 +0000
     63832@@ -89,6 +89,9 @@
     63833 
     63834 #include "vim.h"
     63835 
     63836+#define MB_FILLER_CHAR '<'  /* character used when a double-width character
     63837+                            * doesn't fit. */
     63838+
     63839 /*
     63840  * The attributes that are actually active for writing to the screen.
     63841  */
     63842@@ -516,8 +519,10 @@
     63843 # endif
     63844 # ifdef FEAT_CLIPBOARD
     63845                /* When Visual area changed, may have to update selection. */
     63846-               if (clip_star.available && clip_isautosel())
     63847-                   clip_update_selection();
     63848+               if (clip_star.available && clip_isautosel_star())
     63849+                   clip_update_selection(&clip_star);
     63850+               if (clip_plus.available && clip_isautosel_plus())
     63851+                   clip_update_selection(&clip_plus);
     63852 # endif
     63853 #ifdef FEAT_GUI
     63854                /* Remove the cursor before starting to do anything, because
     63855@@ -764,9 +769,13 @@
    5834863856            doit = TRUE;
    5834963857     }
     
    5836263870 
    5836363871     /* update all windows that need updating */
    58364 @@ -1633,11 +1637,11 @@
     63872@@ -807,8 +816,10 @@
     63873 
     63874 #ifdef FEAT_CLIPBOARD
     63875     /* When Visual area changed, may have to update selection. */
     63876-    if (clip_star.available && clip_isautosel())
     63877-       clip_update_selection();
     63878+    if (clip_star.available && clip_isautosel_star())
     63879+       clip_update_selection(&clip_star);
     63880+    if (clip_plus.available && clip_isautosel_plus())
     63881+       clip_update_selection(&clip_plus);
     63882 #endif
     63883 
     63884     win_update(wp);
     63885@@ -1633,11 +1644,11 @@
    5836563886             * When at start of changed lines: May scroll following lines
    5836663887             * up or down to minimize redrawing.
     
    5837663897                int             old_rows = 0;
    5837763898                int             new_rows = 0;
    58378 @@ -1864,12 +1868,12 @@
     63899@@ -1864,12 +1875,12 @@
    5837963900            if (row > wp->w_height)     /* past end of screen */
    5838063901            {
     
    5839163912            ++idx;
    5839263913 #ifdef FEAT_FOLDING
    58393 @@ -1986,7 +1990,7 @@
     63914@@ -1986,7 +1997,7 @@
    5839463915            }
    5839563916 #endif
     
    5840063921 
    5840163922        /* make sure the rest of the screen is blank */
    58402 @@ -2001,7 +2005,7 @@
     63923@@ -2001,7 +2012,7 @@
    5840363924     wp->w_old_botfill = wp->w_botfill;
    5840463925 #endif
     
    5840963930        /*
    5841063931         * There is a trick with w_botline.  If we invalidate it on each
    58411 @@ -2317,7 +2321,7 @@
     63932@@ -2317,7 +2328,7 @@
    5841263933                num = (long)lnum;
    5841363934            else
     
    5841863939            sprintf((char *)buf, "%*ld ", w, num);
    5841963940 #ifdef FEAT_RIGHTLEFT
    58420 @@ -2531,7 +2535,9 @@
     63941@@ -2531,7 +2542,9 @@
    5842163942                /* Visual block mode: highlight the chars part of the block */
    5842263943                if (wp->w_old_cursor_fcol + txtcol < (colnr_T)W_WIDTH(wp))
     
    5842963950                    else
    5843063951                        len = W_WIDTH(wp) - txtcol;
    58431 @@ -3405,9 +3411,9 @@
     63952@@ -2991,7 +3004,10 @@
     63953            area_highlighting = TRUE;
     63954            attr = hl_attr(HLF_V);
     63955 #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
     63956-           if (clip_star.available && !clip_star.owned && clip_isautosel())
     63957+           if ((clip_star.available && !clip_star.owned
     63958+                                                    && clip_isautosel_star())
     63959+                   || (clip_plus.available && !clip_plus.owned
     63960+                                                   && clip_isautosel_plus()))
     63961                attr = hl_attr(HLF_VNC);
     63962 #endif
     63963        }
     63964@@ -3222,8 +3238,7 @@
     63965                /* no bad word found at line start, don't check until end of a
     63966                 * word */
     63967                spell_hlf = HLF_COUNT;
     63968-               word_end = (int)(spell_to_word_end(ptr, wp)
     63969-                                                                 - line + 1);
     63970+               word_end = (int)(spell_to_word_end(ptr, wp) - line + 1);
     63971            }
     63972            else
     63973            {
     63974@@ -3405,9 +3420,9 @@
    5843263975 # endif
    5843363976                   )
     
    5844163984 
    5844263985                    /* Draw two cells with the sign value or blank. */
    58443 @@ -3475,8 +3481,7 @@
     63986@@ -3475,8 +3490,7 @@
    5844463987                            num = (long)lnum;
    5844563988                        else
     
    5845163994                        sprintf((char *)extra, "%*ld ",
    5845263995                                                number_width(wp), num);
    58453 @@ -3496,9 +3501,11 @@
     63996@@ -3496,9 +3510,11 @@
    5845463997                    char_attr = hl_attr(HLF_N);
    5845563998 #ifdef FEAT_SYN_HL
     
    5846564008                }
    5846664009            }
    58467 @@ -3559,7 +3566,7 @@
     64010@@ -3559,7 +3575,7 @@
    5846864011        }
    5846964012 
     
    5847464017 #ifdef FEAT_DIFF
    5847564018                                   && filler_todo <= 0
    58476 @@ -4253,7 +4260,7 @@
     64019@@ -4010,7 +4026,7 @@
     64020                if (n_skip > 0 && mb_l > 1 && n_extra == 0)
     64021                {
     64022                    n_extra = 1;
     64023-                   c_extra = '<';
     64024+                   c_extra = MB_FILLER_CHAR;
     64025                    c = ' ';
     64026                    if (area_attr == 0 && search_attr == 0)
     64027                    {
     64028@@ -4253,7 +4269,7 @@
    5847764029                {
    5847864030                    /* tab amount depends on current column */
     
    5848364035                    mb_utf8 = FALSE;    /* don't draw as UTF-8 */
    5848464036 #endif
    58485 @@ -5366,6 +5373,12 @@
     64037@@ -4570,6 +4586,15 @@
     64038            c = lcs_prec;
     64039            lcs_prec_todo = NUL;
     64040 #ifdef FEAT_MBYTE
     64041+           if (has_mbyte && (*mb_char2cells)(mb_c) > 1)
     64042+           {
     64043+               /* Double-width character being overwritten by the "precedes"
     64044+                * character, need to fill up half the character. */
     64045+               c_extra = MB_FILLER_CHAR;
     64046+               n_extra = 1;
     64047+               n_attr = 2;
     64048+               extra_attr = hl_attr(HLF_AT);
     64049+           }
     64050            mb_c = c;
     64051            if (enc_utf8 && (*mb_char2len)(c) > 1)
     64052            {
     64053@@ -5366,6 +5391,12 @@
    5848664054 # define CHAR_CELLS 1
    5848764055 #endif
     
    5849664064     clip_may_clear_selection(row, row);
    5849764065 # endif
    58498 @@ -6436,6 +6449,8 @@
     64066@@ -6436,6 +6467,8 @@
    5849964067     struct     stl_hlrec hltab[STL_MAX_ITEM];
    5850064068     struct     stl_hlrec tabtab[STL_MAX_ITEM];
     
    5850564073     /* setup environment for the task at hand */
    5850664074     if (wp == NULL)
    58507 @@ -6514,16 +6529,31 @@
     64075@@ -6514,16 +6547,31 @@
    5850864076     if (maxwidth <= 0)
    5850964077        return;
     
    5854064108     {
    5854164109 #ifdef FEAT_MBYTE
    58542 @@ -6591,16 +6621,17 @@
     64110@@ -6591,16 +6639,17 @@
    5854364111     int            row, col;
    5854464112     int            attr;
     
    5856564133 }
    5856664134 
    58567 @@ -7827,15 +7858,15 @@
     64135@@ -7827,15 +7876,15 @@
    5856864136 
    5856964137 /*
     
    5858564153 }
    5858664154 
    58587 @@ -7850,8 +7881,8 @@
     64155@@ -7850,8 +7899,8 @@
    5858864156  * final size of the shell is needed.
    5858964157  */
     
    5859664164     int                    new_row, old_row;
    5859764165 #ifdef FEAT_GUI
    58598 @@ -8047,7 +8078,7 @@
     64166@@ -8047,7 +8096,7 @@
    5859964167             * (used when resizing the window at the "--more--" prompt or when
    5860064168             * executing an external command, for the GUI).
     
    5860564173                (void)vim_memset(new_ScreenLines + new_row * Columns,
    5860664174                                      ' ', (size_t)Columns * sizeof(schar_T));
    58607 @@ -8137,7 +8168,7 @@
     64175@@ -8137,7 +8186,7 @@
    5860864176     screen_Columns = Columns;
    5860964177 
     
    5861464182 
    5861564183 #ifdef FEAT_GUI
     64184@@ -9018,7 +9067,7 @@
     64185            || (wp != NULL && wp->w_width != Columns)
     64186 # endif
     64187        )
     64188-       clip_clear_selection();
     64189+       clip_clear_selection(&clip_star);
     64190     else
     64191        clip_scroll_selection(-line_count);
     64192 #endif
     64193@@ -9239,7 +9288,7 @@
     64194            || (wp != NULL && wp->w_width != Columns)
     64195 # endif
     64196        )
     64197-       clip_clear_selection();
     64198+       clip_clear_selection(&clip_star);
     64199     else
     64200        clip_scroll_selection(line_count);
     64201 #endif
    5861664202diff -Naur vim73.orig/src/search.c vim73/src/search.c
    58617 --- vim73.orig/src/search.c     2012-06-03 23:09:52.956007482 +0000
    58618 +++ vim73/src/search.c  2012-06-03 23:09:55.336070819 +0000
     64203--- vim73.orig/src/search.c     2010-07-14 14:49:41.000000000 +0000
     64204+++ vim73/src/search.c  2012-07-20 20:31:18.304311823 +0000
    5861964205@@ -1161,12 +1161,20 @@
    5862064206        {
     
    5864364229 
    5864464230        if (pat != NULL && *pat != NUL) /* look for (new) offset */
    58645 @@ -1538,6 +1546,7 @@
     64231@@ -1538,8 +1546,9 @@
    5864664232     int                        col;
    5864764233     char_u             *p;
     
    5864964235+    int                        stop = TRUE;
    5865064236 #ifdef FEAT_MBYTE
    58651      static char_u      bytes[MB_MAXBYTES];
     64237-    static char_u      bytes[MB_MAXBYTES];
     64238+    static char_u      bytes[MB_MAXBYTES + 1];
    5865264239     static int         bytelen = 1;    /* >1 for multi-byte char */
     64240 #endif
     64241 
    5865364242@@ -1572,6 +1581,12 @@
    5865464243        t_cmd = last_t_cmd;
     
    5878364372 #ifdef FEAT_INS_EXPAND
    5878464373        /* when CONT_SOL is set compare "ptr" with the beginning of the line
     64374@@ -4892,7 +4901,7 @@
     64375 #ifdef FEAT_COMMENTS
     64376                        if ((*line != '#' ||
     64377                                STRNCMP(skipwhite(line + 1), "define", 6) != 0)
     64378-                               && get_leader_len(line, NULL, FALSE))
     64379+                               && get_leader_len(line, NULL, FALSE, TRUE))
     64380                            matched = FALSE;
     64381 
     64382                        /*
    5878564383@@ -5075,9 +5084,7 @@
    5878664384                        if (win_split(0, 0) == FAIL)
     
    5879464392                    if (depth == -1)
    5879564393                    {
     64394@@ -5134,7 +5141,7 @@
     64395                    && !(compl_cont_status & CONT_SOL)
     64396 #endif
     64397                    && *startp != NUL
     64398-                   && *(p = startp + 1) != NUL)
     64399+                   && *(p = startp + MB_PTR2LEN(startp)) != NUL)
     64400                goto search_line;
     64401        }
     64402        line_breakcheck();
    5879664403@@ -5222,11 +5229,6 @@
    5879764404     vim_free(regmatch.regprog);
     
    5880764414     static void
    5880864415diff -Naur vim73.orig/src/spell.c vim73/src/spell.c
    58809 --- vim73.orig/src/spell.c      2012-06-03 23:09:52.924006631 +0000
    58810 +++ vim73/src/spell.c   2012-06-03 23:09:55.960087426 +0000
     64416--- vim73.orig/src/spell.c      2010-08-01 13:43:01.000000000 +0000
     64417+++ vim73/src/spell.c   2012-07-20 20:31:17.387644502 +0000
    5881164418@@ -303,10 +303,6 @@
    5881264419  *                         few bytes as possible, see offset2bytes())
     
    5913564742     return n;
    5913664743 }
     64744@@ -8531,7 +8553,7 @@
     64745     }
     64746 
     64747     /* Expand all the remaining arguments (e.g., $VIMRUNTIME). */
     64748-    if (get_arglist_exp(arg, &fcount, &fnames) == OK)
     64749+    if (get_arglist_exp(arg, &fcount, &fnames, FALSE) == OK)
     64750     {
     64751        mkspell(fcount, fnames, ascii, eap->forceit, FALSE);
     64752        FreeWild(fcount, fnames);
    5913764753@@ -8548,7 +8570,7 @@
    5913864754     spellinfo_T        *spin;
     
    5955665172                        }
    5955765173diff -Naur vim73.orig/src/structs.h vim73/src/structs.h
    59558 --- vim73.orig/src/structs.h    2012-06-03 23:09:52.924006631 +0000
    59559 +++ vim73/src/structs.h 2012-06-03 23:09:55.316070287 +0000
     65174--- vim73.orig/src/structs.h    2010-08-07 14:59:27.000000000 +0000
     65175+++ vim73/src/structs.h 2012-07-20 20:31:18.260978460 +0000
    5956065176@@ -378,6 +378,35 @@
    5956165177 typedef long               blocknr_T;
     
    5965965275     int                m_noremap;      /* if non-zero no re-mapping for m_str */
    5966065276     char       m_silent;       /* <silent> used, don't echo commands */
    59661 @@ -1506,9 +1530,6 @@
     65277@@ -1082,6 +1106,11 @@
     65278 #define VAR_DICT    5  /* "v_dict" is used */
     65279 #define VAR_FLOAT   6  /* "v_float" is used */
     65280 
     65281+/* Values for "dv_scope". */
     65282+#define VAR_SCOPE     1        /* a:, v:, s:, etc. scope dictionaries */
     65283+#define VAR_DEF_SCOPE 2        /* l:, g: scope dictionaries: here funcrefs are not
     65284+                          allowed to mask existing functions */
     65285+
     65286 /* Values for "v_lock". */
     65287 #define VAR_LOCKED  1  /* locked with lock(), can use unlock() */
     65288 #define VAR_FIXED   2  /* locked forever */
     65289@@ -1157,6 +1186,7 @@
     65290     int                dv_copyID;      /* ID used by deepcopy() */
     65291     dict_T     *dv_copydict;   /* copied dict used by deepcopy() */
     65292     char       dv_lock;        /* zero, VAR_LOCKED, VAR_FIXED */
     65293+    char       dv_scope;       /* zero, VAR_SCOPE, VAR_DEF_SCOPE */
     65294     dict_T     *dv_used_next;  /* next dict in used dicts list */
     65295     dict_T     *dv_used_prev;  /* previous dict in used dicts list */
     65296 };
     65297@@ -1177,6 +1207,10 @@
     65298 typedef struct qf_info_S qf_info_T;
     65299 #endif
     65300 
     65301+/*
     65302+ * These are items normally related to a buffer.  But when using ":ownsyntax"
     65303+ * a window may have its own instance.
     65304+ */
     65305 typedef struct {
     65306 #ifdef FEAT_SYN_HL
     65307     hashtab_T  b_keywtab;              /* syntax keywords hash table */
     65308@@ -1266,6 +1300,10 @@
     65309     int                b_nwindows;     /* nr of windows open on this buffer */
     65310 
     65311     int                b_flags;        /* various BF_ flags */
     65312+#ifdef FEAT_AUTOCMD
     65313+    int                b_closing;      /* buffer is being closed, don't let
     65314+                                  autocommands close it too. */
     65315+#endif
     65316 
     65317     /*
     65318      * b_ffname has the full path of the file (NULL for no name).
     65319@@ -1506,9 +1544,6 @@
    5966265320     int                b_p_ml_nobin;   /* b_p_ml saved for binary mode */
    5966365321     int                b_p_ma;         /* 'modifiable' */
     
    5966965327 #ifdef FEAT_TEXTOBJ
    5967065328     char_u     *b_p_qe;        /* 'quoteescape' */
    59671 @@ -1563,6 +1584,9 @@
     65329@@ -1563,6 +1598,9 @@
    5967265330 
    5967365331     /* end of buffer options */
     
    5967965337     int                b_start_ffc;    /* first char of 'ff' when edit started */
    5968065338 #ifdef FEAT_MBYTE
    59681 @@ -1822,7 +1846,7 @@
     65339@@ -1822,13 +1860,17 @@
    5968265340                                       often, keep it the first item!) */
    5968365341 
     
    5968865346 
    5968965347 #ifdef FEAT_WINDOWS
    59690 @@ -2339,11 +2363,6 @@
     65348     win_T      *w_prev;            /* link to previous window */
     65349     win_T      *w_next;            /* link to next window */
     65350 #endif
     65351+#ifdef FEAT_AUTOCMD
     65352+    int                w_closing;          /* window is being closed, don't let
     65353+                                      autocommands close it too. */
     65354+#endif
     65355 
     65356     frame_T    *w_frame;           /* frame containing this window */
     65357 
     65358@@ -2339,11 +2381,6 @@
    5969165359     MenuHandle menu_handle;
    5969265360     MenuHandle submenu_handle;
     
    5970165369     PtWidget_t *submenu_id;
    5970265370diff -Naur vim73.orig/src/syntax.c vim73/src/syntax.c
    59703 --- vim73.orig/src/syntax.c     2012-06-03 23:09:52.948007269 +0000
    59704 +++ vim73/src/syntax.c  2012-06-03 23:09:55.912086149 +0000
     65371--- vim73.orig/src/syntax.c     2010-08-08 13:17:03.000000000 +0000
     65372+++ vim73/src/syntax.c  2012-07-20 20:31:18.317645167 +0000
    5970565373@@ -68,6 +68,8 @@
    5970665374 
     
    6001465682+       CENT("Pmenu ctermbg=Magenta ctermfg=Black",
    6001565683+            "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
    60016 +       CENT("PmenuSel ctermbg=DarkGrey ctermfg=Black",
    60017 +            "PmenuSel ctermbg=DarkGrey ctermfg=Black guibg=DarkGrey"),
     65684+       CENT("PmenuSel ctermbg=Black ctermfg=DarkGrey",
     65685+            "PmenuSel ctermbg=Black ctermfg=DarkGrey guibg=DarkGrey"),
    6001865686 #endif
    6001965687        CENT("Title term=bold ctermfg=LightMagenta",
     
    6006765735     ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
    6006865736diff -Naur vim73.orig/src/tag.c vim73/src/tag.c
    60069 --- vim73.orig/src/tag.c        2012-06-03 23:09:52.940007057 +0000
    60070 +++ vim73/src/tag.c     2012-06-03 23:09:55.200067199 +0000
     65737--- vim73.orig/src/tag.c        2010-08-10 07:25:22.000000000 +0000
     65738+++ vim73/src/tag.c     2012-07-20 20:31:14.130975501 +0000
    6007165739@@ -11,10 +11,6 @@
    6007265740  * Code to handle tags and the tag stack
     
    6083566503 /*
    6083666504diff -Naur vim73.orig/src/term.c vim73/src/term.c
    60837 --- vim73.orig/src/term.c       2012-06-03 23:09:52.952007375 +0000
    60838 +++ vim73/src/term.c    2012-06-03 23:09:55.364071565 +0000
     66505--- vim73.orig/src/term.c       2010-07-25 13:30:31.000000000 +0000
     66506+++ vim73/src/term.c    2012-07-20 20:31:14.584309160 +0000
    6083966507@@ -52,7 +52,7 @@
    6084066508 
     
    6120666874     return -1;
    6120766875diff -Naur vim73.orig/src/termlib.c vim73/src/termlib.c
    61208 --- vim73.orig/src/termlib.c    2012-06-03 23:09:52.924006631 +0000
    61209 +++ vim73/src/termlib.c 2012-06-03 23:09:54.100037927 +0000
     66876--- vim73.orig/src/termlib.c    2010-05-15 11:04:10.000000000 +0000
     66877+++ vim73/src/termlib.c 2012-07-20 20:31:10.824306455 +0000
    6121066878@@ -13,7 +13,7 @@
    6121166879 #include "vim.h"
     
    6121866886 
    6121966887diff -Naur vim73.orig/src/testdir/Make_amiga.mak vim73/src/testdir/Make_amiga.mak
    61220 --- vim73.orig/src/testdir/Make_amiga.mak       2012-06-03 23:09:52.928006738 +0000
    61221 +++ vim73/src/testdir/Make_amiga.mak    2012-06-03 23:09:55.708080720 +0000
    61222 @@ -13,6 +13,7 @@
     66888--- vim73.orig/src/testdir/Make_amiga.mak       2010-08-04 14:34:34.000000000 +0000
     66889+++ vim73/src/testdir/Make_amiga.mak    2012-07-20 20:31:17.337644466 +0000
     66890@@ -13,6 +13,8 @@
    6122366891 # test25       uses symbolic link
    6122466892 # test27       can't edit file with "*"
    6122566893 # test52       only for Win32
    6122666894+# test85       no Lua interface
     66895+# test86, 87   no Python interface
    6122766896 
    6122866897 SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
    6122966898                test7.out test8.out test9.out \
    61230 @@ -27,7 +28,9 @@
     66899@@ -27,7 +29,9 @@
    6123166900                test56.out test57.out test58.out test59.out test60.out \
    6123266901                test61.out test62.out test63.out test64.out test65.out \
     
    6123966908 .SUFFIXES: .in .out
    6124066909 
    61241 @@ -120,3 +123,14 @@
     66910@@ -120,3 +124,14 @@
    6124266911 test71.out: test71.in
    6124366912 test72.out: test72.in
     
    6125566924+test84.out: test84.in
    6125666925diff -Naur vim73.orig/src/testdir/Make_dos.mak vim73/src/testdir/Make_dos.mak
    61257 --- vim73.orig/src/testdir/Make_dos.mak 2012-06-03 23:09:52.928006738 +0000
    61258 +++ vim73/src/testdir/Make_dos.mak      2012-06-03 23:09:55.732081359 +0000
     66926--- vim73.orig/src/testdir/Make_dos.mak 2010-08-13 16:27:19.000000000 +0000
     66927+++ vim73/src/testdir/Make_dos.mak      2012-07-20 20:31:17.337644466 +0000
    6125966928@@ -27,7 +27,10 @@
    6126066929                test30.out test31.out test32.out test33.out test34.out \
     
    6126566934+               test74.out test75.out test76.out test77.out test78.out \
    6126666935+               test79.out test80.out test81.out test82.out test83.out \
    61267 +               test84.out test85.out
     66936+               test84.out test85.out test86.out test87.out
    6126866937 
    6126966938 SCRIPTS32 =    test50.out test70.out
     
    6128066949        -del *.out
    6128166950diff -Naur vim73.orig/src/testdir/Make_ming.mak vim73/src/testdir/Make_ming.mak
    61282 --- vim73.orig/src/testdir/Make_ming.mak        2012-06-03 23:09:52.928006738 +0000
    61283 +++ vim73/src/testdir/Make_ming.mak     2012-06-03 23:09:55.732081359 +0000
     66951--- vim73.orig/src/testdir/Make_ming.mak        2010-08-04 14:34:47.000000000 +0000
     66952+++ vim73/src/testdir/Make_ming.mak     2012-07-20 20:31:17.337644466 +0000
    6128466953@@ -47,7 +47,10 @@
    6128566954                test30.out test31.out test32.out test33.out test34.out \
     
    6129066959+               test74.out test75.out test76.out test77.out test78.out \
    6129166960+               test79.out test80.out test81.out test82.out test83.out \
    61292 +               test84.out test85.out
     66961+               test84.out test85.out test86.out test87.out
    6129366962 
    6129466963 SCRIPTS32 =    test50.out test70.out
     
    6130466973        -$(DEL) *.out
    6130566974diff -Naur vim73.orig/src/testdir/Make_os2.mak vim73/src/testdir/Make_os2.mak
    61306 --- vim73.orig/src/testdir/Make_os2.mak 2012-06-03 23:09:52.928006738 +0000
    61307 +++ vim73/src/testdir/Make_os2.mak      2012-06-03 23:09:55.708080720 +0000
    61308 @@ -13,6 +13,7 @@
     66975--- vim73.orig/src/testdir/Make_os2.mak 2010-08-04 14:34:55.000000000 +0000
     66976+++ vim73/src/testdir/Make_os2.mak      2012-07-20 20:31:17.337644466 +0000
     66977@@ -13,6 +13,8 @@
    6130966978 # test25       uses symbolic link
    6131066979 # test27       can't edit file with "*" in file name
    6131166980 # test52       only for Win32
    6131266981+# test85       no Lua interface
     66982+# test86, 87   no Python interface
    6131366983 
    6131466984 SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
    6131566985                test7.out test8.out test9.out \
    61316 @@ -27,7 +28,9 @@
     66986@@ -27,7 +29,9 @@
    6131766987                test56.out test57.out test58.out test59.out test60.out \
    6131866988                test61.out test62.out test63.out test64.out test65.out \
     
    6132666996 
    6132766997diff -Naur vim73.orig/src/testdir/Make_vms.mms vim73/src/testdir/Make_vms.mms
    61328 --- vim73.orig/src/testdir/Make_vms.mms 2012-06-03 23:09:52.932006845 +0000
    61329 +++ vim73/src/testdir/Make_vms.mms      2012-06-03 23:09:55.708080720 +0000
     66998--- vim73.orig/src/testdir/Make_vms.mms 2010-08-04 14:35:46.000000000 +0000
     66999+++ vim73/src/testdir/Make_vms.mms      2012-07-20 20:31:15.700976626 +0000
    6133067000@@ -4,7 +4,7 @@
    6133167001 # Authors:     Zoltan Arpadffy, <arpadffy@polarhome.com>
     
    6135767027 SCRIPT_GUI = test16.out
    6135867028diff -Naur vim73.orig/src/testdir/Makefile vim73/src/testdir/Makefile
    61359 --- vim73.orig/src/testdir/Makefile     2012-06-03 23:09:52.932006845 +0000
    61360 +++ vim73/src/testdir/Makefile  2012-06-03 23:09:55.708080720 +0000
     67029--- vim73.orig/src/testdir/Makefile     2010-08-15 12:56:30.000000000 +0000
     67030+++ vim73/src/testdir/Makefile  2012-07-20 20:31:17.337644466 +0000
    6136167031@@ -10,6 +10,7 @@
    6136267032 #   This will make testing about 10 times as slow.
     
    6137567045+               test74.out test75.out test76.out test77.out test78.out \
    6137667046+               test79.out test80.out test81.out test82.out test83.out \
    61377 +               test84.out test85.out
     67047+               test84.out test85.out test86.out test87.out
    6137867048 
    6137967049 SCRIPTS_GUI = test16.out
     
    6139867068 
    6139967069diff -Naur vim73.orig/src/testdir/main.aap vim73/src/testdir/main.aap
    61400 --- vim73.orig/src/testdir/main.aap     2012-06-03 23:09:52.924006631 +0000
    61401 +++ vim73/src/testdir/main.aap  2012-06-03 23:09:53.184013549 +0000
     67070--- vim73.orig/src/testdir/main.aap     2010-07-30 20:03:23.000000000 +0000
     67071+++ vim73/src/testdir/main.aap  2012-07-20 20:31:07.820970952 +0000
    6140267072@@ -13,7 +13,7 @@
    6140367073                test33.out test34.out test35.out test36.out test37.out
     
    6141067080 
    6141167081diff -Naur vim73.orig/src/testdir/test1.in vim73/src/testdir/test1.in
    61412 --- vim73.orig/src/testdir/test1.in     2012-06-03 23:09:52.928006738 +0000
    61413 +++ vim73/src/testdir/test1.in  2012-06-03 23:09:55.708080720 +0000
     67082--- vim73.orig/src/testdir/test1.in     2010-08-04 14:06:24.000000000 +0000
     67083+++ vim73/src/testdir/test1.in  2012-07-20 20:31:15.697643290 +0000
    6141467084@@ -15,6 +15,7 @@
    6141567085 be set like small.vim above.  mbyte.vim is sourced by tests that require the
     
    6143967109 :if 1 | q! | endif
    6144067110diff -Naur vim73.orig/src/testdir/test10.in vim73/src/testdir/test10.in
    61441 --- vim73.orig/src/testdir/test10.in    2012-06-03 23:09:52.928006738 +0000
    61442 +++ vim73/src/testdir/test10.in 2012-06-03 23:09:55.964087533 +0000
     67111--- vim73.orig/src/testdir/test10.in    2010-05-15 11:04:10.000000000 +0000
     67112+++ vim73/src/testdir/test10.in 2012-07-20 20:31:16.547643900 +0000
    6144367113@@ -2,56 +2,113 @@
    6144467114 
     
    6159067260 end of testfile
    6159167261diff -Naur vim73.orig/src/testdir/test10.ok vim73/src/testdir/test10.ok
    61592 --- vim73.orig/src/testdir/test10.ok    2012-06-03 23:09:52.928006738 +0000
    61593 +++ vim73/src/testdir/test10.ok 2012-06-03 23:09:55.964087533 +0000
     67262--- vim73.orig/src/testdir/test10.ok    2010-05-15 11:04:10.000000000 +0000
     67263+++ vim73/src/testdir/test10.ok 2012-07-20 20:31:16.550977236 +0000
    6159467264@@ -1,23 +1,23 @@
    6159567265 start of testfile
     
    6163867308 end of testfile
    6163967309diff -Naur vim73.orig/src/testdir/test19.in vim73/src/testdir/test19.in
    61640 --- vim73.orig/src/testdir/test19.in    2012-06-03 23:09:52.928006738 +0000
    61641 +++ vim73/src/testdir/test19.in 2012-06-03 23:09:54.700053894 +0000
     67310--- vim73.orig/src/testdir/test19.in    2010-05-15 11:04:10.000000000 +0000
     67311+++ vim73/src/testdir/test19.in 2012-07-20 20:31:12.597641065 +0000
    6164267312@@ -1,6 +1,7 @@
    6164367313 Tests for "r<Tab>" with 'smarttab' and 'expandtab' set/not set.
     
    6166167331 
    6166267332diff -Naur vim73.orig/src/testdir/test19.ok vim73/src/testdir/test19.ok
    61663 --- vim73.orig/src/testdir/test19.ok    2012-06-03 23:09:52.928006738 +0000
    61664 +++ vim73/src/testdir/test19.ok 2012-06-03 23:09:54.696053787 +0000
     67333--- vim73.orig/src/testdir/test19.ok    2010-05-15 11:04:10.000000000 +0000
     67334+++ vim73/src/testdir/test19.ok 2012-07-20 20:31:12.590974393 +0000
    6166567335@@ -5,3 +5,5 @@
    6166667336     a cde
     
    6166967339+{
    6167067340+        x
     67341diff -Naur vim73.orig/src/testdir/test29.in vim73/src/testdir/test29.in
     67342--- vim73.orig/src/testdir/test29.in    2010-08-01 13:38:24.000000000 +0000
     67343+++ vim73/src/testdir/test29.in 2012-07-20 20:31:16.864310793 +0000
     67344@@ -4,16 +4,17 @@
     67345  and with 'cpoptions' flag 'j' set or not
     67346 
     67347 STARTTEST
     67348+:so small.vim
     67349 :set nocompatible viminfo+=nviminfo
     67350 :set nojoinspaces
     67351 :set cpoptions-=j
     67352 /firstline/
     67353-j"tdGpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
     67354+j"td/^STARTTEST/-1
     67355+PJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
     67356 j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j joinspaces
     67357 j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
     67358 j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j nojoinspaces compatible
     67359-j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjdG:?firstline?+1,$w! test.out
     67360-:qa!
     67361+j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjd/STARTTEST/-2
     67362 ENDTEST
     67363 
     67364 firstline
     67365@@ -54,3 +55,148 @@
     67366 hjkl iop!
     67367 ert
     67368 
     67369+STARTTEST
     67370+/^{/+1
     67371+:set comments=s1:/*,mb:*,ex:*/,://
     67372+:set nojoinspaces fo=j
     67373+:set backspace=eol,start
     67374+:.,+3join
     67375+j4J
     67376+:.,+2join
     67377+j3J
     67378+:.,+2join
     67379+j3J
     67380+:.,+2join
     67381+jj3J
     67382+ENDTEST
     67383+
     67384+{
     67385+
     67386+/*
     67387+ * Make sure the previous comment leader is not removed.
     67388+ */
     67389+
     67390+/*
     67391+ * Make sure the previous comment leader is not removed.
     67392+ */
     67393+
     67394+// Should the next comment leader be left alone?
     67395+// Yes.
     67396+
     67397+// Should the next comment leader be left alone?
     67398+// Yes.
     67399+
     67400+/* Here the comment leader should be left intact. */
     67401+// And so should this one.
     67402+
     67403+/* Here the comment leader should be left intact. */
     67404+// And so should this one.
     67405+
     67406+if (condition) // Remove the next comment leader!
     67407+               // OK, I will.
     67408+    action();
     67409+
     67410+if (condition) // Remove the next comment leader!
     67411+               // OK, I will.
     67412+    action();
     67413+}
     67414+
     67415+STARTTEST
     67416+/^{/+1
     67417+:set comments=sO:*\ -,mO:*\ \ ,exO:*/
     67418+:set comments+=s1:/*,mb:*,ex:*/,://
     67419+:set comments+=s1:>#,mb:#,ex:#<,:<
     67420+:set cpoptions-=j joinspaces fo=j
     67421+:set backspace=eol,start
     67422+:.,+3join
     67423+j4J
     67424+:.,+8join
     67425+j9J
     67426+:.,+2join
     67427+j3J
     67428+:.,+2join
     67429+j3J
     67430+:.,+2join
     67431+jj3J
     67432+j:.,+2join
     67433+jj3J
     67434+j:.,+5join
     67435+j6J
     67436+oSome code!
     67437// Make sure backspacing does not remove this comment leader.0i
     67438+ENDTEST
     67439+
     67440+{
     67441+
     67442+/*
     67443+ * Make sure the previous comment leader is not removed.
     67444+ */
     67445+
     67446+/*
     67447+ * Make sure the previous comment leader is not removed.
     67448+ */
     67449+
     67450+/* List:
     67451+ * - item1
     67452+ *   foo bar baz
     67453+ *   foo bar baz
     67454+ * - item2
     67455+ *   foo bar baz
     67456+ *   foo bar baz
     67457+ */
     67458+
     67459+/* List:
     67460+ * - item1
     67461+ *   foo bar baz
     67462+ *   foo bar baz
     67463+ * - item2
     67464+ *   foo bar baz
     67465+ *   foo bar baz
     67466+ */
     67467+
     67468+// Should the next comment leader be left alone?
     67469+// Yes.
     67470+
     67471+// Should the next comment leader be left alone?
     67472+// Yes.
     67473+
     67474+/* Here the comment leader should be left intact. */
     67475+// And so should this one.
     67476+
     67477+/* Here the comment leader should be left intact. */
     67478+// And so should this one.
     67479+
     67480+if (condition) // Remove the next comment leader!
     67481+               // OK, I will.
     67482+    action();
     67483+
     67484+if (condition) // Remove the next comment leader!
     67485+               // OK, I will.
     67486+    action();
     67487+
     67488+int i = 7 /* foo *// 3
     67489+ // comment
     67490+ ;
     67491+
     67492+int i = 7 /* foo *// 3
     67493+ // comment
     67494+ ;
     67495+
     67496+># Note that the last character of the ending comment leader (left angle
     67497+ # bracket) is a comment leader itself. Make sure that this comment leader is
     67498+ # not removed from the next line #<
     67499+< On this line a new comment is opened which spans 2 lines. This comment should
     67500+< retain its comment leader.
     67501+
     67502+># Note that the last character of the ending comment leader (left angle
     67503+ # bracket) is a comment leader itself. Make sure that this comment leader is
     67504+ # not removed from the next line #<
     67505+< On this line a new comment is opened which spans 2 lines. This comment should
     67506+< retain its comment leader.
     67507+
     67508+}
     67509+
     67510+STARTTEST
     67511+:g/^STARTTEST/.,/^ENDTEST/d
     67512+:?firstline?+1,$w! test.out
     67513+:qa!
     67514+ENDTEST
     67515diff -Naur vim73.orig/src/testdir/test29.ok vim73/src/testdir/test29.ok
     67516--- vim73.orig/src/testdir/test29.ok    2010-07-10 12:08:18.000000000 +0000
     67517+++ vim73/src/testdir/test29.ok 2012-07-20 20:31:16.867644128 +0000
     67518@@ -47,3 +47,42 @@
     67519 asdfasdf       asdf
     67520 asdfasdf               asdf
     67521 zx cvn.  as dfg? hjkl iop! ert  a
     67522+
     67523+
     67524+{
     67525+/* Make sure the previous comment leader is not removed. */
     67526+/* Make sure the previous comment leader is not removed. */
     67527+// Should the next comment leader be left alone? Yes.
     67528+// Should the next comment leader be left alone? Yes.
     67529+/* Here the comment leader should be left intact. */ // And so should this one.
     67530+/* Here the comment leader should be left intact. */ // And so should this one.
     67531+if (condition) // Remove the next comment leader! OK, I will.
     67532+    action();
     67533+if (condition) // Remove the next comment leader! OK, I will.
     67534+    action();
     67535+}
     67536+
     67537+
     67538+{
     67539+/* Make sure the previous comment leader is not removed.  */
     67540+/* Make sure the previous comment leader is not removed.  */
     67541+/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
     67542+/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
     67543+// Should the next comment leader be left alone?  Yes.
     67544+// Should the next comment leader be left alone?  Yes.
     67545+/* Here the comment leader should be left intact. */ // And so should this one.
     67546+/* Here the comment leader should be left intact. */ // And so should this one.
     67547+if (condition) // Remove the next comment leader!  OK, I will.
     67548+    action();
     67549+if (condition) // Remove the next comment leader!  OK, I will.
     67550+    action();
     67551+int i = 7 /* foo *// 3 // comment
     67552+ ;
     67553+int i = 7 /* foo *// 3 // comment
     67554+ ;
     67555+># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
     67556+># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
     67557+
     67558+Some code!// Make sure backspacing does not remove this comment leader.
     67559+}
     67560+
    6167167561diff -Naur vim73.orig/src/testdir/test3.in vim73/src/testdir/test3.in
    61672 --- vim73.orig/src/testdir/test3.in     2012-06-03 23:09:52.932006845 +0000
    61673 +++ vim73/src/testdir/test3.in  2012-06-03 23:09:55.716080932 +0000
     67562--- vim73.orig/src/testdir/test3.in     2010-05-15 11:04:10.000000000 +0000
     67563+++ vim73/src/testdir/test3.in  2012-07-20 20:31:16.854310787 +0000
    6167467564@@ -299,18 +299,25 @@
    6167567565 
     
    6177467664 
    6177567665 STARTTEST
    61776 @@ -1246,6 +1316,20 @@
     67666@@ -907,6 +977,24 @@
     67667 
     67668 STARTTEST
     67669 :set cin
     67670+:set cino=es,n0s
     67671+/main
     67672+=][
     67673+ENDTEST
     67674+
     67675+main(void)
     67676+{
     67677+       /* Make sure that cino=X0s is not parsed like cino=Xs. */
     67678+       if (cond)
     67679+               foo();
     67680+       else
     67681+       {
     67682+               bar();
     67683+       }
     67684+}
     67685+
     67686+STARTTEST
     67687+:set cin
     67688 :set cino=
     67689 ]]=][
     67690 ENDTEST
     67691@@ -1246,6 +1334,20 @@
    6177767692 };
    6177867693 
     
    6179567710 2kdd]]=][
    6179667711 ENDTEST
    61797 @@ -1315,6 +1399,626 @@
     67712@@ -1315,6 +1417,626 @@
    6179867713 }
    6179967714 
     
    6242368338 ENDTEST
    6242468339diff -Naur vim73.orig/src/testdir/test3.ok vim73/src/testdir/test3.ok
    62425 --- vim73.orig/src/testdir/test3.ok     2012-06-03 23:09:52.924006631 +0000
    62426 +++ vim73/src/testdir/test3.ok  2012-06-03 23:09:55.716080932 +0000
     68340--- vim73.orig/src/testdir/test3.ok     2010-05-15 11:04:10.000000000 +0000
     68341+++ vim73/src/testdir/test3.ok  2012-07-20 20:31:16.854310787 +0000
    6242768342@@ -299,6 +299,13 @@
    6242868343        maybe
     
    6250968424 
    6251068425 
    62511 @@ -1127,6 +1197,16 @@
     68426@@ -870,6 +940,18 @@
     68427 }
     68428 
     68429 
     68430+main(void)
     68431+{
     68432+       /* Make sure that cino=X0s is not parsed like cino=Xs. */
     68433+       if (cond)
     68434+               foo();
     68435+       else
     68436+       {
     68437+               bar();
     68438+       }
     68439+}
     68440+
     68441+
     68442 {
     68443        do
     68444        {
     68445@@ -1127,6 +1209,16 @@
    6251268446 };
    6251368447 
     
    6252668460 foo()
    6252768461 {
    62528 @@ -1183,3 +1263,532 @@
     68462@@ -1183,3 +1275,532 @@
    6252968463                foo;
    6253068464 }
     
    6306068994+
    6306168995diff -Naur vim73.orig/src/testdir/test31.in vim73/src/testdir/test31.in
    63062 --- vim73.orig/src/testdir/test31.in    2012-06-03 23:09:52.928006738 +0000
    63063 +++ vim73/src/testdir/test31.in 2012-06-03 23:09:55.440073587 +0000
     68996--- vim73.orig/src/testdir/test31.in    2010-05-15 11:04:10.000000000 +0000
     68997+++ vim73/src/testdir/test31.in 2012-07-20 20:31:14.857642689 +0000
    6306468998@@ -63,6 +63,12 @@
    6306568999 :" write "testtext 1"
     
    6307669010 
    6307769011diff -Naur vim73.orig/src/testdir/test31.ok vim73/src/testdir/test31.ok
    63078 --- vim73.orig/src/testdir/test31.ok    2012-06-03 23:09:52.928006738 +0000
    63079 +++ vim73/src/testdir/test31.ok 2012-06-03 23:09:55.440073587 +0000
     69012--- vim73.orig/src/testdir/test31.ok    2010-05-15 11:04:10.000000000 +0000
     69013+++ vim73/src/testdir/test31.ok 2012-07-20 20:31:14.857642689 +0000
    6308069014@@ -9,3 +9,4 @@
    6308169015 testtext 1
     
    6308369017 testtext 1
    6308469018+testtext 2 2 2
     69019diff -Naur vim73.orig/src/testdir/test34.in vim73/src/testdir/test34.in
     69020--- vim73.orig/src/testdir/test34.in    2010-05-29 13:09:55.000000000 +0000
     69021+++ vim73/src/testdir/test34.in 2012-07-20 20:31:18.260978460 +0000
     69022@@ -1,5 +1,6 @@
     69023 Test for user functions.
     69024 Also test an <expr> mapping calling a function.
     69025+Also test that a builtin function cannot be replaced.
     69026 
     69027 STARTTEST
     69028 :so small.vim
     69029@@ -58,7 +59,10 @@
     69030 ---*---
     69031 (one
     69032 (two
     69033-[(one again:$-5,$w! test.out
     69034+[(one again:call append(line('$'), max([1, 2, 3]))
     69035+:call extend(g:, {'max': function('min')})
     69036+:call append(line('$'), max([1, 2, 3]))
     69037+:$-7,$w! test.out
     69038 :delfunc Table
     69039 :delfunc Compute
     69040 :delfunc Expr1
    6308569041diff -Naur vim73.orig/src/testdir/test34.ok vim73/src/testdir/test34.ok
    63086 --- vim73.orig/src/testdir/test34.ok    2012-06-03 23:09:52.928006738 +0000
    63087 +++ vim73/src/testdir/test34.ok 2012-06-03 23:09:54.864058259 +0000
    63088 @@ -1,5 +1,5 @@
     69042--- vim73.orig/src/testdir/test34.ok    2010-05-29 13:11:12.000000000 +0000
     69043+++ vim73/src/testdir/test34.ok 2012-07-20 20:31:18.260978460 +0000
     69044@@ -1,6 +1,8 @@
    6308969045 xxx4asdf fail nop ok 9 333
    6309069046-XX111XX
     
    6309369049 1. one
    6309469050 2. two
     69051 1. one again
     69052+3
     69053+3
    6309569054diff -Naur vim73.orig/src/testdir/test43.in vim73/src/testdir/test43.in
    63096 --- vim73.orig/src/testdir/test43.in    2012-06-03 23:09:52.928006738 +0000
    63097 +++ vim73/src/testdir/test43.in 2012-06-03 23:09:55.288069543 +0000
     69055--- vim73.orig/src/testdir/test43.in    2010-05-15 11:04:10.000000000 +0000
     69056+++ vim73/src/testdir/test43.in 2012-07-20 20:31:14.397642358 +0000
    6309869057@@ -1,6 +1,7 @@
    6309969058 Tests for regexp with various magic settings.
     
    6312469083+
    6312569084diff -Naur vim73.orig/src/testdir/test43.ok vim73/src/testdir/test43.ok
    63126 --- vim73.orig/src/testdir/test43.ok    2012-06-03 23:09:52.932006845 +0000
    63127 +++ vim73/src/testdir/test43.ok 2012-06-03 23:09:55.132065390 +0000
     69085--- vim73.orig/src/testdir/test43.ok    2010-05-15 11:04:10.000000000 +0000
     69086+++ vim73/src/testdir/test43.ok 2012-07-20 20:31:13.914308679 +0000
    6312869087@@ -6,3 +6,6 @@
    6312969088 6 x aa$ x
     
    6313469093+
    6313569094diff -Naur vim73.orig/src/testdir/test44.in vim73/src/testdir/test44.in
    63136 --- vim73.orig/src/testdir/test44.in    2012-06-03 23:09:52.928006738 +0000
    63137 +++ vim73/src/testdir/test44.in 2012-06-03 23:09:54.512048891 +0000
     69095--- vim73.orig/src/testdir/test44.in    2010-05-15 11:04:10.000000000 +0000
     69096+++ vim73/src/testdir/test44.in 2012-07-20 20:31:12.114307384 +0000
    6313869097@@ -27,6 +27,8 @@
    6313969098 x/\%U12345678
     
    6315869117ẇẘ xẋẍ yÜÿŷẏẙỳỷỹ zźŌşƶẑẕ
    6315969118diff -Naur vim73.orig/src/testdir/test44.ok vim73/src/testdir/test44.ok
    63160 --- vim73.orig/src/testdir/test44.ok    2012-06-03 23:09:52.924006631 +0000
    63161 +++ vim73/src/testdir/test44.ok 2012-06-03 23:09:54.512048891 +0000
     69119--- vim73.orig/src/testdir/test44.ok    2010-05-15 11:04:10.000000000 +0000
     69120+++ vim73/src/testdir/test44.ok 2012-07-20 20:31:12.117640720 +0000
    6316269121@@ -14,6 +14,8 @@
    6316369122 e y
     
    6317569134 ×
    6317669135diff -Naur vim73.orig/src/testdir/test49.vim vim73/src/testdir/test49.vim
    63177 --- vim73.orig/src/testdir/test49.vim   2012-06-03 23:09:52.928006738 +0000
    63178 +++ vim73/src/testdir/test49.vim        2012-06-03 23:09:53.108011527 +0000
     69136--- vim73.orig/src/testdir/test49.vim   2010-05-15 11:04:10.000000000 +0000
     69137+++ vim73/src/testdir/test49.vim        2012-07-20 20:31:07.597637458 +0000
    6317969138@@ -1,6 +1,6 @@
    6318069139 " Vim script language tests
     
    6319569154                endif
    6319669155diff -Naur vim73.orig/src/testdir/test55.in vim73/src/testdir/test55.in
    63197 --- vim73.orig/src/testdir/test55.in    2012-06-03 23:09:52.924006631 +0000
    63198 +++ vim73/src/testdir/test55.in 2012-06-03 23:09:55.840084233 +0000
     69156--- vim73.orig/src/testdir/test55.in    2010-05-15 11:04:10.000000000 +0000
     69157+++ vim73/src/testdir/test55.in 2012-07-20 20:31:16.110976920 +0000
    6319969158@@ -342,7 +342,36 @@
    6320069159 :$put =(d == d)
     
    6323569194 :delfunc Test
    6323669195diff -Naur vim73.orig/src/testdir/test55.ok vim73/src/testdir/test55.ok
    63237 --- vim73.orig/src/testdir/test55.ok    2012-06-03 23:09:52.924006631 +0000
    63238 +++ vim73/src/testdir/test55.ok 2012-06-03 23:09:55.840084233 +0000
     69196--- vim73.orig/src/testdir/test55.ok    2010-05-15 11:04:10.000000000 +0000
     69197+++ vim73/src/testdir/test55.ok 2012-07-20 20:31:16.110976920 +0000
    6323969198@@ -109,3 +109,9 @@
    6324069199 1
     
    6324869207+{'a': {'b': 'B'}}
    6324969208diff -Naur vim73.orig/src/testdir/test57.in vim73/src/testdir/test57.in
    63250 --- vim73.orig/src/testdir/test57.in    2012-06-03 23:09:52.928006738 +0000
    63251 +++ vim73/src/testdir/test57.in 2012-06-03 23:09:53.168013125 +0000
     69209--- vim73.orig/src/testdir/test57.in    2010-05-15 11:04:10.000000000 +0000
     69210+++ vim73/src/testdir/test57.in 2012-07-20 20:31:07.790970931 +0000
    6325269211@@ -53,15 +53,19 @@
    6325369212 t02: numeric
     
    6327269231 b321b
    6327369232diff -Naur vim73.orig/src/testdir/test57.ok vim73/src/testdir/test57.ok
    63274 --- vim73.orig/src/testdir/test57.ok    2012-06-03 23:09:52.928006738 +0000
    63275 +++ vim73/src/testdir/test57.ok 2012-06-03 23:09:53.168013125 +0000
     69233--- vim73.orig/src/testdir/test57.ok    2010-05-15 11:04:10.000000000 +0000
     69234+++ vim73/src/testdir/test57.ok 2012-07-20 20:31:07.790970931 +0000
    6327669235@@ -21,6 +21,10 @@
    6327769236 a
     
    6328669245 b123
    6328769246diff -Naur vim73.orig/src/testdir/test61.in vim73/src/testdir/test61.in
    63288 --- vim73.orig/src/testdir/test61.in    2012-06-03 23:09:52.928006738 +0000
    63289 +++ vim73/src/testdir/test61.in 2012-06-03 23:09:53.052010037 +0000
     69247--- vim73.orig/src/testdir/test61.in    2010-06-27 03:07:58.000000000 +0000
     69248+++ vim73/src/testdir/test61.in 2012-07-20 20:31:07.427637334 +0000
    6329069249@@ -4,6 +4,10 @@
    6329169250 Also tests :earlier and :later.
     
    6330069259 x:set ul=100
    6330169260diff -Naur vim73.orig/src/testdir/test62.in vim73/src/testdir/test62.in
    63302 --- vim73.orig/src/testdir/test62.in    2012-06-03 23:09:52.928006738 +0000
    63303 +++ vim73/src/testdir/test62.in 2012-06-03 23:09:55.584077418 +0000
    63304 @@ -49,6 +49,49 @@
     69261--- vim73.orig/src/testdir/test62.in    2010-05-31 19:22:55.000000000 +0000
     69262+++ vim73/src/testdir/test62.in 2012-07-20 20:31:17.930978224 +0000
     69263@@ -49,6 +49,77 @@
    6330569264 :tabclose
    6330669265 :call append(line('$'), test_status)
     
    6334969308+:endif
    6335069309+:"
     69310+:"
     69311+:for i in range(9) | tabnew | endfor
     69312+1gt
     69313+Go=tabpagenr()
     69314
     69315
     69316+:tabmove 5
     69317+i=tabpagenr()
     69318
     69319
     69320+:tabmove -2
     69321+i=tabpagenr()
     69322
     69323
     69324+:tabmove +4
     69325+i=tabpagenr()
     69326
     69327
     69328+:tabmove
     69329+i=tabpagenr()
     69330
     69331
     69332+:tabmove -20
     69333+i=tabpagenr()
     69334
     69335
     69336+:tabmove +20
     69337+i=tabpagenr()
     69338
     69339
     69340+:3tabmove
     69341+i=tabpagenr()
     69342
     69343
     69344+:7tabmove 5
     69345+i=tabpagenr()
     69346
     69347
     69348+:let a='No error caught.'
     69349+:try
     69350+:tabmove foo
     69351+:catch E474
     69352+:let a='E474 caught.'
     69353+:endtry
     69354+i=a
     69355
     69356+:"
    6335169357 :"
    6335269358 :/^Results/,$w! test.out
    6335369359 :qa!
    6335469360diff -Naur vim73.orig/src/testdir/test62.ok vim73/src/testdir/test62.ok
    63355 --- vim73.orig/src/testdir/test62.ok    2012-06-03 23:09:52.928006738 +0000
    63356 +++ vim73/src/testdir/test62.ok 2012-06-03 23:09:55.512075502 +0000
    63357 @@ -5,3 +5,6 @@
     69361--- vim73.orig/src/testdir/test62.ok    2010-05-31 19:22:55.000000000 +0000
     69362+++ vim73/src/testdir/test62.ok 2012-07-20 20:31:17.930978224 +0000
     69363@@ -5,3 +5,16 @@
    6335869364 this is tab page 4
    6335969365 gettabvar: pass
     
    6336269368+tab drop 2: pass
    6336369369+tab drop 3: pass
     69370+1
     69371+6
     69372+4
     69373+8
     69374+10
     69375+1
     69376+10
     69377+4
     69378+6
     69379+E474 caught.
    6336469380diff -Naur vim73.orig/src/testdir/test65.in vim73/src/testdir/test65.in
    63365 --- vim73.orig/src/testdir/test65.in    2012-06-03 23:09:52.928006738 +0000
    63366 +++ vim73/src/testdir/test65.in 2012-06-03 23:09:55.036062835 +0000
     69381--- vim73.orig/src/testdir/test65.in    2010-05-15 11:04:10.000000000 +0000
     69382+++ vim73/src/testdir/test65.in 2012-07-20 20:31:13.614308463 +0000
    6336769383@@ -1,4 +1,4 @@
    6336869384-Test for floating point.
     
    6339669412 
    6339769413diff -Naur vim73.orig/src/testdir/test65.ok vim73/src/testdir/test65.ok
    63398 --- vim73.orig/src/testdir/test65.ok    2012-06-03 23:09:52.928006738 +0000
    63399 +++ vim73/src/testdir/test65.ok 2012-06-03 23:09:55.036062835 +0000
     69414--- vim73.orig/src/testdir/test65.ok    2010-05-15 11:04:10.000000000 +0000
     69415+++ vim73/src/testdir/test65.ok 2012-07-20 20:31:13.614308463 +0000
    6340069416@@ -54,3 +54,20 @@
    6340169417 float2nr
     
    6342069436+0
    6342169437diff -Naur vim73.orig/src/testdir/test68.in vim73/src/testdir/test68.in
    63422 --- vim73.orig/src/testdir/test68.in    2012-06-03 23:09:52.928006738 +0000
    63423 +++ vim73/src/testdir/test68.in 2012-06-03 23:09:53.136012273 +0000
    63424 @@ -51,6 +51,17 @@
     69438--- vim73.orig/src/testdir/test68.in    2010-05-15 11:04:10.000000000 +0000
     69439+++ vim73/src/testdir/test68.in 2012-07-20 20:31:17.610977994 +0000
     69440@@ -51,6 +51,57 @@
    6342569441 }
    6342669442 
    6342769443 STARTTEST
     69444+/^{/+1
     69445+:set tw=5 fo=tcn comments=:#
     69446+A bjA b
     69447+ENDTEST
     69448+
     69449+{
     69450+  1 a
     69451+# 1 a
     69452+}
     69453+
     69454+STARTTEST
     69455+/^{/+1
     69456+:set tw=5 fo=qn comments=:#
     69457+gwap
     69458+ENDTEST
     69459+
     69460+{
     69461+# 1 a b
     69462+}
     69463+
     69464+STARTTEST
     69465+/^{/+1
     69466+:set tw=5 fo=q2 comments=:#
     69467+gwap
     69468+ENDTEST
     69469+
     69470+{
     69471+# x
     69472+#   a b
     69473+}
     69474+
     69475+STARTTEST
    6342869476+/^{/+2
    6342969477+:set tw& fo=a
     
    6343569483+   2bb
    6343669484+}
     69485+
     69486+STARTTEST
     69487+/^#/
     69488+:setl tw=12 fo=tqnc comments=:#
     69489+A foobar
     69490+ENDTEST
     69491+
     69492+# 1 xxxxx
    6343769493+
    6343869494+STARTTEST
     
    6344169497 ENDTEST
    6344269498diff -Naur vim73.orig/src/testdir/test68.ok vim73/src/testdir/test68.ok
    63443 --- vim73.orig/src/testdir/test68.ok    2012-06-03 23:09:52.928006738 +0000
    63444 +++ vim73/src/testdir/test68.ok 2012-06-03 23:09:53.136012273 +0000
    63445 @@ -33,3 +33,6 @@
     69499--- vim73.orig/src/testdir/test68.ok    2010-05-15 11:04:10.000000000 +0000
     69500+++ vim73/src/testdir/test68.ok 2012-07-20 20:31:17.807644801 +0000
     69501@@ -33,3 +33,30 @@
    6344669502 #a b
    6344769503 }
    6344869504 
    6344969505+
     69506+{
     69507+  1 a
     69508+    b
     69509+# 1 a
     69510+#   b
     69511+}
     69512+
     69513+
     69514+{
     69515+# 1 a
     69516+#   b
     69517+}
     69518+
     69519+
     69520+{
     69521+# x a
     69522+#   b
     69523+}
     69524+
     69525+
    6345069526+{ 1aa ^^2bb }
    6345169527+
     69528+
     69529+# 1 xxxxx
     69530+#   foobar
     69531+
    6345269532diff -Naur vim73.orig/src/testdir/test72.in vim73/src/testdir/test72.in
    63453 --- vim73.orig/src/testdir/test72.in    2012-06-03 23:09:52.928006738 +0000
    63454 +++ vim73/src/testdir/test72.in 2012-06-03 23:09:55.120065072 +0000
     69533--- vim73.orig/src/testdir/test72.in    2010-08-07 11:26:43.000000000 +0000
     69534+++ vim73/src/testdir/test72.in 2012-07-20 20:31:13.880975322 +0000
    6345569535@@ -51,6 +51,12 @@
    6345669536 :e Xtestfile
     
    6346769547 :set undofile cm=zip
    6346869548diff -Naur vim73.orig/src/testdir/test72.ok vim73/src/testdir/test72.ok
    63469 --- vim73.orig/src/testdir/test72.ok    2012-06-03 23:09:52.924006631 +0000
    63470 +++ vim73/src/testdir/test72.ok 2012-06-03 23:09:55.120065072 +0000
     69549--- vim73.orig/src/testdir/test72.ok    2010-05-30 20:39:12.000000000 +0000
     69550+++ vim73/src/testdir/test72.ok 2012-07-20 20:31:13.880975322 +0000
    6347169551@@ -7,6 +7,16 @@
    6347269552 eight
     
    6348869568diff -Naur vim73.orig/src/testdir/test74.in vim73/src/testdir/test74.in
    6348969569--- vim73.orig/src/testdir/test74.in    1970-01-01 00:00:00.000000000 +0000
    63490 +++ vim73/src/testdir/test74.in 2012-06-03 23:09:53.184013549 +0000
     69570+++ vim73/src/testdir/test74.in 2012-07-20 20:31:07.824304288 +0000
    6349169571@@ -0,0 +1,36 @@
    6349269572+" Tests for storing global variables in the .viminfo file vim: set ft=vim:
     
    6352869608diff -Naur vim73.orig/src/testdir/test74.ok vim73/src/testdir/test74.ok
    6352969609--- vim73.orig/src/testdir/test74.ok    1970-01-01 00:00:00.000000000 +0000
    63530 +++ vim73/src/testdir/test74.ok 2012-06-03 23:09:53.184013549 +0000
     69610+++ vim73/src/testdir/test74.ok 2012-07-20 20:31:07.824304288 +0000
    6353169611@@ -0,0 +1,5 @@
    6353269612+
     
    6353769617diff -Naur vim73.orig/src/testdir/test75.in vim73/src/testdir/test75.in
    6353869618--- vim73.orig/src/testdir/test75.in    1970-01-01 00:00:00.000000000 +0000
    63539 +++ vim73/src/testdir/test75.in 2012-06-03 23:09:54.628051978 +0000
     69619+++ vim73/src/testdir/test75.in 2012-07-20 20:31:12.414307600 +0000
    6354069620@@ -0,0 +1,22 @@
    6354169621+" Tests for functions.
     
    6356369643diff -Naur vim73.orig/src/testdir/test75.ok vim73/src/testdir/test75.ok
    6356469644--- vim73.orig/src/testdir/test75.ok    1970-01-01 00:00:00.000000000 +0000
    63565 +++ vim73/src/testdir/test75.ok 2012-06-03 23:09:54.628051978 +0000
     69645+++ vim73/src/testdir/test75.ok 2012-07-20 20:31:12.414307600 +0000
    6356669646@@ -0,0 +1,5 @@
    6356769647+is<F4>foo
     
    6357269652diff -Naur vim73.orig/src/testdir/test76.in vim73/src/testdir/test76.in
    6357369653--- vim73.orig/src/testdir/test76.in    1970-01-01 00:00:00.000000000 +0000
    63574 +++ vim73/src/testdir/test76.in 2012-06-03 23:09:53.316017063 +0000
     69654+++ vim73/src/testdir/test76.in 2012-07-20 20:31:08.257637936 +0000
    6357569655@@ -0,0 +1,46 @@
    6357669656+Tests for completefunc/omnifunc. vim: set ft=vim :
     
    6362269702diff -Naur vim73.orig/src/testdir/test76.ok vim73/src/testdir/test76.ok
    6362369703--- vim73.orig/src/testdir/test76.ok    1970-01-01 00:00:00.000000000 +0000
    63624 +++ vim73/src/testdir/test76.ok 2012-06-03 23:09:53.316017063 +0000
     69704+++ vim73/src/testdir/test76.ok 2012-07-20 20:31:08.257637936 +0000
    6362569705@@ -0,0 +1,4 @@
    6362669706++++
     
    6363069710diff -Naur vim73.orig/src/testdir/test77.in vim73/src/testdir/test77.in
    6363169711--- vim73.orig/src/testdir/test77.in    1970-01-01 00:00:00.000000000 +0000
    63632 +++ vim73/src/testdir/test77.in 2012-06-03 23:09:55.796083061 +0000
     69712+++ vim73/src/testdir/test77.in 2012-07-20 20:31:15.937643464 +0000
    6363369713@@ -0,0 +1,29 @@
    6363469714+Inserts 2 million lines with consecutive integers starting from 1
     
    6366369743diff -Naur vim73.orig/src/testdir/test77.ok vim73/src/testdir/test77.ok
    6366469744--- vim73.orig/src/testdir/test77.ok    1970-01-01 00:00:00.000000000 +0000
    63665 +++ vim73/src/testdir/test77.ok 2012-06-03 23:09:53.804030049 +0000
     69745+++ vim73/src/testdir/test77.ok 2012-07-20 20:31:09.844305747 +0000
    6366669746@@ -0,0 +1 @@
    6366769747+3678979763 14888896 Xtest
    6366869748diff -Naur vim73.orig/src/testdir/test78.in vim73/src/testdir/test78.in
    6366969749--- vim73.orig/src/testdir/test78.in    1970-01-01 00:00:00.000000000 +0000
    63670 +++ vim73/src/testdir/test78.in 2012-06-03 23:09:54.456047401 +0000
     69750+++ vim73/src/testdir/test78.in 2012-07-20 20:31:11.964307276 +0000
    6367169751@@ -0,0 +1,46 @@
    6367269752+Inserts 10000 lines with text to fill the swap file with two levels of pointer
     
    6371869798diff -Naur vim73.orig/src/testdir/test78.ok vim73/src/testdir/test78.ok
    6371969799--- vim73.orig/src/testdir/test78.ok    1970-01-01 00:00:00.000000000 +0000
    63720 +++ vim73/src/testdir/test78.ok 2012-06-03 23:09:54.288042929 +0000
     69800+++ vim73/src/testdir/test78.ok 2012-07-20 20:31:11.410973545 +0000
    6372169801@@ -0,0 +1,3 @@
    6372269802+recovery start
     
    6372569805diff -Naur vim73.orig/src/testdir/test79.in vim73/src/testdir/test79.in
    6372669806--- vim73.orig/src/testdir/test79.in    1970-01-01 00:00:00.000000000 +0000
    63727 +++ vim73/src/testdir/test79.in 2012-06-03 23:09:54.348044528 +0000
     69807+++ vim73/src/testdir/test79.in 2012-07-20 20:31:11.550973645 +0000
    6372869808@@ -0,0 +1,213 @@
    6372969809+Test for *sub-replace-special* and *sub-replace-expression* on :substitute.
     
    6395370033diff -Naur vim73.orig/src/testdir/test79.ok vim73/src/testdir/test79.ok
    6395470034--- vim73.orig/src/testdir/test79.ok    1970-01-01 00:00:00.000000000 +0000
    63955 +++ vim73/src/testdir/test79.ok 2012-06-03 23:09:54.348044528 +0000
     70035+++ vim73/src/testdir/test79.ok 2012-07-20 20:31:11.550973645 +0000
    6395670036@@ -0,0 +1,118 @@
    6395770037+Results of test71:
     
    6407770157diff -Naur vim73.orig/src/testdir/test80.in vim73/src/testdir/test80.in
    6407870158--- vim73.orig/src/testdir/test80.in    1970-01-01 00:00:00.000000000 +0000
    64079 +++ vim73/src/testdir/test80.in 2012-06-03 23:09:54.348044528 +0000
     70159+++ vim73/src/testdir/test80.in 2012-07-20 20:31:11.550973645 +0000
    6408070160@@ -0,0 +1,150 @@
    6408170161+Test for *sub-replace-special* and *sub-replace-expression* on substitue().
     
    6424270322diff -Naur vim73.orig/src/testdir/test80.ok vim73/src/testdir/test80.ok
    6424370323--- vim73.orig/src/testdir/test80.ok    1970-01-01 00:00:00.000000000 +0000
    64244 +++ vim73/src/testdir/test80.ok 2012-06-03 23:09:54.348044528 +0000
     70324+++ vim73/src/testdir/test80.ok 2012-07-20 20:31:11.550973645 +0000
    6424570325@@ -0,0 +1,101 @@
    6424670326+Results of test72:
     
    6436570445diff -Naur vim73.orig/src/testdir/test81.in vim73/src/testdir/test81.in
    6436670446--- vim73.orig/src/testdir/test81.in    1970-01-01 00:00:00.000000000 +0000
    64367 +++ vim73/src/testdir/test81.in 2012-06-03 23:09:54.456047401 +0000
     70447+++ vim73/src/testdir/test81.in 2012-07-20 20:31:11.967640612 +0000
    6436870448@@ -0,0 +1,22 @@
    6436970449+Test for t movement command and 'cpo-;' setting
     
    6439170471diff -Naur vim73.orig/src/testdir/test81.ok vim73/src/testdir/test81.ok
    6439270472--- vim73.orig/src/testdir/test81.ok    1970-01-01 00:00:00.000000000 +0000
    64393 +++ vim73/src/testdir/test81.ok 2012-06-03 23:09:54.476047933 +0000
     70473+++ vim73/src/testdir/test81.ok 2012-07-20 20:31:12.014307312 +0000
    6439470474@@ -0,0 +1,6 @@
    6439570475+aaa two
     
    6440170481diff -Naur vim73.orig/src/testdir/test82.in vim73/src/testdir/test82.in
    6440270482--- vim73.orig/src/testdir/test82.in    1970-01-01 00:00:00.000000000 +0000
    64403 +++ vim73/src/testdir/test82.in 2012-06-03 23:09:54.480048039 +0000
     70483+++ vim73/src/testdir/test82.in 2012-07-20 20:31:12.027640655 +0000
    6440470484@@ -0,0 +1,93 @@
    6440570485+Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
     
    6449870578diff -Naur vim73.orig/src/testdir/test82.ok vim73/src/testdir/test82.ok
    6449970579--- vim73.orig/src/testdir/test82.ok    1970-01-01 00:00:00.000000000 +0000
    64500 +++ vim73/src/testdir/test82.ok 2012-06-03 23:09:54.480048039 +0000
     70580+++ vim73/src/testdir/test82.ok 2012-07-20 20:31:12.027640655 +0000
    6450170581@@ -0,0 +1,2 @@
    6450270582+3732 checks passed
     
    6450470584diff -Naur vim73.orig/src/testdir/test83-tags2 vim73/src/testdir/test83-tags2
    6450570585--- vim73.orig/src/testdir/test83-tags2 1970-01-01 00:00:00.000000000 +0000
    64506 +++ vim73/src/testdir/test83-tags2      2012-06-03 23:09:54.856058047 +0000
     70586+++ vim73/src/testdir/test83-tags2      2012-07-20 20:31:12.994308017 +0000
    6450770587@@ -0,0 +1,2 @@
    6450870588+!_TAG_FILE_ENCODING    cp932   //
     
    6451070590diff -Naur vim73.orig/src/testdir/test83-tags3 vim73/src/testdir/test83-tags3
    6451170591--- vim73.orig/src/testdir/test83-tags3 1970-01-01 00:00:00.000000000 +0000
    64512 +++ vim73/src/testdir/test83-tags3      2012-06-03 23:09:54.856058047 +0000
     70592+++ vim73/src/testdir/test83-tags3      2012-07-20 20:31:12.994308017 +0000
    6451370593@@ -0,0 +1,102 @@
    6451470594+!_TAG_FILE_SORTED      1       //
     
    6461670696diff -Naur vim73.orig/src/testdir/test83.in vim73/src/testdir/test83.in
    6461770697--- vim73.orig/src/testdir/test83.in    1970-01-01 00:00:00.000000000 +0000
    64618 +++ vim73/src/testdir/test83.in 2012-06-03 23:09:55.088064220 +0000
     70698+++ vim73/src/testdir/test83.in 2012-07-20 20:31:13.787641920 +0000
    6461970699@@ -0,0 +1,76 @@
    6462070700+Tests for tag search with !_TAG_FILE_ENCODING.
     
    6469670776diff -Naur vim73.orig/src/testdir/test83.ok vim73/src/testdir/test83.ok
    6469770777--- vim73.orig/src/testdir/test83.ok    1970-01-01 00:00:00.000000000 +0000
    64698 +++ vim73/src/testdir/test83.ok 2012-06-03 23:09:54.856058047 +0000
     70778+++ vim73/src/testdir/test83.ok 2012-07-20 20:31:12.997641353 +0000
    6469970779@@ -0,0 +1,4 @@
    6470070780+Results of test83
     
    6470470784diff -Naur vim73.orig/src/testdir/test84.in vim73/src/testdir/test84.in
    6470570785--- vim73.orig/src/testdir/test84.in    1970-01-01 00:00:00.000000000 +0000
    64706 +++ vim73/src/testdir/test84.in 2012-06-03 23:09:55.680079974 +0000
     70786+++ vim73/src/testdir/test84.in 2012-07-20 20:31:15.634309912 +0000
    6470770787@@ -0,0 +1,35 @@
    6470870788+Tests for curswant not changing when setting an option
     
    6474370823diff -Naur vim73.orig/src/testdir/test84.ok vim73/src/testdir/test84.ok
    6474470824--- vim73.orig/src/testdir/test84.ok    1970-01-01 00:00:00.000000000 +0000
    64745 +++ vim73/src/testdir/test84.ok 2012-06-03 23:09:55.680079974 +0000
     70825+++ vim73/src/testdir/test84.ok 2012-07-20 20:31:15.634309912 +0000
    6474670826@@ -0,0 +1,3 @@
    6474770827+tabstop 7 4
     
    6475070830diff -Naur vim73.orig/src/testdir/test85.in vim73/src/testdir/test85.in
    6475170831--- vim73.orig/src/testdir/test85.in    1970-01-01 00:00:00.000000000 +0000
    64752 +++ vim73/src/testdir/test85.in 2012-06-03 23:09:55.708080720 +0000
     70832+++ vim73/src/testdir/test85.in 2012-07-20 20:31:15.697643290 +0000
    6475370833@@ -0,0 +1,42 @@
    6475470834+Test for Lua interface and luaeval() function
     
    6479670876diff -Naur vim73.orig/src/testdir/test85.ok vim73/src/testdir/test85.ok
    6479770877--- vim73.orig/src/testdir/test85.ok    1970-01-01 00:00:00.000000000 +0000
    64798 +++ vim73/src/testdir/test85.ok 2012-06-03 23:09:55.708080720 +0000
     70878+++ vim73/src/testdir/test85.ok 2012-07-20 20:31:15.697643290 +0000
    6479970879@@ -0,0 +1,5 @@
    6480070880+1 changed line 1
     
    6480370883+dictionary with list OK
    6480470884+circular test OK
     70885diff -Naur vim73.orig/src/testdir/test86.in vim73/src/testdir/test86.in
     70886--- vim73.orig/src/testdir/test86.in    1970-01-01 00:00:00.000000000 +0000
     70887+++ vim73/src/testdir/test86.in 2012-07-20 20:31:17.340977802 +0000
     70888@@ -0,0 +1,211 @@
     70889+Tests for various python features.     vim: set ft=vim :
     70890+
     70891+STARTTEST
     70892+:so small.vim
     70893+:if !has('python') | e! test.ok | wq! test.out | endif
     70894+:py import vim
     70895+:fun Test()
     70896+:let l = []
     70897+:py l=vim.bindeval('l')
     70898+:py f=vim.bindeval('function("strlen")')
     70899+:" Extending List directly with different types
     70900+:py l.extend([1, "as'd", [1, 2, f, {'a': 1}]])
     70901+:$put =string(l)
     70902+:$put =string(l[-1])
     70903+:try
     70904+:  $put =string(l[-4])
     70905+:catch
     70906+:  $put =v:exception[:13]
     70907+:endtry
     70908+:" List assignment
     70909+:py l[0]=0
     70910+:$put =string(l)
     70911+:py l[-2]=f
     70912+:$put =string(l)
     70913+:"
     70914+:" Extending Dictionary directly with different types
     70915+:let d = {}
     70916+:py d=vim.bindeval('d')
     70917+:py d['1']='asd'
     70918+:py d['b']=[1, 2, f]
     70919+:py d['-1']={'a': 1}
     70920+:let dkeys = []
     70921+:py dk=vim.bindeval('dkeys')
     70922+:py dkeys=d.keys()
     70923+:py dkeys.sort()
     70924+:py dk.extend(dkeys)
     70925+:$put =string(dkeys)
     70926+:for [key, val] in sort(items(d))
     70927+:  $put =string(key) . ' : ' . string(val)
     70928+:  unlet key val
     70929+:endfor
     70930+:"
     70931+:" removing items with del
     70932+:py del l[2]
     70933+:$put =string(l)
     70934+:let l = range(8)
     70935+:py l=vim.bindeval('l')
     70936+:try
     70937+:   py del l[:3]
     70938+:   py del l[1:]
     70939+:catch
     70940+:   $put =v:exception
     70941+:endtry
     70942+:$put =string(l)
     70943+:"
     70944+:py del d['-1']
     70945+:$put =string(d)
     70946+:"
     70947+:" removing items out of range: silently skip items that don't exist
     70948+:let l = [0, 1, 2, 3]
     70949+:py l=vim.bindeval('l')
     70950+:" The following two ranges delete nothing as they match empty list:
     70951+:py del l[2:1]
     70952+:$put =string(l)
     70953+:py del l[2:2]
     70954+:$put =string(l)
     70955+:py del l[2:3]
     70956+:$put =string(l)
     70957+:let l = [0, 1, 2, 3]
     70958+:py l=vim.bindeval('l')
     70959+:py del l[2:4]
     70960+:$put =string(l)
     70961+:let l = [0, 1, 2, 3]
     70962+:py l=vim.bindeval('l')
     70963+:py del l[2:5]
     70964+:$put =string(l)
     70965+:let l = [0, 1, 2, 3]
     70966+:py l=vim.bindeval('l')
     70967+:py del l[2:6]
     70968+:$put =string(l)
     70969+:let l = [0, 1, 2, 3]
     70970+:py l=vim.bindeval('l')
     70971+:" The following two ranges delete nothing as they match empty list:
     70972+:py del l[-1:2]
     70973+:$put =string(l)
     70974+:py del l[-2:2]
     70975+:$put =string(l)
     70976+:py del l[-3:2]
     70977+:$put =string(l)
     70978+:let l = [0, 1, 2, 3]
     70979+:py l=vim.bindeval('l')
     70980+:py del l[-4:2]
     70981+:$put =string(l)
     70982+:let l = [0, 1, 2, 3]
     70983+:py l=vim.bindeval('l')
     70984+:py del l[-5:2]
     70985+:$put =string(l)
     70986+:let l = [0, 1, 2, 3]
     70987+:py l=vim.bindeval('l')
     70988+:py del l[-6:2]
     70989+:$put =string(l)
     70990+:"
     70991+:" Slice assignment to a list
     70992+:let l = [0, 1, 2, 3]
     70993+:py l=vim.bindeval('l')
     70994+:py l[0:0]=['a']
     70995+:$put =string(l)
     70996+:let l = [0, 1, 2, 3]
     70997+:py l=vim.bindeval('l')
     70998+:py l[1:2]=['b']
     70999+:$put =string(l)
     71000+:let l = [0, 1, 2, 3]
     71001+:py l=vim.bindeval('l')
     71002+:py l[2:4]=['c']
     71003+:$put =string(l)
     71004+:let l = [0, 1, 2, 3]
     71005+:py l=vim.bindeval('l')
     71006+:py l[4:4]=['d']
     71007+:$put =string(l)
     71008+:let l = [0, 1, 2, 3]
     71009+:py l=vim.bindeval('l')
     71010+:py l[-1:2]=['e']
     71011+:$put =string(l)
     71012+:let l = [0, 1, 2, 3]
     71013+:py l=vim.bindeval('l')
     71014+:py l[-10:2]=['f']
     71015+:$put =string(l)
     71016+:let l = [0, 1, 2, 3]
     71017+:py l=vim.bindeval('l')
     71018+:py l[2:-10]=['g']
     71019+:$put =string(l)
     71020+:let l = []
     71021+:py l=vim.bindeval('l')
     71022+:py l[0:0]=['h']
     71023+:$put =string(l)
     71024+:"
     71025+:" Locked variables
     71026+:let l = [0, 1, 2, 3]
     71027+:py l=vim.bindeval('l')
     71028+:lockvar! l
     71029+:py l[2]='i'
     71030+:$put =string(l)
     71031+:unlockvar! l
     71032+:"
     71033+:" Function calls
     71034+:function New(...)
     71035+:return ['NewStart']+a:000+['NewEnd']
     71036+:endfunction
     71037+:function DictNew(...) dict
     71038+:return ['DictNewStart']+a:000+['DictNewEnd', self]
     71039+:endfunction
     71040+:let l=[function('New'), function('DictNew')]
     71041+:py l=vim.bindeval('l')
     71042+:py l.extend(list(l[0](1, 2, 3)))
     71043+:$put =string(l)
     71044+:py l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
     71045+:$put =string(l)
     71046+:py l.extend([l[0].name])
     71047+:$put =string(l)
     71048+:try
     71049+:   py l[1](1, 2, 3)
     71050+:catch
     71051+:   $put =v:exception[:16]
     71052+:endtry
     71053+:delfunction New
     71054+:try
     71055+:   py l[0](1, 2, 3)
     71056+:catch
     71057+:   $put =v:exception[:16]
     71058+:endtry
     71059+:if has('float')
     71060+:   let l=[0.0]
     71061+:   py l=vim.bindeval('l')
     71062+:   py l.extend([0.0])
     71063+:   $put =string(l)
     71064+:else
     71065+:   $put ='[0.0, 0.0]'
     71066+:endif
     71067+:"
     71068+:" pyeval()
     71069+:let l=pyeval('range(3)')
     71070+:$put =string(l)
     71071+:let d=pyeval('{"a": "b", "c": 1, "d": ["e"]}')
     71072+:$put =sort(items(d))
     71073+:try
     71074+:   let undef=pyeval('undefined_name')
     71075+:catch
     71076+:   $put =v:exception[:13]
     71077+:endtry
     71078+:try
     71079+:   let vim=pyeval('vim')
     71080+:catch
     71081+:   $put =v:exception[:13]
     71082+:endtry
     71083+:if has('float')
     71084+:   let f=pyeval('0.0')
     71085+:   $put =string(f)
     71086+:else
     71087+:   $put ='0.0'
     71088+:endif
     71089+:endfun
     71090+:"
     71091+:call Test()
     71092+:"
     71093+:delfunc Test
     71094+:call garbagecollect(1)
     71095+:"
     71096+:/^start:/,$wq! test.out
     71097+ENDTEST
     71098+
     71099+start:
     71100diff -Naur vim73.orig/src/testdir/test86.ok vim73/src/testdir/test86.ok
     71101--- vim73.orig/src/testdir/test86.ok    1970-01-01 00:00:00.000000000 +0000
     71102+++ vim73/src/testdir/test86.ok 2012-07-20 20:31:17.340977802 +0000
     71103@@ -0,0 +1,47 @@
     71104+start:
     71105+[1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
     71106+[1, 2, function('strlen'), {'a': 1}]
     71107+Vim(put):E684:
     71108+[0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
     71109+[0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
     71110+['-1', '1', 'b']
     71111+'-1' : {'a': 1}
     71112+'1' : 'asd'
     71113+'b' : [1, 2, function('strlen')]
     71114+[0, function('strlen')]
     71115+[3]
     71116+{'1': 'asd', 'b': [1, 2, function('strlen')]}
     71117+[0, 1, 2, 3]
     71118+[0, 1, 2, 3]
     71119+[0, 1, 3]
     71120+[0, 1]
     71121+[0, 1]
     71122+[0, 1]
     71123+[0, 1, 2, 3]
     71124+[0, 1, 2, 3]
     71125+[0, 2, 3]
     71126+[2, 3]
     71127+[2, 3]
     71128+[2, 3]
     71129+['a', 0, 1, 2, 3]
     71130+[0, 'b', 2, 3]
     71131+[0, 1, 'c']
     71132+[0, 1, 2, 3, 'd']
     71133+[0, 1, 2, 'e', 3]
     71134+['f', 2, 3]
     71135+[0, 1, 'g', 2, 3]
     71136+['h']
     71137+[0, 1, 2, 3]
     71138+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
     71139+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
     71140+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
     71141+Vim(python):E725:
     71142+Vim(python):E117:
     71143+[0.0, 0.0]
     71144+[0, 1, 2]
     71145+['a', 'b']
     71146+['c', 1]
     71147+['d', ['e']]
     71148+Vim(let):E858:
     71149+Vim(let):E859:
     71150+0.0
     71151diff -Naur vim73.orig/src/testdir/test87.in vim73/src/testdir/test87.in
     71152--- vim73.orig/src/testdir/test87.in    1970-01-01 00:00:00.000000000 +0000
     71153+++ vim73/src/testdir/test87.in 2012-07-20 20:31:17.340977802 +0000
     71154@@ -0,0 +1,211 @@
     71155+Tests for various python features.     vim: set ft=vim :
     71156+
     71157+STARTTEST
     71158+:so small.vim
     71159+:if !has('python3') | e! test.ok | wq! test.out | endif
     71160+:py3 import vim
     71161+:fun Test()
     71162+:let l = []
     71163+:py3 l=vim.bindeval('l')
     71164+:py3 f=vim.bindeval('function("strlen")')
     71165+:" Extending List directly with different types
     71166+:py3 l+=[1, "as'd", [1, 2, f, {'a': 1}]]
     71167+:$put =string(l)
     71168+:$put =string(l[-1])
     71169+:try
     71170+:  $put =string(l[-4])
     71171+:catch
     71172+:  $put =v:exception[:13]
     71173+:endtry
     71174+:" List assignment
     71175+:py3 l[0]=0
     71176+:$put =string(l)
     71177+:py3 l[-2]=f
     71178+:$put =string(l)
     71179+:"
     71180+:" Extending Dictionary directly with different types
     71181+:let d = {}
     71182+:py3 d=vim.bindeval('d')
     71183+:py3 d['1']='asd'
     71184+:py3 d['b']=[1, 2, f]
     71185+:py3 d['-1']={'a': 1}
     71186+:let dkeys = []
     71187+:py3 dk=vim.bindeval('dkeys')
     71188+:py3 dkeys=d.keys()
     71189+:py3 dkeys.sort()
     71190+:py3 dk+=dkeys
     71191+:$put =string(dkeys)
     71192+:for [key, val] in sort(items(d))
     71193+:  $put =string(key) . ' : ' . string(val)
     71194+:  unlet key val
     71195+:endfor
     71196+:"
     71197+:" removing items with del
     71198+:py3 del l[2]
     71199+:$put =string(l)
     71200+:let l = range(8)
     71201+:py3 l=vim.bindeval('l')
     71202+:try
     71203+:   py3 del l[:3]
     71204+:   py3 del l[1:]
     71205+:catch
     71206+:   $put =v:exception
     71207+:endtry
     71208+:$put =string(l)
     71209+:"
     71210+:py3 del d['-1']
     71211+:$put =string(d)
     71212+:"
     71213+:" removing items out of range: silently skip items that don't exist
     71214+:let l = [0, 1, 2, 3]
     71215+:py3 l=vim.bindeval('l')
     71216+:" The following two ranges delete nothing as they match empty list:
     71217+:py3 del l[2:1]
     71218+:$put =string(l)
     71219+:py3 del l[2:2]
     71220+:$put =string(l)
     71221+:py3 del l[2:3]
     71222+:$put =string(l)
     71223+:let l = [0, 1, 2, 3]
     71224+:py3 l=vim.bindeval('l')
     71225+:py3 del l[2:4]
     71226+:$put =string(l)
     71227+:let l = [0, 1, 2, 3]
     71228+:py3 l=vim.bindeval('l')
     71229+:py3 del l[2:5]
     71230+:$put =string(l)
     71231+:let l = [0, 1, 2, 3]
     71232+:py3 l=vim.bindeval('l')
     71233+:py3 del l[2:6]
     71234+:$put =string(l)
     71235+:let l = [0, 1, 2, 3]
     71236+:py3 l=vim.bindeval('l')
     71237+:" The following two ranges delete nothing as they match empty list:
     71238+:py3 del l[-1:2]
     71239+:$put =string(l)
     71240+:py3 del l[-2:2]
     71241+:$put =string(l)
     71242+:py3 del l[-3:2]
     71243+:$put =string(l)
     71244+:let l = [0, 1, 2, 3]
     71245+:py3 l=vim.bindeval('l')
     71246+:py3 del l[-4:2]
     71247+:$put =string(l)
     71248+:let l = [0, 1, 2, 3]
     71249+:py3 l=vim.bindeval('l')
     71250+:py3 del l[-5:2]
     71251+:$put =string(l)
     71252+:let l = [0, 1, 2, 3]
     71253+:py3 l=vim.bindeval('l')
     71254+:py3 del l[-6:2]
     71255+:$put =string(l)
     71256+:"
     71257+:" Slice assignment to a list
     71258+:let l = [0, 1, 2, 3]
     71259+:py3 l=vim.bindeval('l')
     71260+:py3 l[0:0]=['a']
     71261+:$put =string(l)
     71262+:let l = [0, 1, 2, 3]
     71263+:py3 l=vim.bindeval('l')
     71264+:py3 l[1:2]=['b']
     71265+:$put =string(l)
     71266+:let l = [0, 1, 2, 3]
     71267+:py3 l=vim.bindeval('l')
     71268+:py3 l[2:4]=['c']
     71269+:$put =string(l)
     71270+:let l = [0, 1, 2, 3]
     71271+:py3 l=vim.bindeval('l')
     71272+:py3 l[4:4]=['d']
     71273+:$put =string(l)
     71274+:let l = [0, 1, 2, 3]
     71275+:py3 l=vim.bindeval('l')
     71276+:py3 l[-1:2]=['e']
     71277+:$put =string(l)
     71278+:let l = [0, 1, 2, 3]
     71279+:py3 l=vim.bindeval('l')
     71280+:py3 l[-10:2]=['f']
     71281+:$put =string(l)
     71282+:let l = [0, 1, 2, 3]
     71283+:py3 l=vim.bindeval('l')
     71284+:py3 l[2:-10]=['g']
     71285+:$put =string(l)
     71286+:let l = []
     71287+:py3 l=vim.bindeval('l')
     71288+:py3 l[0:0]=['h']
     71289+:$put =string(l)
     71290+:"
     71291+:" Locked variables
     71292+:let l = [0, 1, 2, 3]
     71293+:py3 l=vim.bindeval('l')
     71294+:lockvar! l
     71295+:py3 l[2]='i'
     71296+:$put =string(l)
     71297+:unlockvar! l
     71298+:"
     71299+:" Function calls
     71300+:function New(...)
     71301+:return ['NewStart']+a:000+['NewEnd']
     71302+:endfunction
     71303+:function DictNew(...) dict
     71304+:return ['DictNewStart']+a:000+['DictNewEnd', self]
     71305+:endfunction
     71306+:let l=[function('New'), function('DictNew')]
     71307+:py3 l=vim.bindeval('l')
     71308+:py3 l.extend(list(l[0](1, 2, 3)))
     71309+:$put =string(l)
     71310+:py3 l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
     71311+:$put =string(l)
     71312+:py3 l+=[l[0].name]
     71313+:$put =string(l)
     71314+:try
     71315+:   py3 l[1](1, 2, 3)
     71316+:catch
     71317+:   $put =v:exception[:13]
     71318+:endtry
     71319+:delfunction New
     71320+:try
     71321+:   py3 l[0](1, 2, 3)
     71322+:catch
     71323+:   $put =v:exception[:13]
     71324+:endtry
     71325+:if has('float')
     71326+:   let l=[0.0]
     71327+:   py3 l=vim.bindeval('l')
     71328+:   py3 l.extend([0.0])
     71329+:   $put =string(l)
     71330+:else
     71331+:   $put ='[0.0, 0.0]'
     71332+:endif
     71333+:"
     71334+:" py3eval()
     71335+:let l=py3eval('[0, 1, 2]')
     71336+:$put =string(l)
     71337+:let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}')
     71338+:$put =sort(items(d))
     71339+:try
     71340+:   let undef=py3eval('undefined_name')
     71341+:catch
     71342+:   $put =v:exception[:13]
     71343+:endtry
     71344+:try
     71345+:   let vim=py3eval('vim')
     71346+:catch
     71347+:   $put =v:exception[:13]
     71348+:endtry
     71349+:if has('float')
     71350+:   let f=py3eval('0.0')
     71351+:   $put =string(f)
     71352+:else
     71353+:   $put ='0.0'
     71354+:endif
     71355+:endfun
     71356+:"
     71357+:call Test()
     71358+:"
     71359+:delfunc Test
     71360+:call garbagecollect(1)
     71361+:"
     71362+:/^start:/,$wq! test.out
     71363+ENDTEST
     71364+
     71365+start:
     71366diff -Naur vim73.orig/src/testdir/test87.ok vim73/src/testdir/test87.ok
     71367--- vim73.orig/src/testdir/test87.ok    1970-01-01 00:00:00.000000000 +0000
     71368+++ vim73/src/testdir/test87.ok 2012-07-20 20:31:17.340977802 +0000
     71369@@ -0,0 +1,47 @@
     71370+start:
     71371+[1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
     71372+[1, 2, function('strlen'), {'a': 1}]
     71373+Vim(put):E684:
     71374+[0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
     71375+[0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
     71376+['-1', '1', 'b']
     71377+'-1' : {'a': 1}
     71378+'1' : 'asd'
     71379+'b' : [1, 2, function('strlen')]
     71380+[0, function('strlen')]
     71381+[3]
     71382+{'1': 'asd', 'b': [1, 2, function('strlen')]}
     71383+[0, 1, 2, 3]
     71384+[0, 1, 2, 3]
     71385+[0, 1, 3]
     71386+[0, 1]
     71387+[0, 1]
     71388+[0, 1]
     71389+[0, 1, 2, 3]
     71390+[0, 1, 2, 3]
     71391+[0, 2, 3]
     71392+[2, 3]
     71393+[2, 3]
     71394+[2, 3]
     71395+['a', 0, 1, 2, 3]
     71396+[0, 'b', 2, 3]
     71397+[0, 1, 'c']
     71398+[0, 1, 2, 3, 'd']
     71399+[0, 1, 2, 'e', 3]
     71400+['f', 2, 3]
     71401+[0, 1, 'g', 2, 3]
     71402+['h']
     71403+[0, 1, 2, 3]
     71404+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
     71405+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
     71406+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
     71407+Vim(py3):E725:
     71408+Vim(py3):E117:
     71409+[0.0, 0.0]
     71410+[0, 1, 2]
     71411+['a', 'b']
     71412+['c', 1]
     71413+['d', ['e']]
     71414+Vim(let):E860:
     71415+Vim(let):E861:
     71416+0.0
    6480571417diff -Naur vim73.orig/src/typemap vim73/src/typemap
    64806 --- vim73.orig/src/typemap      2012-06-03 23:09:52.924006631 +0000
    64807 +++ vim73/src/typemap   2012-06-03 23:09:55.408072735 +0000
     71418--- vim73.orig/src/typemap      2010-05-15 11:04:10.000000000 +0000
     71419+++ vim73/src/typemap   2012-07-20 20:31:14.784309303 +0000
    6480871420@@ -6,7 +6,7 @@
    6480971421 T_VIOBJNOMUNGE
     
    6481671428        }
    6481771429diff -Naur vim73.orig/src/ui.c vim73/src/ui.c
    64818 --- vim73.orig/src/ui.c 2012-06-03 23:09:52.920006524 +0000
    64819 +++ vim73/src/ui.c      2012-06-03 23:09:55.412072842 +0000
     71430--- vim73.orig/src/ui.c 2010-08-08 13:17:30.000000000 +0000
     71431+++ vim73/src/ui.c      2012-07-20 20:31:18.067644988 +0000
    6482071432@@ -58,7 +58,7 @@
    6482171433 #endif
     
    6482771439  * When executing an external program, there may be some typed characters that
    6482871440  * are not consumed by it.  Give them back to ui_inchar() and they are stored
    64829 @@ -469,7 +469,7 @@
     71441@@ -381,6 +381,8 @@
     71442 
     71443 #if defined(FEAT_CLIPBOARD) || defined(PROTO)
     71444 
     71445+static void clip_copy_selection __ARGS((VimClipboard *clip));
     71446+
     71447 /*
     71448  * Selection stuff using Visual mode, for cutting and pasting text to other
     71449  * windows.
     71450@@ -423,9 +425,10 @@
     71451  * this is called whenever VIsual mode is ended.
     71452  */
     71453     void
     71454-clip_update_selection()
     71455+clip_update_selection(clip)
     71456+    VimClipboard    *clip;
     71457 {
     71458-    pos_T    start, end;
     71459+    pos_T          start, end;
     71460 
     71461     /* If visual mode is only due to a redo command ("."), then ignore it */
     71462     if (!redo_VIsual_busy && VIsual_active && (State & NORMAL))
     71463@@ -444,17 +447,17 @@
     71464            start = curwin->w_cursor;
     71465            end = VIsual;
     71466        }
     71467-       if (!equalpos(clip_star.start, start)
     71468-               || !equalpos(clip_star.end, end)
     71469-               || clip_star.vmode != VIsual_mode)
     71470-       {
     71471-           clip_clear_selection();
     71472-           clip_star.start = start;
     71473-           clip_star.end = end;
     71474-           clip_star.vmode = VIsual_mode;
     71475-           clip_free_selection(&clip_star);
     71476-           clip_own_selection(&clip_star);
     71477-           clip_gen_set_selection(&clip_star);
     71478+       if (!equalpos(clip->start, start)
     71479+               || !equalpos(clip->end, end)
     71480+               || clip->vmode != VIsual_mode)
     71481+       {
     71482+           clip_clear_selection(clip);
     71483+           clip->start = start;
     71484+           clip->end = end;
     71485+           clip->vmode = VIsual_mode;
     71486+           clip_free_selection(clip);
     71487+           clip_own_selection(clip);
     71488+           clip_gen_set_selection(clip);
     71489        }
     71490     }
     71491 }
     71492@@ -469,13 +472,13 @@
    6483071493      */
    6483171494 #ifdef FEAT_X11
     
    6483671499     {
    6483771500        int was_owned = cbd->owned;
    64838 @@ -1609,7 +1609,7 @@
     71501 
     71502        cbd->owned = (clip_gen_own_selection(cbd) == OK);
     71503-       if (!was_owned && cbd == &clip_star)
     71504+       if (!was_owned && (cbd == &clip_star || cbd == &clip_plus))
     71505        {
     71506            /* May have to show a different kind of highlighting for the
     71507             * selected area.  There is no specific redraw command for this,
     71508@@ -483,7 +486,8 @@
     71509            if (cbd->owned
     71510                    && (get_real_state() == VISUAL
     71511                                            || get_real_state() == SELECTMODE)
     71512-                   && clip_isautosel()
     71513+                   && (cbd == &clip_star ? clip_isautosel_star()
     71514+                                                     : clip_isautosel_plus())
     71515                    && hl_attr(HLF_V) != hl_attr(HLF_VNC))
     71516                redraw_curbuf_later(INVERTED_ALL);
     71517        }
     71518@@ -502,12 +506,15 @@
     71519 #ifdef FEAT_X11
     71520     int            was_owned = cbd->owned;
     71521 #endif
     71522-    int     visual_selection = (cbd == &clip_star);
     71523+    int     visual_selection = FALSE;
     71524+
     71525+    if (cbd == &clip_star || cbd == &clip_plus)
     71526+       visual_selection = TRUE;
     71527 
     71528     clip_free_selection(cbd);
     71529     cbd->owned = FALSE;
     71530     if (visual_selection)
     71531-       clip_clear_selection();
     71532+       clip_clear_selection(cbd);
     71533     clip_gen_lose_selection(cbd);
     71534 #ifdef FEAT_X11
     71535     if (visual_selection)
     71536@@ -518,7 +525,8 @@
     71537        if (was_owned
     71538                && (get_real_state() == VISUAL
     71539                                            || get_real_state() == SELECTMODE)
     71540-               && clip_isautosel()
     71541+               && (cbd == &clip_star ?
     71542+                               clip_isautosel_star() : clip_isautosel_plus())
     71543                && hl_attr(HLF_V) != hl_attr(HLF_VNC))
     71544        {
     71545            update_curbuf(INVERTED_ALL);
     71546@@ -534,18 +542,18 @@
     71547 #endif
     71548 }
     71549 
     71550-    void
     71551-clip_copy_selection()
     71552+    static void
     71553+clip_copy_selection(clip)
     71554+    VimClipboard       *clip;
     71555 {
     71556-    if (VIsual_active && (State & NORMAL) && clip_star.available)
     71557+    if (VIsual_active && (State & NORMAL) && clip->available)
     71558     {
     71559-       if (clip_isautosel())
     71560-           clip_update_selection();
     71561-       clip_free_selection(&clip_star);
     71562-       clip_own_selection(&clip_star);
     71563-       if (clip_star.owned)
     71564-           clip_get_selection(&clip_star);
     71565-       clip_gen_set_selection(&clip_star);
     71566+       clip_update_selection(clip);
     71567+       clip_free_selection(clip);
     71568+       clip_own_selection(clip);
     71569+       if (clip->owned)
     71570+           clip_get_selection(clip);
     71571+       clip_gen_set_selection(clip);
     71572     }
     71573 }
     71574 
     71575@@ -555,21 +563,38 @@
     71576     void
     71577 clip_auto_select()
     71578 {
     71579-    if (clip_isautosel())
     71580-       clip_copy_selection();
     71581+    if (clip_isautosel_star())
     71582+       clip_copy_selection(&clip_star);
     71583+    if (clip_isautosel_plus())
     71584+       clip_copy_selection(&clip_plus);
     71585 }
     71586 
     71587 /*
     71588- * Return TRUE if automatic selection of Visual area is desired.
     71589+ * Return TRUE if automatic selection of Visual area is desired for the *
     71590+ * register.
     71591  */
     71592     int
     71593-clip_isautosel()
     71594+clip_isautosel_star()
     71595 {
     71596     return (
     71597 #ifdef FEAT_GUI
     71598            gui.in_use ? (vim_strchr(p_go, GO_ASEL) != NULL) :
     71599 #endif
     71600-           clip_autoselect);
     71601+           clip_autoselect_star);
     71602+}
     71603+
     71604+/*
     71605+ * Return TRUE if automatic selection of Visual area is desired for the +
     71606+ * register.
     71607+ */
     71608+    int
     71609+clip_isautosel_plus()
     71610+{
     71611+    return (
     71612+#ifdef FEAT_GUI
     71613+           gui.in_use ? (vim_strchr(p_go, GO_ASELPLUS) != NULL) :
     71614+#endif
     71615+           clip_autoselect_plus);
     71616 }
     71617 
     71618 
     71619@@ -657,7 +682,7 @@
     71620     VimClipboard       *cb = &clip_star;
     71621 
     71622     if (cb->state == SELECT_DONE)
     71623-       clip_clear_selection();
     71624+       clip_clear_selection(cb);
     71625 
     71626     row = check_row(row);
     71627     col = check_col(col);
     71628@@ -749,7 +774,7 @@
     71629        printf("Selection ended: (%u,%u) to (%u,%u)\n", cb->start.lnum,
     71630                cb->start.col, cb->end.lnum, cb->end.col);
     71631 #endif
     71632-       if (clip_isautosel()
     71633+       if (clip_isautosel_star()
     71634                || (
     71635 #ifdef FEAT_GUI
     71636                    gui.in_use ? (vim_strchr(p_go, GO_ASELML) != NULL) :
     71637@@ -932,16 +957,16 @@
     71638  * Called from outside to clear selected region from the display
     71639  */
     71640     void
     71641-clip_clear_selection()
     71642+clip_clear_selection(cbd)
     71643+    VimClipboard    *cbd;
     71644 {
     71645-    VimClipboard    *cb = &clip_star;
     71646 
     71647-    if (cb->state == SELECT_CLEARED)
     71648+    if (cbd->state == SELECT_CLEARED)
     71649        return;
     71650 
     71651-    clip_invert_area((int)cb->start.lnum, cb->start.col, (int)cb->end.lnum,
     71652-                                                    cb->end.col, CLIP_CLEAR);
     71653-    cb->state = SELECT_CLEARED;
     71654+    clip_invert_area((int)cbd->start.lnum, cbd->start.col, (int)cbd->end.lnum,
     71655+                                                    cbd->end.col, CLIP_CLEAR);
     71656+    cbd->state = SELECT_CLEARED;
     71657 }
     71658 
     71659 /*
     71660@@ -954,7 +979,7 @@
     71661     if (clip_star.state == SELECT_DONE
     71662            && row2 >= clip_star.start.lnum
     71663            && row1 <= clip_star.end.lnum)
     71664-       clip_clear_selection();
     71665+       clip_clear_selection(&clip_star);
     71666 }
     71667 
     71668 /*
     71669@@ -1609,7 +1634,7 @@
    6483971670 
    6484071671 #if defined(FEAT_HANGULIN) || defined(PROTO)
     
    6484571676     int            len;
    6484671677 {
    64847 @@ -1917,6 +1917,7 @@
     71678@@ -1917,6 +1942,7 @@
    6484871679 static Atom    vim_atom;       /* Vim's own special selection format */
    6484971680 #ifdef FEAT_MBYTE
     
    6485371684 static Atom    compound_text_atom;
    6485471685 static Atom    text_atom;
    64855 @@ -1930,6 +1931,7 @@
     71686@@ -1930,6 +1956,7 @@
    6485671687     vim_atom          = XInternAtom(dpy, VIM_ATOM_NAME,   False);
    6485771688 #ifdef FEAT_MBYTE
     
    6486171692     compound_text_atom = XInternAtom(dpy, "COMPOUND_TEXT", False);
    6486271693     text_atom         = XInternAtom(dpy, "TEXT",          False);
    64863 @@ -1944,10 +1946,9 @@
     71694@@ -1944,10 +1971,9 @@
    6486471695  */
    6486571696 
     
    6487371704 /*
    6487471705  * Property callback to get a timestamp for XtOwnSelection.
    64875 @@ -1985,8 +1986,17 @@
     71706@@ -1985,8 +2011,17 @@
    6487671707        return;
    6487771708 
     
    6489371724 
    6489471725     void
    64895 @@ -1997,8 +2007,6 @@
     71726@@ -1997,8 +2032,6 @@
    6489671727            /*(XtEventHandler)*/clip_x11_timestamp_cb, (XtPointer)NULL);
    6489771728 }
     
    6490271733 clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
    6490371734                              format)
    64904 @@ -2010,7 +2018,7 @@
     71735@@ -2010,7 +2043,7 @@
    6490571736     long_u     *length;
    6490671737     int                *format;
     
    6491171742     char_u     *p;
    6491271743     char       **text_list = NULL;
    64913 @@ -2030,7 +2038,6 @@
     71744@@ -2030,7 +2063,6 @@
    6491471745        *(int *)success = FALSE;
    6491571746        return;
     
    6491971750     len = *length;
    6492071751     if (*type == vim_atom)
    64921 @@ -2069,7 +2076,11 @@
     71752@@ -2069,7 +2101,11 @@
    6492271753     }
    6492371754 #endif
     
    6493271763                enc_dbcs != 0 &&
    6493371764 #endif
    64934 @@ -2123,7 +2134,7 @@
     71765@@ -2123,7 +2159,7 @@
    6493571766 #else
    6493671767            1
     
    6494171772        switch (i)
    6494271773        {
    64943 @@ -2131,10 +2142,18 @@
     71774@@ -2131,10 +2167,18 @@
    6494471775            case 0:  type = vimenc_atom;        break;
    6494571776 #endif
     
    6496271793        XtGetSelectionValue(myShell, cbd->sel_atom, type,
    6496371794            clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
    64964 @@ -2225,18 +2244,23 @@
     71795@@ -2225,18 +2269,23 @@
    6496571796     {
    6496671797        Atom *array;
     
    6498871819        /* This used to be: *format = sizeof(Atom) * 8; but that caused
    6498971820         * crashes on 64 bit machines. (Peter Derr) */
    64990 @@ -2248,6 +2272,7 @@
     71821@@ -2248,6 +2297,7 @@
    6499171822     if (       *target != XA_STRING
    6499271823 #ifdef FEAT_MBYTE
     
    6499671827            && *target != vim_atom
    6499771828            && *target != text_atom
    64998 @@ -2277,13 +2302,16 @@
     71829@@ -2277,13 +2327,16 @@
    6499971830        return False;
    6500071831     }
     
    6501771848        XTextProperty   text_prop;
    6501871849        char            *string_nt = (char *)alloc((unsigned)*length + 1);
    65019 @@ -2336,7 +2364,7 @@
     71850@@ -2336,7 +2389,7 @@
    6502071851 
    6502171852     void
     
    6502671857 {
    6502771858     XtDisownSelection(myShell, cbd->sel_atom, CurrentTime);
    65028 @@ -2344,14 +2372,29 @@
     71859@@ -2344,14 +2397,29 @@
    6502971860 
    6503071861     int
     
    6506371894     return OK;
    6506471895diff -Naur vim73.orig/src/undo.c vim73/src/undo.c
    65065 --- vim73.orig/src/undo.c       2012-06-03 23:09:52.952007375 +0000
    65066 +++ vim73/src/undo.c    2012-06-03 23:09:55.916086255 +0000
     71896--- vim73.orig/src/undo.c       2010-08-07 10:48:15.000000000 +0000
     71897+++ vim73/src/undo.c    2012-07-20 20:31:16.354310429 +0000
    6506771898@@ -81,10 +81,6 @@
    6506871899 #define UH_MAGIC 0x18dade      /* value for uh_magic when in use */
     
    6516471995 #if defined(FEAT_EVAL) || defined(PROTO)
    6516571996diff -Naur vim73.orig/src/version.c vim73/src/version.c
    65166 --- vim73.orig/src/version.c    2012-06-03 23:09:52.932006845 +0000
    65167 +++ vim73/src/version.c 2012-06-03 23:09:55.964087533 +0000
     71997--- vim73.orig/src/version.c    2010-08-01 13:45:48.000000000 +0000
     71998+++ vim73/src/version.c 2012-07-20 20:31:18.344311852 +0000
    6516871999@@ -379,6 +379,11 @@
    6516972000 # else
     
    6519072021        "+path_extra",
    6519172022 #else
    65192 @@ -715,127 +715,1200 @@
     72023@@ -715,127 +715,1340 @@
    6519372024 static int included_patches[] =
    6519472025 {   /* Add new patch number below this line */
     
    6520672037-static char *(extra_patches[]) =
    6520772038-{   /* Add your patch description below this line */
    65208 +    538,
     72039+    608,
    6520972040 /**/
    6521072041-    NULL
     
    6531672147-    MSG_PUTS(_("\nRISC OS version"));
    6531772148-#endif
     72149+    607,
     72150+/**/
     72151+    606,
     72152+/**/
     72153+    605,
     72154+/**/
     72155+    604,
     72156+/**/
     72157+    603,
     72158+/**/
     72159+    602,
     72160+/**/
     72161+    601,
     72162+/**/
     72163+    600,
     72164+/**/
     72165+    599,
     72166+/**/
     72167+    598,
     72168+/**/
     72169+    597,
     72170+/**/
     72171+    596,
     72172+/**/
     72173+    595,
     72174+/**/
     72175+    594,
     72176+/**/
     72177+    593,
     72178+/**/
     72179+    592,
     72180+/**/
     72181+    591,
     72182+/**/
     72183+    590,
     72184+/**/
     72185+    589,
     72186+/**/
     72187+    588,
     72188+/**/
     72189+    587,
     72190+/**/
     72191+    586,
     72192+/**/
     72193+    585,
     72194+/**/
     72195+    584,
     72196+/**/
     72197+    583,
     72198+/**/
     72199+    582,
     72200+/**/
     72201+    581,
     72202+/**/
     72203+    580,
     72204+/**/
     72205+    579,
     72206+/**/
     72207+    578,
     72208+/**/
     72209+    577,
     72210+/**/
     72211+    576,
     72212+/**/
     72213+    575,
     72214+/**/
     72215+    574,
     72216+/**/
     72217+    573,
     72218+/**/
     72219+    572,
     72220+/**/
     72221+    571,
     72222+/**/
     72223+    570,
     72224+/**/
     72225+    569,
     72226+/**/
     72227+    568,
     72228+/**/
     72229+    567,
     72230+/**/
     72231+    566,
     72232+/**/
     72233+    565,
     72234+/**/
     72235+    564,
     72236+/**/
     72237+    563,
     72238+/**/
     72239+    562,
     72240+/**/
     72241+    561,
     72242+/**/
     72243+    560,
     72244+/**/
     72245+    559,
     72246+/**/
     72247+    558,
     72248+/**/
     72249+    557,
     72250+/**/
     72251+    556,
     72252+/**/
     72253+    555,
     72254+/**/
     72255+    554,
     72256+/**/
     72257+    553,
     72258+/**/
     72259+    552,
     72260+/**/
     72261+    551,
     72262+/**/
     72263+    550,
     72264+/**/
     72265+    549,
     72266+/**/
     72267+    548,
     72268+/**/
     72269+    547,
     72270+/**/
     72271+    546,
     72272+/**/
     72273+    545,
     72274+/**/
     72275+    544,
     72276+/**/
     72277+    543,
     72278+/**/
     72279+    542,
     72280+/**/
     72281+    541,
     72282+/**/
     72283+    540,
     72284+/**/
     72285+    539,
     72286+/**/
     72287+    538,
     72288+/**/
    6531872289+    537,
    6531972290+/**/
     
    6651173482     MSG_PUTS(_("\nOpenVMS version"));
    6651273483 # ifdef HAVE_PATHDEF
    66513 @@ -1262,14 +2335,11 @@
     73484@@ -1262,14 +2475,11 @@
    6651473485        if (highest_patch())
    6651573486        {
     
    6653073501            else
    6653173502                sprintf((char *)vers + 3, ".%d", highest_patch());
    66532 diff -Naur vim73.orig/src/version.c.orig vim73/src/version.c.orig
    66533 --- vim73.orig/src/version.c.orig       1970-01-01 00:00:00.000000000 +0000
    66534 +++ vim73/src/version.c.orig    2012-06-03 23:09:54.144039098 +0000
    66535 @@ -0,0 +1,1691 @@
    66536 +/* vi:set ts=8 sts=4 sw=4:
    66537 + *
    66538 + * VIM - Vi IMproved           by Bram Moolenaar
    66539 + *
    66540 + * Do ":help uganda"  in Vim to read copying and usage conditions.
    66541 + * Do ":help credits" in Vim to see a list of people who contributed.
    66542 + * See README.txt for an overview of the Vim source code.
    66543 + */
    66544 +
    66545 +#include "vim.h"
    66546 +
    66547 +#ifdef AMIGA
    66548 +# include <time.h>     /* for time() */
    66549 +#endif
    66550 +
    66551 +/*
    66552 + * Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred)
    66553 + * It has been changed beyond recognition since then.
    66554 + *
    66555 + * Differences between version 6.x and 7.x can be found with ":help version7".
    66556 + * Differences between version 5.x and 6.x can be found with ":help version6".
    66557 + * Differences between version 4.x and 5.x can be found with ":help version5".
    66558 + * Differences between version 3.0 and 4.x can be found with ":help version4".
    66559 + * All the remarks about older versions have been removed, they are not very
    66560 + * interesting.
    66561 + */
    66562 +
    66563 +#include "version.h"
    66564 +
    66565 +char           *Version = VIM_VERSION_SHORT;
    66566 +static char    *mediumVersion = VIM_VERSION_MEDIUM;
    66567 +
    66568 +#if defined(HAVE_DATE_TIME) || defined(PROTO)
    66569 +# if (defined(VMS) && defined(VAXC)) || defined(PROTO)
    66570 +char   longVersion[sizeof(VIM_VERSION_LONG_DATE) + sizeof(__DATE__)
    66571 +                                                     + sizeof(__TIME__) + 3];
    66572 +    void
    66573 +make_version()
    66574 +{
    66575 +    /*
    66576 +     * Construct the long version string.  Necessary because
    66577 +     * VAX C can't catenate strings in the preprocessor.
    66578 +     */
    66579 +    strcpy(longVersion, VIM_VERSION_LONG_DATE);
    66580 +    strcat(longVersion, __DATE__);
    66581 +    strcat(longVersion, " ");
    66582 +    strcat(longVersion, __TIME__);
    66583 +    strcat(longVersion, ")");
    66584 +}
    66585 +# else
    66586 +char   *longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
    66587 +# endif
    66588 +#else
    66589 +char   *longVersion = VIM_VERSION_LONG;
    66590 +#endif
    66591 +
    66592 +static void version_msg __ARGS((char *s));
    66593 +
    66594 +static char *(features[]) =
    66595 +{
    66596 +#ifdef AMIGA           /* only for Amiga systems */
    66597 +# ifdef FEAT_ARP
    66598 +       "+ARP",
    66599 +# else
    66600 +       "-ARP",
    66601 +# endif
    66602 +#endif
    66603 +#ifdef FEAT_ARABIC
    66604 +       "+arabic",
    66605 +#else
    66606 +       "-arabic",
    66607 +#endif
    66608 +#ifdef FEAT_AUTOCMD
    66609 +       "+autocmd",
    66610 +#else
    66611 +       "-autocmd",
    66612 +#endif
    66613 +#ifdef FEAT_BEVAL
    66614 +       "+balloon_eval",
    66615 +#else
    66616 +       "-balloon_eval",
    66617 +#endif
    66618 +#ifdef FEAT_BROWSE
    66619 +       "+browse",
    66620 +#else
    66621 +       "-browse",
    66622 +#endif
    66623 +#ifdef NO_BUILTIN_TCAPS
    66624 +       "-builtin_terms",
    66625 +#endif
    66626 +#ifdef SOME_BUILTIN_TCAPS
    66627 +       "+builtin_terms",
    66628 +#endif
    66629 +#ifdef ALL_BUILTIN_TCAPS
    66630 +       "++builtin_terms",
    66631 +#endif
    66632 +#ifdef FEAT_BYTEOFF
    66633 +       "+byte_offset",
    66634 +#else
    66635 +       "-byte_offset",
    66636 +#endif
    66637 +#ifdef FEAT_CINDENT
    66638 +       "+cindent",
    66639 +#else
    66640 +       "-cindent",
    66641 +#endif
    66642 +#ifdef FEAT_CLIENTSERVER
    66643 +       "+clientserver",
    66644 +#else
    66645 +       "-clientserver",
    66646 +#endif
    66647 +#ifdef FEAT_CLIPBOARD
    66648 +       "+clipboard",
    66649 +#else
    66650 +       "-clipboard",
    66651 +#endif
    66652 +#ifdef FEAT_CMDL_COMPL
    66653 +       "+cmdline_compl",
    66654 +#else
    66655 +       "-cmdline_compl",
    66656 +#endif
    66657 +#ifdef FEAT_CMDHIST
    66658 +       "+cmdline_hist",
    66659 +#else
    66660 +       "-cmdline_hist",
    66661 +#endif
    66662 +#ifdef FEAT_CMDL_INFO
    66663 +       "+cmdline_info",
    66664 +#else
    66665 +       "-cmdline_info",
    66666 +#endif
    66667 +#ifdef FEAT_COMMENTS
    66668 +       "+comments",
    66669 +#else
    66670 +       "-comments",
    66671 +#endif
    66672 +#ifdef FEAT_CONCEAL
    66673 +       "+conceal",
    66674 +#else
    66675 +       "-conceal",
    66676 +#endif
    66677 +#ifdef FEAT_CRYPT
    66678 +       "+cryptv",
    66679 +#else
    66680 +       "-cryptv",
    66681 +#endif
    66682 +#ifdef FEAT_CSCOPE
    66683 +       "+cscope",
    66684 +#else
    66685 +       "-cscope",
    66686 +#endif
    66687 +#ifdef FEAT_CURSORBIND
    66688 +       "+cursorbind",
    66689 +#else
    66690 +       "-cursorbind",
    66691 +#endif
    66692 +#ifdef CURSOR_SHAPE
    66693 +       "+cursorshape",
    66694 +#else
    66695 +       "-cursorshape",
    66696 +#endif
    66697 +#if defined(FEAT_CON_DIALOG) && defined(FEAT_GUI_DIALOG)
    66698 +       "+dialog_con_gui",
    66699 +#else
    66700 +# if defined(FEAT_CON_DIALOG)
    66701 +       "+dialog_con",
    66702 +# else
    66703 +#  if defined(FEAT_GUI_DIALOG)
    66704 +       "+dialog_gui",
    66705 +#  else
    66706 +       "-dialog",
    66707 +#  endif
    66708 +# endif
    66709 +#endif
    66710 +#ifdef FEAT_DIFF
    66711 +       "+diff",
    66712 +#else
    66713 +       "-diff",
    66714 +#endif
    66715 +#ifdef FEAT_DIGRAPHS
    66716 +       "+digraphs",
    66717 +#else
    66718 +       "-digraphs",
    66719 +#endif
    66720 +#ifdef FEAT_DND
    66721 +       "+dnd",
    66722 +#else
    66723 +       "-dnd",
    66724 +#endif
    66725 +#ifdef EBCDIC
    66726 +       "+ebcdic",
    66727 +#else
    66728 +       "-ebcdic",
    66729 +#endif
    66730 +#ifdef FEAT_EMACS_TAGS
    66731 +       "+emacs_tags",
    66732 +#else
    66733 +       "-emacs_tags",
    66734 +#endif
    66735 +#ifdef FEAT_EVAL
    66736 +       "+eval",
    66737 +#else
    66738 +       "-eval",
    66739 +#endif
    66740 +#ifdef FEAT_EX_EXTRA
    66741 +       "+ex_extra",
    66742 +#else
    66743 +       "-ex_extra",
    66744 +#endif
    66745 +#ifdef FEAT_SEARCH_EXTRA
    66746 +       "+extra_search",
    66747 +#else
    66748 +       "-extra_search",
    66749 +#endif
    66750 +#ifdef FEAT_FKMAP
    66751 +       "+farsi",
    66752 +#else
    66753 +       "-farsi",
    66754 +#endif
    66755 +#ifdef FEAT_SEARCHPATH
    66756 +       "+file_in_path",
    66757 +#else
    66758 +       "-file_in_path",
    66759 +#endif
    66760 +#ifdef FEAT_FIND_ID
    66761 +       "+find_in_path",
    66762 +#else
    66763 +       "-find_in_path",
    66764 +#endif
    66765 +#ifdef FEAT_FLOAT
    66766 +       "+float",
    66767 +#else
    66768 +       "-float",
    66769 +#endif
    66770 +#ifdef FEAT_FOLDING
    66771 +       "+folding",
    66772 +#else
    66773 +       "-folding",
    66774 +#endif
    66775 +#ifdef FEAT_FOOTER
    66776 +       "+footer",
    66777 +#else
    66778 +       "-footer",
    66779 +#endif
    66780 +           /* only interesting on Unix systems */
    66781 +#if !defined(USE_SYSTEM) && defined(UNIX)
    66782 +       "+fork()",
    66783 +#endif
    66784 +#ifdef FEAT_GETTEXT
    66785 +# ifdef DYNAMIC_GETTEXT
    66786 +       "+gettext/dyn",
    66787 +# else
    66788 +       "+gettext",
    66789 +# endif
    66790 +#else
    66791 +       "-gettext",
    66792 +#endif
    66793 +#ifdef FEAT_HANGULIN
    66794 +       "+hangul_input",
    66795 +#else
    66796 +       "-hangul_input",
    66797 +#endif
    66798 +#if (defined(HAVE_ICONV_H) && defined(USE_ICONV)) || defined(DYNAMIC_ICONV)
    66799 +# ifdef DYNAMIC_ICONV
    66800 +       "+iconv/dyn",
    66801 +# else
    66802 +       "+iconv",
    66803 +# endif
    66804 +#else
    66805 +       "-iconv",
    66806 +#endif
    66807 +#ifdef FEAT_INS_EXPAND
    66808 +       "+insert_expand",
    66809 +#else
    66810 +       "-insert_expand",
    66811 +#endif
    66812 +#ifdef FEAT_JUMPLIST
    66813 +       "+jumplist",
    66814 +#else
    66815 +       "-jumplist",
    66816 +#endif
    66817 +#ifdef FEAT_KEYMAP
    66818 +       "+keymap",
    66819 +#else
    66820 +       "-keymap",
    66821 +#endif
    66822 +#ifdef FEAT_LANGMAP
    66823 +       "+langmap",
    66824 +#else
    66825 +       "-langmap",
    66826 +#endif
    66827 +#ifdef FEAT_LIBCALL
    66828 +       "+libcall",
    66829 +#else
    66830 +       "-libcall",
    66831 +#endif
    66832 +#ifdef FEAT_LINEBREAK
    66833 +       "+linebreak",
    66834 +#else
    66835 +       "-linebreak",
    66836 +#endif
    66837 +#ifdef FEAT_LISP
    66838 +       "+lispindent",
    66839 +#else
    66840 +       "-lispindent",
    66841 +#endif
    66842 +#ifdef FEAT_LISTCMDS
    66843 +       "+listcmds",
    66844 +#else
    66845 +       "-listcmds",
    66846 +#endif
    66847 +#ifdef FEAT_LOCALMAP
    66848 +       "+localmap",
    66849 +#else
    66850 +       "-localmap",
    66851 +#endif
    66852 +#ifdef FEAT_LUA
    66853 +# ifdef DYNAMIC_LUA
    66854 +       "+lua/dyn",
    66855 +# else
    66856 +       "+lua",
    66857 +# endif
    66858 +#else
    66859 +       "-lua",
    66860 +#endif
    66861 +#ifdef FEAT_MENU
    66862 +       "+menu",
    66863 +#else
    66864 +       "-menu",
    66865 +#endif
    66866 +#ifdef FEAT_SESSION
    66867 +       "+mksession",
    66868 +#else
    66869 +       "-mksession",
    66870 +#endif
    66871 +#ifdef FEAT_MODIFY_FNAME
    66872 +       "+modify_fname",
    66873 +#else
    66874 +       "-modify_fname",
    66875 +#endif
    66876 +#ifdef FEAT_MOUSE
    66877 +       "+mouse",
    66878 +#  ifdef FEAT_MOUSESHAPE
    66879 +       "+mouseshape",
    66880 +#  else
    66881 +       "-mouseshape",
    66882 +#  endif
    66883 +# else
    66884 +       "-mouse",
    66885 +#endif
    66886 +#if defined(UNIX) || defined(VMS)
    66887 +# ifdef FEAT_MOUSE_DEC
    66888 +       "+mouse_dec",
    66889 +# else
    66890 +       "-mouse_dec",
    66891 +# endif
    66892 +# ifdef FEAT_MOUSE_GPM
    66893 +       "+mouse_gpm",
    66894 +# else
    66895 +       "-mouse_gpm",
    66896 +# endif
    66897 +# ifdef FEAT_MOUSE_JSB
    66898 +       "+mouse_jsbterm",
    66899 +# else
    66900 +       "-mouse_jsbterm",
    66901 +# endif
    66902 +# ifdef FEAT_MOUSE_NET
    66903 +       "+mouse_netterm",
    66904 +# else
    66905 +       "-mouse_netterm",
    66906 +# endif
    66907 +# ifdef FEAT_SYSMOUSE
    66908 +       "+mouse_sysmouse",
    66909 +# else
    66910 +       "-mouse_sysmouse",
    66911 +# endif
    66912 +# ifdef FEAT_MOUSE_XTERM
    66913 +       "+mouse_xterm",
    66914 +# else
    66915 +       "-mouse_xterm",
    66916 +# endif
    66917 +#endif
    66918 +#ifdef __QNX__
    66919 +# ifdef FEAT_MOUSE_PTERM
    66920 +       "+mouse_pterm",
    66921 +# else
    66922 +       "-mouse_pterm",
    66923 +# endif
    66924 +#endif
    66925 +#ifdef FEAT_MBYTE_IME
    66926 +# ifdef DYNAMIC_IME
    66927 +       "+multi_byte_ime/dyn",
    66928 +# else
    66929 +       "+multi_byte_ime",
    66930 +# endif
    66931 +#else
    66932 +# ifdef FEAT_MBYTE
    66933 +       "+multi_byte",
    66934 +# else
    66935 +       "-multi_byte",
    66936 +# endif
    66937 +#endif
    66938 +#ifdef FEAT_MULTI_LANG
    66939 +       "+multi_lang",
    66940 +#else
    66941 +       "-multi_lang",
    66942 +#endif
    66943 +#ifdef FEAT_MZSCHEME
    66944 +# ifdef DYNAMIC_MZSCHEME
    66945 +       "+mzscheme/dyn",
    66946 +# else
    66947 +       "+mzscheme",
    66948 +# endif
    66949 +#else
    66950 +       "-mzscheme",
    66951 +#endif
    66952 +#ifdef FEAT_NETBEANS_INTG
    66953 +       "+netbeans_intg",
    66954 +#else
    66955 +       "-netbeans_intg",
    66956 +#endif
    66957 +#ifdef FEAT_GUI_W32
    66958 +# ifdef FEAT_OLE
    66959 +       "+ole",
    66960 +# else
    66961 +       "-ole",
    66962 +# endif
    66963 +#endif
    66964 +#ifdef FEAT_PATH_EXTRA
    66965 +       "+path_extra",
    66966 +#else
    66967 +       "-path_extra",
    66968 +#endif
    66969 +#ifdef FEAT_PERL
    66970 +# ifdef DYNAMIC_PERL
    66971 +       "+perl/dyn",
    66972 +# else
    66973 +       "+perl",
    66974 +# endif
    66975 +#else
    66976 +       "-perl",
    66977 +#endif
    66978 +#ifdef FEAT_PERSISTENT_UNDO
    66979 +       "+persistent_undo",
    66980 +#else
    66981 +       "-persistent_undo",
    66982 +#endif
    66983 +#ifdef FEAT_PRINTER
    66984 +# ifdef FEAT_POSTSCRIPT
    66985 +       "+postscript",
    66986 +# else
    66987 +       "-postscript",
    66988 +# endif
    66989 +       "+printer",
    66990 +#else
    66991 +       "-printer",
    66992 +#endif
    66993 +#ifdef FEAT_PROFILE
    66994 +       "+profile",
    66995 +#else
    66996 +       "-profile",
    66997 +#endif
    66998 +#ifdef FEAT_PYTHON
    66999 +# ifdef DYNAMIC_PYTHON
    67000 +       "+python/dyn",
    67001 +# else
    67002 +       "+python",
    67003 +# endif
    67004 +#else
    67005 +       "-python",
    67006 +#endif
    67007 +#ifdef FEAT_PYTHON3
    67008 +# ifdef DYNAMIC_PYTHON3
    67009 +       "+python3/dyn",
    67010 +# else
    67011 +       "+python3",
    67012 +# endif
    67013 +#else
    67014 +       "-python3",
    67015 +#endif
    67016 +#ifdef FEAT_QUICKFIX
    67017 +       "+quickfix",
    67018 +#else
    67019 +       "-quickfix",
    67020 +#endif
    67021 +#ifdef FEAT_RELTIME
    67022 +       "+reltime",
    67023 +#else
    67024 +       "-reltime",
    67025 +#endif
    67026 +#ifdef FEAT_RIGHTLEFT
    67027 +       "+rightleft",
    67028 +#else
    67029 +       "-rightleft",
    67030 +#endif
    67031 +#ifdef FEAT_RUBY
    67032 +# ifdef DYNAMIC_RUBY
    67033 +       "+ruby/dyn",
    67034 +# else
    67035 +       "+ruby",
    67036 +# endif
    67037 +#else
    67038 +       "-ruby",
    67039 +#endif
    67040 +#ifdef FEAT_SCROLLBIND
    67041 +       "+scrollbind",
    67042 +#else
    67043 +       "-scrollbind",
    67044 +#endif
    67045 +#ifdef FEAT_SIGNS
    67046 +       "+signs",
    67047 +#else
    67048 +       "-signs",
    67049 +#endif
    67050 +#ifdef FEAT_SMARTINDENT
    67051 +       "+smartindent",
    67052 +#else
    67053 +       "-smartindent",
    67054 +#endif
    67055 +#ifdef FEAT_SNIFF
    67056 +       "+sniff",
    67057 +#else
    67058 +       "-sniff",
    67059 +#endif
    67060 +#ifdef STARTUPTIME
    67061 +       "+startuptime",
    67062 +#else
    67063 +       "-startuptime",
    67064 +#endif
    67065 +#ifdef FEAT_STL_OPT
    67066 +       "+statusline",
    67067 +#else
    67068 +       "-statusline",
    67069 +#endif
    67070 +#ifdef FEAT_SUN_WORKSHOP
    67071 +       "+sun_workshop",
    67072 +#else
    67073 +       "-sun_workshop",
    67074 +#endif
    67075 +#ifdef FEAT_SYN_HL
    67076 +       "+syntax",
    67077 +#else
    67078 +       "-syntax",
    67079 +#endif
    67080 +           /* only interesting on Unix systems */
    67081 +#if defined(USE_SYSTEM) && (defined(UNIX) || defined(__EMX__))
    67082 +       "+system()",
    67083 +#endif
    67084 +#ifdef FEAT_TAG_BINS
    67085 +       "+tag_binary",
    67086 +#else
    67087 +       "-tag_binary",
    67088 +#endif
    67089 +#ifdef FEAT_TAG_OLDSTATIC
    67090 +       "+tag_old_static",
    67091 +#else
    67092 +       "-tag_old_static",
    67093 +#endif
    67094 +#ifdef FEAT_TAG_ANYWHITE
    67095 +       "+tag_any_white",
    67096 +#else
    67097 +       "-tag_any_white",
    67098 +#endif
    67099 +#ifdef FEAT_TCL
    67100 +# ifdef DYNAMIC_TCL
    67101 +       "+tcl/dyn",
    67102 +# else
    67103 +       "+tcl",
    67104 +# endif
    67105 +#else
    67106 +       "-tcl",
    67107 +#endif
    67108 +#if defined(UNIX) || defined(__EMX__)
    67109 +/* only Unix (or OS/2 with EMX!) can have terminfo instead of termcap */
    67110 +# ifdef TERMINFO
    67111 +       "+terminfo",
    67112 +# else
    67113 +       "-terminfo",
    67114 +# endif
    67115 +#else              /* unix always includes termcap support */
    67116 +# ifdef HAVE_TGETENT
    67117 +       "+tgetent",
    67118 +# else
    67119 +       "-tgetent",
    67120 +# endif
    67121 +#endif
    67122 +#ifdef FEAT_TERMRESPONSE
    67123 +       "+termresponse",
    67124 +#else
    67125 +       "-termresponse",
    67126 +#endif
    67127 +#ifdef FEAT_TEXTOBJ
    67128 +       "+textobjects",
    67129 +#else
    67130 +       "-textobjects",
    67131 +#endif
    67132 +#ifdef FEAT_TITLE
    67133 +       "+title",
    67134 +#else
    67135 +       "-title",
    67136 +#endif
    67137 +#ifdef FEAT_TOOLBAR
    67138 +       "+toolbar",
    67139 +#else
    67140 +       "-toolbar",
    67141 +#endif
    67142 +#ifdef FEAT_USR_CMDS
    67143 +       "+user_commands",
    67144 +#else
    67145 +       "-user_commands",
    67146 +#endif
    67147 +#ifdef FEAT_VERTSPLIT
    67148 +       "+vertsplit",
    67149 +#else
    67150 +       "-vertsplit",
    67151 +#endif
    67152 +#ifdef FEAT_VIRTUALEDIT
    67153 +       "+virtualedit",
    67154 +#else
    67155 +       "-virtualedit",
    67156 +#endif
    67157 +#ifdef FEAT_VISUAL
    67158 +       "+visual",
    67159 +# ifdef FEAT_VISUALEXTRA
    67160 +       "+visualextra",
    67161 +# else
    67162 +       "-visualextra",
    67163 +# endif
    67164 +#else
    67165 +       "-visual",
    67166 +#endif
    67167 +#ifdef FEAT_VIMINFO
    67168 +       "+viminfo",
    67169 +#else
    67170 +       "-viminfo",
    67171 +#endif
    67172 +#ifdef FEAT_VREPLACE
    67173 +       "+vreplace",
    67174 +#else
    67175 +       "-vreplace",
    67176 +#endif
    67177 +#ifdef FEAT_WILDIGN
    67178 +       "+wildignore",
    67179 +#else
    67180 +       "-wildignore",
    67181 +#endif
    67182 +#ifdef FEAT_WILDMENU
    67183 +       "+wildmenu",
    67184 +#else
    67185 +       "-wildmenu",
    67186 +#endif
    67187 +#ifdef FEAT_WINDOWS
    67188 +       "+windows",
    67189 +#else
    67190 +       "-windows",
    67191 +#endif
    67192 +#ifdef FEAT_WRITEBACKUP
    67193 +       "+writebackup",
    67194 +#else
    67195 +       "-writebackup",
    67196 +#endif
    67197 +#if defined(UNIX) || defined(VMS)
    67198 +# ifdef FEAT_X11
    67199 +       "+X11",
    67200 +# else
    67201 +       "-X11",
    67202 +# endif
    67203 +#endif
    67204 +#ifdef FEAT_XFONTSET
    67205 +       "+xfontset",
    67206 +#else
    67207 +       "-xfontset",
    67208 +#endif
    67209 +#ifdef FEAT_XIM
    67210 +       "+xim",
    67211 +#else
    67212 +       "-xim",
    67213 +#endif
    67214 +#if defined(UNIX) || defined(VMS)
    67215 +# ifdef USE_XSMP_INTERACT
    67216 +       "+xsmp_interact",
    67217 +# else
    67218 +#  ifdef USE_XSMP
    67219 +       "+xsmp",
    67220 +#  else
    67221 +       "-xsmp",
    67222 +#  endif
    67223 +# endif
    67224 +# ifdef FEAT_XCLIPBOARD
    67225 +       "+xterm_clipboard",
    67226 +# else
    67227 +       "-xterm_clipboard",
    67228 +# endif
    67229 +#endif
    67230 +#ifdef FEAT_XTERM_SAVE
    67231 +       "+xterm_save",
    67232 +#else
    67233 +       "-xterm_save",
    67234 +#endif
    67235 +#ifdef WIN3264
    67236 +# ifdef FEAT_XPM_W32
    67237 +       "+xpm_w32",
    67238 +# else
    67239 +       "-xpm_w32",
    67240 +# endif
    67241 +#endif
    67242 +       NULL
    67243 +};
    67244 +
    67245 +static int included_patches[] =
    67246 +{   /* Add new patch number below this line */
    67247 +/**/
    67248 +    190,
    67249 +/**/
    67250 +    189,
    67251 +/**/
    67252 +    188,
    67253 +/**/
    67254 +    187,
    67255 +/**/
    67256 +    186,
    67257 +/**/
    67258 +    185,
    67259 +/**/
    67260 +    184,
    67261 +/**/
    67262 +    183,
    67263 +/**/
    67264 +    182,
    67265 +/**/
    67266 +    181,
    67267 +/**/
    67268 +    180,
    67269 +/**/
    67270 +    179,
    67271 +/**/
    67272 +    178,
    67273 +/**/
    67274 +    177,
    67275 +/**/
    67276 +    176,
    67277 +/**/
    67278 +    175,
    67279 +/**/
    67280 +    174,
    67281 +/**/
    67282 +    173,
    67283 +/**/
    67284 +    172,
    67285 +/**/
    67286 +    171,
    67287 +/**/
    67288 +    170,
    67289 +/**/
    67290 +    169,
    67291 +/**/
    67292 +    168,
    67293 +/**/
    67294 +    167,
    67295 +/**/
    67296 +    166,
    67297 +/**/
    67298 +    165,
    67299 +/**/
    67300 +    164,
    67301 +/**/
    67302 +    163,
    67303 +/**/
    67304 +    162,
    67305 +/**/
    67306 +    161,
    67307 +/**/
    67308 +    160,
    67309 +/**/
    67310 +    159,
    67311 +/**/
    67312 +    158,
    67313 +/**/
    67314 +    157,
    67315 +/**/
    67316 +    156,
    67317 +/**/
    67318 +    155,
    67319 +/**/
    67320 +    154,
    67321 +/**/
    67322 +    153,
    67323 +/**/
    67324 +    152,
    67325 +/**/
    67326 +    151,
    67327 +/**/
    67328 +    150,
    67329 +/**/
    67330 +    149,
    67331 +/**/
    67332 +    148,
    67333 +/**/
    67334 +    147,
    67335 +/**/
    67336 +    146,
    67337 +/**/
    67338 +    145,
    67339 +/**/
    67340 +    144,
    67341 +/**/
    67342 +    143,
    67343 +/**/
    67344 +    142,
    67345 +/**/
    67346 +    141,
    67347 +/**/
    67348 +    140,
    67349 +/**/
    67350 +    139,
    67351 +/**/
    67352 +    138,
    67353 +/**/
    67354 +    137,
    67355 +/**/
    67356 +    136,
    67357 +/**/
    67358 +    135,
    67359 +/**/
    67360 +    134,
    67361 +/**/
    67362 +    133,
    67363 +/**/
    67364 +    132,
    67365 +/**/
    67366 +    131,
    67367 +/**/
    67368 +    130,
    67369 +/**/
    67370 +    129,
    67371 +/**/
    67372 +    128,
    67373 +/**/
    67374 +    127,
    67375 +/**/
    67376 +    126,
    67377 +/**/
    67378 +    125,
    67379 +/**/
    67380 +    124,
    67381 +/**/
    67382 +    123,
    67383 +/**/
    67384 +    122,
    67385 +/**/
    67386 +    121,
    67387 +/**/
    67388 +    120,
    67389 +/**/
    67390 +    119,
    67391 +/**/
    67392 +    118,
    67393 +/**/
    67394 +    117,
    67395 +/**/
    67396 +    116,
    67397 +/**/
    67398 +    115,
    67399 +/**/
    67400 +    114,
    67401 +/**/
    67402 +    113,
    67403 +/**/
    67404 +    112,
    67405 +/**/
    67406 +    111,
    67407 +/**/
    67408 +    110,
    67409 +/**/
    67410 +    109,
    67411 +/**/
    67412 +    108,
    67413 +/**/
    67414 +    107,
    67415 +/**/
    67416 +    106,
    67417 +/**/
    67418 +    105,
    67419 +/**/
    67420 +    104,
    67421 +/**/
    67422 +    103,
    67423 +/**/
    67424 +    102,
    67425 +/**/
    67426 +    101,
    67427 +/**/
    67428 +    100,
    67429 +/**/
    67430 +    99,
    67431 +/**/
    67432 +    98,
    67433 +/**/
    67434 +    97,
    67435 +/**/
    67436 +    96,
    67437 +/**/
    67438 +    95,
    67439 +/**/
    67440 +    94,
    67441 +/**/
    67442 +    93,
    67443 +/**/
    67444 +    92,
    67445 +/**/
    67446 +    91,
    67447 +/**/
    67448 +    90,
    67449 +/**/
    67450 +    89,
    67451 +/**/
    67452 +    88,
    67453 +/**/
    67454 +    87,
    67455 +/**/
    67456 +    86,
    67457 +/**/
    67458 +    85,
    67459 +/**/
    67460 +    84,
    67461 +/**/
    67462 +    83,
    67463 +/**/
    67464 +    82,
    67465 +/**/
    67466 +    81,
    67467 +/**/
    67468 +    80,
    67469 +/**/
    67470 +    79,
    67471 +/**/
    67472 +    78,
    67473 +/**/
    67474 +    77,
    67475 +/**/
    67476 +    76,
    67477 +/**/
    67478 +    75,
    67479 +/**/
    67480 +    74,
    67481 +/**/
    67482 +    73,
    67483 +/**/
    67484 +    72,
    67485 +/**/
    67486 +    71,
    67487 +/**/
    67488 +    70,
    67489 +/**/
    67490 +    69,
    67491 +/**/
    67492 +    68,
    67493 +/**/
    67494 +    67,
    67495 +/**/
    67496 +    66,
    67497 +/**/
    67498 +    65,
    67499 +/**/
    67500 +    64,
    67501 +/**/
    67502 +    63,
    67503 +/**/
    67504 +    62,
    67505 +/**/
    67506 +    61,
    67507 +/**/
    67508 +    60,
    67509 +/**/
    67510 +    59,
    67511 +/**/
    67512 +    58,
    67513 +/**/
    67514 +    57,
    67515 +/**/
    67516 +    56,
    67517 +/**/
    67518 +    55,
    67519 +/**/
    67520 +    54,
    67521 +/**/
    67522 +    53,
    67523 +/**/
    67524 +    52,
    67525 +/**/
    67526 +    51,
    67527 +/**/
    67528 +    50,
    67529 +/**/
    67530 +    49,
    67531 +/**/
    67532 +    48,
    67533 +/**/
    67534 +    47,
    67535 +/**/
    67536 +    46,
    67537 +/**/
    67538 +    45,
    67539 +/**/
    67540 +    44,
    67541 +/**/
    67542 +    43,
    67543 +/**/
    67544 +    42,
    67545 +/**/
    67546 +    41,
    67547 +/**/
    67548 +    40,
    67549 +/**/
    67550 +    39,
    67551 +/**/
    67552 +    38,
    67553 +/**/
    67554 +    37,
    67555 +/**/
    67556 +    36,
    67557 +/**/
    67558 +    35,
    67559 +/**/
    67560 +    34,
    67561 +/**/
    67562 +    33,
    67563 +/**/
    67564 +    32,
    67565 +/**/
    67566 +    31,
    67567 +/**/
    67568 +    30,
    67569 +/**/
    67570 +    29,
    67571 +/**/
    67572 +    28,
    67573 +/**/
    67574 +    27,
    67575 +/**/
    67576 +    26,
    67577 +/**/
    67578 +    25,
    67579 +/**/
    67580 +    24,
    67581 +/**/
    67582 +    23,
    67583 +/**/
    67584 +    22,
    67585 +/**/
    67586 +    21,
    67587 +/**/
    67588 +    20,
    67589 +/**/
    67590 +    19,
    67591 +/**/
    67592 +    18,
    67593 +/**/
    67594 +    17,
    67595 +/**/
    67596 +    16,
    67597 +/**/
    67598 +    15,
    67599 +/**/
    67600 +    14,
    67601 +/**/
    67602 +    13,
    67603 +/**/
    67604 +    12,
    67605 +/**/
    67606 +    11,
    67607 +/**/
    67608 +    10,
    67609 +/**/
    67610 +    9,
    67611 +/**/
    67612 +    8,
    67613 +/**/
    67614 +    7,
    67615 +/**/
    67616 +    6,
    67617 +/**/
    67618 +    5,
    67619 +/**/
    67620 +    4,
    67621 +/**/
    67622 +    3,
    67623 +/**/
    67624 +    2,
    67625 +/**/
    67626 +    1,
    67627 +/**/
    67628 +    0
    67629 +};
    67630 +
    67631 +/*
    67632 + * Place to put a short description when adding a feature with a patch.
    67633 + * Keep it short, e.g.,: "relative numbers", "persistent undo".
    67634 + * Also add a comment marker to separate the lines.
    67635 + * See the official Vim patches for the diff format: It must use a context of
    67636 + * one line only.  Create it by hand or use "diff -C2" and edit the patch.
    67637 + */
    67638 +static char *(extra_patches[]) =
    67639 +{   /* Add your patch description below this line */
    67640 +/**/
    67641 +    NULL
    67642 +};
    67643 +
    67644 +    int
    67645 +highest_patch()
    67646 +{
    67647 +    int                i;
    67648 +    int                h = 0;
    67649 +
    67650 +    for (i = 0; included_patches[i] != 0; ++i)
    67651 +       if (included_patches[i] > h)
    67652 +           h = included_patches[i];
    67653 +    return h;
    67654 +}
    67655 +
    67656 +#if defined(FEAT_EVAL) || defined(PROTO)
    67657 +/*
    67658 + * Return TRUE if patch "n" has been included.
    67659 + */
    67660 +    int
    67661 +has_patch(n)
    67662 +    int                n;
    67663 +{
    67664 +    int                i;
    67665 +
    67666 +    for (i = 0; included_patches[i] != 0; ++i)
    67667 +       if (included_patches[i] == n)
    67668 +           return TRUE;
    67669 +    return FALSE;
    67670 +}
    67671 +#endif
    67672 +
    67673 +    void
    67674 +ex_version(eap)
    67675 +    exarg_T    *eap;
    67676 +{
    67677 +    /*
    67678 +     * Ignore a ":version 9.99" command.
    67679 +     */
    67680 +    if (*eap->arg == NUL)
    67681 +    {
    67682 +       msg_putchar('\n');
    67683 +       list_version();
    67684 +    }
    67685 +}
    67686 +
    67687 +    void
    67688 +list_version()
    67689 +{
    67690 +    int                i;
    67691 +    int                first;
    67692 +    char       *s = "";
    67693 +
    67694 +    /*
    67695 +     * When adding features here, don't forget to update the list of
    67696 +     * internal variables in eval.c!
    67697 +     */
    67698 +    MSG(longVersion);
    67699 +#ifdef WIN3264
    67700 +# ifdef FEAT_GUI_W32
    67701 +#  if defined(_MSC_VER) && (_MSC_VER <= 1010)
    67702 +    /* Only MS VC 4.1 and earlier can do Win32s */
    67703 +    MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
    67704 +#  else
    67705 +#   ifdef _WIN64
    67706 +    MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
    67707 +#   else
    67708 +    MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
    67709 +#   endif
    67710 +#  endif
    67711 +    if (gui_is_win32s())
    67712 +       MSG_PUTS(_(" in Win32s mode"));
    67713 +# ifdef FEAT_OLE
    67714 +    MSG_PUTS(_(" with OLE support"));
    67715 +# endif
    67716 +# else
    67717 +#  ifdef _WIN64
    67718 +    MSG_PUTS(_("\nMS-Windows 64-bit console version"));
    67719 +#  else
    67720 +    MSG_PUTS(_("\nMS-Windows 32-bit console version"));
    67721 +#  endif
    67722 +# endif
    67723 +#endif
    67724 +#ifdef WIN16
    67725 +    MSG_PUTS(_("\nMS-Windows 16-bit version"));
    67726 +#endif
    67727 +#ifdef MSDOS
    67728 +# ifdef DJGPP
    67729 +    MSG_PUTS(_("\n32-bit MS-DOS version"));
    67730 +# else
    67731 +    MSG_PUTS(_("\n16-bit MS-DOS version"));
    67732 +# endif
    67733 +#endif
    67734 +#ifdef MACOS
    67735 +# ifdef MACOS_X
    67736 +#  ifdef MACOS_X_UNIX
    67737 +    MSG_PUTS(_("\nMacOS X (unix) version"));
    67738 +#  else
    67739 +    MSG_PUTS(_("\nMacOS X version"));
    67740 +#  endif
    67741 +#else
    67742 +    MSG_PUTS(_("\nMacOS version"));
    67743 +# endif
    67744 +#endif
    67745 +
    67746 +#ifdef VMS
    67747 +    MSG_PUTS(_("\nOpenVMS version"));
    67748 +# ifdef HAVE_PATHDEF
    67749 +    if (*compiled_arch != NUL)
    67750 +    {
    67751 +       MSG_PUTS(" - ");
    67752 +       MSG_PUTS(compiled_arch);
    67753 +    }
    67754 +# endif
    67755 +
    67756 +#endif
    67757 +
    67758 +    /* Print the list of patch numbers if there is at least one. */
    67759 +    /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */
    67760 +    if (included_patches[0] != 0)
    67761 +    {
    67762 +       MSG_PUTS(_("\nIncluded patches: "));
    67763 +       first = -1;
    67764 +       /* find last one */
    67765 +       for (i = 0; included_patches[i] != 0; ++i)
    67766 +           ;
    67767 +       while (--i >= 0)
    67768 +       {
    67769 +           if (first < 0)
    67770 +               first = included_patches[i];
    67771 +           if (i == 0 || included_patches[i - 1] != included_patches[i] + 1)
    67772 +           {
    67773 +               MSG_PUTS(s);
    67774 +               s = ", ";
    67775 +               msg_outnum((long)first);
    67776 +               if (first != included_patches[i])
    67777 +               {
    67778 +                   MSG_PUTS("-");
    67779 +                   msg_outnum((long)included_patches[i]);
    67780 +               }
    67781 +               first = -1;
    67782 +           }
    67783 +       }
    67784 +    }
    67785 +
    67786 +    /* Print the list of extra patch descriptions if there is at least one. */
    67787 +    if (extra_patches[0] != NULL)
    67788 +    {
    67789 +       MSG_PUTS(_("\nExtra patches: "));
    67790 +       s = "";
    67791 +       for (i = 0; extra_patches[i] != NULL; ++i)
    67792 +       {
    67793 +           MSG_PUTS(s);
    67794 +           s = ", ";
    67795 +           MSG_PUTS(extra_patches[i]);
    67796 +       }
    67797 +    }
    67798 +
    67799 +#ifdef MODIFIED_BY
    67800 +    MSG_PUTS("\n");
    67801 +    MSG_PUTS(_("Modified by "));
    67802 +    MSG_PUTS(MODIFIED_BY);
    67803 +#endif
    67804 +
    67805 +#ifdef HAVE_PATHDEF
    67806 +    if (*compiled_user != NUL || *compiled_sys != NUL)
    67807 +    {
    67808 +       MSG_PUTS(_("\nCompiled "));
    67809 +       if (*compiled_user != NUL)
    67810 +       {
    67811 +           MSG_PUTS(_("by "));
    67812 +           MSG_PUTS(compiled_user);
    67813 +       }
    67814 +       if (*compiled_sys != NUL)
    67815 +       {
    67816 +           MSG_PUTS("@");
    67817 +           MSG_PUTS(compiled_sys);
    67818 +       }
    67819 +    }
    67820 +#endif
    67821 +
    67822 +#ifdef FEAT_HUGE
    67823 +    MSG_PUTS(_("\nHuge version "));
    67824 +#else
    67825 +# ifdef FEAT_BIG
    67826 +    MSG_PUTS(_("\nBig version "));
    67827 +# else
    67828 +#  ifdef FEAT_NORMAL
    67829 +    MSG_PUTS(_("\nNormal version "));
    67830 +#  else
    67831 +#   ifdef FEAT_SMALL
    67832 +    MSG_PUTS(_("\nSmall version "));
    67833 +#   else
    67834 +    MSG_PUTS(_("\nTiny version "));
    67835 +#   endif
    67836 +#  endif
    67837 +# endif
    67838 +#endif
    67839 +#ifndef FEAT_GUI
    67840 +    MSG_PUTS(_("without GUI."));
    67841 +#else
    67842 +# ifdef FEAT_GUI_GTK
    67843 +#  ifdef FEAT_GUI_GNOME
    67844 +    MSG_PUTS(_("with GTK2-GNOME GUI."));
    67845 +#  else
    67846 +    MSG_PUTS(_("with GTK2 GUI."));
    67847 +#  endif
    67848 +# else
    67849 +#  ifdef FEAT_GUI_MOTIF
    67850 +    MSG_PUTS(_("with X11-Motif GUI."));
    67851 +#  else
    67852 +#   ifdef FEAT_GUI_ATHENA
    67853 +#    ifdef FEAT_GUI_NEXTAW
    67854 +    MSG_PUTS(_("with X11-neXtaw GUI."));
    67855 +#    else
    67856 +    MSG_PUTS(_("with X11-Athena GUI."));
    67857 +#    endif
    67858 +#   else
    67859 +#     ifdef FEAT_GUI_PHOTON
    67860 +    MSG_PUTS(_("with Photon GUI."));
    67861 +#     else
    67862 +#      if defined(MSWIN)
    67863 +    MSG_PUTS(_("with GUI."));
    67864 +#      else
    67865 +#      if defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON
    67866 +    MSG_PUTS(_("with Carbon GUI."));
    67867 +#      else
    67868 +#       if defined(TARGET_API_MAC_OSX) && TARGET_API_MAC_OSX
    67869 +    MSG_PUTS(_("with Cocoa GUI."));
    67870 +#       else
    67871 +#        if defined(MACOS)
    67872 +    MSG_PUTS(_("with (classic) GUI."));
    67873 +#        endif
    67874 +#       endif
    67875 +#      endif
    67876 +#      endif
    67877 +#    endif
    67878 +#   endif
    67879 +#  endif
    67880 +# endif
    67881 +#endif
    67882 +    version_msg(_("  Features included (+) or not (-):\n"));
    67883 +
    67884 +    /* print all the features */
    67885 +    for (i = 0; features[i] != NULL; ++i)
    67886 +    {
    67887 +       version_msg(features[i]);
    67888 +       if (msg_col > 0)
    67889 +           version_msg(" ");
    67890 +    }
    67891 +
    67892 +    version_msg("\n");
    67893 +#ifdef SYS_VIMRC_FILE
    67894 +    version_msg(_("   system vimrc file: \""));
    67895 +    version_msg(SYS_VIMRC_FILE);
    67896 +    version_msg("\"\n");
    67897 +#endif
    67898 +#ifdef USR_VIMRC_FILE
    67899 +    version_msg(_("     user vimrc file: \""));
    67900 +    version_msg(USR_VIMRC_FILE);
    67901 +    version_msg("\"\n");
    67902 +#endif
    67903 +#ifdef USR_VIMRC_FILE2
    67904 +    version_msg(_(" 2nd user vimrc file: \""));
    67905 +    version_msg(USR_VIMRC_FILE2);
    67906 +    version_msg("\"\n");
    67907 +#endif
    67908 +#ifdef USR_VIMRC_FILE3
    67909 +    version_msg(_(" 3rd user vimrc file: \""));
    67910 +    version_msg(USR_VIMRC_FILE3);
    67911 +    version_msg("\"\n");
    67912 +#endif
    67913 +#ifdef USR_EXRC_FILE
    67914 +    version_msg(_("      user exrc file: \""));
    67915 +    version_msg(USR_EXRC_FILE);
    67916 +    version_msg("\"\n");
    67917 +#endif
    67918 +#ifdef USR_EXRC_FILE2
    67919 +    version_msg(_("  2nd user exrc file: \""));
    67920 +    version_msg(USR_EXRC_FILE2);
    67921 +    version_msg("\"\n");
    67922 +#endif
    67923 +#ifdef FEAT_GUI
    67924 +# ifdef SYS_GVIMRC_FILE
    67925 +    version_msg(_("  system gvimrc file: \""));
    67926 +    version_msg(SYS_GVIMRC_FILE);
    67927 +    version_msg("\"\n");
    67928 +# endif
    67929 +    version_msg(_("    user gvimrc file: \""));
    67930 +    version_msg(USR_GVIMRC_FILE);
    67931 +    version_msg("\"\n");
    67932 +# ifdef USR_GVIMRC_FILE2
    67933 +    version_msg(_("2nd user gvimrc file: \""));
    67934 +    version_msg(USR_GVIMRC_FILE2);
    67935 +    version_msg("\"\n");
    67936 +# endif
    67937 +# ifdef USR_GVIMRC_FILE3
    67938 +    version_msg(_("3rd user gvimrc file: \""));
    67939 +    version_msg(USR_GVIMRC_FILE3);
    67940 +    version_msg("\"\n");
    67941 +# endif
    67942 +#endif
    67943 +#ifdef FEAT_GUI
    67944 +# ifdef SYS_MENU_FILE
    67945 +    version_msg(_("    system menu file: \""));
    67946 +    version_msg(SYS_MENU_FILE);
    67947 +    version_msg("\"\n");
    67948 +# endif
    67949 +#endif
    67950 +#ifdef HAVE_PATHDEF
    67951 +    if (*default_vim_dir != NUL)
    67952 +    {
    67953 +       version_msg(_("  fall-back for $VIM: \""));
    67954 +       version_msg((char *)default_vim_dir);
    67955 +       version_msg("\"\n");
    67956 +    }
    67957 +    if (*default_vimruntime_dir != NUL)
    67958 +    {
    67959 +       version_msg(_(" f-b for $VIMRUNTIME: \""));
    67960 +       version_msg((char *)default_vimruntime_dir);
    67961 +       version_msg("\"\n");
    67962 +    }
    67963 +    version_msg(_("Compilation: "));
    67964 +    version_msg((char *)all_cflags);
    67965 +    version_msg("\n");
    67966 +#ifdef VMS
    67967 +    if (*compiler_version != NUL)
    67968 +    {
    67969 +       version_msg(_("Compiler: "));
    67970 +       version_msg((char *)compiler_version);
    67971 +       version_msg("\n");
    67972 +    }
    67973 +#endif
    67974 +    version_msg(_("Linking: "));
    67975 +    version_msg((char *)all_lflags);
    67976 +#endif
    67977 +#ifdef DEBUG
    67978 +    version_msg("\n");
    67979 +    version_msg(_("  DEBUG BUILD"));
    67980 +#endif
    67981 +}
    67982 +
    67983 +/*
    67984 + * Output a string for the version message.  If it's going to wrap, output a
    67985 + * newline, unless the message is too long to fit on the screen anyway.
    67986 + */
    67987 +    static void
    67988 +version_msg(s)
    67989 +    char       *s;
    67990 +{
    67991 +    int                len = (int)STRLEN(s);
    67992 +
    67993 +    if (!got_int && len < (int)Columns && msg_col + len >= (int)Columns
    67994 +                                                               && *s != '\n')
    67995 +       msg_putchar('\n');
    67996 +    if (!got_int)
    67997 +       MSG_PUTS(s);
    67998 +}
    67999 +
    68000 +static void do_intro_line __ARGS((int row, char_u *mesg, int add_version, int attr));
    68001 +
    68002 +/*
    68003 + * Give an introductory message about Vim.
    68004 + * Only used when starting Vim on an empty file, without a file name.
    68005 + * Or with the ":intro" command (for Sven :-).
    68006 + */
    68007 +    void
    68008 +intro_message(colon)
    68009 +    int                colon;          /* TRUE for ":intro" */
    68010 +{
    68011 +    int                i;
    68012 +    int                row;
    68013 +    int                blanklines;
    68014 +    int                sponsor;
    68015 +    char       *p;
    68016 +    static char        *(lines[]) =
    68017 +    {
    68018 +       N_("VIM - Vi IMproved"),
    68019 +       "",
    68020 +       N_("version "),
    68021 +       N_("by Bram Moolenaar et al."),
    68022 +#ifdef MODIFIED_BY
    68023 +       " ",
    68024 +#endif
    68025 +       N_("Vim is open source and freely distributable"),
    68026 +       "",
    68027 +       N_("Help poor children in Uganda!"),
    68028 +       N_("type  :help iccf<Enter>       for information "),
    68029 +       "",
    68030 +       N_("type  :q<Enter>               to exit         "),
    68031 +       N_("type  :help<Enter>  or  <F1>  for on-line help"),
    68032 +       N_("type  :help version7<Enter>   for version info"),
    68033 +       NULL,
    68034 +       "",
    68035 +       N_("Running in Vi compatible mode"),
    68036 +       N_("type  :set nocp<Enter>        for Vim defaults"),
    68037 +       N_("type  :help cp-default<Enter> for info on this"),
    68038 +    };
    68039 +#ifdef FEAT_GUI
    68040 +    static char        *(gui_lines[]) =
    68041 +    {
    68042 +       NULL,
    68043 +       NULL,
    68044 +       NULL,
    68045 +       NULL,
    68046 +#ifdef MODIFIED_BY
    68047 +       NULL,
    68048 +#endif
    68049 +       NULL,
    68050 +       NULL,
    68051 +       NULL,
    68052 +       N_("menu  Help->Orphans           for information    "),
    68053 +       NULL,
    68054 +       N_("Running modeless, typed text is inserted"),
    68055 +       N_("menu  Edit->Global Settings->Toggle Insert Mode  "),
    68056 +       N_("                              for two modes      "),
    68057 +       NULL,
    68058 +       NULL,
    68059 +       NULL,
    68060 +       N_("menu  Edit->Global Settings->Toggle Vi Compatible"),
    68061 +       N_("                              for Vim defaults   "),
    68062 +    };
    68063 +#endif
    68064 +
    68065 +    /* blanklines = screen height - # message lines */
    68066 +    blanklines = (int)Rows - ((sizeof(lines) / sizeof(char *)) - 1);
    68067 +    if (!p_cp)
    68068 +       blanklines += 4;  /* add 4 for not showing "Vi compatible" message */
    68069 +#if defined(WIN3264) && !defined(FEAT_GUI_W32)
    68070 +    if (mch_windows95())
    68071 +       blanklines -= 3;  /* subtract 3 for showing "Windows 95" message */
    68072 +#endif
    68073 +
    68074 +#ifdef FEAT_WINDOWS
    68075 +    /* Don't overwrite a statusline.  Depends on 'cmdheight'. */
    68076 +    if (p_ls > 1)
    68077 +       blanklines -= Rows - topframe->fr_height;
    68078 +#endif
    68079 +    if (blanklines < 0)
    68080 +       blanklines = 0;
    68081 +
    68082 +    /* Show the sponsor and register message one out of four times, the Uganda
    68083 +     * message two out of four times. */
    68084 +    sponsor = (int)time(NULL);
    68085 +    sponsor = ((sponsor & 2) == 0) - ((sponsor & 4) == 0);
    68086 +
    68087 +    /* start displaying the message lines after half of the blank lines */
    68088 +    row = blanklines / 2;
    68089 +    if ((row >= 2 && Columns >= 50) || colon)
    68090 +    {
    68091 +       for (i = 0; i < (int)(sizeof(lines) / sizeof(char *)); ++i)
    68092 +       {
    68093 +           p = lines[i];
    68094 +#ifdef FEAT_GUI
    68095 +           if (p_im && gui.in_use && gui_lines[i] != NULL)
    68096 +               p = gui_lines[i];
    68097 +#endif
    68098 +           if (p == NULL)
    68099 +           {
    68100 +               if (!p_cp)
    68101 +                   break;
    68102 +               continue;
    68103 +           }
    68104 +           if (sponsor != 0)
    68105 +           {
    68106 +               if (strstr(p, "children") != NULL)
    68107 +                   p = sponsor < 0
    68108 +                       ? N_("Sponsor Vim development!")
    68109 +                       : N_("Become a registered Vim user!");
    68110 +               else if (strstr(p, "iccf") != NULL)
    68111 +                   p = sponsor < 0
    68112 +                       ? N_("type  :help sponsor<Enter>    for information ")
    68113 +                       : N_("type  :help register<Enter>   for information ");
    68114 +               else if (strstr(p, "Orphans") != NULL)
    68115 +                   p = N_("menu  Help->Sponsor/Register  for information    ");
    68116 +           }
    68117 +           if (*p != NUL)
    68118 +               do_intro_line(row, (char_u *)_(p), i == 2, 0);
    68119 +           ++row;
    68120 +       }
    68121 +#if defined(WIN3264) && !defined(FEAT_GUI_W32)
    68122 +       if (mch_windows95())
    68123 +       {
    68124 +           do_intro_line(++row,
    68125 +                   (char_u *)_("WARNING: Windows 95/98/ME detected"),
    68126 +                                                       FALSE, hl_attr(HLF_E));
    68127 +           do_intro_line(++row,
    68128 +               (char_u *)_("type  :help windows95<Enter>  for info on this"),
    68129 +                                                                   FALSE, 0);
    68130 +       }
    68131 +#endif
    68132 +    }
    68133 +
    68134 +    /* Make the wait-return message appear just below the text. */
    68135 +    if (colon)
    68136 +       msg_row = row;
    68137 +}
    68138 +
    68139 +    static void
    68140 +do_intro_line(row, mesg, add_version, attr)
    68141 +    int                row;
    68142 +    char_u     *mesg;
    68143 +    int                add_version;
    68144 +    int                attr;
    68145 +{
    68146 +    char_u     vers[20];
    68147 +    int                col;
    68148 +    char_u     *p;
    68149 +    int                l;
    68150 +    int                clen;
    68151 +#ifdef MODIFIED_BY
    68152 +# define MODBY_LEN 150
    68153 +    char_u     modby[MODBY_LEN];
    68154 +
    68155 +    if (*mesg == ' ')
    68156 +    {
    68157 +       vim_strncpy(modby, (char_u *)_("Modified by "), MODBY_LEN - 1);
    68158 +       l = STRLEN(modby);
    68159 +       vim_strncpy(modby + l, (char_u *)MODIFIED_BY, MODBY_LEN - l - 1);
    68160 +       mesg = modby;
    68161 +    }
    68162 +#endif
    68163 +
    68164 +    /* Center the message horizontally. */
    68165 +    col = vim_strsize(mesg);
    68166 +    if (add_version)
    68167 +    {
    68168 +       STRCPY(vers, mediumVersion);
    68169 +       if (highest_patch())
    68170 +       {
    68171 +           /* Check for 9.9x or 9.9xx, alpha/beta version */
    68172 +           if (isalpha((int)vers[3]))
    68173 +           {
    68174 +               if (isalpha((int)vers[4]))
    68175 +                   sprintf((char *)vers + 5, ".%d%s", highest_patch(),
    68176 +                                                          mediumVersion + 5);
    68177 +               else
    68178 +                   sprintf((char *)vers + 4, ".%d%s", highest_patch(),
    68179 +                                                          mediumVersion + 4);
    68180 +           }
    68181 +           else
    68182 +               sprintf((char *)vers + 3, ".%d", highest_patch());
    68183 +       }
    68184 +       col += (int)STRLEN(vers);
    68185 +    }
    68186 +    col = (Columns - col) / 2;
    68187 +    if (col < 0)
    68188 +       col = 0;
    68189 +
    68190 +    /* Split up in parts to highlight <> items differently. */
    68191 +    for (p = mesg; *p != NUL; p += l)
    68192 +    {
    68193 +       clen = 0;
    68194 +       for (l = 0; p[l] != NUL
    68195 +                        && (l == 0 || (p[l] != '<' && p[l - 1] != '>')); ++l)
    68196 +       {
    68197 +#ifdef FEAT_MBYTE
    68198 +           if (has_mbyte)
    68199 +           {
    68200 +               clen += ptr2cells(p + l);
    68201 +               l += (*mb_ptr2len)(p + l) - 1;
    68202 +           }
    68203 +           else
    68204 +#endif
    68205 +               clen += byte2cells(p[l]);
    68206 +       }
    68207 +       screen_puts_len(p, l, row, col, *p == '<' ? hl_attr(HLF_8) : attr);
    68208 +       col += clen;
    68209 +    }
    68210 +
    68211 +    /* Add the version number to the version line. */
    68212 +    if (add_version)
    68213 +       screen_puts(vers, row, col, 0);
    68214 +}
    68215 +
    68216 +/*
    68217 + * ":intro": clear screen, display intro screen and wait for return.
    68218 + */
    68219 +    void
    68220 +ex_intro(eap)
    68221 +    exarg_T    *eap UNUSED;
    68222 +{
    68223 +    screenclear();
    68224 +    intro_message(TRUE);
    68225 +    wait_return(TRUE);
    68226 +}
    6822773503diff -Naur vim73.orig/src/vim.h vim73/src/vim.h
    68228 --- vim73.orig/src/vim.h        2012-06-03 23:09:52.940007057 +0000
    68229 +++ vim73/src/vim.h     2012-06-03 23:09:55.952087212 +0000
     73504--- vim73.orig/src/vim.h        2010-07-29 18:46:39.000000000 +0000
     73505+++ vim73/src/vim.h     2012-07-20 20:31:18.167645059 +0000
    6823073506@@ -27,6 +27,11 @@
    6823173507 # endif
     
    6832773603  * is used when executing commands and EW_SILENT for interactive expanding. */
    6832873604 
    68329 @@ -1269,6 +1280,7 @@
     73605@@ -1061,12 +1072,14 @@
     73606 #define INSCHAR_DO_COM 2       /* format comments */
     73607 #define INSCHAR_CTRLV  4       /* char typed just after CTRL-V */
     73608 #define INSCHAR_NO_FEX 8       /* don't use 'formatexpr' */
     73609+#define INSCHAR_COM_LIST 16    /* format comments with list/2nd line indent */
     73610 
     73611 /* flags for open_line() */
     73612 #define OPENLINE_DELSPACES  1  /* delete spaces after cursor */
     73613 #define OPENLINE_DO_COM            2   /* format comments */
     73614 #define OPENLINE_KEEPTRAIL  4  /* keep trailing spaces */
     73615 #define OPENLINE_MARKFIX    8  /* fix mark positions */
     73616+#define OPENLINE_COM_LIST  16  /* format comments with list/2nd line indent */
     73617 
     73618 /*
     73619  * There are four history tables:
     73620@@ -1228,6 +1241,7 @@
     73621     EVENT_CMDWINENTER,         /* after entering the cmdline window */
     73622     EVENT_CMDWINLEAVE,         /* before leaving the cmdline window */
     73623     EVENT_COLORSCHEME,         /* after loading a colorscheme */
     73624+    EVENT_COMPLETEDONE,                /* after finishing insert complete */
     73625     EVENT_FILEAPPENDPOST,      /* after appending to a file */
     73626     EVENT_FILEAPPENDPRE,       /* before appending to a file */
     73627     EVENT_FILEAPPENDCMD,       /* append to a file using command */
     73628@@ -1253,8 +1267,9 @@
     73629     EVENT_INSERTENTER,         /* when entering Insert mode */
     73630     EVENT_INSERTLEAVE,         /* when leaving Insert mode */
     73631     EVENT_MENUPOPUP,           /* just before popup menu is displayed */
     73632-    EVENT_QUICKFIXCMDPOST,     /* after :make, :grep etc */
     73633-    EVENT_QUICKFIXCMDPRE,      /* before :make, :grep etc */
     73634+    EVENT_QUICKFIXCMDPOST,     /* after :make, :grep etc. */
     73635+    EVENT_QUICKFIXCMDPRE,      /* before :make, :grep etc. */
     73636+    EVENT_QUITPRE,             /* before :quit */
     73637     EVENT_SESSIONLOADPOST,     /* after loading a session file */
     73638     EVENT_STDINREADPOST,       /* after reading from stdin */
     73639     EVENT_STDINREADPRE,                /* before reading from stdin */
     73640@@ -1269,6 +1284,7 @@
    6833073641     EVENT_WINENTER,            /* after entering a window */
    6833173642     EVENT_WINLEAVE,            /* before leaving a window */
     
    6833573646     EVENT_CURSORHOLDI,         /* idem, in Insert mode */
    6833673647     EVENT_FUNCUNDEFINED,       /* if calling a function which doesn't exist */
    68337 @@ -1307,6 +1319,7 @@
     73648@@ -1307,6 +1323,7 @@
    6833873649     , HLF_M        /* "--More--" message */
    6833973650     , HLF_CM       /* Mode (e.g., "-- INSERT --") */
     
    6834373654     , HLF_S        /* status lines */
    6834473655     , HLF_SNC      /* status lines of not-current windows */
    68345 @@ -1344,7 +1357,7 @@
     73656@@ -1344,7 +1361,7 @@
    6834673657 /* The HL_FLAGS must be in the same order as the HLF_ enums!
    6834773658  * When changing this also adjust the default for 'highlight'. */
     
    6835273663                  'B', 'P', 'R', 'L', \
    6835373664                  '+', '=', 'x', 'X', '*', '#', '_', '!', '.', 'o'}
    68354 @@ -1423,6 +1436,8 @@
     73665@@ -1423,6 +1440,8 @@
    6835573666 
    6835673667 #define IOSIZE    (1024+1)     /* file i/o and sprintf buffer size */
     
    6836173672 # define MSG_BUF_LEN 480       /* length of buffer for small messages */
    6836273673 # define MSG_BUF_CLEN  (MSG_BUF_LEN / 6)    /* cell length (worst case: utf-8
    68363 @@ -1640,6 +1655,11 @@
     73674@@ -1640,6 +1659,11 @@
    6836473675 # define USE_INPUT_BUF
    6836573676 #endif
     
    6837373684 /* On MS-Windows the third argument isn't size_t.  This matters for Win64,
    6837473685  * where sizeof(size_t)==8, not 4 */
    68375 @@ -1683,6 +1703,8 @@
     73686@@ -1683,6 +1707,8 @@
    6837673687  * character of up to 6 bytes, or one 16-bit character of up to three bytes
    6837773688  * plus six following composing characters of three bytes each. */
     
    6838273693 
    6838373694 #if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO)
    68384 @@ -1842,7 +1864,8 @@
     73695@@ -1842,7 +1868,8 @@
    6838573696 #define VV_OP          52
    6838673697 #define VV_SEARCHFORWARD 53
     
    6839273703 #ifdef FEAT_CLIPBOARD
    6839373704 
    68394 @@ -1996,6 +2019,7 @@
     73705@@ -1996,6 +2023,7 @@
    6839573706  #pragma warning(disable : 4312)
    6839673707 #endif
     
    6840073711 # define vim_realloc(ptr, size)  mem_realloc((ptr), (size))
    6840173712 #else
    68402 @@ -2193,4 +2217,14 @@
     73713@@ -2098,6 +2126,12 @@
     73714 # endif
     73715 #endif
     73716 
     73717+#if defined(FEAT_BROWSE) && defined(GTK_CHECK_VERSION)
     73718+# if GTK_CHECK_VERSION(2,4,0)
     73719+#  define USE_FILE_CHOOSER
     73720+# endif
     73721+#endif
     73722+
     73723 #ifndef FEAT_NETBEANS_INTG
     73724 # undef NBDEBUG
     73725 #endif
     73726@@ -2193,4 +2227,14 @@
    6840373727 #define MSCR_LEFT      -1
    6840473728 #define MSCR_RIGHT     -2
     
    6841673740 #endif /* VIM__H */
    6841773741diff -Naur vim73.orig/src/window.c vim73/src/window.c
    68418 --- vim73.orig/src/window.c     2012-06-03 23:09:52.940007057 +0000
    68419 +++ vim73/src/window.c  2012-06-03 23:09:55.896085721 +0000
     73742--- vim73.orig/src/window.c     2010-07-20 20:23:49.000000000 +0000
     73743+++ vim73/src/window.c  2012-07-20 20:31:18.344311852 +0000
    6842073744@@ -23,7 +23,7 @@
    6842173745 static void win_totop __ARGS((int size, int flags));
     
    6842773751 static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
    6842873752 static tabpage_T *alt_tabpage __ARGS((void));
    68429 @@ -70,7 +70,8 @@
     73753@@ -45,7 +45,7 @@
     73754 #if defined(FEAT_WINDOWS) || defined(PROTO)
     73755 static tabpage_T *alloc_tabpage __ARGS((void));
     73756 static int leave_tabpage __ARGS((buf_T *new_curbuf));
     73757-static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf));
     73758+static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf, int trigger_autocmds));
     73759 static void frame_fix_height __ARGS((win_T *wp));
     73760 static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin));
     73761 static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin));
     73762@@ -54,7 +54,6 @@
     73763 static void frame_insert __ARGS((frame_T *before, frame_T *frp));
     73764 static void frame_remove __ARGS((frame_T *frp));
     73765 #ifdef FEAT_VERTSPLIT
     73766-static void win_new_width __ARGS((win_T *wp, int width));
     73767 static void win_goto_ver __ARGS((int up, long count));
     73768 static void win_goto_hor __ARGS((int left, long count));
     73769 #endif
     73770@@ -70,7 +69,7 @@
    6843073771 #endif /* FEAT_WINDOWS */
    6843173772 
     
    6843373774-static void win_new_height __ARGS((win_T *, int));
    6843473775+static void set_fraction __ARGS((win_T *wp));
    68435 +static void win_new_height __ARGS((win_T *wp, int height));
    6843673776 
    6843773777 #define URL_SLASH      1               /* path_is_url() has found "://" */
    6843873778 #define URL_BACKSLASH  2               /* path_is_url() has found ":\\" */
    68439 @@ -525,9 +526,7 @@
     73779@@ -354,11 +353,11 @@
     73780                                                     && valid_tabpage(oldtab))
     73781                    {
     73782                        newtab = curtab;
     73783-                       goto_tabpage_tp(oldtab);
     73784+                       goto_tabpage_tp(oldtab, TRUE);
     73785                        if (curwin == wp)
     73786                            win_close(curwin, FALSE);
     73787                        if (valid_tabpage(newtab))
     73788-                           goto_tabpage_tp(newtab);
     73789+                           goto_tabpage_tp(newtab, TRUE);
     73790                    }
     73791                }
     73792                break;
     73793@@ -525,9 +524,7 @@
    6844073794                    setpcmark();
    6844173795                    if (win_split(0, 0) == OK)
     
    6844873802                                                           ECMD_HIDE, NULL);
    6844973803                        if (nchar == 'F' && lnum >= 0)
    68450 @@ -684,19 +683,19 @@
     73804@@ -684,19 +681,19 @@
    6845173805 }
    6845273806 
     
    6847373827     int                new_size = size;
    6847473828     int                i;
    68475 @@ -719,7 +718,7 @@
     73829@@ -719,7 +716,7 @@
    6847673830     /* add a status line when p_ls == 1 and splitting the first window */
    6847773831     if (lastwin == firstwin && p_ls == 1 && oldwin->w_status_height == 0)
     
    6848273836            EMSG(_(e_noroom));
    6848373837            return FAIL;
    68484 @@ -752,7 +751,7 @@
     73838@@ -752,7 +749,7 @@
    6848573839        }
    6848673840        else
     
    6849173845            EMSG(_(e_noroom));
    6849273846            return FAIL;
    68493 @@ -816,7 +815,7 @@
     73847@@ -816,7 +813,7 @@
    6849473848            available = oldwin->w_height;
    6849573849            needed += p_wmh;
     
    6850073854            EMSG(_(e_noroom));
    6850173855            return FAIL;
    68502 @@ -889,20 +888,20 @@
     73856@@ -889,20 +886,20 @@
    6850373857                        p_sb))))
    6850473858     {
     
    6852473878        if (wp == NULL)
    6852573879            return FAIL;
    68526 @@ -973,10 +972,10 @@
     73880@@ -973,10 +970,10 @@
    6852773881                frp->fr_parent = curfrp;
    6852873882     }
     
    6853773891 
    6853873892     /* Insert the new frame at the right place in the frame list. */
    68539 @@ -985,10 +984,17 @@
     73893@@ -985,10 +982,17 @@
    6854073894     else
    6854173895        frame_append(curfrp, frp);
     
    6855573909        {
    6855673910            win_new_height(oldwin, oldwin->w_height - 1);
    68557 @@ -1220,15 +1226,15 @@
     73911@@ -1220,15 +1224,15 @@
    6855873912     }
    6855973913     newp->w_tagstackidx = oldp->w_tagstackidx;
     
    6857573929 
    6857673930 /*
    68577 @@ -2077,7 +2083,7 @@
     73931@@ -2028,7 +2032,11 @@
     73932 
     73933     for (wp = firstwin; wp != NULL && lastwin != firstwin; )
     73934     {
     73935-       if (wp->w_buffer == buf && (!keep_curwin || wp != curwin))
     73936+       if (wp->w_buffer == buf && (!keep_curwin || wp != curwin)
     73937+#ifdef FEAT_AUTOCMD
     73938+               && !(wp->w_closing || wp->w_buffer->b_closing)
     73939+#endif
     73940+               )
     73941        {
     73942            win_close(wp, FALSE);
     73943 
     73944@@ -2045,7 +2053,11 @@
     73945        nexttp = tp->tp_next;
     73946        if (tp != curtab)
     73947            for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
     73948-               if (wp->w_buffer == buf)
     73949+               if (wp->w_buffer == buf
     73950+#ifdef FEAT_AUTOCMD
     73951+                   && !(wp->w_closing || wp->w_buffer->b_closing)
     73952+#endif
     73953+                   )
     73954                {
     73955                    win_close_othertab(wp, FALSE, tp);
     73956 
     73957@@ -2077,7 +2089,7 @@
    6857873958  * Return TRUE if there is only one window other than "aucmd_win" in the
    6857973959  * current tab page.
     
    6858473964 {
    6858573965 #ifdef FEAT_AUTOCMD
    68586 @@ -2100,10 +2106,46 @@
     73966@@ -2100,10 +2112,54 @@
    6858773967 }
    6858873968 
     
    6860473984+        * curwin and curtab are invalid while we are freeing memory, they may
    6860573985+        * be used in GUI events.
     73986+        * Don't trigger autocommands yet, they may use wrong values, so do
     73987+        * that below.
    6860673988+        */
    68607 +       goto_tabpage_tp(alt_tabpage());
     73989+       goto_tabpage_tp(alt_tabpage(), FALSE);
    6860873990+       redraw_tabline = TRUE;
    6860973991+
     
    6861874000+               shell_new_rows();
    6861974001+       }
     74002+       /* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
     74003+        * that now. */
     74004+#ifdef FEAT_AUTOCMD
     74005+       apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
     74006+       apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
     74007+#endif
    6862074008+       return TRUE;
    6862174009+    }
     
    6863274020     void
    6863374021 win_close(win, free_buf)
    68634 @@ -2138,33 +2180,15 @@
     74022@@ -2126,6 +2182,8 @@
     74023     }
     74024 
     74025 #ifdef FEAT_AUTOCMD
     74026+    if (win->w_closing || (win->w_buffer != NULL && win->w_buffer->b_closing))
     74027+       return; /* window is already being closed */
     74028     if (win == aucmd_win)
     74029     {
     74030        EMSG(_("E813: Cannot close autocmd window"));
     74031@@ -2138,33 +2196,15 @@
    6863574032     }
    6863674033 #endif
     
    6867274069     else
    6867374070        clear_snapshot(curtab, SNAP_HELP_IDX);
    68674 @@ -2206,17 +2230,26 @@
     74071@@ -2179,17 +2219,26 @@
     74072        wp = frame2win(win_altframe(win, NULL));
     74073 
     74074        /*
     74075-        * Be careful: If autocommands delete the window, return now.
     74076+        * Be careful: If autocommands delete the window or cause this window
     74077+        * to be the last one left, return now.
     74078         */
     74079        if (wp->w_buffer != curbuf)
     74080        {
     74081            other_buffer = TRUE;
     74082+           win->w_closing = TRUE;
     74083            apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
     74084-           if (!win_valid(win) || last_window())
     74085+           if (!win_valid(win))
     74086+               return;
     74087+           win->w_closing = FALSE;
     74088+           if (last_window())
     74089                return;
     74090        }
     74091+       win->w_closing = TRUE;
     74092        apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
     74093-       if (!win_valid(win) || last_window())
     74094+       if (!win_valid(win))
     74095+           return;
     74096+       win->w_closing = FALSE;
     74097+       if (last_window())
     74098            return;
     74099 # ifdef FEAT_EVAL
     74100        /* autocmds may abort script processing */
     74101@@ -2206,17 +2255,35 @@
    6867574102        out_flush();
    6867674103 #endif
     
    6868774114-    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
    6868874115+    if (win->w_buffer != NULL)
    68689 +       close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
     74116+    {
     74117+#ifdef FEAT_AUTOCMD
     74118+       win->w_closing = TRUE;
     74119+#endif
     74120+       close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
     74121+#ifdef FEAT_AUTOCMD
     74122+       if (win_valid(win))
     74123+           win->w_closing = FALSE;
     74124+#endif
     74125+    }
    6869074126 
    6869174127     /* Autocommands may have closed the window already, or closed the only
     
    6870274138 
    6870374139     /* Make sure curwin isn't invalid.  It can cause severe trouble when
    68704 @@ -2297,7 +2330,7 @@
     74140@@ -2297,7 +2364,7 @@
    6870574141 
    6870674142 /*
     
    6871174147  * Caller must check if buffer is hidden and whether the tabline needs to be
    6871274148  * updated.
    68713 @@ -2314,7 +2347,7 @@
     74149@@ -2313,8 +2380,13 @@
     74150     tabpage_T   *ptp = NULL;
    6871474151     int                free_tp = FALSE;
    6871574152 
     74153+#ifdef FEAT_AUTOCMD
     74154+    if (win->w_closing || win->w_buffer->b_closing)
     74155+       return; /* window is already being closed */
     74156+#endif
     74157+
    6871674158     /* Close the link to the buffer. */
    6871774159-    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
     
    6872074162     /* Careful: Autocommands may have closed the tab page or made it the
    6872174163      * current tab page.  */
    68722 @@ -3241,6 +3274,9 @@
     74164@@ -3241,6 +3313,9 @@
    6872374165     else
    6872474166        wp->w_farsi = W_CONV;
     
    6873074172 
    6873174173 /*
    68732 @@ -3277,9 +3313,7 @@
     74174@@ -3277,9 +3352,7 @@
    6873374175     if (aucmd_win != NULL)
    6873474176     {
     
    6874174183     }
    6874274184 }
    68743 @@ -3320,10 +3354,8 @@
     74185@@ -3320,10 +3393,8 @@
    6874474186        /* First window in new tab page, initialize it from "oldwin". */
    6874574187        win_init(curwin, oldwin, 0);
     
    6875474196 #endif
    6875574197 
    68756 @@ -3664,13 +3696,6 @@
     74198@@ -3395,7 +3466,7 @@
     74199 # endif
     74200 #ifdef FEAT_EVAL
     74201        /* init t: variables */
     74202-       init_var_dict(&tp->tp_vars, &tp->tp_winvar);
     74203+       init_var_dict(&tp->tp_vars, &tp->tp_winvar, VAR_SCOPE);
     74204 #endif
     74205        tp->tp_ch_used = p_ch;
     74206     }
     74207@@ -3491,7 +3562,7 @@
     74208     }
     74209 
     74210     /* Failed, get back the previous Tab page */
     74211-    enter_tabpage(curtab, curbuf);
     74212+    enter_tabpage(curtab, curbuf, TRUE);
     74213     return FAIL;
     74214 }
     74215 
     74216@@ -3644,11 +3715,13 @@
     74217 /*
     74218  * Start using tab page "tp".
     74219  * Only to be used after leave_tabpage() or freeing the current tab page.
     74220+ * Only trigger *Enter autocommands when trigger_autocmds is TRUE.
     74221  */
     74222     static void
     74223-enter_tabpage(tp, old_curbuf)
     74224+enter_tabpage(tp, old_curbuf, trigger_autocmds)
     74225     tabpage_T  *tp;
     74226     buf_T      *old_curbuf UNUSED;
     74227+    int                trigger_autocmds UNUSED;
     74228 {
     74229     int                old_off = tp->tp_firstwin->w_winrow;
     74230     win_T      *next_prevwin = tp->tp_prevwin;
     74231@@ -3664,13 +3737,6 @@
    6875774232     win_enter_ext(tp->tp_curwin, FALSE, TRUE);
    6875874233     prevwin = next_prevwin;
     
    6876874243     (void)win_comp_pos();      /* recompute w_winrow for all windows */
    6876974244     must_redraw = CLEAR;       /* need to redraw everything */
    68770 @@ -3700,6 +3725,14 @@
     74245@@ -3700,6 +3766,17 @@
    6877174246     gui_may_update_scrollbars();
    6877274247 #endif
     
    6877574250+    /* Apply autocommands after updating the display, when 'rows' and
    6877674251+     * 'columns' have been set correctly. */
    68777 +    apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
    68778 +    if (old_curbuf != curbuf)
    68779 +       apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
     74252+    if (trigger_autocmds)
     74253+    {
     74254+       apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
     74255+       if (old_curbuf != curbuf)
     74256+           apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
     74257+    }
    6878074258+#endif
    6878174259+
     
    6878374261 }
    6878474262 
    68785 @@ -4271,19 +4304,19 @@
     74263@@ -3773,7 +3850,7 @@
     74264        }
     74265     }
     74266 
     74267-    goto_tabpage_tp(tp);
     74268+    goto_tabpage_tp(tp, TRUE);
     74269 
     74270 #ifdef FEAT_GUI_TABLINE
     74271     if (gui_use_tabline())
     74272@@ -3783,11 +3860,13 @@
     74273 
     74274 /*
     74275  * Go to tabpage "tp".
     74276+ * Only trigger *Enter autocommands when trigger_autocmds is TRUE.
     74277  * Note: doesn't update the GUI tab.
     74278  */
     74279     void
     74280-goto_tabpage_tp(tp)
     74281+goto_tabpage_tp(tp, trigger_autocmds)
     74282     tabpage_T  *tp;
     74283+    int                trigger_autocmds;
     74284 {
     74285     /* Don't repeat a message in another tab page. */
     74286     set_keep_msg(NULL, 0);
     74287@@ -3795,9 +3874,9 @@
     74288     if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer) == OK)
     74289     {
     74290        if (valid_tabpage(tp))
     74291-           enter_tabpage(tp, curbuf);
     74292+           enter_tabpage(tp, curbuf, trigger_autocmds);
     74293        else
     74294-           enter_tabpage(curtab, curbuf);
     74295+           enter_tabpage(curtab, curbuf, trigger_autocmds);
     74296     }
     74297 }
     74298 
     74299@@ -3810,7 +3889,7 @@
     74300     tabpage_T  *tp;
     74301     win_T      *wp;
     74302 {
     74303-    goto_tabpage_tp(tp);
     74304+    goto_tabpage_tp(tp, TRUE);
     74305     if (curtab == tp && win_valid(wp))
     74306     {
     74307        win_enter(wp, TRUE);
     74308@@ -3848,7 +3927,7 @@
     74309     }
     74310 
     74311     /* Re-insert it at the specified position. */
     74312-    if (n == 0)
     74313+    if (n <= 0)
     74314     {
     74315        curtab->tp_next = first_tabpage;
     74316        first_tabpage = curtab;
     74317@@ -4271,19 +4350,19 @@
    6878674318     win_T      *after UNUSED;
    6878774319     int                hidden UNUSED;
     
    6880974341 #ifdef FEAT_AUTOCMD
    6881074342        /* Don't execute autocommands while the window is not properly
    68811 @@ -4296,53 +4329,53 @@
     74343@@ -4296,53 +4375,53 @@
    6881274344         */
    6881374345 #ifdef FEAT_WINDOWS
     
    6886174393        /* init w: variables */
    6886274394-       init_var_dict(&newwin->w_vars, &newwin->w_winvar);
    68863 +       init_var_dict(&new_wp->w_vars, &new_wp->w_winvar);
     74395+       init_var_dict(&new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
    6886474396 #endif
    6886574397 #ifdef FEAT_FOLDING
     
    6888274414 
    6888374415 #if defined(FEAT_WINDOWS) || defined(PROTO)
    68884 @@ -4435,7 +4468,6 @@
     74416@@ -4435,7 +4514,6 @@
    6888574417 #endif /* FEAT_GUI */
    6888674418 
     
    6889074422 #endif
    6889174423 
    68892 @@ -5459,6 +5491,19 @@
     74424@@ -5459,19 +5537,31 @@
    6889374425 
    6889474426 #endif /* FEAT_WINDOWS */
     
    6891074442  * Set the height of a window.
    6891174443  * This takes care of the things inside the window, not what happens to the
    68912 @@ -5471,7 +5516,6 @@
     74444  * window position, the frame or to other windows.
     74445  */
     74446-    static void
     74447+    void
     74448 win_new_height(wp, height)
     74449     win_T      *wp;
     74450     int                height;
    6891374451 {
    6891474452     linenr_T   lnum;
     
    6891874456     /* Don't want a negative height.  Happens when splitting a tiny window.
    6891974457      * Will equalize heights soon to fix it. */
    68920 @@ -5481,8 +5525,7 @@
     74458@@ -5481,8 +5571,7 @@
    6892174459        return;     /* nothing to do */
    6892274460 
     
    6892874466     wp->w_height = height;
    6892974467     wp->w_skipcol = 0;
     74468@@ -5606,7 +5695,7 @@
     74469 /*
     74470  * Set the width of a window.
     74471  */
     74472-    static void
     74473+    void
     74474 win_new_width(wp, width)
     74475     win_T      *wp;
     74476     int                width;
    6893074477diff -Naur vim73.orig/src/workshop.c vim73/src/workshop.c
    68931 --- vim73.orig/src/workshop.c   2012-06-03 23:09:52.924006631 +0000
    68932 +++ vim73/src/workshop.c        2012-06-03 23:09:53.540023023 +0000
     74478--- vim73.orig/src/workshop.c   2010-08-08 13:18:24.000000000 +0000
     74479+++ vim73/src/workshop.c        2012-07-20 20:31:08.990971798 +0000
    6893374480@@ -16,7 +16,6 @@
    6893474481 #include <sys/types.h>
     
    6894074487 # include <libgen.h>
    6894174488diff -Naur vim73.orig/src/xpm_w32.c vim73/src/xpm_w32.c
    68942 --- vim73.orig/src/xpm_w32.c    2012-06-03 23:09:52.940007057 +0000
    68943 +++ vim73/src/xpm_w32.c 2012-06-03 23:09:55.348071138 +0000
     74489--- vim73.orig/src/xpm_w32.c    2010-05-15 11:04:07.000000000 +0000
     74490+++ vim73/src/xpm_w32.c 2012-07-20 20:31:14.540975795 +0000
    6894474491@@ -1,4 +1,5 @@
    6894574492-/*
     
    6899274539diff -Naur vim73.orig/src/xxd/Make_ming.mak vim73/src/xxd/Make_ming.mak
    6899374540--- vim73.orig/src/xxd/Make_ming.mak    1970-01-01 00:00:00.000000000 +0000
    68994 +++ vim73/src/xxd/Make_ming.mak 2012-06-03 23:09:54.804056662 +0000
     74541+++ vim73/src/xxd/Make_ming.mak 2012-07-20 20:31:12.870974595 +0000
    6899574542@@ -0,0 +1,28 @@
    6899674543+# The most simplistic Makefile, for MinGW gcc on MS-DOS
     
    6902374570+       -$(DEL) xxd.exe
    6902474571diff -Naur vim73.orig/src/xxd/xxd.c vim73/src/xxd/xxd.c
    69025 --- vim73.orig/src/xxd/xxd.c    2012-06-03 23:09:52.944007163 +0000
    69026 +++ vim73/src/xxd/xxd.c 2012-06-03 23:09:53.932033457 +0000
     74572--- vim73.orig/src/xxd/xxd.c    2010-05-15 11:04:06.000000000 +0000
     74573+++ vim73/src/xxd/xxd.c 2012-07-20 20:31:10.244306036 +0000
    6902774574@@ -49,6 +49,8 @@
    6902874575  *         option -b added: 01000101 binary output in normal format.
Note: See TracChangeset for help on using the changeset viewer.