Changeset eb3c388


Ignore:
Timestamp:
Jun 4, 2012, 6:07:54 PM (12 years ago)
Author:
Jonathan Norman <jon@…>
Branches:
clfs-2.1, clfs-3.0.0-systemd, clfs-3.0.0-sysvinit, master, systemd, sysvinit
Children:
3e3e226
Parents:
c7fdbf48
Message:

Updated bash and vim branch update patches to -4

Files:
1 added
1 deleted
3 edited
1 moved

Legend:

Unmodified
Added
Removed
  • BOOK/general.ent

    rc7fdbf48 reb3c388  
    11<?xml version="1.0" encoding="ISO-8859-1"?>
    22
    3 <!ENTITY month "03"> <!-- Use two digits -->
    4 <!ENTITY month_name "March">
    5 <!ENTITY day "14"> <!-- Use two digits -->
     3<!ENTITY month "06"> <!-- Use two digits -->
     4<!ENTITY month_name "June">
     5<!ENTITY day "04"> <!-- Use two digits -->
    66<!ENTITY year "2012"> <!-- Use four digits -->
    77
  • BOOK/introduction/common/changelog.xml

    rc7fdbf48 reb3c388  
    3838
    3939    <listitem>
     40      <para>4 June 2012</para>
     41      <itemizedlist>
     42        <listitem>
     43          <para>[Jonathan] - Updated Bash Branch Update patch to -4.</para>
     44        </listitem>
     45        <listitem>
     46          <para>[Jonathan] - Updated Vim Branch Update patch to -4.</para>
     47        </listitem>
     48      </itemizedlist>
     49    </listitem>
     50
     51    <listitem>
    4052      <para>15 April 2012</para>
    4153      <itemizedlist>
  • BOOK/patches.ent

    rc7fdbf48 reb3c388  
    55<!-- Start of Common Patches -->
    66
    7 <!ENTITY bash-branch_update-patch "bash-&bash-version;-branch_update-3.patch">
    8 <!ENTITY bash-branch_update-patch-md5 "65f1ae14e3f5f8cbcdcba6defc3b1c9e">
    9 <!ENTITY bash-branch_update-patch-size "24 KB">
     7<!ENTITY bash-branch_update-patch "bash-&bash-version;-branch_update-4.patch">
     8<!ENTITY bash-branch_update-patch-md5 "3143b23ee24c2dd630ad8db4c95948d9">
     9<!ENTITY bash-branch_update-patch-size "44 KB">
    1010
    1111<!ENTITY coreutils-uname-patch "coreutils-&coreutils-version;-uname-1.patch">
     
    8989<!ENTITY texinfo-new_compressors-patch-size "2 KB">
    9090
    91 <!ENTITY vim-branch_update-patch "vim-&vim-version;-branch_update-3.patch">
    92 <!ENTITY vim-branch_update-patch-md5 "f0f1be4f8f5c0bb4f128bebe77bc8ef9">
    93 <!ENTITY vim-branch_update-patch-size "1.9 MB">
     91<!ENTITY vim-branch_update-patch "vim-&vim-version;-branch_update-4.patch">
     92<!ENTITY vim-branch_update-patch-md5 "edde25ac785167dd31ee17e5560f2788">
     93<!ENTITY vim-branch_update-patch-size "2.1 MB">
    9494
    9595<!-- Start of multilib patches -->
  • patches/vim-7.3-branch_update-4.patch

    rc7fdbf48 reb3c388  
    11Submitted By: Jonathan Norman (jonathan at bluesquarelinux dot co dot uk)
    2 Date: 2012-02-15
     2Date: 2012-06-03
    33Initial Package Version: 7.3
    44Origin: Upstream
    55Upstream Status: Applied
    6 Description: Contains all upstream patches up to 7.3.444
     6Description: Contains all upstream patches up to 7.3.538
    77
    88diff -Naur vim73.orig/Filelist vim73/Filelist
    9 --- vim73.orig/Filelist 2012-02-15 21:57:45.065436261 +0000
    10 +++ vim73/Filelist      2012-02-15 21:57:46.545475298 +0000
     9--- vim73.orig/Filelist 2012-06-03 23:09:52.956007482 +0000
     10+++ vim73/Filelist      2012-06-03 23:09:54.868058365 +0000
    1111@@ -39,6 +39,7 @@
    1212                src/mark.c \
     
    7272                runtime/spell/??/main.aap \
    7373diff -Naur vim73.orig/Makefile vim73/Makefile
    74 --- vim73.orig/Makefile 2012-02-15 21:57:45.117437632 +0000
    75 +++ vim73/Makefile      2012-02-15 21:57:45.645451559 +0000
     74--- vim73.orig/Makefile 2012-06-03 23:09:53.028009398 +0000
     75+++ vim73/Makefile      2012-06-03 23:09:53.712027602 +0000
    7676@@ -23,6 +23,9 @@
    7777 # has run can result in compiling with $(CC) empty.
     
    9595        cd src && $(MAKE) $@
    9696diff -Naur vim73.orig/README_extra.txt vim73/README_extra.txt
    97 --- vim73.orig/README_extra.txt 2012-02-15 21:57:45.041435628 +0000
    98 +++ vim73/README_extra.txt      2012-02-15 21:57:45.977460316 +0000
     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
    9999@@ -13,9 +13,6 @@
    100100 
     
    108108 
    109109diff -Naur vim73.orig/runtime/doc/autocmd.txt vim73/runtime/doc/autocmd.txt
    110 --- vim73.orig/runtime/doc/autocmd.txt  2012-02-15 21:57:45.113437526 +0000
    111 +++ vim73/runtime/doc/autocmd.txt       2012-02-15 21:57:46.965486377 +0000
     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
    112112@@ -299,6 +299,8 @@
    113113 |InsertEnter|          starting Insert mode
     
    137137 InsertEnter                    Just before starting Insert mode.  Also for
    138138                                Replace mode and Virtual Replace mode.  The
    139 @@ -1051,14 +1064,17 @@
     139@@ -682,7 +695,10 @@
     140 QuickFixCmdPre                 Before a quickfix command is run (|:make|,
     141                                |:lmake|, |:grep|, |:lgrep|, |:grepadd|,
     142                                |:lgrepadd|, |:vimgrep|, |:lvimgrep|,
     143-                               |:vimgrepadd|, |:lvimgrepadd|, |:cscope|).
     144+                               |:vimgrepadd|, |:lvimgrepadd|, |:cscope|,
     145+                               |:cfile|, |:cgetfile|, |:caddfile|, |:lfile|,
     146+                               |:lgetfile|, |:laddfile|, |:helpgrep|,
     147+                               |:lhelpgrep|).
     148                                The pattern is matched against the command
     149                                being run.  When |:grep| is used but 'grepprg'
     150                                is set to "internal" it still matches "grep".
     151@@ -693,7 +709,10 @@
     152                                                        *QuickFixCmdPost*
     153 QuickFixCmdPost                        Like QuickFixCmdPre, but after a quickfix
     154                                command is run, before jumping to the first
     155-                               location.  See |QuickFixCmdPost-example|.
     156+                               location. For |:cfile| and |:lfile| commands
     157+                               it is run after error file is read and before
     158+                               moving to the first error.
     159+                               See |QuickFixCmdPost-example|.
     160                                                        *RemoteReply*
     161 RemoteReply                    When a reply from a Vim that functions as
     162                                server was received |server2client()|.  The
     163@@ -1051,14 +1070,17 @@
    140164                        argument is included, Vim executes only the matching
    141165                        autocommands for that group.  Note: if you use an
     
    159183                        the autocommands, not the buffers to which they are
    160184diff -Naur vim73.orig/runtime/doc/change.txt vim73/runtime/doc/change.txt
    161 --- vim73.orig/runtime/doc/change.txt   2012-02-15 21:57:45.109437420 +0000
    162 +++ vim73/runtime/doc/change.txt        2012-02-15 21:57:45.869457468 +0000
     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
    163187@@ -916,8 +916,10 @@
    164188 {Visual}["x]Y          Yank the highlighted lines [into register x] (for
     
    174198 :[range]y[ank] [x] {count}
    175199                        Yank {count} lines, starting with last line number
     200diff -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
     203@@ -330,12 +330,12 @@
     204 
     205 :his[tory] [{name}] [{first}][, [{last}]]
     206                List the contents of history {name} which can be:
     207-               c[md]    or :   command-line history
     208-               s[earch] or /   search string history
     209-               e[xpr]   or =   expression register history
     210-               i[nput]  or @   input line history
     211-               d[ebug]  or >   debug command history
     212-               a[ll]           all of the above
     213+               c[md]    or :           command-line history
     214+               s[earch] or / or ?      search string history
     215+               e[xpr]   or =           expression register history
     216+               i[nput]  or @           input line history
     217+               d[ebug]  or >           debug command history
     218+               a[ll]                   all of the above
     219                {not in Vi}
     220 
     221                If the numbers {first} and/or {last} are given, the respective
     222diff -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
     225@@ -178,7 +178,7 @@
     226 nodiff" before hiding it.
     227 
     228                                                        *:diffu* *:diffupdate*
     229-:diffu[pdate]                  Update the diff highlighting and folds.
     230+:diffu[pdate][!]               Update the diff highlighting and folds.
     231 
     232 Vim attempts to keep the differences updated when you make changes to the
     233 text.  This mostly takes care of inserted and deleted lines.  Changes within a
     234@@ -187,6 +187,9 @@
     235 
     236        :diffupdate
     237 
     238+If the ! is included Vim will check if the file was changed externally and
     239+needs to be reloaded.  It will prompt for each changed file, like `:checktime`
     240+was used.
     241 
     242 Vim will show filler lines for lines that are missing in one window but are
     243 present in another.  These lines were inserted in another file or deleted in
    176244diff -Naur vim73.orig/runtime/doc/eval.txt vim73/runtime/doc/eval.txt
    177 --- vim73.orig/runtime/doc/eval.txt     2012-02-15 21:57:45.105437315 +0000
    178 +++ vim73/runtime/doc/eval.txt  2012-02-15 21:57:46.673478676 +0000
     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
    179247@@ -798,11 +798,12 @@
    180248 For |Lists| only "+" is possible and then both expr6 must be a list.  The
     
    225293 append( {lnum}, {list})                Number  append lines {list} below line {lnum}
    226294 argc()                         Number  number of files in the argument list
    227 @@ -1807,6 +1819,7 @@
     295@@ -1726,7 +1738,8 @@
     296 extend( {expr1}, {expr2} [, {expr3}])
     297                                List/Dict insert items of {expr2} into {expr1}
     298 exp( {expr})                   Float   exponential of {expr}
     299-expand( {expr} [, {flag}])     String  expand special keywords in {expr}
     300+expand( {expr} [, {nosuf} [, {list}]])
     301+                               any     expand special keywords in {expr}
     302 feedkeys( {string} [, {mode}]) Number  add key sequence to typeahead buffer
     303 filereadable( {file})          Number  TRUE if {file} is a readable file
     304 filewritable( {file})          Number  TRUE if {file} is a writable file
     305@@ -1780,7 +1793,8 @@
     306 getwinposx()                   Number  X coord in pixels of GUI Vim window
     307 getwinposy()                   Number  Y coord in pixels of GUI Vim window
     308 getwinvar( {nr}, {varname})    any     variable {varname} in window {nr}
     309-glob( {expr} [, {flag}])       String  expand file wildcards in {expr}
     310+glob( {expr} [, {nosuf} [, {list}]])
     311+                               any     expand file wildcards in {expr}
     312 globpath( {path}, {expr} [, {flag}])
     313                                String  do glob({expr}) for all dirs in {path}
     314 has( {feature})                        Number  TRUE if feature {feature} supported
     315@@ -1807,6 +1821,7 @@
    228316 inputsave()                    Number  save and clear typeahead
    229317 inputsecret( {prompt} [, {text}]) String  like input() but hiding the text
     
    233321 islocked( {expr})              Number  TRUE if {expr} is locked
    234322 items( {dict})                 List    key-value pairs in {dict}
    235 @@ -1822,7 +1835,7 @@
     323@@ -1822,7 +1837,7 @@
    236324 log( {expr})                   Float   natural logarithm (base e) of {expr}
    237325 log10( {expr})                 Float   logarithm of Float {expr} to base 10
     
    242330 mapcheck( {name}[, {mode} [, {abbr}]])
    243331                                String  check for mappings matching {name}
    244 @@ -1846,6 +1859,7 @@
     332@@ -1846,6 +1861,7 @@
    245333 mzeval( {expr})                        any     evaluate |MzScheme| expression
    246334 nextnonblank( {lnum})          Number  line nr of non-blank line >= {lnum}
     
    250338 pow( {x}, {y})                 Float   {x} to the power of {y}
    251339 prevnonblank( {lnum})          Number  line nr of non-blank line <= {lnum}
    252 @@ -1904,7 +1918,8 @@
     340@@ -1904,7 +1920,8 @@
    253341 simplify( {filename})          String  simplify filename as much as possible
    254342 sin( {expr})                   Float   sine of {expr}
     
    260348 spellbadword()                 String  badly spelled word at cursor
    261349 spellsuggest( {word} [, {max} [, {capital}]])
    262 @@ -1967,6 +1982,7 @@
     350@@ -1967,6 +1984,7 @@
    263351 winwidth( {nr})                        Number  width of window {nr}
    264352 writefile( {list}, {fname} [, {binary}])
     
    268356 abs({expr})                                                    *abs()*
    269357                Return the absolute value of {expr}.  When {expr} evaluates to
    270 @@ -2006,6 +2022,13 @@
     358@@ -2006,6 +2024,13 @@
    271359                Use |insert()| to add an item at another position.
    272360 
     
    282370                When {expr} is a |List|: Append each item of the |List| as a
    283371                text line below line {lnum} in the current buffer.
    284 @@ -3759,6 +3782,11 @@
     372@@ -2708,13 +2733,15 @@
     373                {only available when compiled with the |+float| feature}
     374 
     375 
     376-expand({expr} [, {flag}])                              *expand()*
     377+expand({expr} [, {nosuf} [, {list}]])                          *expand()*
     378                Expand wildcards and the following special keywords in {expr}.
     379-               The result is a String.
     380+               'wildignorecase' applies.
     381 
     382-               When there are several matches, they are separated by <NL>
     383-               characters.  [Note: in version 5.0 a space was used, which
     384-               caused problems when a file name contains a space]
     385+               If {list} is given and it is non-zero, a List will be returned.
     386+               Otherwise the result is a String and when there are several
     387+               matches, they are separated by <NL> characters.  [Note: in
     388+               version 5.0 a space was used, which caused problems when a
     389+               file name contains a space]
     390 
     391                If the expansion fails, the result is an empty string.  A name
     392                for a non-existing file is not included.
     393@@ -2731,6 +2758,7 @@
     394                        <abuf>          autocmd buffer number (as a String!)
     395                        <amatch>        autocmd matched name
     396                        <sfile>         sourced script file name
     397+                       <slnum>         sourced script file line number
     398                        <cword>         word under the cursor
     399                        <cWORD>         WORD under the cursor
     400                        <client>        the {clientid} of the last received
     401@@ -2767,10 +2795,10 @@
     402                When {expr} does not start with '%', '#' or '<', it is
     403                expanded like a file name is expanded on the command line.
     404                'suffixes' and 'wildignore' are used, unless the optional
     405-               {flag} argument is given and it is non-zero.  Names for
     406-               non-existing files are included.  The "**" item can be used to
     407-               search in a directory tree.  For example, to find all "README"
     408-               files in the current directory and below: >
     409+               {nosuf} argument is given and it is non-zero.
     410+               Names for non-existing files are included.  The "**" item can
     411+               be used to search in a directory tree.  For example, to find
     412+               all "README" files in the current directory and below: >
     413                        :echo expand("**/README")
     414 <
     415                Expand() can also be used to expand variables and environment
     416@@ -3414,17 +3442,23 @@
     417                        :let list_is_on = getwinvar(2, '&list')
     418                        :echo "myvar = " . getwinvar(1, 'myvar')
     419 <
     420-glob({expr} [, {flag}])                                        *glob()*
     421+glob({expr} [, {nosuf} [, {list}]])                            *glob()*
     422                Expand the file wildcards in {expr}.  See |wildcards| for the
     423                use of special characters.
     424-               The result is a String.
     425-               When there are several matches, they are separated by <NL>
     426-               characters.
     427-               Unless the optional {flag} argument is given and is non-zero,
     428+
     429+               Unless the optional {nosuf} argument is given and is non-zero,
     430                the 'suffixes' and 'wildignore' options apply: Names matching
     431                one of the patterns in 'wildignore' will be skipped and
     432                'suffixes' affect the ordering of matches.
     433-               If the expansion fails, the result is an empty string.
     434+               'wildignorecase' always applies.
     435+
     436+               When {list} is present and it is non-zero the result is a List
     437+               with all matching files. The advantage of using a List is,
     438+               you also get filenames containing newlines correctly.
     439+               Otherwise the result is a String and when there are several
     440+               matches, they are separated by <NL> characters.
     441+
     442+               If the expansion fails, the result is an empty String or List.
     443                A name for a non-existing file is not included.
     444 
     445                For most systems backticks can be used to get files names from
     446@@ -3759,6 +3793,11 @@
    285447                Note that when {item} is a |List| it is inserted as a single
    286448                item.  Use |extend()| to concatenate |Lists|.
     
    294456                The result is a Number, which is non-zero when a directory
    295457                with the name {directory} exists.  If {directory} doesn't
    296 @@ -3966,23 +3994,51 @@
     458@@ -3966,23 +4005,51 @@
    297459                further items in {expr} are processed.
    298460 
     
    353515                then the global mappings.
    354516                This function can be used to map a key even when it's already
    355 @@ -4295,6 +4351,13 @@
     517@@ -4295,6 +4362,13 @@
    356518                        call setpos('.', save_cursor)
    357519 <              Also see |setpos()|.
     
    367529                Shorten directory names in the path {expr} and return the
    368530                result.  The tail, the file name, is kept as-is.  The other
    369 @@ -5228,7 +5291,7 @@
     531@@ -5228,7 +5302,7 @@
    370532                {only available when compiled with the |+float| feature}
    371533 
     
    376538                want a list to remain unmodified make a copy first: >
    377539                        :let sortedlist = sort(copy(mylist))
    378 @@ -5236,6 +5299,8 @@
     540@@ -5236,6 +5310,8 @@
    379541                Numbers sort after Strings, |Lists| after Numbers.
    380542                For sorting text in the current buffer use |:sort|.
     
    385547                is called to compare items.  The function is invoked with two
    386548                items as argument and must return zero if they are equal, 1 or
    387 @@ -6056,7 +6121,15 @@
     549@@ -6056,7 +6132,15 @@
    388550                To copy a file byte for byte: >
    389551                        :let fl = readfile("foo", "b")
     
    404566diff -Naur vim73.orig/runtime/doc/eval.txt.orig vim73/runtime/doc/eval.txt.orig
    405567--- vim73.orig/runtime/doc/eval.txt.orig        1970-01-01 00:00:00.000000000 +0000
    406 +++ vim73/runtime/doc/eval.txt.orig     2012-02-15 21:57:46.013461267 +0000
     568+++ vim73/runtime/doc/eval.txt.orig     2012-06-03 23:09:54.176039949 +0000
    407569@@ -0,0 +1,8362 @@
    408570+*eval.txt*     For Vim version 7.3.  Last change: 2010 Aug 15
     
    87698931+ vim:tw=78:ts=8:ft=help:norl:
    87708932diff -Naur vim73.orig/runtime/doc/if_cscop.txt vim73/runtime/doc/if_cscop.txt
    8771 --- vim73.orig/runtime/doc/if_cscop.txt 2012-02-15 21:57:45.109437420 +0000
    8772 +++ vim73/runtime/doc/if_cscop.txt      2012-02-15 21:57:46.089463271 +0000
     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
    87738935@@ -272,6 +272,15 @@
    87748936        :set cst
     
    92819443+
    92829444+ vim:tw=78:ts=8:ft=help:norl:
     9445diff -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
     9448@@ -1,4 +1,4 @@
     9449-*if_lua.txt*    For Vim version 7.3.  Last change: 2010 Jul 22
     9450+*if_lua.txt*    For Vim version 7.3.  Last change: 2012 Jan 16
     9451 
     9452 
     9453                  VIM REFERENCE MANUAL    by Luis Carvalho
     9454@@ -8,8 +8,11 @@
     9455 
     9456 1. Commands                    |lua-commands|
     9457 2. The vim module              |lua-vim|
     9458-3. Buffer userdata             |lua-buffer|
     9459-4. Window userdata             |lua-window|
     9460+3. List userdata               |lua-list|
     9461+4. Dict userdata               |lua-dict|
     9462+5. Buffer userdata             |lua-buffer|
     9463+6. Window userdata             |lua-window|
     9464+7. The luaeval function                |lua-luaeval|
     9465 
     9466 {Vi does not have any of these commands}
     9467 
     9468@@ -88,11 +91,9 @@
     9469 All these commands execute a Lua chunk from either the command line (:lua and
     9470 :luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
     9471 interpreter, each chunk has its own scope and so only global variables are
     9472-shared between command calls. Lua default libraries "table", "string", "math",
     9473-and "package" are available, "io" and "debug" are not, and "os" is restricted
     9474-to functions "date", "clock", "time", "difftime", and "getenv". In addition,
     9475-Lua "print" function has its output redirected to the Vim message area, with
     9476-arguments separated by a white space instead of a tab.
     9477+shared between command calls. All Lua default libraries are available. In
     9478+addition, Lua "print" function has its output redirected to the Vim message
     9479+area, with arguments separated by a white space instead of a tab.
     9480 
     9481 Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
     9482 and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
     9483@@ -108,9 +109,9 @@
     9484 module also includes routines for buffer, window, and current line queries,
     9485 Vim evaluation and command execution, and others.
     9486 
     9487-       vim.isbuffer(value)     Returns 'true' (boolean, not string) if
     9488-                               "value" is a buffer userdata and 'false'
     9489-                               otherwise (see |lua-buffer|).
     9490+       vim.list()              Returns an empty list (see |List|).
     9491+
     9492+       vim.dict()              Returns an empty dictionary (see |Dictionary|).
     9493 
     9494        vim.buffer([arg])       If "arg" is a number, returns buffer with
     9495                                number "arg" in the buffer list or, if "arg"
     9496@@ -121,16 +122,21 @@
     9497                                'true' returns the first buffer in the buffer
     9498                                list or else the current buffer.
     9499 
     9500-       vim.iswindow(value)     Returns 'true' (boolean, not string) if
     9501-                               "value" is a window userdata and
     9502-                               'false' otherwise (see |lua-window|).
     9503-
     9504        vim.window([arg])       If "arg" is a number, returns window with
     9505                                number "arg" or 'nil' (nil value, not string)
     9506                                if not found. Otherwise, if "toboolean(arg)"
     9507                                is 'true' returns the first window or else the
     9508                                current window.
     9509 
     9510+       vim.type({arg})         Returns the type of {arg}. It is equivalent to
     9511+                               Lua's "type" function, but returns "list",
     9512+                               "dict", "buffer", or "window" if {arg} is a
     9513+                               list, dictionary, buffer, or window,
     9514+                               respectively. Examples: >
     9515+                                       :lua l = vim.list()
     9516+                                       :lua print(type(l), vim.type(l))
     9517+                                       :" userdata list
     9518+<
     9519        vim.command({cmd})      Executes the vim (ex-mode) command {cmd}.
     9520                                Examples: >
     9521                                        :lua vim.command"set tw=60"
     9522@@ -141,7 +147,7 @@
     9523                                Vim strings and numbers are directly converted
     9524                                to Lua strings and numbers respectively. Vim
     9525                                lists and dictionaries are converted to Lua
     9526-                               tables (lists become integer-keyed tables).
     9527+                               userdata (see |lua-list| and |lua-dict|).
     9528                                Examples: >
     9529                                        :lua tw = vim.eval"&tw"
     9530                                        :lua print(vim.eval"{'a': 'one'}".a)
     9531@@ -157,7 +163,72 @@
     9532 
     9533 
     9534 ==============================================================================
     9535-3. Buffer userdata                                     *lua-buffer*
     9536+3. List userdata                                       *lua-list*
     9537+
     9538+List userdata represent vim lists, and the interface tries to follow closely
     9539+Vim's syntax for lists. Since lists are objects, changes in list references in
     9540+Lua are reflected in Vim and vice-versa. A list "l" has the following
     9541+properties and methods:
     9542+
     9543+Properties
     9544+----------
     9545+       o "#l" is the number of items in list "l", equivalent to "len(l)"
     9546+           in Vim.
     9547+       o "l[k]" returns the k-th item in "l"; "l" is zero-indexed, as in Vim.
     9548+           To modify the k-th item, simply do "l[k] = newitem"; in
     9549+           particular, "l[k] = nil" removes the k-th item from "l".
     9550+       o "l()" returns an iterator for "l".
     9551+
     9552+Methods
     9553+-------
     9554+       o "l:add(item)" appends "item" to the end of "l".
     9555+       o "l:insert(item[, pos])" inserts "item" at (optional)
     9556+           position "pos" in the list. The default value for "pos" is 0.
     9557+
     9558+Examples:
     9559+>
     9560+       :let l = [1, 'item']
     9561+       :lua l = vim.eval('l') -- same 'l'
     9562+       :lua l:add(vim.list())
     9563+       :lua l[0] = math.pi
     9564+       :echo l[0] " 3.141593
     9565+       :lua l[0] = nil -- remove first item
     9566+       :lua l:insert(true, 1)
     9567+       :lua print(l, #l, l[0], l[1], l[-1])
     9568+       :lua for item in l() do print(item) end
     9569+<
     9570+
     9571+==============================================================================
     9572+4. Dict userdata                                       *lua-dict*
     9573+
     9574+Similarly to list userdata, dict userdata represent vim dictionaries; since
     9575+dictionaries are also objects, references are kept between Lua and Vim. A dict
     9576+"d" has the following properties:
     9577+
     9578+Properties
     9579+----------
     9580+       o "#d" is the number of items in dict "d", equivalent to "len(d)"
     9581+           in Vim.
     9582+       o "d.key" or "d['key']" returns the value at entry "key" in "d".
     9583+           To modify the entry at this key, simply do "d.key = newvalue"; in
     9584+           particular, "d.key = nil" removes the entry from "d".
     9585+       o "d()" returns an iterator for "d" and is equivalent to "items(d)" in
     9586+           Vim.
     9587+
     9588+Examples:
     9589+>
     9590+       :let d = {'n':10}
     9591+       :lua d = vim.eval('d') -- same 'd'
     9592+       :lua print(d, d.n, #d)
     9593+       :let d.self = d
     9594+       :lua for k, v in d() do print(d, k, v) end
     9595+       :lua d.x = math.pi
     9596+       :lua d.self = nil -- remove entry
     9597+       :echo d
     9598+<
     9599+
     9600+==============================================================================
     9601+5. Buffer userdata                                     *lua-buffer*
     9602 
     9603 Buffer userdata represent vim buffers. A buffer userdata "b" has the following
     9604 properties and methods:
     9605@@ -209,7 +280,7 @@
     9606 <
     9607 
     9608 ==============================================================================
     9609-4. Window userdata                                     *lua-window*
     9610+6. Window userdata                                     *lua-window*
     9611 
     9612 Window objects represent vim windows. A window userdata "w" has the following
     9613 properties and methods:
     9614@@ -241,4 +312,29 @@
     9615 <
     9616 
     9617 ==============================================================================
     9618- vim:tw=78:ts=8:ft=help:norl:
     9619+7. The luaeval function                                        *lua-luaeval*
     9620+
     9621+The (dual) equivalent of "vim.eval" for passing Lua values to Vim is
     9622+"luaeval". "luaeval" takes an expression string and an optional argument and
     9623+returns the result of the expression. It is semantically equivalent in Lua to:
     9624+>
     9625+       local chunkheader = "local _A = select(1, ...) return "
     9626+       function luaeval (expstr, arg)
     9627+           local chunk = assert(loadstring(chunkheader .. expstr, "luaeval"))
     9628+           return chunk(arg) -- return typval
     9629+       end
     9630+<
     9631+Note that "_A" receives the argument to "luaeval". Examples: >
     9632+
     9633+       :echo luaeval('math.pi')
     9634+       :lua a = vim.list():add('newlist')
     9635+       :let a = luaeval('a')
     9636+       :echo a[0] " 'newlist'
     9637+       :function Rand(x,y) " random uniform between x and y
     9638+       :  return luaeval('(_A.y-_A.x)*math.random()+_A.x', {'x':a:x,'y':a:y})
     9639+       :  endfunction
     9640+       :echo Rand(1,10)
     9641+
     9642+
     9643+==============================================================================
     9644+ vim:tw=78:ts=8:noet:ft=help:norl:
    92839645diff -Naur vim73.orig/runtime/doc/indent.txt vim73/runtime/doc/indent.txt
    9284 --- vim73.orig/runtime/doc/indent.txt   2012-02-15 21:57:45.113437526 +0000
    9285 +++ vim73/runtime/doc/indent.txt        2012-02-15 21:57:46.169465381 +0000
     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
    92869648@@ -128,13 +128,20 @@
    92879649 used CTRL-T or CTRL-D.
     
    95279889              using "(0" or "u0", respectively and the unclosed parentheses is
    95289890              the last non-white character in its line and it is not the
    9529 @@ -410,6 +459,7 @@
     9891@@ -410,6 +459,23 @@
    95309892                  a_short_line(argument,    a_short_line(argument,
    95319893                               argument);                argument);
    95329894 <
     9895+                                                       *cino-k*
     9896+       kN    When in unclosed parentheses which follow "if", "for" or
     9897+             "while" and N is non-zero, overrides the behaviour defined by
     9898+             "(N": causes the indent to be N characters relative to the outer
     9899+             context (i.e. the line where "if", "for" or "while" is).  Has
     9900+             no effect on deeper levels of nesting.  Affects flags like "wN"
     9901+             only for the "if", "for" and "while" conditions.  If 0, defaults
     9902+             to behaviour defined by the "(N" flag.  (default: 0).
     9903+
     9904+               cino=(0                    cino=(0,ks >
     9905+                 if (condition1            if (condition1
     9906+                     && condition2)                && condition2)
     9907+                     action();                 action();
     9908+                 function(argument1        function(argument1
     9909+                          && argument2);            && argument2);
     9910+<
    95339911+                                                       *cino-m*
    95349912        mN    When N is non-zero, line up a line starting with a closing
    95359913              parentheses with the first character of the line with the
    95369914              matching opening parentheses.  (default 0).
    9537 @@ -424,6 +474,7 @@
     9915@@ -424,6 +490,7 @@
    95389916                     )                      )
    95399917                      foo;                      foo;
     
    95439921              parentheses with the first character of the previous line.
    95449922              (default 0).
    9545 @@ -433,7 +484,7 @@
     9923@@ -433,7 +500,7 @@
    95469924                         cond2                     cond2
    95479925                     )                             )
     
    95529930              currently unused but must be non-zero (e.g. 'j1').  'j1' will
    95539931              indent for example the following code snippet correctly: >
    9554 @@ -444,7 +495,7 @@
     9932@@ -444,7 +511,7 @@
    95559933                    }
    95569934                });
     
    95619939              them with labels.  The value 'N' is currently unused but must be
    95629940              non-zero (e.g. 'J1'). >
    9563 @@ -462,14 +513,19 @@
     9941@@ -462,23 +529,28 @@
    95649942                    }
    95659943                }
     
    95799957+                                                               *cino-#*
    95809958        #N    When N is non-zero recognize shell/Perl comments, starting with
    9581               '#'.  Default N is zero: don't recognizes '#' comments.  Note
     9959-             '#'.  Default N is zero: don't recognizes '#' comments.  Note
     9960+             '#'.  Default N is zero: don't recognize '#' comments.  Note
    95829961              that lines starting with # will still be seen as preprocessor
    9583 @@ -477,7 +533,7 @@
     9962              lines.
    95849963 
    95859964 
    95869965 The defaults, spelled out in full, are:
    95879966-       cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,ps,ts,is,+s,
     9967-                       c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
    95889968+       cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
    9589                         c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
     9969+                       c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
    95909970 
    95919971 Vim puts a line in column 1 if:
     9972 - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
    95929973diff -Naur vim73.orig/runtime/doc/indent.txt.orig vim73/runtime/doc/indent.txt.orig
    95939974--- vim73.orig/runtime/doc/indent.txt.orig      1970-01-01 00:00:00.000000000 +0000
     
    1040610787+ vim:tw=78:ts=8:ft=help:norl:
    1040710788diff -Naur vim73.orig/runtime/doc/map.txt vim73/runtime/doc/map.txt
    10408 --- vim73.orig/runtime/doc/map.txt      2012-02-15 21:57:45.109437420 +0000
    10409 +++ vim73/runtime/doc/map.txt   2012-02-15 21:57:46.273468124 +0000
     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
    1041010791@@ -226,7 +226,7 @@
    1041110792 
     
    1041710798 Be very careful about side effects!  The expression is evaluated while
    1041810799 obtaining characters, you may very well make the command dysfunctional.
    10419 @@ -1202,20 +1202,26 @@
     10800@@ -1202,20 +1202,28 @@
    1042010801 
    1042110802        -complete=augroup       autocmd groups
    1042210803        -complete=buffer        buffer names
     10804+       -complete=behave        :behave suboptions
    1042310805+       -complete=color         color schemes
    1042410806        -complete=command       Ex command (and arguments)
     
    1043510817        -complete=help          help subjects
    1043610818        -complete=highlight     highlight groups
     10819+       -complete=history       :history suboptions
    1043710820+       -complete=locale        locale names (as output of locale -a)
    1043810821        -complete=mapping       mapping name
     
    1044510828        -complete=tag_listfiles tags, file names are shown when CTRL-D is hit
    1044610829diff -Naur vim73.orig/runtime/doc/motion.txt vim73/runtime/doc/motion.txt
    10447 --- vim73.orig/runtime/doc/motion.txt   2012-02-15 21:57:45.109437420 +0000
    10448 +++ vim73/runtime/doc/motion.txt        2012-02-15 21:57:46.181465699 +0000
     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
    1044910832@@ -269,11 +269,11 @@
    1045010833                        {char} can be entered like with the |f| command.
     
    1046210845 3. Up-down motions                                     *up-down-motions*
    1046310846diff -Naur vim73.orig/runtime/doc/netbeans.txt vim73/runtime/doc/netbeans.txt
    10464 --- vim73.orig/runtime/doc/netbeans.txt 2012-02-15 21:57:45.109437420 +0000
    10465 +++ vim73/runtime/doc/netbeans.txt      2012-02-15 21:57:46.565475827 +0000
     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
    1046610849@@ -1,4 +1,4 @@
    1046710850-*netbeans.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
     
    1052510908 ==============================================================================
    1052610909diff -Naur vim73.orig/runtime/doc/options.txt vim73/runtime/doc/options.txt
    10527 --- vim73.orig/runtime/doc/options.txt  2012-02-15 21:57:45.109437420 +0000
    10528 +++ vim73/runtime/doc/options.txt       2012-02-15 21:57:46.969486483 +0000
     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
    1052910912@@ -150,6 +150,18 @@
    1053010913 (the ^[ is a real <Esc> here, use CTRL-V <Esc> to enter it)
     
    1063211015        and the other initializations, so that when the 'shell' option is set
    1063311016        there, the 'shellpipe' option changes automatically, unless it was
    10634 @@ -5980,8 +6023,8 @@
     11017@@ -5980,6 +6023,7 @@
    1063511018 
    1063611019                                                *'shellxquote'* *'sxq'*
    1063711020 'shellxquote' 'sxq'    string  (default: "";
    10638 -                                       for Win32, when 'shell' contains "sh"
    10639 -                                       somewhere: "\""
    10640 +                                       for Win32, when 'shell' is cmd.exe or
    10641 +                                       contains "sh" somewhere: "\""
     11021+                                       for Win32, when 'shell' is cmd.exe: "("
     11022                                        for Win32, when 'shell' contains "sh"
     11023                                        somewhere: "\""
    1064211024                                        for Unix, when using system(): "\"")
    10643                         global
    10644                         {not in Vi}
    10645 @@ -5989,11 +6032,12 @@
     11025@@ -5989,14 +6033,28 @@
    1064611026        the "!" and ":!" commands.  Includes the redirection.  See
    1064711027        'shellquote' to exclude the redirection.  It's probably not useful
     
    1065211032-       according the value of 'shell', to reduce the need to set this option
    1065311033-       by the user.  See |dos-shell|.
     11034+       When the value is '(' then ')' is appended. When the value is '"('
     11035+       then ')"' is appended.
     11036+       When the value is '(' then also see 'shellxescape'.
    1065411037+       This is an empty string by default on most systems, but is known to be
    1065511038+       useful for on Win32 version, either for cmd.exe which automatically
     
    1066111044        security reasons.
    1066211045 
    10663 @@ -7530,8 +7574,9 @@
     11046+                                               *'shellxescape'* *'sxe'*
     11047+'shellxescape' 'sxe'   string  (default: "";
     11048+                                for MS-DOS and MS-Windows: "\"&|<>()@^")
     11049+                       global
     11050+                       {not in Vi}
     11051+       When 'shellxquote' is set to "(" then the characters listed in this
     11052+       option will be escaped with a '^' character.  This makes it possible
     11053+       to execute most external commands with cmd.exe.
     11054+
     11055+
     11056                        *'shiftround'* *'sr'* *'noshiftround'* *'nosr'*
     11057 'shiftround' 'sr'      boolean (default off)
     11058                        global
     11059@@ -7530,8 +7588,9 @@
    1066411060        !       When included, save and restore global variables that start
    1066511061                with an uppercase letter, and don't contain a lowercase
     
    1067311069                the '<' item, with the disadvantage that you need to put a
    1067411070                backslash before the ", otherwise it will be recognized as the
    10675 @@ -7747,6 +7792,17 @@
     11071@@ -7747,6 +7806,17 @@
    1067611072        a pattern from the list.  This avoids problems when a future version
    1067711073        uses another default.
     
    1069311089diff -Naur vim73.orig/runtime/doc/options.txt.orig vim73/runtime/doc/options.txt.orig
    1069411090--- vim73.orig/runtime/doc/options.txt.orig     1970-01-01 00:00:00.000000000 +0000
    10695 +++ vim73/runtime/doc/options.txt.orig  2012-02-15 21:57:45.713453353 +0000
     11091+++ vim73/runtime/doc/options.txt.orig  2012-06-03 23:09:53.792029731 +0000
    1069611092@@ -0,0 +1,8079 @@
    1069711093+*options.txt*  For Vim version 7.3.  Last change: 2010 Aug 15
     
    1877619172+ vim:tw=78:ts=8:ft=help:norl:
    1877719173diff -Naur vim73.orig/runtime/doc/os_risc.txt vim73/runtime/doc/os_risc.txt
    18778 --- vim73.orig/runtime/doc/os_risc.txt  2012-02-15 21:57:45.113437526 +0000
    18779 +++ vim73/runtime/doc/os_risc.txt       2012-02-15 21:57:45.965460001 +0000
     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
    1878019176@@ -1,322 +1,12 @@
    1878119177-*os_risc.txt*   For Vim version 7.3.  Last change: 2010 Aug 07
     
    1910519501  vim:tw=78:ts=8:ft=help:norl:
    1910619502diff -Naur vim73.orig/runtime/doc/os_win32.txt vim73/runtime/doc/os_win32.txt
    19107 --- vim73.orig/runtime/doc/os_win32.txt 2012-02-15 21:57:45.109437420 +0000
    19108 +++ vim73/runtime/doc/os_win32.txt      2012-02-15 21:57:46.169465381 +0000
     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
    1910919505@@ -313,6 +313,37 @@
    1911019506    with :!start do not get passed Vim's open file handles, which means they do
     
    1914619542    Vim doesn't wait for it to finish!  Help!
    1914719543diff -Naur vim73.orig/runtime/doc/pattern.txt vim73/runtime/doc/pattern.txt
    19148 --- vim73.orig/runtime/doc/pattern.txt  2012-02-15 21:57:45.109437420 +0000
    19149 +++ vim73/runtime/doc/pattern.txt       2012-02-15 21:57:46.277468229 +0000
     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
    1915019546@@ -1027,11 +1027,9 @@
    1915119547          These items only work for 8-bit characters.
     
    1916319559          character in the form:
    1916419560diff -Naur vim73.orig/runtime/filetype.vim vim73/runtime/filetype.vim
    19165 --- vim73.orig/runtime/filetype.vim     2012-02-15 21:57:45.077436578 +0000
    19166 +++ vim73/runtime/filetype.vim  2012-02-15 21:57:46.905484794 +0000
     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
    1916719563@@ -2475,17 +2475,19 @@
    1916819564 " detected filetypes.
     
    2170722103+unlet s:cpo_save
    2170822104diff -Naur vim73.orig/runtime/ftplugof.vim vim73/runtime/ftplugof.vim
    21709 --- vim73.orig/runtime/ftplugof.vim     2012-02-15 21:57:45.117437632 +0000
    21710 +++ vim73/runtime/ftplugof.vim  2012-02-15 21:57:46.549475403 +0000
     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
    2171122107@@ -1,11 +1,13 @@
    2171222108 " Vim support file to switch off loading plugins for file types
     
    2172822124diff -Naur vim73.orig/src/GvimExt/Make_cyg.mak vim73/src/GvimExt/Make_cyg.mak
    2172922125--- vim73.orig/src/GvimExt/Make_cyg.mak 1970-01-01 00:00:00.000000000 +0000
    21730 +++ vim73/src/GvimExt/Make_cyg.mak      2012-02-15 21:57:46.501474139 +0000
     22126+++ vim73/src/GvimExt/Make_cyg.mak      2012-06-03 23:09:54.804056662 +0000
    2173122127@@ -0,0 +1,77 @@
    2173222128+# Project: gvimext
     
    2180822204+       -$(DEL)  $(OBJ) $(RES) $(DLL)
    2180922205diff -Naur vim73.orig/src/GvimExt/Make_ming.mak vim73/src/GvimExt/Make_ming.mak
    21810 --- vim73.orig/src/GvimExt/Make_ming.mak        2012-02-15 21:57:45.057436051 +0000
    21811 +++ vim73/src/GvimExt/Make_ming.mak     2012-02-15 21:57:46.501474139 +0000
     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
    2181222208@@ -1,6 +1,6 @@
    2181322209 # Project: gvimext
     
    2187722273-
    2187822274diff -Naur vim73.orig/src/GvimExt/gvimext.cpp vim73/src/GvimExt/gvimext.cpp
    21879 --- vim73.orig/src/GvimExt/gvimext.cpp  2012-02-15 21:57:45.057436051 +0000
    21880 +++ vim73/src/GvimExt/gvimext.cpp       2012-02-15 21:57:46.337469812 +0000
     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
    2188122277@@ -142,6 +142,7 @@
    2188222278 static int dyn_libintl_init(char *dir);
     
    2196322359                &pi)            // Pointer to PROCESS_INFORMATION structure.
    2196422360diff -Naur vim73.orig/src/GvimExt/gvimext.def vim73/src/GvimExt/gvimext.def
    21965 --- vim73.orig/src/GvimExt/gvimext.def  2012-02-15 21:57:45.057436051 +0000
    21966 +++ vim73/src/GvimExt/gvimext.def       2012-02-15 21:57:46.141464642 +0000
     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
    2196722363@@ -1,7 +1,7 @@
    2196822364 ;gvimdef.def : Declares the module parameters for the DLL.
     
    2197522371     DllCanUnloadNow private
    2197622372diff -Naur vim73.orig/src/GvimExt/gvimext_ming.def vim73/src/GvimExt/gvimext_ming.def
    21977 --- vim73.orig/src/GvimExt/gvimext_ming.def     2012-02-15 21:57:45.057436051 +0000
    21978 +++ vim73/src/GvimExt/gvimext_ming.def  2012-02-15 21:57:46.141464642 +0000
     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
    2197922375@@ -3,7 +3,7 @@
    2198022376 ;Hence this is the same file as gvimext.def with private removed
     
    2198722383     DllCanUnloadNow = DllCanUnloadNow@0
    2198822384diff -Naur vim73.orig/src/INSTALL vim73/src/INSTALL
    21989 --- vim73.orig/src/INSTALL      2012-02-15 21:57:45.053435946 +0000
    21990 +++ vim73/src/INSTALL   2012-02-15 21:57:45.977460316 +0000
     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
    2199122387@@ -6,9 +6,8 @@
    2199222388 Contents:
     
    2203822434 [NOTE: this is quite old, it might not work anymore]
    2203922435diff -Naur vim73.orig/src/INSTALLpc.txt vim73/src/INSTALLpc.txt
    22040 --- vim73.orig/src/INSTALLpc.txt        2012-02-15 21:57:45.057436051 +0000
    22041 +++ vim73/src/INSTALLpc.txt     2012-02-15 21:57:46.237467173 +0000
     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
    2204222438@@ -11,9 +11,9 @@
    2204322439 this, then you will get the default behavior as is documented, which should
     
    2207822474 
    2207922475 
    22080 @@ -408,3 +412,59 @@
     22476@@ -235,6 +239,12 @@
     22477 found at
     22478     http://www.upx.org/
     22479 
     22480+As of 2011, UPX still does not support compressing 64-bit EXE's; if you have
     22481+built a 64-bit vim then an alternative to UPX is 'MPRESS'. MPRESS can be found
     22482+at:
     22483+    http://www.matcode.com/mpress.htm
     22484+
     22485+
     22486 ADDITION: NLS support with MinGW
     22487 
     22488 (by Eduardo F. Amatria <eferna1@platea.pntic.mec.es>)
     22489@@ -408,3 +418,59 @@
    2208122490 
    2208222491 If you get all kinds of strange error messages when compiling, try adding
     
    2213922548+Happy Vimming!
    2214022549diff -Naur vim73.orig/src/Make_cyg.mak vim73/src/Make_cyg.mak
    22141 --- vim73.orig/src/Make_cyg.mak 2012-02-15 21:57:45.041435628 +0000
    22142 +++ vim73/src/Make_cyg.mak      2012-02-15 21:57:46.501474139 +0000
     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
    2214322552@@ -1,6 +1,6 @@
    2214422553 #
     
    2220222611        -$(DEL) obj$(DIRSLASH)*.o
    2220322612diff -Naur vim73.orig/src/Make_ming.mak vim73/src/Make_ming.mak
    22204 --- vim73.orig/src/Make_ming.mak        2012-02-15 21:57:45.057436051 +0000
    22205 +++ vim73/src/Make_ming.mak     2012-02-15 21:57:46.529474878 +0000
    22206 @@ -56,6 +56,12 @@
     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
     22615@@ -14,9 +14,11 @@
     22616 # it's just run out of memory or something.  Run again, and it will continue
     22617 # with 'xxd'.
     22618 #
     22619-# "make upx" makes *compressed* versions of the GUI and console EXEs, using the
     22620-# excellent UPX compressor:
     22621+# "make upx" makes *compressed* versions of the 32 bit GUI and console EXEs,
     22622+# using the excellent UPX compressor:
     22623 #     http://upx.sourceforge.net/
     22624+# "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
     22625+#     http://www.matcode.com/mpress.htm
     22626 #
     22627 # Maintained by Ron Aaron <ronaharon@yahoo.com>
     22628 # updated 2003 Jan 20
     22629@@ -49,13 +51,21 @@
     22630 # set to yes to enable OLE support
     22631 OLE=no
     22632 # Set the default $(WINVER) to make it work with pre-Win2k
     22633+ifndef WINVER
     22634 WINVER = 0x0400
     22635+endif
     22636 # Set to yes to enable Cscope support
     22637 CSCOPE=yes
     22638 # Set to yes to enable Netbeans support
    2220722639 NETBEANS=$(GUI)
    2220822640 
     
    2221722649 ifeq (no, $(GETTEXT))
    2221822650 GETTEXT=
    22219 @@ -81,7 +87,7 @@
     22651@@ -81,7 +91,7 @@
    2222022652 
    2222122653 # If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
     
    2222622658 #STATIC_GETTEXT=USE_STATIC_GETTEXT
    2222722659 #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
    22228 @@ -102,6 +108,13 @@
     22660@@ -102,6 +112,13 @@
    2222922661 # on NT, it's here:
    2223022662 PERLLIB=$(PERL)/lib
     
    2224022672 
    2224122673 # uncomment 'LUA' if you want a Lua-enabled version
    22242 @@ -141,11 +154,17 @@
     22674@@ -141,11 +158,17 @@
    2224322675 MZSCHEME_GENERATE_BASE=no
    2224422676 endif
     
    2226022692 # the modern MinGW can dynamically link to dlls directly.
    2226122693 # point MZSCHEME_DLLS to where you put libmzschXXXXXXX.dll and libgcXXXXXXX.dll
    22262 @@ -304,11 +323,13 @@
     22694@@ -304,11 +327,13 @@
    2226322695 endif
    2226422696 CC := $(CROSS_COMPILE)gcc
     
    2227422706 ifdef GETTEXT
    2227522707 DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
    22276 @@ -343,7 +364,7 @@
     22708@@ -343,7 +368,7 @@
    2227722709 ifdef MZSCHEME
    2227822710 CFLAGS += -I$(MZSCHEME)/include -DFEAT_MZSCHEME -DMZSCHEME_COLLECTS=\"$(MZSCHEME)/collects\"
     
    2228322715 endif
    2228422716 
    22285 @@ -571,8 +592,13 @@
     22717@@ -571,8 +596,13 @@
    2228622718 endif
    2228722719 
     
    2229822730 
    2229922731 ifeq (yes, $(MBYTE))
    22300 @@ -615,7 +641,7 @@
     22732@@ -614,8 +644,12 @@
     22733        upx gvim.exe
    2230122734        upx vim.exe
    2230222735 
     22736+mpress: exes
     22737+       mpress gvim.exe
     22738+       mpress vim.exe
     22739+
    2230322740 xxd/xxd.exe: xxd/xxd.c
    2230422741-       $(MAKE) -C xxd -f Make_cyg.mak CC=$(CC)
     
    2230722744 GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
    2230822745        $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE)
    22309 @@ -633,7 +659,7 @@
     22746@@ -633,7 +667,7 @@
    2231022747        -$(DEL) mzscheme_base.c
    2231122748 endif
     
    2231622753 ###########################################################################
    2231722754 INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
    22318 @@ -650,10 +676,10 @@
     22755@@ -649,11 +683,9 @@
     22756 $(OUTDIR)/%.o : %.c $(INCL)
    2231922757        $(CC) -c $(CFLAGS) $< -o $@
    2232022758 
    22321  $(OUTDIR)/vimres.res: vim.rc version.h gui_w32_rc.h
     22759-$(OUTDIR)/vimres.res: vim.rc version.h gui_w32_rc.h
    2232222760-       $(WINDRES) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
    22323 +       $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
    22324  
    22325  $(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res
     22761-
     22762-$(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res
    2232622763-       $(WINDRES) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
    22327 +       $(WINDRES) $(WINDRES_FLAGS) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
     22764+$(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
     22765+       $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
     22766+           --input-format=rc --output-format=coff -i vim.rc -o $@
    2232822767 
    2232922768 $(OUTDIR):
    2233022769        $(MKDIR) $(OUTDIR)
    22331 @@ -677,7 +703,7 @@
     22770@@ -677,7 +709,7 @@
    2233222771 endif
    2233322772 
     
    2233922778 $(OUTDIR)/netbeans.o:  netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
    2234022779diff -Naur vim73.orig/src/Make_mvc.mak vim73/src/Make_mvc.mak
    22341 --- vim73.orig/src/Make_mvc.mak 2012-02-15 21:57:45.041435628 +0000
    22342 +++ vim73/src/Make_mvc.mak      2012-02-15 21:57:46.953486059 +0000
     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
    2234322782@@ -380,9 +380,6 @@
    2234422783 !if "$(_NMAKE_VER)" == "10.00.30319.01"
     
    2236222801 !endif
    2236322802 !endif
     22803@@ -619,7 +616,7 @@
     22804                -DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
     22805 TCL_OBJ        = $(OUTDIR)\if_tcl.obj
     22806 TCL_INC        = /I "$(TCL)\Include" /I "$(TCL)"
     22807-TCL_LIB = $(TCL)\lib\tclstub$(TCL_VER).lib
     22808+TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
     22809 !else
     22810 CFLAGS  = $(CFLAGS) -DFEAT_TCL
     22811 TCL_OBJ        = $(OUTDIR)\if_tcl.obj
    2236422812@@ -705,12 +702,18 @@
    2236522813 MZSCHEME_VER = 205_000
     
    2245322901 
    2245422902diff -Naur vim73.orig/src/Make_ro.mak vim73/src/Make_ro.mak
    22455 --- vim73.orig/src/Make_ro.mak  2012-02-15 21:57:45.053435946 +0000
     22903--- vim73.orig/src/Make_ro.mak  2012-06-03 23:09:52.940007057 +0000
    2245622904+++ vim73/src/Make_ro.mak       1970-01-01 00:00:00.000000000 +0000
    2245722905@@ -1,135 +0,0 @@
     
    2259223040-o.window:      c.window
    2259323041diff -Naur vim73.orig/src/Makefile vim73/src/Makefile
    22594 --- vim73.orig/src/Makefile     2012-02-15 21:57:45.065436261 +0000
    22595 +++ vim73/src/Makefile  2012-02-15 21:57:46.689479097 +0000
     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
    2259623044@@ -29,7 +29,7 @@
    2259723045 #      - Uncomment the line "CONF_OPT_X = --without-x" if you have X11 but
     
    2281823266                $(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \
    2281923267                $(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
    22820 @@ -1694,8 +1715,9 @@
     23268@@ -1694,11 +1715,12 @@
    2282123269 $(VIMTARGET): auto/config.mk objects $(OBJ) version.c version.h
    2282223270        $(CCC) version.c -o objects/version.o
     
    2282923277 
    2283023278 xxd/xxd$(EXEEXT): xxd/xxd.c
    22831         cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" \
     23279-       cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" \
     23280+       cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
     23281                $(MAKE) -f Makefile
     23282 
     23283 # Build the language specific files if they were unpacked.
    2283223284@@ -1818,6 +1840,15 @@
    2283323285                ln -s $(VIMTARGET) vim; \
     
    2293823390  arabic.h version.h
    2293923391diff -Naur vim73.orig/src/VisVim/Commands.cpp vim73/src/VisVim/Commands.cpp
    22940 --- vim73.orig/src/VisVim/Commands.cpp  2012-02-15 21:57:45.045435734 +0000
    22941 +++ vim73/src/VisVim/Commands.cpp       2012-02-15 21:57:46.345470023 +0000
     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
    2294223394@@ -549,7 +549,7 @@
    2294323395        if (g_bNewTabs)
     
    2295923411                        *s++ = '/';
    2296023412                else
     23413diff -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
     23416@@ -1066,7 +1066,7 @@
     23417 
     23418     if (curr_c != c && ccp != NULL)
     23419     {
     23420-       char_u buf[MB_MAXBYTES];
     23421+       char_u buf[MB_MAXBYTES + 1];
     23422 
     23423        /* Update the first byte of the character. */
     23424        (*mb_char2bytes)(curr_c, buf);
    2296123425diff -Naur vim73.orig/src/ascii.h vim73/src/ascii.h
    22962 --- vim73.orig/src/ascii.h      2012-02-15 21:57:45.061436156 +0000
    22963 +++ vim73/src/ascii.h   2012-02-15 21:57:46.701479413 +0000
     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
    2296423428@@ -123,7 +123,7 @@
    2296523429 #define DCS            0x90    /* Device Control String */
     
    2298623450 #endif
    2298723451diff -Naur vim73.orig/src/auto/config.mk vim73/src/auto/config.mk
    22988 --- vim73.orig/src/auto/config.mk       2012-02-15 21:57:45.061436156 +0000
     23452--- vim73.orig/src/auto/config.mk       2012-06-03 23:09:52.948007269 +0000
    2298923453+++ vim73/src/auto/config.mk    1970-01-01 00:00:00.000000000 +0000
    2299023454@@ -1,5 +0,0 @@
     
    2299523459-VIEWNAME = view
    2299623460diff -Naur vim73.orig/src/auto/configure vim73/src/auto/configure
    22997 --- vim73.orig/src/auto/configure       2012-02-15 21:57:45.061436156 +0000
    22998 +++ vim73/src/auto/configure    2012-02-15 21:57:46.917485111 +0000
     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
    2299923463@@ -593,6 +593,7 @@
    2300023464 
     
    2359724061 cat >confcache <<\_ACEOF
    2359824062diff -Naur vim73.orig/src/blowfish.c vim73/src/blowfish.c
    23599 --- vim73.orig/src/blowfish.c   2012-02-15 21:57:45.049435840 +0000
    23600 +++ vim73/src/blowfish.c        2012-02-15 21:57:45.661451983 +0000
     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
    2360124065@@ -413,6 +413,7 @@
    2360224066     int    salt_len;
     
    2361924083     mch_memmove(sbx, sbi, 4 * 4 * 256);
    2362024084diff -Naur vim73.orig/src/buffer.c vim73/src/buffer.c
    23621 --- vim73.orig/src/buffer.c     2012-02-15 21:57:45.041435628 +0000
    23622 +++ vim73/src/buffer.c  2012-02-15 21:57:46.809482262 +0000
    23623 @@ -416,6 +416,14 @@
     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 @@
     24088 static char *msg_loclist = N_("[Location List]");
     24089 static char *msg_qflist = N_("[Quickfix List]");
     24090 #endif
     24091+#ifdef FEAT_AUTOCMD
     24092+static char *e_auabort = N_("E855: Autocommands caused command to abort");
     24093+#endif
     24094 
     24095 /*
     24096  * Open current buffer, that is: open the memfile and read the file into
     24097@@ -96,7 +99,7 @@
     24098         * There MUST be a memfile, otherwise we can't do anything
     24099         * If we can't create one for the current buffer, take another buffer
     24100         */
     24101-       close_buffer(NULL, curbuf, 0);
     24102+       close_buffer(NULL, curbuf, 0, FALSE);
     24103        for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
     24104            if (curbuf->b_ml.ml_mfp != NULL)
     24105                break;
     24106@@ -316,12 +319,17 @@
     24107  * get a new buffer very soon!
     24108  *
     24109  * The 'bufhidden' option can force freeing and deleting.
     24110+ *
     24111+ * When "abort_if_last" is TRUE then do not close the buffer if autocommands
     24112+ * cause there to be only one window with this buffer.  e.g. when ":quit" is
     24113+ * supposed to close the window but autocommands close all other windows.
     24114  */
     24115     void
     24116-close_buffer(win, buf, action)
     24117+close_buffer(win, buf, action, abort_if_last)
     24118     win_T      *win;           /* if not NULL, set b_last_cursor */
     24119     buf_T      *buf;
     24120     int                action;
     24121+    int                abort_if_last UNUSED;
     24122 {
     24123 #ifdef FEAT_AUTOCMD
     24124     int                is_curbuf;
     24125@@ -371,8 +379,12 @@
     24126     {
     24127        apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
     24128                                                                  FALSE, buf);
     24129-       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()))
     24132+       {
     24133+           EMSG(_(e_auabort));
     24134            return;
     24135+       }
     24136 
     24137        /* When the buffer becomes hidden, but is not unloaded, trigger
     24138         * BufHidden */
     24139@@ -380,8 +392,13 @@
     24140        {
     24141            apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
     24142                                                                  FALSE, buf);
     24143-           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+           }
     24151        }
     24152 # ifdef FEAT_EVAL
     24153        if (aborting())     /* autocmds may abort script processing */
     24154@@ -416,6 +433,14 @@
    2362424155 #endif
    2362524156 
     
    2363624167 #ifdef FEAT_AUTOCMD
    2363724168     /* Autocommands may have deleted the buffer. */
    23638 @@ -560,6 +568,11 @@
     24169@@ -560,6 +585,11 @@
    2363924170 #ifdef FEAT_DIFF
    2364024171     diff_buf_delete(buf);          /* Can't use 'diff' for unloaded buffer. */
     
    2364824179 #ifdef FEAT_FOLDING
    2364924180     /* No folds in an empty buffer. */
    23650 @@ -639,6 +652,9 @@
     24181@@ -639,6 +669,9 @@
    2365124182     {
    2365224183        clear_wininfo(buf);             /* including window-local options */
     
    2365824189 #ifdef FEAT_EVAL
    2365924190     vars_clear(&buf->b_vars.dv_hashtab); /* free all internal variables */
    23660 @@ -661,9 +677,6 @@
     24191@@ -661,9 +694,6 @@
    2366124192     vim_free(buf->b_start_fenc);
    2366224193     buf->b_start_fenc = NULL;
     
    2366824199 
    2366924200 /*
    23670 @@ -1288,9 +1301,12 @@
     24201@@ -762,7 +792,7 @@
     24202         * open a new, empty buffer. */
     24203        swap_exists_action = SEA_NONE;  /* don't want it again */
     24204        swap_exists_did_quit = TRUE;
     24205-       close_buffer(curwin, curbuf, DOBUF_UNLOAD);
     24206+       close_buffer(curwin, curbuf, DOBUF_UNLOAD, FALSE);
     24207        if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
     24208            old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
     24209        if (old_curbuf != NULL)
     24210@@ -1109,7 +1139,7 @@
     24211             * if the buffer still exists.
     24212             */
     24213            if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
     24214-               close_buffer(NULL, buf, action);
     24215+               close_buffer(NULL, buf, action, FALSE);
     24216            return retval;
     24217        }
     24218 
     24219@@ -1133,7 +1163,7 @@
     24220            close_windows(buf, FALSE);
     24221 #endif
     24222            if (buf != curbuf && buf_valid(buf) && buf->b_nwindows <= 0)
     24223-               close_buffer(NULL, buf, action);
     24224+               close_buffer(NULL, buf, action, FALSE);
     24225            return OK;
     24226        }
     24227 
     24228@@ -1288,9 +1318,12 @@
    2367124229     /* Go to the other buffer. */
    2367224230     set_curbuf(buf, action);
     
    2368324241 
    2368424242 #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
    23685 @@ -1343,6 +1359,10 @@
     24243@@ -1343,6 +1376,10 @@
    2368624244 # endif
    2368724245 #endif
     
    2369424252        if (unload)
    2369524253            close_windows(prevbuf, FALSE);
    23696 @@ -1392,10 +1412,6 @@
     24254@@ -1358,7 +1395,7 @@
     24255            close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
     24256                    unload ? action : (action == DOBUF_GOTO
     24257                        && !P_HID(prevbuf)
     24258-                       && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0);
     24259+                       && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
     24260        }
     24261     }
     24262 #ifdef FEAT_AUTOCMD
     24263@@ -1392,10 +1429,6 @@
    2369724264     foldUpdateAll(curwin);     /* update folds (later). */
    2369824265 #endif
     
    2370524272     curwin->w_buffer = buf;
    2370624273     curbuf = buf;
    23707 @@ -1406,6 +1422,10 @@
     24274@@ -1406,6 +1439,10 @@
    2370824275        diff_buf_add(curbuf);
    2370924276 #endif
     
    2371624283     curwin->w_cursor.lnum = 1;
    2371724284     curwin->w_cursor.col = 0;
    23718 @@ -1805,9 +1825,6 @@
     24285@@ -1805,9 +1842,6 @@
    2371924286 #ifdef FEAT_AUTOCMD
    2372024287     clear_string_option(&buf->b_p_ft);
     
    2372624293     clear_string_option(&buf->b_p_cink);
    2372724294     clear_string_option(&buf->b_p_cino);
    23728 @@ -1917,9 +1934,7 @@
     24295@@ -1917,9 +1951,7 @@
    2372924296                tabpage_new();
    2373024297            else if (win_split(0, 0) == FAIL)   /* Open in a new window */
     
    2373724304     }
    2373824305 #endif
    23739 @@ -2526,6 +2541,9 @@
     24306@@ -2526,6 +2558,9 @@
    2374024307     if (p_fdls >= 0)
    2374124308        curwin->w_p_fdl = p_fdls;
     
    2374724314 
    2374824315 /*
    23749 @@ -3175,7 +3193,7 @@
     24316@@ -2690,7 +2725,8 @@
     24317                vim_free(ffname);
     24318                return FAIL;
     24319            }
     24320-           close_buffer(NULL, obuf, DOBUF_WIPE); /* delete from the list */
     24321+           /* delete from the list */
     24322+           close_buffer(NULL, obuf, DOBUF_WIPE, FALSE);
     24323        }
     24324        sfname = vim_strsave(sfname);
     24325        if (ffname == NULL || sfname == NULL)
     24326@@ -3175,7 +3211,7 @@
    2375024327            /* format: "fname + (path) (1 of 2) - VIM" */
    2375124328 
     
    2375624333            {
    2375724334                p = transstr(gettail(curbuf->b_fname));
    23758 @@ -3231,7 +3249,7 @@
     24335@@ -3231,7 +3267,7 @@
    2375924336            if (serverName != NULL)
    2376024337            {
     
    2376524342            else
    2376624343 #endif
    23767 @@ -3240,9 +3258,8 @@
     24344@@ -3240,9 +3276,8 @@
    2376824345            if (maxlen > 0)
    2376924346            {
     
    2377724354        }
    2377824355     }
    23779 @@ -3363,7 +3380,8 @@
     24356@@ -3363,7 +3398,8 @@
    2378024357  * or truncated if too long, fillchar is used for all whitespace.
    2378124358  */
     
    2378724364     char_u     *out;           /* buffer to write into != NameBuff */
    2378824365     size_t     outlen;         /* length of out[] */
    23789 @@ -3458,6 +3476,18 @@
     24366@@ -3458,6 +3494,18 @@
    2379024367     prevchar_isitem = FALSE;
    2379124368     for (s = usefmt; *s; )
     
    2380624383            prevchar_isflag = prevchar_isitem = FALSE;
    2380724384 
    23808 @@ -3473,6 +3503,8 @@
     24385@@ -3473,6 +3521,8 @@
    2380924386         * Handle one '%' item.
    2381024387         */
     
    2381524392        {
    2381624393            if (p + 1 >= out + outlen)
     24394@@ -4355,7 +4405,12 @@
     24395 {
     24396     int                i;
     24397     win_T      *wp, *wpnext;
     24398-    char_u     *opened;        /* array of flags for which args are open */
     24399+    char_u     *opened;        /* Array of weight for which args are open:
     24400+                                *  0: not opened
     24401+                                *  1: opened in other tab
     24402+                                *  2: opened in curtab
     24403+                                *  3: opened in curtab and curwin
     24404+                                */
     24405     int                opened_len;     /* length of opened[] */
     24406     int                use_firstwin = FALSE;   /* use first window for arglist */
     24407     int                split_ret = OK;
     24408@@ -4364,6 +4419,8 @@
     24409     buf_T      *buf;
     24410     tabpage_T  *tpnext;
     24411     int                had_tab = cmdmod.tab;
     24412+    win_T      *old_curwin, *last_curwin;
     24413+    tabpage_T  *old_curtab, *last_curtab;
     24414     win_T      *new_curwin = NULL;
     24415     tabpage_T  *new_curtab = NULL;
     24416 
     24417@@ -4380,6 +4437,15 @@
     24418     if (opened == NULL)
     24419        return;
     24420 
     24421+    /* Autocommands may do anything to the argument list.  Make sure it's not
     24422+     * freed while we are working here by "locking" it.  We still have to
     24423+     * watch out for its size to be changed. */
     24424+    alist = curwin->w_alist;
     24425+    ++alist->al_refcount;
     24426+
     24427+    old_curwin = curwin;
     24428+    old_curtab = curtab;
     24429+
     24430 #ifdef FEAT_GUI
     24431     need_mouse_correct = TRUE;
     24432 #endif
     24433@@ -4401,36 +4467,51 @@
     24434            wpnext = wp->w_next;
     24435            buf = wp->w_buffer;
     24436            if (buf->b_ffname == NULL
     24437-                   || buf->b_nwindows > 1
     24438+                   || (!keep_tabs && buf->b_nwindows > 1)
     24439 #ifdef FEAT_VERTSPLIT
     24440                    || wp->w_width != Columns
     24441 #endif
     24442                    )
     24443-               i = ARGCOUNT;
     24444+               i = opened_len;
     24445            else
     24446            {
     24447                /* check if the buffer in this window is in the arglist */
     24448-               for (i = 0; i < ARGCOUNT; ++i)
     24449+               for (i = 0; i < opened_len; ++i)
     24450                {
     24451-                   if (ARGLIST[i].ae_fnum == buf->b_fnum
     24452-                           || fullpathcmp(alist_name(&ARGLIST[i]),
     24453-                                             buf->b_ffname, TRUE) & FPC_SAME)
     24454+                   if (i < alist->al_ga.ga_len
     24455+                           && (AARGLIST(alist)[i].ae_fnum == buf->b_fnum
     24456+                               || fullpathcmp(alist_name(&AARGLIST(alist)[i]),
     24457+                                             buf->b_ffname, TRUE) & FPC_SAME))
     24458                    {
     24459-                       if (i < opened_len)
     24460+                       int weight = 1;
     24461+
     24462+                       if (old_curtab == curtab)
     24463                        {
     24464-                           opened[i] = TRUE;
     24465+                           ++weight;
     24466+                           if (old_curwin == wp)
     24467+                               ++weight;
     24468+                       }
     24469+
     24470+                       if (weight > (int)opened[i])
     24471+                       {
     24472+                           opened[i] = (char_u)weight;
     24473                            if (i == 0)
     24474                            {
     24475+                               if (new_curwin != NULL)
     24476+                                   new_curwin->w_arg_idx = opened_len;
     24477                                new_curwin = wp;
     24478                                new_curtab = curtab;
     24479                            }
     24480                        }
     24481-                       if (wp->w_alist != curwin->w_alist)
     24482+                       else if (keep_tabs)
     24483+                           i = opened_len;
     24484+
     24485+                       if (wp->w_alist != alist)
     24486                        {
     24487                            /* Use the current argument list for all windows
     24488                             * containing a file from it. */
     24489                            alist_unlink(wp->w_alist);
     24490-                           wp->w_alist = curwin->w_alist;
     24491+                           wp->w_alist = alist;
     24492                            ++wp->w_alist->al_refcount;
     24493                        }
     24494                        break;
     24495@@ -4439,7 +4520,7 @@
     24496            }
     24497            wp->w_arg_idx = i;
     24498 
     24499-           if (i == ARGCOUNT && !keep_tabs)    /* close this window */
     24500+           if (i == opened_len && !keep_tabs)/* close this window */
     24501            {
     24502                if (P_HID(buf) || forceit || buf->b_nwindows > 1
     24503                                                        || !bufIsChanged(buf))
     24504@@ -4461,7 +4542,8 @@
     24505                    }
     24506 #ifdef FEAT_WINDOWS
     24507                    /* don't close last window */
     24508-                   if (firstwin == lastwin && first_tabpage->tp_next == NULL)
     24509+                   if (firstwin == lastwin
     24510+                           && (first_tabpage->tp_next == NULL || !had_tab))
     24511 #endif
     24512                        use_firstwin = TRUE;
     24513 #ifdef FEAT_WINDOWS
     24514@@ -4495,20 +4577,16 @@
     24515      * Open a window for files in the argument list that don't have one.
     24516      * ARGCOUNT may change while doing this, because of autocommands.
     24517      */
     24518-    if (count > ARGCOUNT || count <= 0)
     24519-       count = ARGCOUNT;
     24520-
     24521-    /* Autocommands may do anything to the argument list.  Make sure it's not
     24522-     * freed while we are working here by "locking" it.  We still have to
     24523-     * watch out for its size to be changed. */
     24524-    alist = curwin->w_alist;
     24525-    ++alist->al_refcount;
     24526+    if (count > opened_len || count <= 0)
     24527+       count = opened_len;
     24528 
     24529 #ifdef FEAT_AUTOCMD
     24530     /* Don't execute Win/Buf Enter/Leave autocommands here. */
     24531     ++autocmd_no_enter;
     24532     ++autocmd_no_leave;
     24533 #endif
     24534+    last_curwin = curwin;
     24535+    last_curtab = curtab;
     24536     win_enter(lastwin, FALSE);
     24537 #ifdef FEAT_WINDOWS
     24538     /* ":drop all" should re-use an empty window to avoid "--remote-tab"
     24539@@ -4518,11 +4596,11 @@
     24540        use_firstwin = TRUE;
     24541 #endif
     24542 
     24543-    for (i = 0; i < count && i < alist->al_ga.ga_len && !got_int; ++i)
     24544+    for (i = 0; i < count && i < opened_len && !got_int; ++i)
     24545     {
     24546        if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1)
     24547            arg_had_last = TRUE;
     24548-       if (i < opened_len && opened[i])
     24549+       if (opened[i] > 0)
     24550        {
     24551            /* Move the already present window to below the current window */
     24552            if (curwin->w_arg_idx != i)
     24553@@ -4531,7 +4609,13 @@
     24554                {
     24555                    if (wpnext->w_arg_idx == i)
     24556                    {
     24557-                       win_move_after(wpnext, curwin);
     24558+                       if (keep_tabs)
     24559+                       {
     24560+                           new_curwin = wpnext;
     24561+                           new_curtab = curtab;
     24562+                       }
     24563+                       else
     24564+                           win_move_after(wpnext, curwin);
     24565                        break;
     24566                    }
     24567                }
     24568@@ -4586,6 +4670,14 @@
     24569 #ifdef FEAT_AUTOCMD
     24570     --autocmd_no_enter;
     24571 #endif
     24572+    /* restore last referenced tabpage's curwin */
     24573+    if (last_curtab != new_curtab)
     24574+    {
     24575+       if (valid_tabpage(last_curtab))
     24576+           goto_tabpage_tp(last_curtab);
     24577+       if (win_valid(last_curwin))
     24578+           win_enter(last_curwin, FALSE);
     24579+    }
     24580     /* to window with first arg */
     24581     if (valid_tabpage(new_curtab))
     24582        goto_tabpage_tp(new_curtab);
     24583@@ -5465,7 +5557,7 @@
     24584        buf = firstbuf;
     24585     else
     24586        buf = rbuf;
     24587-    while (buf != NULL)
     24588+    while (buf != NULL && !got_int)
     24589     {
     24590        if (buf->b_signlist != NULL)
     24591        {
     24592@@ -5473,7 +5565,7 @@
     24593            MSG_PUTS_ATTR(lbuf, hl_attr(HLF_D));
     24594            msg_putchar('\n');
     24595        }
     24596-       for (p = buf->b_signlist; p != NULL; p = p->next)
     24597+       for (p = buf->b_signlist; p != NULL && !got_int; p = p->next)
     24598        {
     24599            vim_snprintf(lbuf, BUFSIZ, _("    line=%ld  id=%d  name=%s"),
     24600                           (long)p->lnum, p->id, sign_typenr2name(p->typenr));
     24601@@ -5606,7 +5698,7 @@
     24602     if (!aucmd)                    /* Don't trigger BufDelete autocommands here. */
     24603        block_autocmds();
     24604 #endif
     24605-    close_buffer(NULL, buf, DOBUF_WIPE);
     24606+    close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
     24607 #ifdef FEAT_AUTOCMD
     24608     if (!aucmd)
     24609        unblock_autocmds();
    2381724610diff -Naur vim73.orig/src/charset.c vim73/src/charset.c
    23818 --- vim73.orig/src/charset.c    2012-02-15 21:57:45.057436051 +0000
    23819 +++ vim73/src/charset.c 2012-02-15 21:57:46.841483105 +0000
     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
    2382024613@@ -463,41 +463,42 @@
    2382124614            if (enc_utf8)
     
    2389424687     int
    2389524688 vim_strnsize(s, len)
    23896 @@ -1829,7 +1830,7 @@
     24689@@ -1601,10 +1602,9 @@
     24690 #define LATIN1LOWER 'l'
     24691 #define LATIN1UPPER 'U'
     24692 
     24693-/*                                                                 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]%_'abcdefghijklmnopqrstuvwxyz{|}~                                  ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ */
     24694 static char_u latin1flags[257] = "                                                                 UUUUUUUUUUUUUUUUUUUUUUUUUU      llllllllllllllllllllllllll                                                                     UUUUUUUUUUUUUUUUUUUUUUU UUUUUUUllllllllllllllllllllllll llllllll";
     24695-static char_u latin1upper[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~€‚ƒ„
     24696†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ÷ØÙÚÛÜÝÞÿ";
     24697-static char_u latin1lower[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„
     24698†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿àáâãäåæçèéêëìíîïðñòóôõö×øùúûüýþßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ";
     24699+static char_u latin1upper[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xf7\xd8\xd9\xda\xdb\xdc\xdd\xde\xff";
     24700+static char_u latin1lower[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xd7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
     24701 
     24702     int
     24703 vim_islower(c)
     24704@@ -1829,7 +1829,7 @@
    2389724705                        hex = 0;        /* can't be octal */
    2389824706                        break;
     
    2390424712            }
    2390524713diff -Naur vim73.orig/src/config.h.in vim73/src/config.h.in
    23906 --- vim73.orig/src/config.h.in  2012-02-15 21:57:45.065436261 +0000
    23907 +++ vim73/src/config.h.in       2012-02-15 21:57:46.921485217 +0000
     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
    2390824716@@ -346,9 +346,15 @@
    2390924717 /* Define if dynamic python does not require RTLD_GLOBAL */
     
    2393124739 
    2393224740diff -Naur vim73.orig/src/config.mk.in vim73/src/config.mk.in
    23933 --- vim73.orig/src/config.mk.in 2012-02-15 21:57:45.061436156 +0000
    23934 +++ vim73/src/config.mk.in      2012-02-15 21:57:45.325443119 +0000
     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
    2393524743@@ -30,6 +30,7 @@
    2393624744 CPP            = @CPP@
     
    2394224750 X_PRE_LIBS     = @X_PRE_LIBS@
    2394324751diff -Naur vim73.orig/src/configure.in vim73/src/configure.in
    23944 --- vim73.orig/src/configure.in 2012-02-15 21:57:45.061436156 +0000
    23945 +++ vim73/src/configure.in      2012-02-15 21:57:46.917485111 +0000
     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
    2394624754@@ -28,6 +28,16 @@
    2394724755 AC_HEADER_STDC
     
    2444425252 
    2444525253diff -Naur vim73.orig/src/diff.c vim73/src/diff.c
    24446 --- vim73.orig/src/diff.c       2012-02-15 21:57:45.041435628 +0000
    24447 +++ vim73/src/diff.c    2012-02-15 21:57:45.149438477 +0000
    24448 @@ -1127,11 +1127,13 @@
     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
     25256@@ -783,6 +783,15 @@
     25257        goto theend;
     25258     }
     25259 
     25260+    /* :diffupdate! */
     25261+    if (eap != NULL && eap->forceit)
     25262+       for (idx_new = idx_orig; idx_new < DB_COUNT; ++idx_new)
     25263+       {
     25264+           buf = curtab->tp_diffbuf[idx_new];
     25265+           if (buf_valid(buf))
     25266+               buf_check_timestamp(buf, FALSE);
     25267+       }
     25268+
     25269     /* Write the first buffer to a tempfile. */
     25270     buf = curtab->tp_diffbuf[idx_orig];
     25271     if (diff_write(buf, tmp_orig) == FAIL)
     25272@@ -1127,11 +1136,13 @@
    2444925273 # endif
    2445025274 
     
    2446225286 # ifdef FEAT_FOLDING
    2446325287     curwin = wp;
    24464 @@ -1177,10 +1179,7 @@
     25288@@ -1177,10 +1188,7 @@
    2446525289        {
    2446625290            /* Set 'diff', 'scrollbind' off and 'wrap' on. */
     
    2447525299            curwin = wp;
    2447625300diff -Naur vim73.orig/src/digraph.c vim73/src/digraph.c
    24477 --- vim73.orig/src/digraph.c    2012-02-15 21:57:45.061436156 +0000
    24478 +++ vim73/src/digraph.c 2012-02-15 21:57:46.757480890 +0000
     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
    2447925303@@ -2080,13 +2080,13 @@
    2448025304 /*
     
    2452525349 }
    2452625350diff -Naur vim73.orig/src/edit.c vim73/src/edit.c
    24527 --- vim73.orig/src/edit.c       2012-02-15 21:57:45.061436156 +0000
    24528 +++ vim73/src/edit.c    2012-02-15 21:57:46.885484267 +0000
     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
    2452925353@@ -58,6 +58,10 @@
    2453025354 };
     
    2456825392 static int  ins_compl_get_exp __ARGS((pos_T *ini));
    2456925393 static void ins_compl_delete __ARGS((void));
    24570 @@ -1377,10 +1386,45 @@
     25394@@ -244,12 +253,14 @@
     25395 #ifdef FEAT_DIGRAPHS
     25396 static int  ins_digraph __ARGS((void));
     25397 #endif
     25398-static int  ins_copychar __ARGS((linenr_T lnum));
     25399 static int  ins_ctrl_ey __ARGS((int tc));
     25400 #ifdef FEAT_SMARTINDENT
     25401 static void ins_try_si __ARGS((int c));
     25402 #endif
     25403 static colnr_T get_nolist_virtcol __ARGS((void));
     25404+#ifdef FEAT_AUTOCMD
     25405+static char_u *do_insert_char_pre __ARGS((int c));
     25406+#endif
     25407 
     25408 static colnr_T Insstart_textlen;       /* length of line when insert started */
     25409 static colnr_T Insstart_blank_vcol;    /* vcol for first inserted blank */
     25410@@ -775,7 +786,20 @@
     25411                 * completion: Add to "compl_leader". */
     25412                if (ins_compl_accept_char(c))
     25413                {
     25414-                   ins_compl_addleader(c);
     25415+#ifdef FEAT_AUTOCMD
     25416+                   /* Trigger InsertCharPre. */
     25417+                   char_u *str = do_insert_char_pre(c);
     25418+                   char_u *p;
     25419+
     25420+                   if (str != NULL)
     25421+                   {
     25422+                       for (p = str; *p != NUL; mb_ptr_adv(p))
     25423+                           ins_compl_addleader(PTR2CHAR(p));
     25424+                       vim_free(str);
     25425+                   }
     25426+                   else
     25427+#endif
     25428+                       ins_compl_addleader(c);
     25429                    continue;
     25430                }
     25431 
     25432@@ -1377,10 +1401,42 @@
    2457125433                goto do_intr;
    2457225434 #endif
     
    2458025442+           if (!p_paste)
    2458125443+           {
    24582 +               /* Trigger the InsertCharPre event.  Lock the text to avoid
    24583 +                * weird things from happening. */
    24584 +               set_vim_var_char(c);
    24585 +               ++textlock;
    24586 +               if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL,
    24587 +                                                              FALSE, curbuf))
     25444+               /* Trigger InsertCharPre. */
     25445+               char_u *str = do_insert_char_pre(c);
     25446+               char_u *p;
     25447+
     25448+               if (str != NULL)
    2458825449+               {
    24589 +                   /* Get the new value of v:char.  If it is more than one
    24590 +                    * character insert it literally. */
    24591 +                   char_u *s = get_vim_var_str(VV_CHAR);
    24592 +                   if (MB_CHARLEN(s) > 1)
     25450+                   if (*str != NUL && stop_arrow() != FAIL)
    2459325451+                   {
    24594 +                       if (stop_arrow() != FAIL)
     25452+                       /* Insert the new value of v:char literally. */
     25453+                       for (p = str; *p != NUL; mb_ptr_adv(p))
    2459525454+                       {
    24596 +                           ins_str(s);
    24597 +                           AppendToRedobuffLit(s, -1);
     25455+                           c = PTR2CHAR(p);
     25456+                           if (c == CAR || c == K_KENTER || c == NL)
     25457+                               ins_eol(c);
     25458+                           else
     25459+                               ins_char(c);
    2459825460+                       }
    24599 +                       c = NUL;
     25461+                       AppendToRedobuffLit(str, -1);
    2460025462+                   }
    24601 +                   else
    24602 +                       c = PTR2CHAR(s);
     25463+                   vim_free(str);
     25464+                   c = NUL;
    2460325465+               }
    2460425466+
    24605 +               set_vim_var_string(VV_CHAR, NULL, -1);
    24606 +               --textlock;
    24607 +
    24608 +               /* If the new value is an empty string then don't insert a
    24609 +                * char. */
     25467+               /* If the new value is already inserted or an empty string
     25468+                * then don't insert any character. */
    2461025469+               if (c == NUL)
    2461125470+                   break;
     
    2461525474            /* Try to perform smart-indenting. */
    2461625475            ins_try_si(c);
    24617 @@ -1549,12 +1593,16 @@
     25476@@ -1398,13 +1454,16 @@
     25477                    Insstart_blank_vcol = get_nolist_virtcol();
     25478            }
     25479 
     25480-           if (vim_iswordc(c) || !echeck_abbr(
     25481+           /* Insert a normal character and check for abbreviations on a
     25482+            * special character.  Let CTRL-] expand abbreviations without
     25483+            * inserting it. */
     25484+           if (vim_iswordc(c) || (!echeck_abbr(
     25485 #ifdef FEAT_MBYTE
     25486                        /* Add ABBR_OFF for characters above 0x100, this is
     25487                         * what check_abbr() expects. */
     25488                        (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
     25489 #endif
     25490-                       c))
     25491+                       c) && c != Ctrl_RSB))
     25492            {
     25493                insert_special(c, FALSE, FALSE);
     25494 #ifdef FEAT_RIGHTLEFT
     25495@@ -1549,12 +1608,16 @@
    2461825496 ins_ctrl_v()
    2461925497 {
     
    2463225510 
    2463325511 #ifdef FEAT_CMDL_INFO
    24634 @@ -1562,8 +1610,10 @@
     25512@@ -1562,8 +1625,10 @@
    2463525513 #endif
    2463625514 
     
    2464525523     clear_showcmd();
    2464625524 #endif
    24647 @@ -1713,9 +1763,9 @@
     25525@@ -1583,11 +1648,7 @@
     25526 #define PC_STATUS_RIGHT        1       /* right halve of double-wide char */
     25527 #define PC_STATUS_LEFT 2       /* left halve of double-wide char */
     25528 #define PC_STATUS_SET  3       /* pc_bytes was filled */
     25529-#ifdef FEAT_MBYTE
     25530 static char_u pc_bytes[MB_MAXBYTES + 1]; /* saved bytes */
     25531-#else
     25532-static char_u pc_bytes[2];             /* saved bytes */
     25533-#endif
     25534 static int  pc_attr;
     25535 static int  pc_row;
     25536 static int  pc_col;
     25537@@ -1713,9 +1774,9 @@
    2464825538     static void
    2464925539 undisplay_dollar()
     
    2465725547     }
    2465825548 }
    24659 @@ -2133,7 +2183,7 @@
     25549@@ -2133,7 +2194,7 @@
    2466025550                    || c == Ctrl_I || c == Ctrl_D || c == Ctrl_P
    2466125551                    || c == Ctrl_N || c == Ctrl_T || c == Ctrl_V
     
    2466625556            return (c == Ctrl_Y || c == Ctrl_E);
    2466725557        case CTRL_X_WHOLE_LINE:
    24668 @@ -2658,6 +2708,7 @@
     25558@@ -2658,6 +2719,7 @@
    2466925559     if (stop_arrow() == FAIL)
    2467025560        return;
     
    2467425564        startcol = curwin->w_cursor.col;
    2467525565     compl_col = startcol;
    24676 @@ -3295,7 +3346,7 @@
     25566@@ -3295,7 +3357,7 @@
    2467725567     /* Deleted more than what was used to find matches or didn't finish
    2467825568      * finding all matches: need to look for matches all over again. */
     
    2468325573 
    2468425574     vim_free(compl_leader);
    24685 @@ -3309,6 +3360,20 @@
     25575@@ -3309,6 +3371,20 @@
    2468625576 }
    2468725577 
     
    2470425594  * Show the popup menu with a different set of matches.
    2470525595  * May also search for matches again if the previous search was interrupted.
    24706 @@ -3397,14 +3462,20 @@
     25596@@ -3397,14 +3473,20 @@
    2470725597        ins_char(c);
    2470825598 
     
    2473025620 
    2473125621 /*
    24732 @@ -3480,11 +3551,7 @@
     25622@@ -3480,11 +3562,7 @@
    2473325623            return;
    2473425624     }
     
    2474325633 }
    2474425634 
    24745 @@ -3653,9 +3720,6 @@
     25635@@ -3653,9 +3731,6 @@
    2474625636             * memory that was used, and make sure we can redo the insert. */
    2474725637            if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
     
    2475325643                 * If any of the original typed text has been changed, eg when
    2475425644                 * ignorecase is set, we must add back-spaces to the redo
    24755 @@ -3666,25 +3730,9 @@
     25645@@ -3666,25 +3741,9 @@
    2475625646                 */
    2475725647                if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
     
    2478125671 
    2478225672 #ifdef FEAT_CINDENT
    24783 @@ -3774,6 +3822,44 @@
     25673@@ -3774,6 +3833,44 @@
    2478425674 }
    2478525675 
     
    2482625716  * (depending on flag) starting from buf and looking for a non-scanned
    2482725717  * buffer (other than curbuf). curbuf is special, if it is called with
    24828 @@ -3829,10 +3915,14 @@
     25718@@ -3829,10 +3926,14 @@
    2482925719     int                type;       /* CTRL_X_OMNI or CTRL_X_FUNCTION */
    2483025720     char_u     *base;
     
    2484225732     funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
    2484325733     if (*funcname == NUL)
    24844 @@ -3843,13 +3933,50 @@
     25734@@ -3843,13 +3944,50 @@
    2484525735     args[1] = base;
    2484625736 
     
    2489825788 #endif /* FEAT_COMPL_FUNC */
    2489925789 
    24900 @@ -3876,6 +4003,33 @@
     25790@@ -3876,6 +4014,33 @@
    2490125791 }
    2490225792 
     
    2493225822  * If the given string is already in the list of completions, then return
    2493325823  * NOTDONE, otherwise add it to the list and return OK.  If there is an error,
    24934 @@ -3889,6 +4043,7 @@
     25824@@ -3889,6 +4054,7 @@
    2493525825     char_u     *word;
    2493625826     int                icase = FALSE;
     
    2494025830 
    2494125831     if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
    24942 @@ -3906,13 +4061,15 @@
     25832@@ -3906,13 +4072,15 @@
    2494325833            icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
    2494425834        if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
     
    2495725847     return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup);
    2495825848 }
    24959 @@ -4403,6 +4560,11 @@
     25849@@ -4403,6 +4571,11 @@
    2496025850     int            found_end = FALSE;
    2496125851     int            advance;
     
    2496925859                        && (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0)
    2497025860     {
    24971 @@ -4994,6 +5156,8 @@
     25861@@ -4994,6 +5167,8 @@
    2497225862            int         col;
    2497325863            char_u      *funcname;
     
    2497825868            /* Call 'completefunc' or 'omnifunc' and get pattern length as a
    2497925869             * string */
    24980 @@ -5009,8 +5173,32 @@
     25870@@ -5009,8 +5184,40 @@
    2498125871            args[0] = (char_u *)"1";
    2498225872            args[1] = NULL;
     
    2499925889+
    2500025890+           /* Return value -2 means the user complete function wants to
    25001 +            * cancel the complete without an error. */
     25891+            * cancel the complete without an error.
     25892+            * Return value -3 does the same as -2 and leaves CTRL-X mode.*/
    2500225893+           if (col == -2)
    2500325894+               return FAIL;
     25895+           if (col == -3)
     25896+           {
     25897+               ctrl_x_mode = 0;
     25898+               edit_submode = NULL;
     25899+               msg_clr_cmdline();
     25900+               return FAIL;
     25901+           }
    2500425902+
    2500525903+           /*
     
    2501125909            if (col < 0)
    2501225910                col = curs_col;
    25013 @@ -5089,6 +5277,10 @@
     25911@@ -5089,6 +5296,10 @@
    2501425912        else
    2501525913            edit_submode = (char_u *)_(CTRL_X_MSG(ctrl_x_mode));
     
    2502225920        vim_free(compl_orig_text);
    2502325921        compl_orig_text = vim_strnsave(line + compl_col, compl_length);
    25024 @@ -5249,7 +5441,7 @@
     25922@@ -5249,7 +5460,7 @@
    2502525923                                compl_curr_match->cp_number);
    2502625924                edit_submode_extra = match_ref;
     
    2503125929            }
    2503225930        }
    25033 @@ -5902,6 +6094,7 @@
     25931@@ -5691,6 +5902,8 @@
     25932      * Don't do this when 'cindent' or 'indentexpr' is set, because we might
     25933      * need to re-indent at a ':', or any other character (but not what
     25934      * 'paste' is set)..
     25935+     * Don't do this when there an InsertCharPre autocommand is defined,
     25936+     * because we need to fire the event for every character.
     25937      */
     25938 #ifdef USE_ON_FLY_SCROLL
     25939     dont_scroll = FALSE;               /* allow scrolling here */
     25940@@ -5708,6 +5921,9 @@
     25941 #ifdef FEAT_RIGHTLEFT
     25942            && !p_ri
     25943 #endif
     25944+#ifdef FEAT_AUTOCMD
     25945+           && !has_insertcharpre()
     25946+#endif
     25947               )
     25948     {
     25949 #define INPUT_BUFLEN 100
     25950@@ -5902,6 +6118,7 @@
    2503425951         * Stop at first entered white when 'formatoptions' has 'v'
    2503525952         */
     
    2503925956                    || curwin->w_cursor.col >= Insstart.col)
    2504025957        {
    25041 @@ -8768,7 +8961,7 @@
     25958@@ -6598,11 +6815,7 @@
     25959     char_u     *s;
     25960 
     25961     vim_free(last_insert);
     25962-#ifdef FEAT_MBYTE
     25963     last_insert = alloc(MB_MAXBYTES * 3 + 5);
     25964-#else
     25965-    last_insert = alloc(6);
     25966-#endif
     25967     if (last_insert != NULL)
     25968     {
     25969        s = last_insert;
     25970@@ -6640,7 +6853,7 @@
     25971     char_u     *s;
     25972 {
     25973 #ifdef FEAT_MBYTE
     25974-    char_u     temp[MB_MAXBYTES];
     25975+    char_u     temp[MB_MAXBYTES + 1];
     25976     int                i;
     25977     int                len;
     25978 
     25979@@ -7202,7 +7415,7 @@
     25980     int                cc;
     25981 {
     25982     int                n;
     25983-    char_u     buf[MB_MAXBYTES];
     25984+    char_u     buf[MB_MAXBYTES + 1];
     25985     int                i;
     25986     int                c;
     25987 
     25988@@ -8768,7 +8981,7 @@
    2504225989      * We can emulate the vi behaviour by pretending there is a dollar
    2504325990      * displayed even when there isn't.
     
    2504825995 
    2504925996 #ifdef FEAT_FOLDING
    25050 @@ -9598,6 +9791,7 @@
     25997@@ -9598,6 +9811,7 @@
    2505125998 {
    2505225999     int            c;
     
    2505626003     pc_status = PC_STATUS_UNSET;
    2505726004     if (redrawing() && !char_avail())
    25058 @@ -9606,6 +9800,7 @@
     26005@@ -9606,6 +9820,7 @@
    2505926006        ins_redraw(FALSE);
    2506026007 
     
    2506426011        add_to_showcmd_c(Ctrl_K);
    2506526012 #endif
    25066 @@ -9622,8 +9817,10 @@
     26013@@ -9622,8 +9837,10 @@
    2506726014     c = plain_vgetc();
    2506826015     --no_mapping;
     
    2507726024     if (IS_SPECIAL(c) || mod_mask)         /* special key */
    2507826025     {
    25079 @@ -9635,6 +9832,7 @@
     26026@@ -9635,6 +9852,7 @@
    2508026027     }
    2508126028     if (c != ESC)
     
    2508526032        {
    2508626033            /* may need to redraw when no more chars available now */
    25087 @@ -9642,11 +9840,9 @@
     26034@@ -9642,11 +9860,9 @@
    2508826035 
    2508926036            if (char2cells(c) == 1)
     
    2509826045 #ifdef FEAT_CMDL_INFO
    2509926046            add_to_showcmd_c(c);
    25100 @@ -9657,8 +9853,10 @@
     26047@@ -9657,8 +9873,10 @@
    2510126048        cc = plain_vgetc();
    2510226049        --no_mapping;
     
    2511126058        {
    2511226059            AppendToRedobuff((char_u *)CTRL_V_STR);
     26060@@ -9680,7 +9898,7 @@
     26061  * Handle CTRL-E and CTRL-Y in Insert mode: copy char from other line.
     26062  * Returns the char to be inserted, or NUL if none found.
     26063  */
     26064-    static int
     26065+    int
     26066 ins_copychar(lnum)
     26067     linenr_T   lnum;
     26068 {
     26069@@ -9870,3 +10088,52 @@
     26070     validate_virtcol();
     26071     return curwin->w_virtcol;
     26072 }
     26073+
     26074+#ifdef FEAT_AUTOCMD
     26075+/*
     26076+ * Handle the InsertCharPre autocommand.
     26077+ * "c" is the character that was typed.
     26078+ * Return a pointer to allocated memory with the replacement string.
     26079+ * Return NULL to continue inserting "c".
     26080+ */
     26081+    static char_u *
     26082+do_insert_char_pre(c)
     26083+    int c;
     26084+{
     26085+    char_u     *res;
     26086+    char_u     buf[MB_MAXBYTES + 1];
     26087+
     26088+    /* Return quickly when there is nothing to do. */
     26089+    if (!has_insertcharpre())
     26090+       return NULL;
     26091+
     26092+#ifdef FEAT_MBYTE
     26093+    if (has_mbyte)
     26094+       buf[(*mb_char2bytes)(c, buf)] = NUL;
     26095+    else
     26096+#endif
     26097+    {
     26098+       buf[0] = c;
     26099+       buf[1] = NUL;
     26100+    }
     26101+
     26102+    /* Lock the text to avoid weird things from happening. */
     26103+    ++textlock;
     26104+    set_vim_var_string(VV_CHAR, buf, -1);  /* set v:char */
     26105+
     26106+    res = NULL;
     26107+    if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
     26108+    {
     26109+       /* Get the value of v:char.  It may be empty or more than one
     26110+        * character.  Only use it when changed, otherwise continue with the
     26111+        * original character to avoid breaking autoindent. */
     26112+       if (STRCMP(buf, get_vim_var_str(VV_CHAR)) != 0)
     26113+           res = vim_strsave(get_vim_var_str(VV_CHAR));
     26114+    }
     26115+
     26116+    set_vim_var_string(VV_CHAR, NULL, -1);  /* clear v:char */
     26117+    --textlock;
     26118+
     26119+    return res;
     26120+}
     26121+#endif
    2511326122diff -Naur vim73.orig/src/eval.c vim73/src/eval.c
    25114 --- vim73.orig/src/eval.c       2012-02-15 21:57:45.065436261 +0000
    25115 +++ vim73/src/eval.c    2012-02-15 21:57:46.941485744 +0000
     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
    2511626125@@ -10,9 +10,6 @@
    2511726126 /*
     
    2519426203 static void f_islocked __ARGS((typval_T *argvars, typval_T *rettv));
    2519526204 static void f_items __ARGS((typval_T *argvars, typval_T *rettv));
    25196 @@ -646,6 +643,7 @@
     26205@@ -625,6 +622,9 @@
     26206 static void f_log __ARGS((typval_T *argvars, typval_T *rettv));
     26207 static void f_log10 __ARGS((typval_T *argvars, typval_T *rettv));
     26208 #endif
     26209+#ifdef FEAT_LUA
     26210+static void f_luaeval __ARGS((typval_T *argvars, typval_T *rettv));
     26211+#endif
     26212 static void f_map __ARGS((typval_T *argvars, typval_T *rettv));
     26213 static void f_maparg __ARGS((typval_T *argvars, typval_T *rettv));
     26214 static void f_mapcheck __ARGS((typval_T *argvars, typval_T *rettv));
     26215@@ -646,6 +646,7 @@
    2519726216 #endif
    2519826217 static void f_nextnonblank __ARGS((typval_T *argvars, typval_T *rettv));
     
    2520226221 #ifdef FEAT_FLOAT
    2520326222 static void f_pow __ARGS((typval_T *argvars, typval_T *rettv));
    25204 @@ -757,6 +755,7 @@
     26223@@ -757,6 +758,7 @@
    2520526224 static void f_winsaveview __ARGS((typval_T *argvars, typval_T *rettv));
    2520626225 static void f_winwidth __ARGS((typval_T *argvars, typval_T *rettv));
     
    2521026229 static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
    2521126230 static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
    25212 @@ -791,6 +790,8 @@
     26231@@ -791,6 +793,8 @@
    2521326232 static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
    2521426233 static int var_check_ro __ARGS((int flags, char_u *name));
     
    2521926238 static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int copyID));
    2522026239 static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags));
    25221 @@ -853,6 +854,7 @@
     26240@@ -853,6 +857,7 @@
    2522226241 
    2522326242     init_var_dict(&globvardict, &globvars_var);
     
    2522726246     hash_init(&func_hashtab);
    2522826247 
    25229 @@ -878,7 +880,7 @@
     26248@@ -875,10 +880,11 @@
     26249            hash_add(&compat_hashtab, p->vv_di.di_key);
     26250     }
     26251     set_vim_var_nr(VV_SEARCHFORWARD, 1L);
     26252+    set_reg_var(0);  /* default for v:register is not 0 but '"' */
    2523026253 
    2523126254 #ifdef EBCDIC
     
    2523626259     sortFunctions();
    2523726260 #endif
    25238 @@ -910,6 +912,7 @@
     26261@@ -910,6 +916,7 @@
    2523926262     hash_clear(&compat_hashtab);
    2524026263 
     
    2524426267     /* global variables */
    2524526268     vars_clear(&globvarht);
    25246 @@ -1355,7 +1358,11 @@
     26269@@ -1355,7 +1362,11 @@
    2524726270        {
    2524826271            ga_init2(&ga, (int)sizeof(char), 80);
     
    2525626279            retval = (char_u *)ga.ga_data;
    2525726280        }
    25258 @@ -1557,7 +1564,7 @@
     26281@@ -1557,7 +1568,7 @@
    2525926282  * arguments are currently supported.
    2526026283  * Returns OK or FAIL.
     
    2526526288     char_u      *func;
    2526626289     int                argc;
    25267 @@ -2325,7 +2332,7 @@
     26290@@ -2325,7 +2336,7 @@
    2526826291            else if (endchars != NULL
    2526926292                             && vim_strchr(endchars, *skipwhite(arg)) == NULL)
     
    2527426297                c1 = name[len];
    2527526298                name[len] = NUL;
    25276 @@ -2718,8 +2725,27 @@
     26299@@ -2718,8 +2729,27 @@
    2527726300            lp->ll_list = NULL;
    2527826301            lp->ll_dict = lp->ll_tv->vval.v_dict;
     
    2530226325                if (*p == '[' || *p == '.' || unlet)
    2530326326                {
    25304 @@ -2739,6 +2765,10 @@
     26327@@ -2739,6 +2769,10 @@
    2530526328                    p = NULL;
    2530626329                break;
     
    2531326336                clear_tv(&var1);
    2531426337            lp->ll_tv = &lp->ll_di->di_tv;
    25315 @@ -2770,6 +2800,8 @@
     26338@@ -2770,6 +2804,8 @@
    2531626339            {
    2531726340                if (lp->ll_range && !lp->ll_empty2)
     
    2532226345            }
    2532326346 
    25324 @@ -2787,7 +2819,11 @@
     26347@@ -2787,7 +2823,11 @@
    2532526348                {
    2532626349                    ni = list_find(lp->ll_list, lp->ll_n2);
     
    2533426357                }
    2533526358 
    25336 @@ -2795,7 +2831,11 @@
     26359@@ -2795,7 +2835,11 @@
    2533726360                if (lp->ll_n1 < 0)
    2533826361                    lp->ll_n1 = list_idx_of_item(lp->ll_list, lp->ll_li);
     
    2534626369 
    2534726370            lp->ll_tv = &lp->ll_li->li_tv;
    25348 @@ -3337,6 +3377,18 @@
     26371@@ -3337,6 +3381,18 @@
    2534926372     int                failed = FALSE;
    2535026373     funcdict_T fudi;
     
    2536526388     if (fudi.fd_newkey != NULL)
    2536626389     {
    25367 @@ -3386,6 +3438,9 @@
     26390@@ -3386,6 +3442,9 @@
    2536826391        {
    2536926392            curwin->w_cursor.lnum = lnum;
     
    2537526398        arg = startarg;
    2537626399        if (get_func_tv(name, (int)STRLEN(name), &rettv, &arg,
    25377 @@ -4349,7 +4404,8 @@
     26400@@ -4349,7 +4408,8 @@
    2537826401                else
    2537926402                {
     
    2538526408                        n1 = !n1;
    2538626409                }
    25387 @@ -4378,7 +4434,8 @@
     26410@@ -4378,7 +4438,8 @@
    2538826411                else
    2538926412                {
     
    2539526418                        n1 = !n1;
    2539626419                }
    25397 @@ -5097,9 +5154,7 @@
     26420@@ -5097,9 +5158,7 @@
    2539826421            else
    2539926422                ret = OK;
     
    2540626429 
    2540726430     *arg = skipwhite(*arg);
    25408 @@ -5913,10 +5968,11 @@
     26431@@ -5913,10 +5972,11 @@
    2540926432  * Return TRUE when two lists have exactly the same values.
    2541026433  */
     
    2541926442     listitem_T *item1, *item2;
    2542026443 
    25421 @@ -5930,7 +5986,7 @@
     26444@@ -5930,7 +5990,7 @@
    2542226445     for (item1 = l1->lv_first, item2 = l2->lv_first;
    2542326446            item1 != NULL && item2 != NULL;
     
    2542826451     return item1 == NULL && item2 == NULL;
    2542926452 }
    25430 @@ -5952,10 +6008,11 @@
     26453@@ -5952,10 +6012,11 @@
    2543126454  * Return TRUE when two dictionaries have exactly the same key/values.
    2543226455  */
     
    2544126464     hashitem_T *hi;
    2544226465     dictitem_T *item2;
    25443 @@ -5976,7 +6033,7 @@
     26466@@ -5976,7 +6037,7 @@
    2544426467            item2 = dict_find(d2, hi->hi_key, -1);
    2544526468            if (item2 == NULL)
     
    2545026473            --todo;
    2545126474        }
    25452 @@ -5984,41 +6041,54 @@
     26475@@ -5984,41 +6045,54 @@
    2545326476     return TRUE;
    2545426477 }
     
    2551626539 
    2551726540        case VAR_FUNC:
    25518 @@ -6502,47 +6572,119 @@
     26541@@ -6502,47 +6576,119 @@
    2551926542     return (char_u *)ga.ga_data;
    2552026543 }
     
    2565326676  *
    2565426677  * We use reference counts to be able to free most items right away when they
    25655 @@ -6837,7 +6979,7 @@
     26678@@ -6635,6 +6781,10 @@
     26679     /* v: vars */
     26680     set_ref_in_ht(&vimvarht, copyID);
     26681 
     26682+#ifdef FEAT_LUA
     26683+    set_ref_in_lua(copyID);
     26684+#endif
     26685+
     26686     /*
     26687      * 2. Free lists and dictionaries that are not referenced.
     26688      */
     26689@@ -6837,7 +6987,7 @@
    2565626690  * Unreference a Dictionary: decrement the reference count and free it when it
    2565726691  * becomes zero.
     
    2566226696     dict_T *d;
    2566326697 {
    25664 @@ -7075,7 +7217,7 @@
     26698@@ -7075,7 +7225,7 @@
    2566526699 }
    2566626700 
     
    2567126705  */
    2567226706     int
    25673 @@ -7097,6 +7239,7 @@
     26707@@ -7097,6 +7247,7 @@
    2567426708        dictitem_free(item);
    2567526709        return FAIL;
     
    2567926713 }
    2568026714 
    25681 @@ -7649,6 +7792,7 @@
     26715@@ -7649,6 +7800,7 @@
    2568226716     {"acos",           1, 1, f_acos},  /* WJMc */
    2568326717 #endif
     
    2568726721     {"argc",           0, 0, f_argc},
    2568826722     {"argidx",         0, 0, f_argidx},
    25689 @@ -7784,6 +7928,7 @@
     26723@@ -7708,7 +7860,7 @@
     26724 #ifdef FEAT_FLOAT
     26725     {"exp",            1, 1, f_exp},
     26726 #endif
     26727-    {"expand",         1, 2, f_expand},
     26728+    {"expand",         1, 3, f_expand},
     26729     {"extend",         2, 3, f_extend},
     26730     {"feedkeys",       1, 2, f_feedkeys},
     26731     {"file_readable",  1, 1, f_filereadable},  /* obsolete */
     26732@@ -7759,7 +7911,7 @@
     26733     {"getwinposx",     0, 0, f_getwinposx},
     26734     {"getwinposy",     0, 0, f_getwinposy},
     26735     {"getwinvar",      2, 2, f_getwinvar},
     26736-    {"glob",           1, 2, f_glob},
     26737+    {"glob",           1, 3, f_glob},
     26738     {"globpath",       2, 3, f_globpath},
     26739     {"has",            1, 1, f_has},
     26740     {"has_key",                2, 2, f_has_key},
     26741@@ -7784,6 +7936,7 @@
    2569026742     {"inputsave",      0, 0, f_inputsave},
    2569126743     {"inputsecret",    1, 2, f_inputsecret},
     
    2569526747     {"islocked",       1, 1, f_islocked},
    2569626748     {"items",          1, 1, f_items},
    25697 @@ -7802,7 +7947,7 @@
     26749@@ -7801,8 +7954,11 @@
     26750     {"log",            1, 1, f_log},
    2569826751     {"log10",          1, 1, f_log10},
    2569926752 #endif
     26753+#ifdef FEAT_LUA
     26754+    {"luaeval",         1, 2, f_luaeval},
     26755+#endif
    2570026756     {"map",            2, 2, f_map},
    2570126757-    {"maparg",         1, 3, f_maparg},
     
    2570426760     {"match",          2, 4, f_match},
    2570526761     {"matchadd",       2, 4, f_matchadd},
    25706 @@ -7822,6 +7967,7 @@
     26762@@ -7822,6 +7978,7 @@
    2570726763 #endif
    2570826764     {"nextnonblank",   1, 1, f_nextnonblank},
     
    2571226768 #ifdef FEAT_FLOAT
    2571326769     {"pow",            2, 2, f_pow},
    25714 @@ -7870,7 +8016,7 @@
     26770@@ -7870,7 +8027,7 @@
    2571526771     {"sin",            1, 1, f_sin},
    2571626772     {"sinh",           1, 1, f_sinh},
     
    2572126777     {"spellbadword",   0, 1, f_spellbadword},
    2572226778     {"spellsuggest",   1, 3, f_spellsuggest},
    25723 @@ -7933,6 +8079,7 @@
     26779@@ -7933,6 +8090,7 @@
    2572426780     {"winsaveview",    0, 0, f_winsaveview},
    2572526781     {"winwidth",       1, 1, f_winwidth},
     
    2572926785 
    2573026786 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
    25731 @@ -8497,7 +8644,7 @@
     26787@@ -8497,7 +8655,7 @@
    2573226788     if (argvars[0].v_type == VAR_LIST)
    2573326789     {
     
    2573826794            copy_tv(&argvars[0], rettv);
    2573926795     }
    25740 @@ -8506,6 +8653,18 @@
     26796@@ -8506,6 +8664,18 @@
    2574126797 }
    2574226798 
     
    2575726813  */
    2575826814     static void
    25759 @@ -9298,7 +9457,7 @@
     26815@@ -9298,7 +9468,7 @@
    2576026816 
    2576126817     if (!error)
     
    2576626822 }
    2576726823 
    25768 @@ -9389,7 +9548,7 @@
     26824@@ -9389,7 +9559,7 @@
    2576926825            }
    2577026826 
     
    2577526831        }
    2577626832     }
    25777 @@ -9416,7 +9575,7 @@
     26833@@ -9416,7 +9586,7 @@
    2577826834                if (!HASHITEM_EMPTY(hi))
    2577926835                {
     
    2578426840                }
    2578526841            }
    25786 @@ -9857,7 +10016,7 @@
     26842@@ -9857,17 +10027,36 @@
    2578726843     char_u     *s;
    2578826844     int                len;
     
    2579226848     expand_T   xpc;
    2579326849     int                error = FALSE;
    25794  
    25795 @@ -9875,12 +10034,14 @@
     26850+    char_u     *result;
     26851 
     26852     rettv->v_type = VAR_STRING;
     26853+    if (argvars[1].v_type != VAR_UNKNOWN
     26854+           && argvars[2].v_type != VAR_UNKNOWN
     26855+           && get_tv_number_chk(&argvars[2], &error)
     26856+           && !error)
     26857+    {
     26858+       rettv->v_type = VAR_LIST;
     26859+       rettv->vval.v_list = NULL;
     26860+    }
     26861+
     26862     s = get_tv_string(&argvars[0]);
     26863     if (*s == '%' || *s == '#' || *s == '<')
     26864     {
     26865        ++emsg_off;
     26866-       rettv->vval.v_string = eval_vars(s, s, &len, NULL, &errormsg, NULL);
     26867+       result = eval_vars(s, s, &len, NULL, &errormsg, NULL);
     26868        --emsg_off;
     26869+       if (rettv->v_type == VAR_LIST)
     26870+       {
     26871+           if (rettv_list_alloc(rettv) != FAIL && result != NULL)
     26872+               list_append_string(rettv->vval.v_list, result, -1);
     26873+           else
     26874+               vim_free(result);
     26875+       }
     26876+       else
     26877+           rettv->vval.v_string = result;
     26878     }
     26879     else
     26880     {
     26881@@ -9875,12 +10064,25 @@
    2579626882         * for 'wildignore' and don't put matches for 'suffixes' at the end. */
    2579726883        if (argvars[1].v_type != VAR_UNKNOWN
     
    2580626892+           if (p_wic)
    2580726893+               options += WILD_ICASE;
    25808 +           rettv->vval.v_string = ExpandOne(&xpc, s, NULL, options, WILD_ALL);
     26894+           if (rettv->v_type == VAR_STRING)
     26895+               rettv->vval.v_string = ExpandOne(&xpc, s, NULL,
     26896+                                                          options, WILD_ALL);
     26897+           else if (rettv_list_alloc(rettv) != FAIL)
     26898+           {
     26899+               int i;
     26900+
     26901+               ExpandOne(&xpc, s, NULL, options, WILD_ALL_KEEP);
     26902+               for (i = 0; i < xpc.xp_numfiles; i++)
     26903+                   list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
     26904+               ExpandCleanup(&xpc);
     26905+           }
    2580926906        }
    2581026907        else
    2581126908            rettv->vval.v_string = NULL;
    25812 @@ -9896,6 +10057,8 @@
     26909@@ -9896,6 +10098,8 @@
    2581326910     typval_T   *argvars;
    2581426911     typval_T   *rettv;
     
    2581926916     {
    2582026917        list_T          *l1, *l2;
    25821 @@ -9905,7 +10068,7 @@
     26918@@ -9905,7 +10109,7 @@
    2582226919 
    2582326920        l1 = argvars[0].vval.v_list;
     
    2582826925        {
    2582926926            if (argvars[2].v_type != VAR_UNKNOWN)
    25830 @@ -9944,7 +10107,7 @@
     26927@@ -9944,7 +10148,7 @@
    2583126928 
    2583226929        d1 = argvars[0].vval.v_dict;
     
    2583726934        {
    2583826935            /* Check the third argument. */
    25839 @@ -10186,20 +10349,22 @@
     26936@@ -9987,7 +10191,7 @@
     26937                        EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
     26938                        break;
     26939                    }
     26940-                   else if (*action == 'f')
     26941+                   else if (*action == 'f' && HI2DI(hi2) != di1)
     26942                    {
     26943                        clear_tv(&di1->di_tv);
     26944                        copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
     26945@@ -10186,20 +10390,22 @@
    2584026946     typval_T   save_key;
    2584126947     int                rem;
     
    2586326969     }
    2586426970     else
    25865 @@ -10236,7 +10401,8 @@
     26971@@ -10236,7 +10442,8 @@
    2586626972                {
    2586726973                    --todo;
     
    2587326979                    vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
    2587426980                    if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
    25875 @@ -10255,7 +10421,7 @@
     26981@@ -10255,7 +10462,7 @@
    2587626982 
    2587726983            for (li = l->lv_first; li != NULL; li = nli)
     
    2588226988                nli = li->li_next;
    2588326989                vimvars[VV_KEY].vv_nr = idx;
    25884 @@ -10839,6 +11005,11 @@
     26990@@ -10839,6 +11046,11 @@
    2588526991 
    2588626992        if (*varname == '&')    /* buffer-local-option */
     
    2589427000        {
    2589527001            if (*varname == NUL)
    25896 @@ -11039,18 +11210,22 @@
     27002@@ -11039,18 +11251,22 @@
    2589727003     typval_T   *argvars UNUSED;
    2589827004     typval_T   *rettv;
     
    2592427030 }
    2592527031 
    25926 @@ -11653,7 +11828,7 @@
     27032@@ -11653,22 +11869,44 @@
    2592727033     typval_T   *argvars;
    2592827034     typval_T   *rettv;
     
    2593327039     int                error = FALSE;
    2593427040 
    25935 @@ -11661,14 +11836,16 @@
    25936      * for 'wildignore' and don't put matches for 'suffixes' at the end. */
    25937      if (argvars[1].v_type != VAR_UNKNOWN
    25938                                 && get_tv_number_chk(&argvars[1], &error))
     27041     /* When the optional second argument is non-zero, don't remove matches
     27042-    * for 'wildignore' and don't put matches for 'suffixes' at the end. */
     27043-    if (argvars[1].v_type != VAR_UNKNOWN
     27044-                               && get_tv_number_chk(&argvars[1], &error))
    2593927045-       flags |= WILD_KEEP_ALL;
    25940 +       options |= WILD_KEEP_ALL;
     27046+     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
    2594127047     rettv->v_type = VAR_STRING;
     27048+    if (argvars[1].v_type != VAR_UNKNOWN)
     27049+    {
     27050+       if (get_tv_number_chk(&argvars[1], &error))
     27051+           options |= WILD_KEEP_ALL;
     27052+       if (argvars[2].v_type != VAR_UNKNOWN
     27053+                                   && get_tv_number_chk(&argvars[2], &error))
     27054+       {
     27055+           rettv->v_type = VAR_LIST;
     27056+           rettv->vval.v_list = NULL;
     27057+       }
     27058+    }
    2594227059     if (!error)
    2594327060     {
    2594427061        ExpandInit(&xpc);
    2594527062        xpc.xp_context = EXPAND_FILES;
     27063-       rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
     27064-                                                      NULL, flags, WILD_ALL);
    2594627065+       if (p_wic)
    2594727066+           options += WILD_ICASE;
    25948         rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
    25949 -                                                      NULL, flags, WILD_ALL);
     27067+       if (rettv->v_type == VAR_STRING)
     27068+           rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
    2595027069+                                                    NULL, options, WILD_ALL);
     27070+       else if (rettv_list_alloc(rettv) != FAIL)
     27071+       {
     27072+         int i;
     27073+
     27074+         ExpandOne(&xpc, get_tv_string(&argvars[0]),
     27075+                                               NULL, options, WILD_ALL_KEEP);
     27076+         for (i = 0; i < xpc.xp_numfiles; i++)
     27077+             list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
     27078+
     27079+         ExpandCleanup(&xpc);
     27080+       }
    2595127081     }
    2595227082     else
    2595327083        rettv->vval.v_string = NULL;
    25954 @@ -11741,9 +11918,6 @@
     27084@@ -11741,9 +11979,6 @@
    2595527085 #ifdef __QNX__
    2595627086        "qnx",
     
    2596227092        "unix",
    2596327093 #endif
    25964 @@ -11856,7 +12030,7 @@
     27094@@ -11856,7 +12091,7 @@
    2596527095 #ifdef FEAT_SEARCHPATH
    2596627096        "file_in_path",
    2596727097 #endif
    2596827098-#if defined(UNIX) && !defined(USE_SYSTEM)
    25969 +#if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
     27099+#ifdef FEAT_FILTERPIPE
    2597027100        "filterpipe",
    2597127101 #endif
    2597227102 #ifdef FEAT_FIND_ID
    25973 @@ -12002,9 +12176,6 @@
     27103@@ -12002,9 +12237,6 @@
    2597427104 #ifdef FEAT_OLE
    2597527105        "ole",
     
    2598127111        "path_extra",
    2598227112 #endif
    25983 @@ -12116,6 +12287,9 @@
     27113@@ -12116,6 +12348,9 @@
    2598427114 #ifdef FEAT_TOOLBAR
    2598527115        "toolbar",
     
    2599127121        "user-commands",    /* was accidentally included in 5.4 */
    2599227122        "user_commands",
    25993 @@ -12159,6 +12333,9 @@
     27123@@ -12159,6 +12394,9 @@
    2599427124 #ifdef FEAT_XFONTSET
    2599527125        "xfontset",
     
    2600127131        "xsmp",
    2600227132 #endif
    26003 @@ -12572,7 +12749,7 @@
     27133@@ -12572,7 +12810,7 @@
    2600427134        }
    2600527135 
     
    2601027140                rettv->vval.v_number = idx;
    2601127141                break;
    26012 @@ -12712,7 +12889,7 @@
     27142@@ -12712,7 +12950,7 @@
    2601327143            IObuff[0] = NUL;
    2601427144        if (message != NULL && defstr != NULL
     
    2601927149        else
    2602027150        {
    26021 @@ -12850,7 +13027,7 @@
     27151@@ -12850,7 +13088,7 @@
    2602227152     if (argvars[0].v_type != VAR_LIST)
    2602327153        EMSG2(_(e_listarg), "insert()");
     
    2602827158        if (argvars[2].v_type != VAR_UNKNOWN)
    2602927159            before = get_tv_number_chk(&argvars[2], &error);
    26030 @@ -12877,6 +13054,17 @@
     27160@@ -12877,6 +13115,17 @@
    2603127161 }
    2603227162 
     
    2604627176  */
    2604727177     static void
    26048 @@ -13290,8 +13478,10 @@
     27178@@ -13290,8 +13539,10 @@
    2604927179     char_u     *keys_buf = NULL;
    2605027180     char_u     *rhs;
     
    2605827188     /* return empty string for failure */
    2605927189     rettv->v_type = VAR_STRING;
    26060 @@ -13305,7 +13495,11 @@
     27190@@ -13305,7 +13556,11 @@
    2606127191     {
    2606227192        which = get_tv_string_buf_chk(&argvars[1], buf);
     
    2607027200     else
    2607127201        which = (char_u *)"";
    26072 @@ -13315,19 +13509,34 @@
     27202@@ -13315,19 +13570,34 @@
    2607327203     mode = get_map_mode(&which, 0);
    2607427204 
     
    2611527245 }
    2611627246 
    26117 @@ -14006,6 +14215,18 @@
     27247@@ -13367,6 +13637,23 @@
     27248 }
     27249 #endif
     27250 
     27251+#ifdef FEAT_LUA
     27252+/*
     27253+ * "luaeval()" function
     27254+ */
     27255+    static void
     27256+f_luaeval(argvars, rettv)
     27257+    typval_T   *argvars;
     27258+    typval_T   *rettv;
     27259+{
     27260+    char_u     *str;
     27261+    char_u     buf[NUMBUFLEN];
     27262+
     27263+    str = get_tv_string_buf(&argvars[0], buf);
     27264+    do_luaeval(str, argvars + 1, rettv);
     27265+}
     27266+#endif
     27267+
     27268 /*
     27269  * "map()" function
     27270  */
     27271@@ -14006,6 +14293,18 @@
    2611827272 }
    2611927273 
     
    2613427288  */
    2613527289     static void
    26136 @@ -14177,22 +14398,19 @@
     27290@@ -14177,22 +14476,19 @@
    2613727291     typval_T   *rettv;
    2613827292 {
     
    2616827322     if (argvars[1].v_type != VAR_UNKNOWN)
    2616927323     {
    26170 @@ -14214,49 +14432,61 @@
     27324@@ -14214,49 +14510,61 @@
    2617127325        return;
    2617227326     }
     
    2626127415                }
    2626227416                li->li_tv.v_type = VAR_STRING;
    26263 @@ -14264,71 +14494,109 @@
     27417@@ -14264,71 +14572,111 @@
    2626427418                li->li_tv.vval.v_string = s;
    2626527419                list_append(rettv->vval.v_list, li);
     
    2636027514+                   prevsize = (long)(p - start);
    2636127515+               else
     27516+               {
     27517+                   long grow50pc = (prevsize * 3) / 2;
     27518+                   long growmin  = (long)((p - start) * 2 + prevlen);
     27519+                   prevsize = grow50pc > growmin ? grow50pc : growmin;
     27520+               }
     27521+               newprev = prev == NULL ? alloc(prevsize)
     27522+                                               : vim_realloc(prev, prevsize);
     27523+               if (newprev == NULL)
    2636227524                {
    2636327525-                   mch_memmove(s, prev, prevlen);
     
    2636627528-                   prev = s;
    2636727529-                   prevlen += buflen;
    26368 +                   long grow50pc = (prevsize * 3) / 2;
    26369 +                   long growmin  = (long)((p - start) * 2 + prevlen);
    26370 +                   prevsize = grow50pc > growmin ? grow50pc : growmin;
    26371                 }
    26372 +               if ((newprev = vim_realloc(prev, prevsize)) == NULL)
    26373 +               {
    2637427530+                   do_outofmem_msg((long_u)prevsize);
    2637527531+                   failed = TRUE;
    2637627532+                   break;
    26377 +               }
     27533                }
    2637827534+               prev = newprev;
    2637927535            }
    2638027536-           filtd = 0;
     27537-       }
     27538-       else
     27539-       {
     27540-           mch_memmove(buf, buf + tolist, buflen - tolist);
     27541-           filtd -= tolist;
    2638127542+           /* Add the line part to end of "prev". */
    2638227543+           mch_memmove(prev + prevlen, start, p - start);
    2638327544+           prevlen += (long)(p - start);
    2638427545        }
    26385 -       else
    26386 -       {
    26387 -           mch_memmove(buf, buf + tolist, buflen - tolist);
    26388 -           filtd -= tolist;
    26389 -       }
    2639027546-    }
    2639127547+    } /* while */
     
    2641327569     fclose(fd);
    2641427570 }
    26415 @@ -14691,13 +14959,14 @@
     27571@@ -14691,13 +15039,14 @@
    2641627572     char_u     *key;
    2641727573     dict_T     *d;
     
    2642927585            key = get_tv_string_chk(&argvars[1]);
    2643027586            if (key != NULL)
    26431 @@ -14717,7 +14986,7 @@
     27587@@ -14717,7 +15066,7 @@
    2643227588     else if (argvars[0].v_type != VAR_LIST)
    2643327589        EMSG2(_(e_listdictarg), "remove()");
     
    2643827594        int         error = FALSE;
    2643927595 
    26440 @@ -14847,6 +15116,9 @@
     27596@@ -14847,6 +15196,9 @@
    2644127597     typval_T   *rettv;
    2644227598 {
     
    2644827604     p = get_tv_string(&argvars[0]);
    2644927605 #ifdef FEAT_SHORTCUT
    26450 @@ -14862,7 +15134,6 @@
     27606@@ -14862,7 +15214,6 @@
    2645127607 #else
    2645227608 # ifdef HAVE_READLINK
     
    2645627612        int     len;
    2645727613        char_u  *remain = NULL;
    26458 @@ -14879,7 +15150,10 @@
     27614@@ -14879,7 +15230,10 @@
    2645927615 
    2646027616        len = STRLEN(p);
     
    2646727623        q = getnextcomp(p);
    2646827624        if (*q != NUL)
    26469 @@ -14890,6 +15164,10 @@
     27625@@ -14890,6 +15244,10 @@
    2647027626            q[-1] = NUL;
    2647127627        }
     
    2647827634        {
    2647927635            for (;;)
    26480 @@ -15033,6 +15311,7 @@
     27636@@ -15033,6 +15391,7 @@
    2648127637 
    2648227638 #ifdef HAVE_READLINK
     
    2648627642     rettv->v_type = VAR_STRING;
    2648727643 }
    26488 @@ -15051,7 +15330,7 @@
     27644@@ -15051,7 +15410,7 @@
    2648927645     if (argvars[0].v_type != VAR_LIST)
    2649027646        EMSG2(_(e_listarg), "reverse()");
     
    2649527651        li = l->lv_last;
    2649627652        l->lv_first = l->lv_last = NULL;
    26497 @@ -16256,6 +16535,7 @@
     27653@@ -16256,6 +16615,7 @@
    2649827654 
    2649927655 static int     item_compare_ic;
     
    2650327659 #define ITEM_COMPARE_FAIL 999
    2650427660 
    26505 @@ -16315,7 +16595,8 @@
     27661@@ -16315,7 +16675,8 @@
    2650627662 
    2650727663     rettv.v_type = VAR_UNKNOWN;                /* clear_tv() uses this */
     
    2651327669     clear_tv(&argv[1]);
    2651427670 
    26515 @@ -16348,7 +16629,8 @@
     27671@@ -16348,7 +16709,8 @@
    2651627672     else
    2651727673     {
     
    2652327679        rettv->vval.v_list = l;
    2652427680        rettv->v_type = VAR_LIST;
    26525 @@ -16360,8 +16642,10 @@
     27681@@ -16360,8 +16722,10 @@
    2652627682 
    2652727683        item_compare_ic = FALSE;
     
    2653427690                item_compare_func = argvars[1].vval.v_string;
    2653527691            else
    26536 @@ -16376,6 +16660,17 @@
     27692@@ -16376,6 +16740,17 @@
    2653727693                else
    2653827694                    item_compare_func = get_tv_string(&argvars[1]);
     
    2655227708 
    2655327709        /* Make an array with each entry pointing to an item in the List. */
    26554 @@ -17512,18 +17807,22 @@
     27710@@ -17512,18 +17887,22 @@
    2655527711     typval_T   *argvars UNUSED;
    2655627712     typval_T   *rettv;
     
    2657627732 
    2657727733 /*
    26578 @@ -17711,7 +18010,7 @@
     27734@@ -17711,7 +18090,7 @@
    2657927735     typval_T   *argvars;
    2658027736     typval_T   *rettv;
     
    2658527741     char_u     *tostr;
    2658627742     char_u     *p;
    26587 @@ -17728,7 +18027,7 @@
     27743@@ -17728,7 +18107,7 @@
    2658827744     char_u     buf2[NUMBUFLEN];
    2658927745     garray_T   ga;
     
    2659427750     tostr = get_tv_string_buf_chk(&argvars[2], buf2);
    2659527751 
    26596 @@ -17754,19 +18053,19 @@
     27752@@ -17754,19 +18133,19 @@
    2659727753        }
    2659827754 
     
    2661827774                    for (p = tostr; *p != NUL; p += tolen)
    2661927775                    {
    26620 @@ -17785,11 +18084,11 @@
     27776@@ -17785,11 +18164,11 @@
    2662127777                ++idx;
    2662227778            }
     
    2663227788                for (p = tostr; *p != NUL; p += tolen)
    2663327789                {
    26634 @@ -17804,18 +18103,18 @@
     27790@@ -17804,18 +18183,18 @@
    2663527791            mch_memmove((char *)ga.ga_data + ga.ga_len, cpstr, (size_t)cplen);
    2663627792            ga.ga_len += cplen;
     
    2665527811     }
    2665627812 
    26657 @@ -18258,6 +18557,19 @@
     27813@@ -17882,11 +18261,21 @@
     27814     rettv->v_type = VAR_STRING;
     27815 #ifdef FEAT_PERSISTENT_UNDO
     27816     {
     27817-       char_u *ffname = FullName_save(get_tv_string(&argvars[0]), FALSE);
     27818+       char_u *fname = get_tv_string(&argvars[0]);
     27819+
     27820+       if (*fname == NUL)
     27821+       {
     27822+           /* If there is no file name there will be no undo file. */
     27823+           rettv->vval.v_string = NULL;
     27824+       }
     27825+       else
     27826+       {
     27827+           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);
     27832+           if (ffname != NULL)
     27833+               rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
     27834+           vim_free(ffname);
     27835+       }
     27836     }
     27837 #else
     27838     rettv->vval.v_string = NULL;
     27839@@ -18258,6 +18647,19 @@
    2665827840 }
    2665927841 
     
    2667527857  * Returns NULL when there is an error.
    2667627858  */
    26677 @@ -19453,9 +19765,14 @@
     27859@@ -18768,11 +19170,7 @@
     27860 set_vim_var_char(c)
     27861     int c;
     27862 {
     27863-#ifdef FEAT_MBYTE
     27864-    char_u     buf[MB_MAXBYTES];
     27865-#else
     27866-    char_u     buf[2];
     27867-#endif
     27868+    char_u     buf[MB_MAXBYTES + 1];
     27869 
     27870 #ifdef FEAT_MBYTE
     27871     if (has_mbyte)
     27872@@ -19453,9 +19851,14 @@
    2667827873         * worked find the variable again.  Don't auto-load a script if it was
    2667927874         * loaded already, otherwise it would be loaded every time when
     
    2669227887            return NULL;
    2669327888     }
    26694 @@ -19730,7 +20047,6 @@
     27889@@ -19730,7 +20133,6 @@
    2669527890     dictitem_T *v;
    2669627891     char_u     *varname;
     
    2670027895     ht = find_var_ht(name, &varname);
    2670127896     if (ht == NULL || *varname == NUL)
    26702 @@ -19740,25 +20056,8 @@
     27897@@ -19740,25 +20142,8 @@
    2670327898     }
    2670427899     v = find_var_in_ht(ht, varname, TRUE);
     
    2672827923     if (v != NULL)
    2672927924     {
    26730 @@ -19824,13 +20123,8 @@
     27925@@ -19824,13 +20209,8 @@
    2673127926        }
    2673227927 
     
    2674427939        v = (dictitem_T *)alloc((unsigned)(sizeof(dictitem_T)
    2674527940                                                          + STRLEN(varname)));
    26746 @@ -19895,6 +20189,55 @@
     27941@@ -19895,6 +20275,55 @@
    2674727942 }
    2674827943 
     
    2680027995  * Also give an error message, using "name".
    2680127996  */
    26802 @@ -20302,6 +20645,7 @@
     27997@@ -20099,7 +20528,13 @@
     27998                /* Call msg_start() after eval1(), evaluating the expression
     27999                 * may cause a message to appear. */
     28000                if (eap->cmdidx == CMD_echo)
     28001+               {
     28002+                   /* Mark the saved text as finishing the line, so that what
     28003+                    * follows is displayed on a new line when scrolling back
     28004+                    * at the more prompt. */
     28005+                   msg_sb_eol();
     28006                    msg_start();
     28007+               }
     28008            }
     28009            else if (eap->cmdidx == CMD_echo)
     28010                msg_puts_attr((char_u *)" ", echo_attr);
     28011@@ -20302,6 +20737,7 @@
    2680328012     exarg_T    *eap;
    2680428013 {
     
    2680828017     int                c;
    2680928018     int                saved_did_emsg;
    26810 @@ -20548,6 +20892,15 @@
     28019@@ -20548,6 +20984,15 @@
    2681128020            arg = vim_strsave(arg);
    2681228021            if (arg == NULL)
     
    2682428033            *p = c;
    2682528034            newargs.ga_len++;
    26826 @@ -20623,7 +20976,8 @@
     28035@@ -20623,7 +21068,8 @@
    2682728036     nesting = 0;
    2682828037     for (;;)
     
    2683428043        sourcing_lnum_off = sourcing_lnum;
    2683528044 
    26836 @@ -20726,6 +21080,8 @@
     28045@@ -20726,6 +21172,8 @@
    2683728046                                    && (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
    2683828047                        || (p[0] == 't' && p[1] == 'c'
     
    2684328052                                    && (!ASCII_ISALPHA(p[3]) || p[3] == 'y'))
    2684428053                        || (p[0] == 'm' && p[1] == 'z'
    26845 @@ -21562,6 +21918,9 @@
     28054@@ -21562,6 +22010,9 @@
    2684628055            ++hi;
    2684728056        fp = HI2UF(hi);
     
    2685328062            return fp->uf_name; /* prevents overflow */
    2685428063 
    26855 @@ -21921,8 +22280,12 @@
     28064@@ -21921,8 +22372,12 @@
    2685628065                        s = tv2string(&argvars[i], &tofree, numbuf2, 0);
    2685728066                        if (s != NULL)
     
    2686828077                        }
    2686928078                    }
    26870 @@ -22010,8 +22373,12 @@
     28079@@ -22010,8 +22465,12 @@
    2687128080            s = tv2string(fc->rettv, &tofree, numbuf2, 0);
    2687228081            if (s != NULL)
     
    2688328092            }
    2688428093        }
    26885 @@ -22519,18 +22886,21 @@
     28094@@ -22519,18 +22978,21 @@
    2688628095        if (tab != NULL)
    2688728096        {
     
    2691028119                                       (int)(tab - virp->vir_line + 1), TRUE);
    2691128120 #ifdef FEAT_FLOAT
    26912 @@ -22539,9 +22909,27 @@
     28121@@ -22539,9 +23001,28 @@
    2691328122 #endif
    2691428123                else
     
    2692628135+                       vim_free(tv.vval.v_string);
    2692728136+                       tv = *etv;
     28137+                       vim_free(etv);
    2692828138+                   }
    2692928139+               }
     
    2693928149        }
    2694028150     }
    26941 @@ -22583,8 +22971,10 @@
     28151@@ -22583,8 +23064,10 @@
    2694228152                    case VAR_STRING: s = "STR"; break;
    2694328153                    case VAR_NUMBER: s = "NUM"; break;
     
    2695128161                }
    2695228162                fprintf(fp, "!%s\t%s\t", this_var->di_key, s);
    26953 @@ -22656,7 +23046,7 @@
     28163@@ -22656,7 +23139,7 @@
    2695428164                    f = -f;
    2695528165                    sign = '-';
     
    2696028170                        || put_eol(fd) == FAIL)
    2696128171                    return FAIL;
    26962 @@ -23019,6 +23409,7 @@
     28172@@ -23019,6 +23502,7 @@
    2696328173     int                c;
    2696428174     int                has_fullname = 0;
     
    2696828178 #endif
    2696928179 
    26970 @@ -23193,24 +23584,25 @@
     28180@@ -23193,24 +23677,25 @@
    2697128181     }
    2697228182 
     
    2700128211        {
    2700228212            if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
    27003 @@ -23218,18 +23610,16 @@
     28213@@ -23218,18 +23703,16 @@
    2700428214        }
    2700528215        else
     
    2702428234                    return -1;
    2702528235diff -Naur vim73.orig/src/ex_cmds.c vim73/src/ex_cmds.c
    27026 --- vim73.orig/src/ex_cmds.c    2012-02-15 21:57:45.057436051 +0000
    27027 +++ vim73/src/ex_cmds.c 2012-02-15 21:57:46.717479836 +0000
     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
    2702828238@@ -11,10 +11,6 @@
    2702928239  * ex_cmds.c: some functions for command line commands
     
    2703728247 #include "version.h"
    2703828248 
    27039 @@ -323,7 +319,8 @@
     28249@@ -29,7 +25,6 @@
     28250 static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
     28251 #endif
     28252 
     28253-static int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
     28254 static int check_readonly __ARGS((int *forceit, buf_T *buf));
     28255 #ifdef FEAT_AUTOCMD
     28256 static void delbuf_msg __ARGS((char_u *name));
     28257@@ -323,7 +318,8 @@
    2704028258     /* When sorting numbers "start_col_nr" is the number, not the column
    2704128259      * number. */
     
    2704728265     {
    2704828266        /* We need to copy one line into "sortbuf1", because there is no
    27049 @@ -482,7 +479,7 @@
     28267@@ -482,7 +478,7 @@
    2705028268             * of the match, by temporarily terminating the string there */
    2705128269            s2 = s + end_col;
     
    2705628274            p = s + start_col;
    2705728275            if (sort_hex)
    27058 @@ -491,9 +488,13 @@
     28276@@ -491,9 +487,13 @@
    2705928277                s = skiptodigit(p);
    2706028278            if (s > p && s[-1] == '-')
     
    2707328291        else
    2707428292        {
    27075 @@ -819,7 +820,13 @@
     28293@@ -819,7 +819,13 @@
    2707628294        curwin->w_cursor.lnum = dest + (line2 - line1) + 1;
    2707728295 
     
    2708828306        changed_lines(dest + 1, 0, line1 + num_lines, 0L);
    2708928307 
    27090 @@ -898,9 +905,6 @@
     28308@@ -898,9 +904,6 @@
    2709128309  * Handle the ":!cmd" command. Also for ":r !cmd" and ":w !cmd"
    2709228310  * Bangs in the argument are replaced with the previously entered command.
     
    2709828316     void
    2709928317 do_bang(addr_count, eap, forceit, do_in, do_out)
    27100 @@ -979,11 +983,7 @@
     28318@@ -979,11 +982,7 @@
    2710128319        trailarg = NULL;
    2710228320        while (*p)
     
    2711128329                if (p > newcmd && p[-1] == '\\')
    2711228330                    STRMOVE(p - 1, p);
    27113 @@ -1113,7 +1113,7 @@
     28331@@ -1113,7 +1112,7 @@
    2711428332     if (do_out)
    2711528333        shell_flags |= SHELL_DOOUT;
    2711628334 
    2711728335-#if !defined(USE_SYSTEM) && defined(UNIX)
    27118 +#if (!defined(USE_SYSTEM) && defined(UNIX)) || defined(WIN3264)
     28336+#ifdef FEAT_FILTERPIPE
    2711928337     if (!do_in && do_out && !p_stmp)
    2712028338     {
    2712128339        /* Use a pipe to fetch stdout of the command, do not use a temp file. */
    27122 @@ -1577,14 +1577,8 @@
     28340@@ -1577,14 +1576,8 @@
    2712328341            if (p != NULL)
    2712428342                *p = NUL;
     
    2713528353        {
    2713628354            p = vim_strchr(cmd, '|');
    27137 @@ -1633,16 +1627,9 @@
     28355@@ -1633,16 +1626,9 @@
    2713828356     else
    2713928357        vim_snprintf((char *)end, (size_t)(buflen - (end - buf)),
     
    2715228370                (char *)opt, (char *)fname);
    2715328371 }
    27154 @@ -1843,11 +1830,7 @@
     28372@@ -1843,11 +1829,7 @@
    2715528373 #ifdef VMS
    2715628374                                    (char_u *)"-tmp",
     
    2716428382                                    FALSE);
    2716528383            if (tempname == NULL)               /* out of memory */
    27166 @@ -2700,6 +2683,10 @@
     28384@@ -2700,6 +2682,10 @@
    2716728385                                                                        TRUE);
    2716828386                do_modelines(0);
     
    2717528393        }
    2717628394 
    27177 @@ -2772,7 +2759,7 @@
     28395@@ -2735,7 +2721,7 @@
     28396  * May set eap->forceit if a dialog says it's OK to overwrite.
     28397  * Return OK if it's OK, FAIL if it is not.
     28398  */
     28399-    static int
     28400+    int
     28401 check_overwrite(eap, buf, fname, ffname, other)
     28402     exarg_T    *eap;
     28403     buf_T      *buf;
     28404@@ -2772,7 +2758,7 @@
    2717828405 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
    2717928406            if (p_confirm || cmdmod.confirm)
     
    2718428411                dialog_msg(buff, _("Overwrite existing file \"%s\"?"), fname);
    2718528412                if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES)
    27186 @@ -2790,7 +2777,7 @@
     28413@@ -2790,7 +2776,7 @@
    2718728414        /* For ":w! filename" check that no swap file exists for "filename". */
    2718828415        if (other && !emsg_silent)
     
    2719328420            int         r;
    2719428421            char_u      *swapname;
    27195 @@ -2801,20 +2788,29 @@
     28422@@ -2801,20 +2787,29 @@
    2719628423             * Use 'shortname' of the current buffer, since there is no buffer
    2719728424             * for the written file. */
     
    2722428451                    dialog_msg(buff,
    2722528452                            _("Swap file \"%s\" exists, overwrite anyway?"),
    27226 @@ -2964,7 +2960,7 @@
     28453@@ -2964,7 +2959,7 @@
    2722728454 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
    2722828455        if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
     
    2723328460            if (buf->b_p_ro)
    2723428461                dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
    27235 @@ -3394,6 +3390,13 @@
    27236                                       (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
     28462@@ -3391,9 +3386,16 @@
     28463                /* close the link to the current buffer */
     28464                u_sync(FALSE);
     28465                close_buffer(oldwin, curbuf,
     28466-                                     (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
     28467+                              (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD, FALSE);
    2723728468 
    2723828469 #ifdef FEAT_AUTOCMD
     
    2724728478                if (aborting())     /* autocmds may abort script processing */
    2724828479                {
    27249 @@ -3498,9 +3501,7 @@
     28480@@ -3418,7 +3420,7 @@
     28481                     * and re-attach to buffer, perhaps.
     28482                     */
     28483                    if (curwin->w_s == &(curwin->w_buffer->b_s))
     28484-                           curwin->w_s = &(buf->b_s);
     28485+                       curwin->w_s = &(buf->b_s);
     28486 #endif
     28487                    curwin->w_buffer = buf;
     28488                    curbuf = buf;
     28489@@ -3498,9 +3500,7 @@
    2725028490        curbuf->b_p_bin = FALSE;        /* reset 'bin' before reading file */
    2725128491        curwin->w_p_nu = 0;             /* no line numbers */
     
    2725828498        curwin->w_p_arab = FALSE;       /* no arabic mode */
    2725928499 #endif
    27260 @@ -3631,10 +3632,6 @@
     28500@@ -3631,10 +3631,6 @@
    2726128501      */
    2726228502     check_arg_idx(curwin);
     
    2726928509     if (!auto_buf)
    2727028510 #endif
    27271 @@ -4109,8 +4106,8 @@
     28511@@ -4109,8 +4105,8 @@
    2727228512     switch (*kind)
    2727328513     {
     
    2728028520            break;
    2728128521 
    27282 @@ -4637,7 +4634,15 @@
     28522@@ -4637,7 +4633,15 @@
    2728328523                         * for a match in this line again. */
    2728428524                        skip_match = TRUE;
     
    2729728537                }
    2729828538 
    27299 @@ -5353,8 +5358,9 @@
     28539@@ -5146,10 +5150,13 @@
     28540 
     28541        if (!global_busy)
     28542        {
     28543-           if (endcolumn)
     28544-               coladvance((colnr_T)MAXCOL);
     28545-           else
     28546-               beginline(BL_WHITE | BL_FIX);
     28547+           if (!do_ask)  /* when interactive leave cursor on the match */
     28548+           {
     28549+               if (endcolumn)
     28550+                   coladvance((colnr_T)MAXCOL);
     28551+               else
     28552+                   beginline(BL_WHITE | BL_FIX);
     28553+           }
     28554            if (!do_sub_msg(do_count) && do_ask)
     28555                MSG("");
     28556        }
     28557@@ -5353,8 +5360,9 @@
    2730028558 global_exe(cmd)
    2730128559     char_u     *cmd;
     
    2730928567     /*
    2731028568      * Set current position only once for a global command.
    27311 @@ -5398,8 +5404,10 @@
     28569@@ -5398,8 +5406,10 @@
    2731228570        msg_didout = FALSE;
    2731328571 
     
    2732228580 }
    2732328581 
    27324 @@ -5409,7 +5417,7 @@
     28582@@ -5409,7 +5419,7 @@
    2732528583     vir_T      *virp;
    2732628584     int                force;
     
    2733128589     if (force || old_sub == NULL)
    2733228590        old_sub = viminfo_readstring(virp, 1, TRUE);
    27333 @@ -5471,9 +5479,8 @@
     28591@@ -5471,9 +5481,8 @@
    2733428592                return FALSE;
    2733528593            curwin->w_p_pvw = TRUE;
     
    2734328601            curwin->w_p_diff = FALSE;       /* no 'diff' */
    2734428602 # endif
    27345 @@ -5514,6 +5521,9 @@
     28603@@ -5514,6 +5523,9 @@
    2734628604     int                len;
    2734728605     char_u     *lang;
     
    2735328611     if (eap != NULL)
    2735428612     {
    27355 @@ -5677,6 +5687,12 @@
     28613@@ -5533,7 +5545,7 @@
     28614        }
     28615        arg = eap->arg;
     28616 
     28617-       if (eap->forceit && *arg == NUL)
     28618+       if (eap->forceit && *arg == NUL && !curbuf->b_help)
     28619        {
     28620            EMSG(_("E478: Don't panic!"));
     28621            return;
     28622@@ -5677,6 +5689,12 @@
    2735628623     if (!p_im)
    2735728624        restart_edit = 0;           /* don't want insert mode in help file */
     
    2736628633        do_tag(tag, DT_HELP, 1, FALSE, TRUE);
    2736728634 
    27368 @@ -5979,6 +5995,7 @@
     28635@@ -5946,6 +5964,29 @@
     28636                break;
     28637          }
     28638          *d = NUL;
     28639+
     28640+         if (*IObuff == '`')
     28641+         {
     28642+             if (d > IObuff + 2 && d[-1] == '`')
     28643+             {
     28644+                 /* remove the backticks from `command` */
     28645+                 mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
     28646+                 d[-2] = NUL;
     28647+             }
     28648+             else if (d > IObuff + 3 && d[-2] == '`' && d[-1] == ',')
     28649+             {
     28650+                 /* remove the backticks and comma from `command`, */
     28651+                 mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
     28652+                 d[-3] = NUL;
     28653+             }
     28654+             else if (d > IObuff + 4 && d[-3] == '`'
     28655+                                            && d[-2] == '\\' && d[-1] == '.')
     28656+             {
     28657+                 /* remove the backticks and dot from `command`\. */
     28658+                 mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
     28659+                 d[-4] = NUL;
     28660+             }
     28661+         }
     28662        }
     28663     }
     28664 
     28665@@ -5979,6 +6020,7 @@
    2736928666     char_u     *line;
    2737028667     int                in_example = FALSE;
     
    2737428671     char_u     *rt;
    2737528672     int                mustfree;
    27376 @@ -6025,124 +6042,187 @@
     28673@@ -6025,124 +6067,187 @@
    2737728674     }
    2737828675 
     
    2765328950     }
    2765428951 }
    27655 @@ -6559,8 +6639,7 @@
     28952@@ -6430,7 +6535,10 @@
     28953            p1 = vim_strchr(IObuff, '*');       /* find first '*' */
     28954            while (p1 != NULL)
     28955            {
     28956-               p2 = vim_strchr(p1 + 1, '*');   /* find second '*' */
     28957+               /* Use vim_strbyte() instead of vim_strchr() so that when
     28958+                * 'encoding' is dbcs it still works, don't find '*' in the
     28959+                * second byte. */
     28960+               p2 = vim_strbyte(p1 + 1, '*');  /* find second '*' */
     28961                if (p2 != NULL && p2 > p1 + 1)  /* skip "*" and "**" */
     28962                {
     28963                    for (s = p1 + 1; s < p2; ++s)
     28964@@ -6559,8 +6667,7 @@
    2765628965 struct sign
    2765728966 {
     
    2766328972     char_u     *sn_icon;       /* name of pixmap */
    2766428973 #ifdef FEAT_SIGN_ICONS
    27665 @@ -6572,7 +6651,7 @@
     28974@@ -6572,7 +6679,7 @@
    2766628975 };
    2766728976 
     
    2767228981 static int sign_cmd_idx __ARGS((char_u *begin_cmd, char_u *end_cmd));
    2767328982 static void sign_list_defined __ARGS((sign_T *sp));
    27674 @@ -6654,9 +6733,14 @@
     28983@@ -6647,16 +6754,21 @@
     28984        if (idx == SIGNCMD_LIST && *arg == NUL)
     28985        {
     28986            /* ":sign list": list all defined signs */
     28987-           for (sp = first_sign; sp != NULL; sp = sp->sn_next)
     28988+           for (sp = first_sign; sp != NULL && !got_int; sp = sp->sn_next)
     28989                sign_list_defined(sp);
     28990        }
     28991        else if (*arg == NUL)
    2767528992            EMSG(_("E156: Missing sign name"));
    2767628993        else
     
    2768729004            for (sp = first_sign; sp != NULL; sp = sp->sn_next)
    2768829005            {
    27689 @@ -6669,46 +6753,52 @@
     29006@@ -6669,46 +6781,52 @@
    2769029007                /* ":sign define {name} ...": define a sign */
    2769129008                if (sp == NULL)
     
    2776829085 
    2776929086                /* set values for a defined sign. */
    27770 @@ -6886,6 +6976,8 @@
     29087@@ -6886,6 +7004,8 @@
    2777129088                arg = skiptowhite(arg);
    2777229089                if (*arg != NUL)
     
    2777829095            {
    2777929096diff -Naur vim73.orig/src/ex_cmds.h vim73/src/ex_cmds.h
    27780 --- vim73.orig/src/ex_cmds.h    2012-02-15 21:57:45.057436051 +0000
    27781 +++ vim73/src/ex_cmds.h 2012-02-15 21:57:46.973486588 +0000
     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
    2778229099@@ -102,7 +102,7 @@
    2778329100 EX(CMD_aboveleft,      "aboveleft",    ex_wrongmodifier,
     
    2778929106                        RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
    2779029107 EX(CMD_anoremenu,      "anoremenu",    ex_menu,
     29108@@ -304,7 +304,7 @@
     29109 EX(CMD_display,                "display",      ex_display,
     29110                        EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN),
     29111 EX(CMD_diffupdate,     "diffupdate",   ex_diffupdate,
     29112-                       TRLBAR),
     29113+                       BANG|TRLBAR),
     29114 EX(CMD_diffget,                "diffget",      ex_diffgetput,
     29115                        RANGE|EXTRA|TRLBAR|MODIFY),
     29116 EX(CMD_diffoff,                "diffoff",      ex_diffoff,
    2779129117@@ -788,7 +788,7 @@
    2779229118 EX(CMD_rubyfile,       "rubyfile",     ex_rubyfile,
     
    2781729143 EX(CMD_xit,            "xit",          ex_exit,
    2781829144diff -Naur vim73.orig/src/ex_cmds2.c vim73/src/ex_cmds2.c
    27819 --- vim73.orig/src/ex_cmds2.c   2012-02-15 21:57:45.061436156 +0000
    27820 +++ vim73/src/ex_cmds2.c        2012-02-15 21:57:46.933485534 +0000
     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
    2782129147@@ -11,10 +11,6 @@
    2782229148  * ex_cmds2.c: some more functions for command line commands
     
    2788129207  */
    2788229208     void
    27883 @@ -1496,7 +1486,7 @@
     29209@@ -1496,9 +1486,10 @@
    2788429210     buf_T      *buf;
    2788529211     int                checkall;       /* may abandon all changed buffers */
     
    2788929215     int                ret;
    2789029216     buf_T      *buf2;
    27891  
    27892 @@ -1949,7 +1939,7 @@
     29217+    exarg_T     ea;
     29218 
     29219     dialog_msg(buff, _("Save changes to \"%s\"?"),
     29220                        (buf->b_fname != NULL) ?
     29221@@ -1508,13 +1499,19 @@
     29222     else
     29223        ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
     29224 
     29225+    /* Init ea pseudo-structure, this is needed for the check_overwrite()
     29226+     * function. */
     29227+    ea.append = ea.forceit = FALSE;
     29228+
     29229     if (ret == VIM_YES)
     29230     {
     29231 #ifdef FEAT_BROWSE
     29232        /* May get file name, when there is none */
     29233        browse_save_fname(buf);
     29234 #endif
     29235-       if (buf->b_fname != NULL)   /* didn't hit Cancel */
     29236+       if (buf->b_fname != NULL && check_overwrite(&ea, buf,
     29237+                                   buf->b_fname, buf->b_ffname, FALSE) == OK)
     29238+           /* didn't hit Cancel */
     29239            (void)buf_write_all(buf, FALSE);
     29240     }
     29241     else if (ret == VIM_NO)
     29242@@ -1542,7 +1539,9 @@
     29243                /* May get file name, when there is none */
     29244                browse_save_fname(buf2);
     29245 #endif
     29246-               if (buf2->b_fname != NULL)   /* didn't hit Cancel */
     29247+               if (buf2->b_fname != NULL && check_overwrite(&ea, buf2,
     29248+                                 buf2->b_fname, buf2->b_ffname, FALSE) == OK)
     29249+                   /* didn't hit Cancel */
     29250                    (void)buf_write_all(buf2, FALSE);
     29251 #ifdef FEAT_AUTOCMD
     29252                /* an autocommand may have deleted the buffer */
     29253@@ -1579,6 +1578,26 @@
     29254                || forceit);
     29255 }
     29256 
     29257+static void add_bufnum __ARGS((int *bufnrs, int *bufnump, int nr));
     29258+
     29259+/*
     29260+ * Add a buffer number to "bufnrs", unless it's already there.
     29261+ */
     29262+    static void
     29263+add_bufnum(bufnrs, bufnump, nr)
     29264+    int            *bufnrs;
     29265+    int            *bufnump;
     29266+    int            nr;
     29267+{
     29268+    int i;
     29269+
     29270+    for (i = 0; i < *bufnump; ++i)
     29271+       if (bufnrs[i] == nr)
     29272+           return;
     29273+    bufnrs[*bufnump] = nr;
     29274+    *bufnump = *bufnump + 1;
     29275+}
     29276+
     29277 /*
     29278  * Return TRUE if any buffer was changed and cannot be abandoned.
     29279  * That changed buffer becomes the current buffer.
     29280@@ -1587,32 +1606,64 @@
     29281 check_changed_any(hidden)
     29282     int                hidden;         /* Only check hidden buffers */
     29283 {
     29284+    int                ret = FALSE;
     29285     buf_T      *buf;
     29286     int                save;
     29287+    int                i;
     29288+    int                bufnum = 0;
     29289+    int                bufcount = 0;
     29290+    int                *bufnrs;
     29291 #ifdef FEAT_WINDOWS
     29292+    tabpage_T   *tp;
     29293     win_T      *wp;
     29294 #endif
     29295 
     29296-    for (;;)
     29297+    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
     29298+       ++bufcount;
     29299+
     29300+    if (bufcount == 0)
     29301+       return FALSE;
     29302+
     29303+    bufnrs = (int *)alloc(sizeof(int) * bufcount);
     29304+    if (bufnrs == NULL)
     29305+       return FALSE;
     29306+
     29307+    /* curbuf */
     29308+    bufnrs[bufnum++] = curbuf->b_fnum;
     29309+#ifdef FEAT_WINDOWS
     29310+    /* buf in curtab */
     29311+    FOR_ALL_WINDOWS(wp)
     29312+       if (wp->w_buffer != curbuf)
     29313+           add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
     29314+
     29315+    /* buf in other tab */
     29316+    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
     29317+       if (tp != curtab)
     29318+           for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
     29319+               add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
     29320+#endif
     29321+    /* any other buf */
     29322+    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
     29323+       add_bufnum(bufnrs, &bufnum, buf->b_fnum);
     29324+
     29325+    for (i = 0; i < bufnum; ++i)
     29326     {
     29327-       /* check curbuf first: if it was changed we can't abandon it */
     29328-       if (!hidden && curbufIsChanged())
     29329-           buf = curbuf;
     29330-       else
     29331+       buf = buflist_findnr(bufnrs[i]);
     29332+       if (buf == NULL)
     29333+           continue;
     29334+       if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
     29335        {
     29336-           for (buf = firstbuf; buf != NULL; buf = buf->b_next)
     29337-               if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
     29338-                   break;
     29339+           /* Try auto-writing the buffer.  If this fails but the buffer no
     29340+           * longer exists it's not changed, that's OK. */
     29341+           if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
     29342+               break;      /* didn't save - still changes */
     29343        }
     29344-       if (buf == NULL)    /* No buffers changed */
     29345-           return FALSE;
     29346-
     29347-       /* Try auto-writing the buffer.  If this fails but the buffer no
     29348-        * longer exists it's not changed, that's OK. */
     29349-       if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
     29350-           break;          /* didn't save - still changes */
     29351     }
     29352 
     29353+    if (i >= bufnum)
     29354+       goto theend;
     29355+
     29356+    ret = TRUE;
     29357     exiting = FALSE;
     29358 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
     29359     /*
     29360@@ -1645,24 +1696,29 @@
     29361 #ifdef FEAT_WINDOWS
     29362     /* Try to find a window that contains the buffer. */
     29363     if (buf != curbuf)
     29364-       for (wp = firstwin; wp != NULL; wp = wp->w_next)
     29365+       FOR_ALL_TAB_WINDOWS(tp, wp)
     29366            if (wp->w_buffer == buf)
     29367            {
     29368-               win_goto(wp);
     29369+               goto_tabpage_win(tp, wp);
     29370 # ifdef FEAT_AUTOCMD
     29371                /* Paranoia: did autocms wipe out the buffer with changes? */
     29372                if (!buf_valid(buf))
     29373-                   return TRUE;
     29374+               {
     29375+                   goto theend;
     29376+               }
     29377 # endif
     29378-               break;
     29379+               goto buf_found;
     29380            }
     29381+buf_found:
     29382 #endif
     29383 
     29384     /* Open the changed buffer in the current window. */
     29385     if (buf != curbuf)
     29386        set_curbuf(buf, DOBUF_GOTO);
     29387 
     29388-    return TRUE;
     29389+theend:
     29390+    vim_free(bufnrs);
     29391+    return ret;
     29392 }
     29393 
     29394 /*
     29395@@ -1949,7 +2005,7 @@
    2789329396 }
    2789429397 
     
    2789929402  */
    2790029403     static int
    27901 @@ -2165,9 +2155,7 @@
     29404@@ -2165,9 +2221,7 @@
    2790229405        {
    2790329406            if (win_split(0, 0) == FAIL)
     
    2791029413        else
    2791129414 #endif
    27912 @@ -2946,11 +2934,7 @@
     29415@@ -2946,11 +3000,7 @@
    2791329416     proftime_T             wait_start;
    2791429417 #endif
     
    2792229425        return retval;
    2792329426     fname_exp = fix_fname(p);
    27924 @@ -3286,7 +3270,11 @@
     29427@@ -3286,7 +3336,11 @@
    2792529428 
    2792629429     for (i = 1; i <= script_items.ga_len && !got_int; ++i)
     
    2793129434+                                                   NameBuff, MAXPATHL, TRUE);
    2793229435+           smsg((char_u *)"%3d: %s", i, NameBuff);
    27933 +        }
     29436+       }
    2793429437 }
    2793529438 
    2793629439 # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
    27937 @@ -3412,7 +3400,7 @@
     29440@@ -3412,7 +3466,7 @@
    2793829441 {
    2793929442     struct source_cookie *sp = (struct source_cookie *)cookie;
     
    2794429447 #ifdef FEAT_EVAL
    2794529448     /* If breakpoints have been added/deleted need to check for it. */
    27946 @@ -3451,28 +3439,40 @@
     29449@@ -3451,28 +3505,49 @@
    2794729450     {
    2794829451        /* compensate for the one line read-ahead */
     
    2797029473+           garray_T    ga;
    2797129474+
    27972 +           ga_init2(&ga, (int)sizeof(char_u), 200);
     29475+           ga_init2(&ga, (int)sizeof(char_u), 400);
    2797329476+           ga_concat(&ga, line);
    2797429477+           ga_concat(&ga, p + 1);
     
    2798229485+               if (*p != '\\')
    2798329486+                   break;
     29487+               /* Adjust the growsize to the current length to speed up
     29488+                * concatenating many lines. */
     29489+               if (ga.ga_len > 400)
     29490+               {
     29491+                   if (ga.ga_len > 8000)
     29492+                       ga.ga_growsize = 8000;
     29493+                   else
     29494+                       ga.ga_growsize = ga.ga_len;
     29495+               }
    2798429496+               ga_concat(&ga, p + 1);
    2798529497+           }
     
    2800029512        s = string_convert(&sp->conv, line, NULL);
    2800129513        if (s != NULL)
    28002 @@ -4166,11 +4166,90 @@
     29514@@ -4166,11 +4241,90 @@
    2800329515            /* Set v:lang, v:lc_time and v:ctype to the final result. */
    2800429516            set_lang_var();
     
    2809129603  * Function given to ExpandGeneric() to obtain the possible arguments of the
    2809229604  * ":language" command.
    28093 @@ -4186,7 +4265,25 @@
     29605@@ -4186,7 +4340,25 @@
    2809429606        return (char_u *)"ctype";
    2809529607     if (idx == 2)
     
    2811929631 
    2812029632diff -Naur vim73.orig/src/ex_docmd.c vim73/src/ex_docmd.c
    28121 --- vim73.orig/src/ex_docmd.c   2012-02-15 21:57:45.041435628 +0000
    28122 +++ vim73/src/ex_docmd.c        2012-02-15 21:57:46.965486377 +0000
     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
    2812329635@@ -61,6 +61,7 @@
    2812429636 static char_u  *do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie));
     
    2859730109 #endif
    2859830110 #if defined(FEAT_PROFILE)
    28599 @@ -4520,12 +4581,14 @@
     30111@@ -3859,8 +3920,16 @@
     30112 #endif
     30113        case CMD_behave:
     30114            xp->xp_context = EXPAND_BEHAVE;
     30115+           xp->xp_pattern = arg;
     30116            break;
     30117 
     30118+#if defined(FEAT_CMDHIST)
     30119+       case CMD_history:
     30120+           xp->xp_context = EXPAND_HISTORY;
     30121+           xp->xp_pattern = arg;
     30122+           break;
     30123+#endif
     30124+
     30125 #endif /* FEAT_CMDL_COMPL */
     30126 
     30127        default:
     30128@@ -4520,12 +4589,14 @@
    2860030129                else /* n == 2 */
    2860130130                {
     
    2861430143                        return FAIL;
    2861530144                }
    28616 @@ -4777,12 +4840,10 @@
     30145@@ -4777,12 +4848,10 @@
    2861730146 #ifdef FEAT_MBYTE
    2861830147     else if (STRNCMP(arg, "enc", 3) == 0)
     
    2863130160     }
    2863230161     else if (STRNCMP(arg, "bad", 3) == 0)
    28633 @@ -4894,7 +4955,7 @@
     30162@@ -4894,7 +4963,7 @@
    2863430163     map_clear(eap->cmd, eap->arg, TRUE, TRUE);
    2863530164 }
     
    2864030169 ex_autocmd(eap)
    2864130170     exarg_T    *eap;
    28642 @@ -4921,8 +4982,12 @@
     30171@@ -4921,8 +4990,12 @@
    2864330172 ex_doautocmd(eap)
    2864430173     exarg_T    *eap;
     
    2865530184 #endif
    2865630185 
    28657 @@ -5087,12 +5152,14 @@
     30186@@ -5087,12 +5160,14 @@
    2865830187 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
    2865930188            if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL)
     
    2867330202                if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
    2867430203                    return OK;
    28675 @@ -5263,7 +5330,9 @@
     30204@@ -5262,8 +5337,11 @@
     30205 } command_complete[] =
    2867630206 {
    2867730207     {EXPAND_AUGROUP, "augroup"},
     30208+    {EXPAND_BEHAVE, "behave"},
    2867830209     {EXPAND_BUFFERS, "buffer"},
    2867930210+    {EXPAND_COLORS, "color"},
     
    2868330214     {EXPAND_CSCOPE, "cscope"},
    2868430215 #endif
    28685 @@ -5276,10 +5345,15 @@
     30216@@ -5276,10 +5354,18 @@
    2868630217     {EXPAND_EVENTS, "event"},
    2868730218     {EXPAND_EXPRESSION, "expression"},
     
    2869230223     {EXPAND_HELP, "help"},
    2869330224     {EXPAND_HIGHLIGHT, "highlight"},
     30225+#if defined(FEAT_CMDHIST)
     30226+    {EXPAND_HISTORY, "history"},
     30227+#endif
    2869430228+#if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
    28695 +        && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
     30229+       && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
    2869630230+    {EXPAND_LOCALES, "locale"},
    2869730231+#endif
     
    2869930233     {EXPAND_MENUS, "menu"},
    2870030234     {EXPAND_OWNSYNTAX, "syntax"},
    28701 @@ -5587,6 +5661,7 @@
     30235@@ -5587,6 +5673,7 @@
    2870230236     int            compl = EXPAND_NOTHING;
    2870330237     char_u  *compl_arg = NULL;
     
    2870730241     p = eap->arg;
    2870830242 
    28709 @@ -5612,6 +5687,7 @@
     30243@@ -5612,6 +5699,7 @@
    2871030244        return;
    2871130245     }
     
    2871530249     /* If there is nothing after the name, and no attributes were specified,
    2871630250      * we are listing commands
    28717 @@ -5626,6 +5702,13 @@
     30251@@ -5626,6 +5714,13 @@
    2871830252        EMSG(_("E183: User defined commands must start with an uppercase letter"));
    2871930253        return;
     
    2872930263        uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
    2873030264                                                                eap->forceit);
    28731 @@ -5888,7 +5971,14 @@
     30265@@ -5888,7 +5983,14 @@
    2873230266            result = STRLEN(eap->arg) + 2;
    2873330267            for (p = eap->arg; *p; ++p)
     
    2874530279            }
    2874630280 
    28747 @@ -5897,7 +5987,14 @@
     30281@@ -5897,7 +5999,14 @@
    2874830282                *buf++ = '"';
    2874930283                for (p = eap->arg; *p; ++p)
     
    2876130295                    *buf++ = *p;
    2876230296                }
    28763 @@ -6039,15 +6136,17 @@
     30297@@ -6039,15 +6148,17 @@
    2876430298                end = vim_strchr(start + 1, '>');
    2876530299            if (buf != NULL)
     
    2878230316                     * do_cmdline() doesn't handle that, so convert it back.
    2878330317                     * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */
    28784 @@ -6439,7 +6538,7 @@
     30318@@ -6439,7 +6550,7 @@
    2878530319 {
    2878630320 # ifdef FEAT_CMDWIN
     
    2879130325 # endif
    2879230326        if (!text_locked()
    28793 @@ -6897,9 +6996,7 @@
     30327@@ -6897,9 +7008,7 @@
    2879430328 # ifdef FEAT_WINDOWS
    2879530329        if (win_split(0, 0) == FAIL)
     
    2880230336        /* When splitting the window, create a new alist.  Otherwise the
    2880330337         * existing one is overwritten. */
    28804 @@ -7026,7 +7123,7 @@
     30338@@ -7026,7 +7135,7 @@
    2880530339        old_arg_count = GARGCOUNT;
    2880630340        if (expand_wildcards(old_arg_count, old_arg_files,
     
    2881130345        {
    2881230346            alist_set(&global_alist, new_arg_file_count, new_arg_files,
    28813 @@ -7299,7 +7396,9 @@
     30347@@ -7299,7 +7408,9 @@
    2881430348                || cmdmod.browse
    2881530349 #  endif
     
    2882230356            do_check_scrollbind(FALSE);
    2882330357 # endif
    28824 @@ -8122,6 +8221,12 @@
     30358@@ -8122,6 +8233,12 @@
    2882530359     {
    2882630360        ui_delay(msec - done > 1000L ? 1000L : msec - done, TRUE);
     
    2883530369 }
    2883630370 
    28837 @@ -8193,7 +8298,7 @@
     30371@@ -8193,7 +8310,7 @@
    2883830372     p = skipwhite(p);
    2883930373     if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
     
    2884430378        /* Pass flags on for ":vertical wincmd ]". */
    2884530379        postponed_split_flags = cmdmod.split;
    28846 @@ -8907,35 +9012,42 @@
     30380@@ -8907,35 +9024,42 @@
    2884730381                failed = TRUE;
    2884830382            if (eap->cmdidx == CMD_mksession)
     
    2891130445            }
    2891230446            else
    28913 @@ -8966,10 +9078,15 @@
     30447@@ -8966,10 +9090,15 @@
    2891430448        else if (eap->cmdidx == CMD_mksession)
    2891530449        {
     
    2893030464 #endif
    2893130465 #ifdef MKSESSION_NL
    28932 @@ -9295,7 +9412,7 @@
     30466@@ -9295,7 +9424,7 @@
    2893330467                                                                  && !got_int)
    2893430468     {
     
    2893930473 }
    2894030474 #endif
    28941 @@ -9393,7 +9510,7 @@
     30475@@ -9393,7 +9522,7 @@
    2894230476 ex_ptag(eap)
    2894330477     exarg_T    *eap;
     
    2894830482 }
    2894930483 
    28950 @@ -9525,17 +9642,23 @@
     30484@@ -9525,17 +9654,23 @@
    2895130485 #define SPEC_CFILE  4
    2895230486                    "<sfile>",          /* ":so" file name */
     
    2897630510     };
    2897730511 
    28978 @@ -9560,6 +9683,7 @@
     30512@@ -9560,6 +9695,7 @@
    2897930513  *       '<cWORD>' to WORD under the cursor
    2898030514  *       '<cfile>' to path name under the cursor
     
    2898430518  *       '<abuf>'  to buffer number for autocommand
    2898530519  *       '<amatch>' to matching name for autocommand
    28986 @@ -9591,10 +9715,7 @@
     30520@@ -9591,10 +9727,7 @@
    2898730521 #ifdef FEAT_MODIFY_FNAME
    2898830522     int                skip_mod = FALSE;
     
    2899530529     *errormsg = NULL;
    2899630530     if (escaped != NULL)
    28997 @@ -9653,14 +9774,7 @@
     30531@@ -9653,14 +9786,7 @@
    2899830532                    valid = 0;      /* Must have ":p:h" to be valid */
    2899930533                }
     
    2901030544 
    2901130545        case SPEC_HASH:         /* '#' or "#99": alternate file */
    29012 @@ -9783,6 +9897,15 @@
     30546@@ -9783,6 +9909,15 @@
    2901330547                    return NULL;
    2901430548                }
     
    2902630560        case SPEC_CLIENT:       /* Source of last submitted input */
    2902730561                sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
    29028 @@ -9796,11 +9919,7 @@
     30562@@ -9796,11 +9931,7 @@
    2902930563        if (src[*usedlen] == '<')       /* remove the file name extension */
    2903030564        {
     
    2903830572        }
    2903930573 #ifdef FEAT_MODIFY_FNAME
    29040 @@ -10645,7 +10764,7 @@
     30574@@ -10645,7 +10776,7 @@
    2904130575     unsigned   *flagp;
    2904230576 {
     
    2904730581 
    2904830582     if (gap->ga_len == 0)
    29049 @@ -10660,11 +10779,19 @@
     30583@@ -10660,11 +10791,19 @@
    2905030584        {
    2905130585            if (fullname)
     
    2906930603     }
    2907030604     return put_eol(fd);
    29071 @@ -10707,7 +10834,7 @@
     30605@@ -10707,7 +10846,7 @@
    2907230606  * Write a file name to the session file.
    2907330607  * Takes care of the "slash" option in 'sessionoptions' and escapes special
     
    2907830612     static int
    2907930613 ses_put_fname(fd, name, flagp)
    29080 @@ -10716,49 +10843,32 @@
     30614@@ -10716,49 +10855,32 @@
    2908130615     unsigned   *flagp;
    2908230616 {
     
    2914830682 }
    2914930683 
    29150 @@ -10826,8 +10936,7 @@
     30684@@ -10826,8 +10948,7 @@
    2915130685            else if (vim_ispathsep(*p))
    2915230686            {
     
    2915830692                    *s++ = '-';
    2915930693                else
    29160 @@ -10910,7 +11019,7 @@
     30694@@ -10910,7 +11031,7 @@
    2916130695 
    2916230696 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
     
    2916730701  */
    2916830702     void
    29169 @@ -10921,7 +11030,7 @@
     30703@@ -10921,7 +11042,7 @@
    2917030704 {
    2917130705     if (fname == NULL)
     
    2917730711 
    2917830712diff -Naur vim73.orig/src/ex_getln.c vim73/src/ex_getln.c
    29179 --- vim73.orig/src/ex_getln.c   2012-02-15 21:57:45.065436261 +0000
    29180 +++ vim73/src/ex_getln.c        2012-02-15 21:57:46.881484161 +0000
     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
     30715@@ -25,7 +25,7 @@
     30716     int                cmdlen;         /* number of chars in command line */
     30717     int                cmdpos;         /* current cursor position */
     30718     int                cmdspos;        /* cursor column on screen */
     30719-    int                cmdfirstc;      /* ':', '/', '?', '=' or NUL */
     30720+    int                cmdfirstc;      /* ':', '/', '?', '=', '>' or NUL */
     30721     int                cmdindent;      /* number of spaces before cmdline */
     30722     char_u     *cmdprompt;     /* message in front of cmdline */
     30723     int                cmdattr;        /* attributes for prompt */
    2918130724@@ -67,7 +67,7 @@
    2918230725 
     
    2918830731 static int     calc_hist_idx __ARGS((int histype, int num));
    2918930732 # endif
    29190 @@ -110,7 +110,7 @@
     30733@@ -110,7 +110,10 @@
    2919130734 static int     expand_showtail __ARGS((expand_T *xp));
    2919230735 #ifdef FEAT_CMDL_COMPL
     
    2919430737-static int     ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname));
    2919530738+static int     ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname[]));
     30739+# ifdef FEAT_CMDHIST
     30740+static char_u  *get_history_arg __ARGS((expand_T *xp, int idx));
     30741+# endif
    2919630742 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
    2919730743 static int     ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
    2919830744 static int     ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
    29199 @@ -121,6 +121,14 @@
     30745@@ -121,6 +124,14 @@
    2920030746 static int     ex_window __ARGS((void));
    2920130747 #endif
     
    2921230758  * getcmdline() - accept a command line starting with firstc.
    2921330759  *
    29214 @@ -637,7 +645,11 @@
     30760@@ -637,7 +648,11 @@
    2921530761                }
    2921630762                else if (ccline.cmdpos > i)
     
    2922430770        }
    2922530771 
    29226 @@ -688,28 +700,35 @@
     30772@@ -688,28 +703,35 @@
    2922730773                    p = get_expr_line();
    2922830774                    --textlock;
     
    2927730823 #endif
    2927830824            else
    29279 @@ -1962,8 +1981,12 @@
     30825@@ -1833,8 +1855,11 @@
     30826 # endif
     30827                )
     30828            /* Always redraw the whole command line to fix shaping and
     30829-            * right-left typing.  Not efficient, but it works. */
     30830-           redrawcmd();
     30831+            * right-left typing.  Not efficient, but it works.
     30832+            * Do it only when there are no characters left to read
     30833+            * to avoid useless intermediate redraws. */
     30834+           if (vpeekc() == NUL)
     30835+               redrawcmd();
     30836 #endif
     30837     }
     30838 
     30839@@ -1962,8 +1987,12 @@
    2928030840 # endif
    2928130841     s = getcmdline(firstc, 1L, 0);
     
    2929230852     return s;
    2929330853 }
    29294 @@ -2342,15 +2365,31 @@
     30854@@ -2342,15 +2371,31 @@
    2929530855        windgoto(msg_row, msg_col);
    2929630856        pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len;
     
    2933330893     }
    2933430894 
    29335 @@ -2843,6 +2882,7 @@
     30895@@ -2843,6 +2888,7 @@
    2933630896        {
    2933730897            msg_no_more = TRUE;
     
    2934130901            /* Avoid clearing the rest of the line too often. */
    2934230902            if (cmdline_row != i || ccline.overstrike)
    29343 @@ -3023,7 +3063,7 @@
     30903@@ -3023,7 +3069,7 @@
    2934430904            int     len;
    2934530905 
     
    2935030910 #ifdef FEAT_MBYTE
    2935130911                if (has_mbyte)
    29352 @@ -3041,7 +3081,7 @@
     30912@@ -3041,7 +3087,7 @@
    2935330913                    --w;
    2935430914                }
     
    2935930919                p += len;
    2936030920        }
    29361 @@ -3258,6 +3298,24 @@
     30921@@ -3258,6 +3304,24 @@
    2936230922     return check_abbr(c, ccline.cmdbuff, ccline.cmdpos, 0);
    2936330923 }
     
    2938430944  * Return FAIL if this is not an appropriate context in which to do
    2938530945  * completion of anything, return OK if it is (even if there are no matches).
    29386 @@ -3316,10 +3374,14 @@
     30946@@ -3316,10 +3380,14 @@
    2938730947            p2 = NULL;
    2938830948        else
     
    2940130961            /* longest match: make sure it is not shorter, happens with :help */
    2940230962            if (p2 != NULL && type == WILD_LONGEST)
    29403 @@ -3405,6 +3467,7 @@
     30963@@ -3396,6 +3464,7 @@
     30964  * mode = WILD_PREV:       use previous match in multiple match, wrap to first
     30965  * mode = WILD_ALL:        return all matches concatenated
     30966  * mode = WILD_LONGEST:            return longest matched part
     30967+ * mode = WILD_ALL_KEEP:    get all matches, keep matches
     30968  *
     30969  * options = WILD_LIST_NOTFOUND:    list entries without a match
     30970  * options = WILD_HOME_REPLACE:            do home_replace() for buffer names
     30971@@ -3405,6 +3474,7 @@
    2940430972  * options = WILD_KEEP_ALL:        don't remove 'wildignore' entries
    2940530973  * options = WILD_SILENT:          don't print warning messages
     
    2940930977  * The variables xp->xp_context and xp->xp_backslash must have been set!
    2941030978  */
    29411 @@ -3674,6 +3737,7 @@
     30979@@ -3518,7 +3588,8 @@
     30980            /*
     30981             * Check for matching suffixes in file names.
     30982             */
     30983-           if (mode != WILD_ALL && mode != WILD_LONGEST)
     30984+           if (mode != WILD_ALL && mode != WILD_ALL_KEEP
     30985+                                                     && mode != WILD_LONGEST)
     30986            {
     30987                if (xp->xp_numfiles)
     30988                    non_suf_match = xp->xp_numfiles;
     30989@@ -3674,6 +3745,7 @@
    2941230990     if (options & WILD_ESCAPE)
    2941330991     {
     
    2941730995                || xp->xp_context == EXPAND_BUFFERS
    2941830996                || xp->xp_context == EXPAND_DIRECTORIES)
    29419 @@ -4338,6 +4402,7 @@
     30997@@ -4338,6 +4410,7 @@
    2942030998     char_u     ***matches;     /* return: array of pointers to matches */
    2942130999 {
     
    2942531003     if (xp->xp_context == EXPAND_UNSUCCESSFUL)
    2942631004     {
    29427 @@ -4356,9 +4421,11 @@
     31005@@ -4356,9 +4429,11 @@
    2942831006     if (file_str == NULL)
    2942931007        return EXPAND_UNSUCCESSFUL;
     
    2943931017        *matchcount = 0;
    2944031018        *matches = NULL;
    29441 @@ -4410,7 +4477,7 @@
     31019@@ -4410,7 +4485,7 @@
    2944231020     char_u     *pat;
    2944331021     int                *num_file;
     
    2944831026 #ifdef FEAT_CMDL_COMPL
    2944931027     regmatch_T regmatch;
    29450 @@ -4464,6 +4531,9 @@
     31028@@ -4464,6 +4539,9 @@
    2945131029            flags |= (EW_FILE | EW_PATH);
    2945231030        else
     
    2945831036        ret = expand_wildcards_eval(&pat, num_file, file, flags);
    2945931037        if (free_pat)
    29460 @@ -4501,13 +4571,25 @@
     31038@@ -4501,13 +4579,25 @@
    2946131039            || xp->xp_context == EXPAND_TAGS_LISTFILES)
    2946231040        return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
     
    2948831066     if (xp->xp_context == EXPAND_USER_LIST)
    2948931067        return ExpandUserList(xp, num_file, file);
    29490 @@ -4536,48 +4618,50 @@
     31068@@ -4536,48 +4626,53 @@
    2949131069            int         context;
    2949231070            char_u      *((*func)__ARGS((expand_T *, int)));
     
    2949931077+           {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
    2950031078+           {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
     31079+#ifdef FEAT_CMDHIST
     31080+           {EXPAND_HISTORY, get_history_arg, TRUE, TRUE},
     31081+#endif
    2950131082 #ifdef FEAT_USR_CMDS
    2950231083-           {EXPAND_USER_COMMANDS, get_user_commands, FALSE},
     
    2956031141        int     i;
    2956131142 
    29562 @@ -4591,7 +4675,8 @@
     31143@@ -4591,7 +4686,8 @@
    2956331144            {
    2956431145                if (tab[i].ic)
     
    2957031151            }
    2957131152     }
    29572 @@ -4613,13 +4698,14 @@
     31153@@ -4613,13 +4709,14 @@
    2957331154  * Returns OK when no problems encountered, FAIL for error (out of memory).
    2957431155  */
     
    2958631167     int                i;
    2958731168     int                count = 0;
    29588 @@ -4644,7 +4730,10 @@
     31169@@ -4644,7 +4741,10 @@
    2958931170            {
    2959031171                if (round)
     
    2959831179 #ifdef FEAT_MENU
    2959931180                    if (func == get_menu_names && str != NULL)
    29600 @@ -4676,7 +4765,16 @@
     31181@@ -4676,7 +4776,16 @@
    2960131182 
    2960231183     /* Sort the results.  Keep menu's in the specified order. */
     
    2961631197 #ifdef FEAT_CMDL_COMPL
    2961731198     /* Reset the variables used for special highlight names expansion, so that
    29618 @@ -4728,7 +4826,11 @@
     31199@@ -4728,7 +4837,11 @@
    2961931200                            || (pat[1] == '.' && vim_ispathsep(pat[2])))))
    2962031201        path = (char_u *)".";
     
    2962831209     /*
    2962931210      * Go over all directories in $PATH.  Expand matches in that directory and
    29630 @@ -4949,57 +5051,68 @@
     31211@@ -4949,57 +5062,68 @@
    2963131212 /*
    2963231213  * Expand color scheme, compiler or filetype names:
     
    2972731308 
    2972831309     *file = ga.ga_data;
    29729 @@ -5220,13 +5333,15 @@
     31310@@ -5127,6 +5251,34 @@
     31311     NULL
     31312 };
     31313 
     31314+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
     31315+/*
     31316+ * Function given to ExpandGeneric() to obtain the possible first
     31317+ * arguments of the ":history command.
     31318+ */
     31319+    static char_u *
     31320+get_history_arg(xp, idx)
     31321+    expand_T   *xp UNUSED;
     31322+    int                idx;
     31323+{
     31324+    static char_u compl[2] = { NUL, NUL };
     31325+    char *short_names = ":=@>?/";
     31326+    int short_names_count = (int)STRLEN(short_names);
     31327+    int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
     31328+
     31329+    if (idx < short_names_count)
     31330+    {
     31331+       compl[0] = (char_u)short_names[idx];
     31332+       return compl;
     31333+    }
     31334+    if (idx < short_names_count + history_name_count)
     31335+       return (char_u *)history_names[idx - short_names_count];
     31336+    if (idx == short_names_count + history_name_count)
     31337+       return (char_u *)"all";
     31338+    return NULL;
     31339+}
     31340+#endif
     31341+
     31342 /*
     31343  * init_history() - Initialize the command line history.
     31344  * Also used to re-allocate the history when the size changes.
     31345@@ -5220,13 +5372,15 @@
    2973031346  * If 'move_to_front' is TRUE, matching entry is moved to end of history.
    2973131347  */
     
    2974431360     if (hisidx[type] < 0)
    2974531361        return FALSE;
    29746 @@ -5235,7 +5350,12 @@
     31362@@ -5235,7 +5389,12 @@
    2974731363     {
    2974831364        if (history[type][i].hisstr == NULL)
     
    2975831374            if (!move_to_front)
    2975931375                return TRUE;
    29760 @@ -5329,7 +5449,7 @@
     31376@@ -5329,7 +5488,7 @@
    2976131377        }
    2976231378        last_maptick = -1;
     
    2976731383        if (++hisidx[histype] == hislen)
    2976831384            hisidx[histype] = 0;
    29769 @@ -5803,7 +5923,7 @@
     31385@@ -5803,7 +5962,7 @@
    2977031386                                                              hist[i].hisnum);
    2977131387                    if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
     
    2977631392                        STRCAT(IObuff, hist[i].hisstr);
    2977731393                    msg_outtrans(IObuff);
    29778 @@ -5907,8 +6027,10 @@
     31394@@ -5907,8 +6066,10 @@
    2977931395        val = viminfo_readstring(virp, 1, TRUE);
    2978031396        if (val != NULL && *val != NUL)
     
    2978831404                /* Need to re-allocate to append the separator byte. */
    2978931405                len = STRLEN(val);
    29790 @@ -5920,7 +6042,7 @@
     31406@@ -5920,7 +6081,7 @@
    2979131407                        /* Search entry: Move the separator from the first
    2979231408                         * column to after the NUL. */
     
    2979731413                    else
    2979831414                    {
    29799 @@ -6147,9 +6269,7 @@
     31415@@ -6147,9 +6308,7 @@
    2980031416     curwin->w_p_rl = cmdmsg_rl;
    2980131417     cmdmsg_rl = FALSE;
     
    2980831424 # ifdef FEAT_AUTOCMD
    2980931425     /* Do execute autocommands for setting the filetype (load syntax). */
    29810 @@ -6287,6 +6407,12 @@
     31426@@ -6287,6 +6446,12 @@
    2981131427            ccline.cmdbuff = vim_strsave((char_u *)"qa");
    2981231428            cmdwin_result = CAR;
     
    2982131437            ccline.cmdbuff = vim_strsave(ml_get_curline());
    2982231438        if (ccline.cmdbuff == NULL)
     31439@@ -6317,7 +6482,7 @@
     31440        /* win_close() may have already wiped the buffer when 'bh' is
     31441         * set to 'wipe' */
     31442        if (buf_valid(bp))
     31443-           close_buffer(NULL, bp, DOBUF_WIPE);
     31444+           close_buffer(NULL, bp, DOBUF_WIPE, FALSE);
     31445 
     31446        /* Restore window sizes. */
     31447        win_size_restore(&winsizes);
    2982331448diff -Naur vim73.orig/src/feature.h vim73/src/feature.h
    29824 --- vim73.orig/src/feature.h    2012-02-15 21:57:45.061436156 +0000
    29825 +++ vim73/src/feature.h 2012-02-15 21:57:46.553475509 +0000
     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
    2982631451@@ -506,15 +506,6 @@
    2982731452 #endif
     
    2987831503 #endif
    2987931504 #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
     31505@@ -1312,3 +1316,11 @@
     31506 #ifdef FEAT_NORMAL
     31507 # define FEAT_PERSISTENT_UNDO
     31508 #endif
     31509+
     31510+/*
     31511+ * +filterpipe
     31512+ */
     31513+#if (defined(UNIX) && !defined(USE_SYSTEM)) \
     31514+           || (defined(WIN3264) && defined(FEAT_GUI_W32))
     31515+# define FEAT_FILTERPIPE
     31516+#endif
    2988031517diff -Naur vim73.orig/src/fileio.c vim73/src/fileio.c
    29881 --- vim73.orig/src/fileio.c     2012-02-15 21:57:45.041435628 +0000
    29882 +++ vim73/src/fileio.c  2012-02-15 21:57:46.961486271 +0000
     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
    2988331520@@ -11,14 +11,6 @@
    2988431521  * fileio.c: read from and write to a file
     
    2999331630     /* When reloading a buffer put the cursor at the first line that is
    2999431631      * different. */
    29995 @@ -2658,13 +2648,17 @@
     31632@@ -2658,10 +2648,10 @@
    2999631633                                                            FALSE, NULL, eap);
    2999731634        if (msg_scrolled == n)
     
    3000631643 #endif
    3000731644 
    30008 +    /* Reset now, following writes should not omit the EOL.  Also, the line
    30009 +     * number will become invalid because of edits. */
    30010 +    curbuf->b_no_eol_lnum = 0;
    30011 +
    30012      if (recoverymode && error)
    30013         return FAIL;
    30014      return OK;
    30015 @@ -3202,6 +3196,9 @@
     31645@@ -3202,6 +3192,9 @@
    3001631646     int                    write_undo_file = FALSE;
    3001731647     context_sha256_T sha_ctx;
     
    3002331653     if (fname == NULL || *fname == NUL)        /* safety check */
    3002431654        return FAIL;
    30025 @@ -3345,8 +3342,22 @@
     31655@@ -3345,8 +3338,22 @@
    3002631656        }
    3002731657        else if (reset_changed && whole)
     
    3004831678 #ifdef FEAT_QUICKFIX
    3004931679                if (overwriting && bt_nofile(curbuf))
    30050 @@ -3799,13 +3810,7 @@
     31680@@ -3799,13 +3806,7 @@
    3005131681 
    3005231682        /* make sure we have a valid backup extension to use */
     
    3006231692            backup_ext = p_bex;
    3006331693 
    30064 @@ -4000,7 +4005,7 @@
     31694@@ -4000,7 +4001,7 @@
    3006531695 #ifdef HAS_BW_FLAGS
    3006631696                        write_info.bw_flags = FIO_NOCONVERT;
     
    3007131701                        {
    3007231702                            if (buf_write_bytes(&write_info) == FAIL)
    30073 @@ -4568,7 +4573,7 @@
     31703@@ -4568,7 +4569,7 @@
    3007431704        if (end == 0
    3007531705                || (lnum == end
     
    3008031710        {
    3008131711            ++lnum;                     /* written the line, count it */
    30082 @@ -4719,11 +4724,6 @@
     31712@@ -4719,11 +4720,6 @@
    3008331713 #endif
    3008431714     if (perm >= 0)             /* set perm. of new file same as old file */
     
    3009231722     /* Probably need to set the ACL before changing the user (can't set the
    3009331723      * ACL on a file the user doesn't own). */
    30094 @@ -4731,6 +4731,7 @@
     31724@@ -4731,6 +4727,7 @@
    3009531725        mch_set_acl(wfname, acl);
    3009631726 #endif
     
    3010031730        crypt_pop_state();
    3010131731 #endif
    30102 @@ -4813,7 +4814,7 @@
     31732@@ -4813,7 +4810,7 @@
    3010331733 #ifdef HAS_BW_FLAGS
    3010431734                        write_info.bw_flags = FIO_NOCONVERT;
     
    3010931739                            if (buf_write_bytes(&write_info) == FAIL)
    3011031740                                break;
    30111 @@ -4885,7 +4886,10 @@
     31741@@ -4885,7 +4882,10 @@
    3011231742 #ifdef FEAT_CRYPT
    3011331743        if (wb_flags & FIO_ENCRYPTED)
     
    3012131751        }
    3012231752 #endif
    30123 @@ -5094,8 +5098,6 @@
     31753@@ -5094,7 +5094,7 @@
    3012431754     {
    3012531755        aco_save_T      aco;
    3012631756 
    3012731757-       write_no_eol_lnum = 0;  /* in case it was set by the previous read */
    30128 -
     31758+       curbuf->b_no_eol_lnum = 0;  /* in case it was set by the previous read */
     31759 
    3012931760        /*
    3013031761         * Apply POST autocommands.
    30131          * Careful: The autocommands may call buf_write() recursively!
    30132 @@ -5330,7 +5332,7 @@
     31762@@ -5330,7 +5330,7 @@
    3013331763 
    3013431764 /*
     
    3013931769  * Return FAIL for failure, OK otherwise.
    3014031770  */
    30141 @@ -5702,16 +5704,8 @@
     31771@@ -5702,16 +5702,8 @@
    3014231772        crypt_encode(buf, len, buf);
    3014331773 #endif
     
    3015831788 
    3015931789 #ifdef FEAT_MBYTE
    30160 @@ -6024,15 +6018,19 @@
     31790@@ -6024,15 +6016,19 @@
    3016131791 shorten_fname1(full_path)
    3016231792     char_u     *full_path;
     
    3017931809 }
    3018031810 #endif
    30181 @@ -6259,19 +6257,17 @@
     31811@@ -6259,19 +6255,17 @@
    3018231812      */
    3018331813     for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
     
    3020331833        {
    3020431834            ++ptr;
    30205 @@ -6306,23 +6302,14 @@
     31835@@ -6306,23 +6300,14 @@
    3020631836        if (fname == NULL || *fname == NUL
    3020731837                                   || vim_ispathsep(fname[STRLEN(fname) - 1]))
     
    3022731857            if ((size_t)(s - ptr) > (size_t)8)
    3022831858            {
    30229 @@ -6334,13 +6321,8 @@
     31859@@ -6334,13 +6319,8 @@
    3023031860         * If the extension doesn't start with '.', and the file name
    3023131861         * doesn't have an extension yet, append a '.'
     
    3024131871         * If the extension doesn't start with '.', and there already is an
    3024231872         * extension, it may need to be truncated
    30243 @@ -6368,23 +6350,14 @@
     31873@@ -6368,23 +6348,14 @@
    3024431874     /*
    3024531875      * Prepend the dot.
     
    3026631896 #endif
    3026731897 
    30268 @@ -6552,6 +6525,21 @@
     31898@@ -6552,6 +6523,21 @@
    3026931899            use_tmp_file = TRUE;
    3027031900     }
     
    3028831918 #if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
    3028931919     if (use_tmp_file)
    30290 @@ -6662,8 +6650,8 @@
     31920@@ -6662,8 +6648,8 @@
    3029131921        return -1;
    3029231922     }
     
    3029931929            errmsg = _("E208: Error writing to \"%s\"");
    3030031930            break;
    30301 @@ -7024,7 +7012,7 @@
     31931@@ -7024,7 +7010,7 @@
    3030231932                    STRCAT(tbuf, mesg2);
    3030331933                }
     
    3030831938            }
    3030931939            else
    30310 @@ -7272,8 +7260,8 @@
     31940@@ -7272,8 +7258,8 @@
    3031131941 write_lnum_adjust(offset)
    3031231942     linenr_T   offset;
     
    3031931949 
    3032031950 #if defined(TEMPDIRNAMES) || defined(PROTO)
    30321 @@ -7475,7 +7463,10 @@
     31951@@ -7475,7 +7461,10 @@
    3032231952 
    3032331953     STRCPY(itmp, "");
     
    3033131961     buf4[2] = extra_char;   /* make it "VIa", "VIb", etc. */
    3033231962     if (GetTempFileName(szTempFile, buf4, 0, itmp) == 0)
    30333 @@ -7496,8 +7487,11 @@
     31963@@ -7496,8 +7485,11 @@
    3033431964 # else /* WIN3264 */
    3033531965 
     
    3034431974 #  else
    3034531975     char_u     *p;
    30346 @@ -7682,6 +7676,7 @@
     31976@@ -7682,6 +7674,7 @@
    3034731977     {"InsertChange",   EVENT_INSERTCHANGE},
    3034831978     {"InsertEnter",    EVENT_INSERTENTER},
     
    3035231982     {"QuickFixCmdPost",        EVENT_QUICKFIXCMDPOST},
    3035331983     {"QuickFixCmdPre", EVENT_QUICKFIXCMDPRE},
    30354 @@ -8744,6 +8739,8 @@
     31984@@ -8744,6 +8737,8 @@
    3035531985     int                retval;
    3035631986     aco_save_T aco;
     
    3036131991     /*
    3036231992      * This is a bit tricky: For some commands curwin->w_buffer needs to be
    30363 @@ -8760,11 +8757,15 @@
     31993@@ -8760,11 +8755,15 @@
    3036431994            aucmd_prepbuf(&aco, buf);
    3036531995 
     
    3038132011            /* restore the current window */
    3038232012            aucmd_restbuf(&aco);
    30383 @@ -8779,6 +8780,23 @@
     32013@@ -8779,6 +8778,23 @@
    3038432014 }
    3038532015 
     
    3040532035  * Search for a visible window containing the current buffer.  If there isn't
    3040632036  * one then use "aucmd_win".
    30407 @@ -8903,10 +8921,11 @@
     32037@@ -8903,10 +8919,11 @@
    3040832038                    if (tp != curtab)
    3040932039                        goto_tabpage_tp(tp);
     
    3041832048        /* Remove the window and frame from the tree of frames. */
    3041932049        (void)winframe_remove(curwin, &dummy, NULL);
    30420 @@ -9063,7 +9082,10 @@
     32050@@ -8965,6 +8982,10 @@
     32051                    && buf_valid(aco->new_curbuf)
     32052                    && aco->new_curbuf->b_ml.ml_mfp != NULL)
     32053            {
     32054+# if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
     32055+               if (curwin->w_s == &curbuf->b_s)
     32056+                   curwin->w_s = &aco->new_curbuf->b_s;
     32057+# endif
     32058                --curbuf->b_nwindows;
     32059                curbuf = aco->new_curbuf;
     32060                curwin->w_buffer = curbuf;
     32061@@ -9063,7 +9084,10 @@
    3042132062 {
    3042232063     int                state;
     
    3043032071            && !ins_compl_active()
    3043132072 #endif
    30432 @@ -9954,6 +9976,8 @@
     32073@@ -9094,6 +9118,15 @@
     32074     return (first_autopat[(int)EVENT_CURSORMOVEDI] != NULL);
     32075 }
     32076 
     32077+/*
     32078+ * Return TRUE when there is an InsertCharPre autocommand defined.
     32079+ */
     32080+    int
     32081+has_insertcharpre()
     32082+{
     32083+    return (first_autopat[(int)EVENT_INSERTCHARPRE] != NULL);
     32084+}
     32085+
     32086     static int
     32087 apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
     32088     event_T    event;
     32089@@ -9954,6 +9987,8 @@
    3043332090            if ((c == ';' || c == '>') && match == FALSE)
    3043432091            {
     
    3043932096                *pattern = c;       /* Restore the terminator */
    3044032097                type_start = pattern + 1;
    30441 @@ -10181,19 +10205,11 @@
     32098@@ -10181,19 +10216,11 @@
    3044232099                    ++p;
    3044332100                break;
     
    3045932116                break;
    3046032117            case '\\':
    30461 @@ -10304,3 +10320,55 @@
     32118@@ -10304,3 +10331,55 @@
    3046232119     }
    3046332120     return reg_pat;
     
    3051632173+#endif
    3051732174diff -Naur vim73.orig/src/fold.c vim73/src/fold.c
    30518 --- vim73.orig/src/fold.c       2012-02-15 21:57:45.057436051 +0000
    30519 +++ vim73/src/fold.c    2012-02-15 21:57:46.765481102 +0000
     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
    3052032177@@ -1033,10 +1033,10 @@
    3052132178  * Init the fold info in a new window.
     
    3056032217            mch_memmove(fp, nfp, (size_t)(sizeof(fold_T) * moved));
    3056132218            vim_free(nfp);
     32219@@ -3289,7 +3292,8 @@
     32220 /* put_folds() {{{2 */
     32221 #if defined(FEAT_SESSION) || defined(PROTO)
     32222 static int put_folds_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
     32223-static int put_foldopen_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
     32224+static int put_foldopen_recurse __ARGS((FILE *fd, win_T *wp, garray_T *gap, linenr_T off));
     32225+static int put_fold_open_close __ARGS((FILE *fd, fold_T *fp, linenr_T off));
     32226 
     32227 /*
     32228  * Write commands to "fd" to restore the manual folds in window "wp".
     32229@@ -3309,7 +3313,7 @@
     32230 
     32231     /* If some folds are manually opened/closed, need to restore that. */
     32232     if (wp->w_fold_manual)
     32233-       return put_foldopen_recurse(fd, &wp->w_folds, (linenr_T)0);
     32234+       return put_foldopen_recurse(fd, wp, &wp->w_folds, (linenr_T)0);
     32235 
     32236     return OK;
     32237 }
     32238@@ -3349,12 +3353,14 @@
     32239  * Returns FAIL when writing failed.
     32240  */
     32241     static int
     32242-put_foldopen_recurse(fd, gap, off)
     32243+put_foldopen_recurse(fd, wp, gap, off)
     32244     FILE       *fd;
     32245+    win_T      *wp;
     32246     garray_T   *gap;
     32247     linenr_T   off;
     32248 {
     32249     int                i;
     32250+    int                level;
     32251     fold_T     *fp;
     32252 
     32253     fp = (fold_T *)gap->ga_data;
     32254@@ -3364,27 +3370,60 @@
     32255        {
     32256            if (fp->fd_nested.ga_len > 0)
     32257            {
     32258-               /* open/close nested folds while this fold is open */
     32259+               /* open nested folds while this fold is open */
     32260                if (fprintf(fd, "%ld", fp->fd_top + off) < 0
     32261                        || put_eol(fd) == FAIL
     32262                        || put_line(fd, "normal zo") == FAIL)
     32263                    return FAIL;
     32264-               if (put_foldopen_recurse(fd, &fp->fd_nested, off + fp->fd_top)
     32265+               if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
     32266+                                                            off + fp->fd_top)
     32267                        == FAIL)
     32268                    return FAIL;
     32269+               /* close the parent when needed */
     32270+               if (fp->fd_flags == FD_CLOSED)
     32271+               {
     32272+                   if (put_fold_open_close(fd, fp, off) == FAIL)
     32273+                       return FAIL;
     32274+               }
     32275+           }
     32276+           else
     32277+           {
     32278+               /* Open or close the leaf according to the window foldlevel.
     32279+                * Do not close a leaf that is already closed, as it will close
     32280+                * the parent. */
     32281+               level = foldLevelWin(wp, off + fp->fd_top);
     32282+               if ((fp->fd_flags == FD_CLOSED && wp->w_p_fdl >= level)
     32283+                       || (fp->fd_flags != FD_CLOSED && wp->w_p_fdl < level))
     32284+               if (put_fold_open_close(fd, fp, off) == FAIL)
     32285+                   return FAIL;
     32286            }
     32287-           if (fprintf(fd, "%ld", fp->fd_top + off) < 0
     32288-                   || put_eol(fd) == FAIL
     32289-                   || fprintf(fd, "normal z%c",
     32290-                                   fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
     32291-                   || put_eol(fd) == FAIL)
     32292-               return FAIL;
     32293        }
     32294        ++fp;
     32295     }
     32296 
     32297     return OK;
     32298 }
     32299+
     32300+/* put_fold_open_close() {{{2 */
     32301+/*
     32302+ * Write the open or close command to "fd".
     32303+ * Returns FAIL when writing failed.
     32304+ */
     32305+    static int
     32306+put_fold_open_close(fd, fp, off)
     32307+    FILE       *fd;
     32308+    fold_T     *fp;
     32309+    linenr_T   off;
     32310+{
     32311+    if (fprintf(fd, "%ld", fp->fd_top + off) < 0
     32312+           || put_eol(fd) == FAIL
     32313+           || fprintf(fd, "normal z%c",
     32314+                          fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
     32315+           || put_eol(fd) == FAIL)
     32316+       return FAIL;
     32317+
     32318+    return OK;
     32319+}
     32320 #endif /* FEAT_SESSION */
     32321 
     32322 /* }}}1 */
    3056232323diff -Naur vim73.orig/src/getchar.c vim73/src/getchar.c
    30563 --- vim73.orig/src/getchar.c    2012-02-15 21:57:45.061436156 +0000
    30564 +++ vim73/src/getchar.c 2012-02-15 21:57:46.909484899 +0000
     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
    3056532326@@ -418,12 +418,12 @@
    3056632327 
     
    3066032421     static int
    3066132422 read_redo(init, old_redo)
     32423@@ -697,7 +723,7 @@
     32424     int                                c;
     32425 #ifdef FEAT_MBYTE
     32426     int                                n;
     32427-    char_u                     buf[MB_MAXBYTES];
     32428+    char_u                     buf[MB_MAXBYTES + 1];
     32429     int                                i;
     32430 #endif
     32431 
     32432@@ -1046,7 +1072,7 @@
     32433     int            c;
     32434 {
     32435 #ifdef FEAT_MBYTE
     32436-    char_u     buf[MB_MAXBYTES];
     32437+    char_u     buf[MB_MAXBYTES + 1];
     32438 #else
     32439     char_u     buf[4];
     32440 #endif
    3066232441@@ -1506,9 +1532,6 @@
    3066332442     }
     
    3067032449  * Get the next input character.
    3067132450  * Can return a special key or a multi-byte character.
     32451@@ -1524,7 +1547,7 @@
     32452     int                c, c2;
     32453 #ifdef FEAT_MBYTE
     32454     int                n;
     32455-    char_u     buf[MB_MAXBYTES];
     32456+    char_u     buf[MB_MAXBYTES + 1];
     32457     int                i;
     32458 #endif
     32459 
    3067232460@@ -2171,7 +2194,7 @@
    3067332461                                        if (!timedout)
     
    3103932827     if (p_verbose > 0)
    3104032828        last_set_msg(mp->m_script_ID);
    31041 @@ -4478,12 +4526,25 @@
     32829@@ -4287,11 +4335,7 @@
     32830     int                scol;           /* starting column of the abbr. */
     32831     int                j;
     32832     char_u     *s;
     32833-#ifdef FEAT_MBYTE
     32834     char_u     tb[MB_MAXBYTES + 4];
     32835-#else
     32836-    char_u     tb[4];
     32837-#endif
     32838     mapblock_T *mp;
     32839 #ifdef FEAT_LOCALMAP
     32840     mapblock_T *mp2;
     32841@@ -4304,8 +4348,9 @@
     32842 
     32843     if (typebuf.tb_no_abbr_cnt)        /* abbrev. are not recursive */
     32844        return FALSE;
     32845-    if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0)
     32846-       /* no remapping implies no abbreviation */
     32847+
     32848+    /* no remapping implies no abbreviation, except for CTRL-] */
     32849+    if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0 && c != Ctrl_RSB)
     32850        return FALSE;
     32851 
     32852     /*
     32853@@ -4478,12 +4523,25 @@
    3104232854 {
    3104332855     char_u     *res;
     
    3106532877     /* Forbid changing text or using ":normal" to avoid most of the bad side
    3106632878      * effects.  Also restore the cursor position. */
    31067 @@ -4493,16 +4554,23 @@
     32879@@ -4493,16 +4551,23 @@
    3106832880 #endif
    3106932881     set_vim_var_char(c);  /* set v:char to the typed character */
     
    3109032902     vim_free(p);
    3109132903 
    31092 @@ -4995,19 +5063,21 @@
     32904@@ -4995,19 +5060,21 @@
    3109332905     sourcing_name = save_name;
    3109432906 }
     
    3111732929     int                hash;
    3111832930     int                len, minlen;
    31119 @@ -5062,7 +5132,17 @@
     32931@@ -5062,7 +5129,17 @@
    3112032932                            minlen = mp->m_keylen - 3;
    3112132933                    }
     
    3113632948        }
    3113732949diff -Naur vim73.orig/src/globals.h vim73/src/globals.h
    31138 --- vim73.orig/src/globals.h    2012-02-15 21:57:45.061436156 +0000
    31139 +++ vim73/src/globals.h 2012-02-15 21:57:46.945485849 +0000
     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
    3114032952@@ -113,9 +113,9 @@
    3114132953  * When '$' is included in 'cpoptions' option set:
     
    3120733019 EXTERN short disallow_gui      INIT(= FALSE);
    3120833020diff -Naur vim73.orig/src/gui.c vim73/src/gui.c
    31209 --- vim73.orig/src/gui.c        2012-02-15 21:57:45.041435628 +0000
    31210 +++ vim73/src/gui.c     2012-02-15 21:57:46.561475721 +0000
     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
    3121133023@@ -37,6 +37,24 @@
    3121233024 static void gui_set_bg_color __ARGS((char_u *name));
     
    3123433046 
    3123533047 /*
    31236 @@ -59,42 +77,47 @@
     33048@@ -59,42 +77,53 @@
    3123733049 gui_start()
    3123833050 {
     
    3128433096+#endif
    3128533097+    {
     33098+#ifdef FEAT_GUI_GTK
     33099+       /* If there is 'f' in 'guioptions' and specify -g argument,
     33100+        * gui_mch_init_check() was not called yet.  */
     33101+       if (gui_mch_init_check() != OK)
     33102+           exit(1);
     33103+#endif
    3128633104+       gui_attempt_start();
    3128733105+    }
     
    3130433122 #ifdef FEAT_TITLE
    3130533123        set_title_defaults();           /* set 'title' and 'icon' again */
    31306 @@ -103,101 +126,217 @@
     33124@@ -103,101 +132,223 @@
    3130733125 
    3130833126     vim_free(old_term);
     
    3144333261+           status = gui_read_child_pipe(pipefd[0]);
    3144433262+           if (status == GUI_CHILD_FAILED)
    31445             {
    31446 -               /* The read returns when the child closes the pipe (or when
    31447 -                * the child dies for some reason). */
    31448 -               close(pipefd[1]);
    31449 -               ignored = (int)read(pipefd[0], &dummy, (size_t)1);
    31450 -               close(pipefd[0]);
     33263+           {
    3145133264+               /* The child failed to start the GUI, so the caller must
    3145233265+                * continue. There may be more error information written
     
    3145933272+               EMSG(_("E852: The child process failed to start the GUI"));
    3146033273+               return;
     33274+           }
     33275+           else if (status == GUI_CHILD_IO_ERROR)
     33276            {
     33277-               /* The read returns when the child closes the pipe (or when
     33278-                * the child dies for some reason). */
     33279-               close(pipefd[1]);
     33280-               ignored = (int)read(pipefd[0], &dummy, (size_t)1);
     33281-               close(pipefd[0]);
     33282+               pipe_error = TRUE;
    3146133283            }
    31462 +           else if (status == GUI_CHILD_IO_ERROR)
    31463 +           {
    31464 +               pipe_error = TRUE;
    31465 +           }
    3146633284+           /* else GUI_CHILD_OK: parent exit */
    3146733285+       }
     
    3149633314+    }
    3149733315+    /* Child */
     33316+
     33317+#ifdef FEAT_GUI_GTK
     33318+    /* Call gtk_init_check() here after fork(). See gui_init_check(). */
     33319+    if (gui_mch_init_check() != OK)
     33320+       exit(1);
     33321+#endif
    3149833322+
    3149933323+# if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
     
    3159033414  * Call this when vim starts up, whether or not the GUI is started
    3159133415  */
    31592 @@ -1392,7 +1531,7 @@
     33416@@ -291,7 +442,17 @@
     33417 #ifdef ALWAYS_USE_GUI
     33418     result = OK;
     33419 #else
     33420+# ifdef FEAT_GUI_GTK
     33421+    /*
     33422+     * Note: Don't call gtk_init_check() before fork, it will be called after
     33423+     * the fork. When calling it before fork, it make vim hang for a while.
     33424+     * See gui_do_fork().
     33425+     * Use a simpler check if the GUI window can probably be opened.
     33426+     */
     33427+    result = gui.dofork ? gui_mch_early_init_check() : gui_mch_init_check();
     33428+# else
     33429     result = gui_mch_init_check();
     33430+# endif
     33431 #endif
     33432     return result;
     33433 }
     33434@@ -1392,7 +1553,7 @@
    3159333435     if (!gui.shell_created)
    3159433436        return;
     
    3159933441      * number of characters that fit in the maximized window. */
    3160033442     if (!mustset && gui_mch_maximized())
    31601 @@ -2146,7 +2285,7 @@
     33443@@ -2146,7 +2307,7 @@
    3160233444 
    3160333445     if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
     
    3160833450 #else
    3160933451        gui_mch_set_fg_color(bg_color);
    31610 @@ -2155,7 +2294,7 @@
     33452@@ -2155,7 +2316,7 @@
    3161133453     }
    3161233454     else
     
    3161733459 #else
    3161833460        gui_mch_set_fg_color(fg_color);
    31619 @@ -2183,7 +2322,7 @@
     33461@@ -2183,7 +2344,7 @@
    3162033462     if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
    3162133463        return FAIL;
     
    3162633468      * For GTK2, we don't need a different font for italic style. */
    3162733469     if (hl_mask_todo & HL_ITALIC)
    31628 @@ -2352,7 +2491,7 @@
     33470@@ -2352,7 +2513,7 @@
    3162933471     if (draw_sign)
    3163033472        /* Draw the sign on top of the spaces. */
     
    3163533477     if (multi_sign)
    3163633478        netbeans_draw_multisign_indicator(gui.row);
    31637 @@ -2975,26 +3114,11 @@
     33479@@ -2975,26 +3136,11 @@
    3163833480            did_clip = TRUE;
    3163933481        }
     
    3166333505        /* Always allow pasting */
    3166433506        if (button != MOUSE_MIDDLE)
    31665 @@ -4893,7 +5017,7 @@
     33507@@ -4893,7 +5039,7 @@
    3166633508                if (STRLEN(p) > 2000)
    3166733509                    STRCPY(p + 2000 - 14, "...(truncated)");
     
    3167333515        ga_clear(&error_ga);
    3167433516diff -Naur vim73.orig/src/gui.h vim73/src/gui.h
    31675 --- vim73.orig/src/gui.h        2012-02-15 21:57:45.041435628 +0000
    31676 +++ vim73/src/gui.h     2012-02-15 21:57:46.177465593 +0000
     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
    3167733519@@ -52,10 +52,6 @@
    3167833520 # include <SegLoad.h>*/
     
    3173033572     PtWidget_t *vimTextArea;           /* PtRaw */
    3173133573diff -Naur vim73.orig/src/gui_athena.c vim73/src/gui_athena.c