Ignore:
Timestamp:
Dec 19, 2007, 9:35:11 PM (17 years ago)
Author:
Joe Ciccone <jciccone@…>
Branches:
clfs-1.2, clfs-2.1, clfs-3.0.0-systemd, clfs-3.0.0-sysvinit, master, systemd, sysvinit
Children:
a4357b0
Parents:
a2498b26
Message:

Updated Various branch update patches.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • patches/vim-7.1-branch_update-2.patch

    ra2498b26 ra60e4c5  
    11Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
    2 Date: 10-29-2007
     2Date: 12-21-2007
    33Initial Package Version: 7.1
    44Origin: Upstream
    55Upstream Status: Applied
    6 Description: Contains all upstream patches up to 7.1.145
     6Description: Contains all upstream patches up to 7.1.175
    77             The following patches were skipped
    8              003 007 041 065 070 072 080 088 091 092 124 126 128 129 134
     8             003 007 041 065 070 072 080 088 091 092 124 126 128 129 134 146 158 168
    99
    1010diff -Naur vim71.orig/runtime/doc/change.txt vim71/runtime/doc/change.txt
    11 --- vim71.orig/runtime/doc/change.txt   2007-05-12 03:18:46.000000000 -0700
    12 +++ vim71/runtime/doc/change.txt        2007-10-29 08:09:16.000000000 -0700
     11--- vim71.orig/runtime/doc/change.txt   2007-05-12 06:18:46.000000000 -0400
     12+++ vim71/runtime/doc/change.txt        2007-12-20 23:57:04.000000000 -0500
    1313@@ -1571,6 +1571,10 @@
    1414                        in their original order, right before the sorted
     
    2323 
    2424diff -Naur vim71.orig/runtime/doc/eval.txt vim71/runtime/doc/eval.txt
    25 --- vim71.orig/runtime/doc/eval.txt     2007-05-12 03:18:46.000000000 -0700
    26 +++ vim71/runtime/doc/eval.txt  2007-10-29 08:09:38.000000000 -0700
     25--- vim71.orig/runtime/doc/eval.txt     2007-05-12 06:18:46.000000000 -0400
     26+++ vim71/runtime/doc/eval.txt  2007-12-20 23:58:59.000000000 -0500
    2727@@ -1,4 +1,4 @@
    2828-*eval.txt*      For Vim version 7.1.  Last change: 2007 May 11
     
    251251                The accepted positions are:
    252252diff -Naur vim71.orig/runtime/doc/options.txt vim71/runtime/doc/options.txt
    253 --- vim71.orig/runtime/doc/options.txt  2007-05-12 03:18:47.000000000 -0700
    254 +++ vim71/runtime/doc/options.txt       2007-10-29 08:09:23.000000000 -0700
     253--- vim71.orig/runtime/doc/options.txt  2007-05-12 06:18:47.000000000 -0400
     254+++ vim71/runtime/doc/options.txt       2007-12-20 23:57:54.000000000 -0500
    255255@@ -1,4 +1,4 @@
    256256-*options.txt*  For Vim version 7.1.  Last change: 2007 May 11
     
    271271 'equalprg' 'ep'                string  (default "")
    272272diff -Naur vim71.orig/runtime/doc/pattern.txt vim71/runtime/doc/pattern.txt
    273 --- vim71.orig/runtime/doc/pattern.txt  2007-05-12 03:18:47.000000000 -0700
    274 +++ vim71/runtime/doc/pattern.txt       2007-10-29 08:09:16.000000000 -0700
     273--- vim71.orig/runtime/doc/pattern.txt  2007-05-12 06:18:47.000000000 -0400
     274+++ vim71/runtime/doc/pattern.txt       2007-12-20 23:57:20.000000000 -0500
    275275@@ -1212,7 +1212,10 @@
    276276                {group} must exist at the moment this command is executed.
     
    304304                column 72 and more: >
    305305diff -Naur vim71.orig/runtime/doc/pi_paren.txt vim71/runtime/doc/pi_paren.txt
    306 --- vim71.orig/runtime/doc/pi_paren.txt 2007-05-12 03:18:47.000000000 -0700
    307 +++ vim71/runtime/doc/pi_paren.txt      2007-10-29 08:09:30.000000000 -0700
     306--- vim71.orig/runtime/doc/pi_paren.txt 2007-05-12 06:18:47.000000000 -0400
     307+++ vim71/runtime/doc/pi_paren.txt      2007-12-20 23:58:11.000000000 -0500
    308308@@ -12,8 +12,8 @@
    309309 You can avoid loading this plugin by setting the "loaded_matchparen" variable: >
     
    318318 
    319319diff -Naur vim71.orig/runtime/doc/usr_41.txt vim71/runtime/doc/usr_41.txt
    320 --- vim71.orig/runtime/doc/usr_41.txt   2007-05-12 03:18:48.000000000 -0700
    321 +++ vim71/runtime/doc/usr_41.txt        2007-10-29 08:09:16.000000000 -0700
     320--- vim71.orig/runtime/doc/usr_41.txt   2007-05-12 06:18:48.000000000 -0400
     321+++ vim71/runtime/doc/usr_41.txt        2007-12-20 23:57:20.000000000 -0500
    322322@@ -763,13 +763,22 @@
    323323        foldtextresult()        get the text displayed for a closed fold
     
    344344        spellbadword()          locate badly spelled word at or after cursor
    345345diff -Naur vim71.orig/runtime/doc/windows.txt vim71/runtime/doc/windows.txt
    346 --- vim71.orig/runtime/doc/windows.txt  2007-05-12 03:18:49.000000000 -0700
    347 +++ vim71/runtime/doc/windows.txt       2007-10-29 08:09:23.000000000 -0700
     346--- vim71.orig/runtime/doc/windows.txt  2007-05-12 06:18:49.000000000 -0400
     347+++ vim71/runtime/doc/windows.txt       2007-12-20 23:57:54.000000000 -0500
    348348@@ -132,7 +132,8 @@
    349349                the same file.  Make new window N high (default is to use half
     
    374374 
    375375diff -Naur vim71.orig/runtime/filetype.vim vim71/runtime/filetype.vim
    376 --- vim71.orig/runtime/filetype.vim     2007-05-10 08:14:37.000000000 -0700
    377 +++ vim71/runtime/filetype.vim  2007-10-29 08:09:11.000000000 -0700
     376--- vim71.orig/runtime/filetype.vim     2007-05-10 11:14:37.000000000 -0400
     377+++ vim71/runtime/filetype.vim  2007-12-20 23:56:32.000000000 -0500
    378378@@ -1,7 +1,7 @@
    379379 " Vim support file to detect file types
     
    394394 " Privoxy actions file
    395395 au BufNewFile,BufRead *.action                 setf privoxy
     396diff -Naur vim71.orig/runtime/menu.vim vim71/runtime/menu.vim
     397--- vim71.orig/runtime/menu.vim 2007-01-09 08:31:40.000000000 -0500
     398+++ vim71/runtime/menu.vim      2007-12-20 23:59:53.000000000 -0500
     399@@ -2,7 +2,7 @@
     400 " You can also use this as a start for your own set of menus.
     401 "
     402 " Maintainer:  Bram Moolenaar <Bram@vim.org>
     403-" Last Change: 2007 Jan 09
     404+" Last Change: 2007 Nov 19
     405 
     406 " Note that ":an" (short for ":anoremenu") is often used to make a menu work
     407 " in all modes and avoid side effects from mappings defined by the user.
     408@@ -658,7 +658,6 @@
     409   let buf = 1
     410   while buf <= bufnr('$')
     411     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
     412-                                           \ && !getbufvar(buf, "&bufsecret")
     413       let s:bmenu_count = s:bmenu_count + 1
     414     endif
     415     let buf = buf + 1
     416@@ -671,7 +670,6 @@
     417   let buf = 1
     418   while buf <= bufnr('$')
     419     if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
     420-                                           \ && !getbufvar(buf, "&bufsecret")
     421       call <SID>BMFilename(bufname(buf), buf)
     422     endif
     423     let buf = buf + 1
    396424diff -Naur vim71.orig/runtime/plugin/matchparen.vim vim71/runtime/plugin/matchparen.vim
    397 --- vim71.orig/runtime/plugin/matchparen.vim    2006-10-12 13:05:05.000000000 -0700
    398 +++ vim71/runtime/plugin/matchparen.vim 2007-10-29 08:09:30.000000000 -0700
     425--- vim71.orig/runtime/plugin/matchparen.vim    2006-10-12 16:05:05.000000000 -0400
     426+++ vim71/runtime/plugin/matchparen.vim 2007-12-20 23:58:11.000000000 -0500
    399427@@ -1,6 +1,6 @@
    400428 " Vim plugin for showing matching parens
     
    477505 let &cpo = cpo_save
    478506diff -Naur vim71.orig/src/auto/configure vim71/src/auto/configure
    479 --- vim71.orig/src/auto/configure       2007-05-12 04:49:09.000000000 -0700
    480 +++ vim71/src/auto/configure    2007-10-29 08:09:16.000000000 -0700
     507--- vim71.orig/src/auto/configure       2007-05-12 07:49:09.000000000 -0400
     508+++ vim71/src/auto/configure    2007-12-20 23:59:34.000000000 -0500
    481509@@ -3843,7 +3843,9 @@
    482510   fi
     
    490518     else
    491519       MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
     520@@ -10263,8 +10265,9 @@
     521 
     522 
     523 
     524+
     525 for ac_header in stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \
     526-       termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h termio.h \
     527+       termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h sys/types.h termio.h \
     528        iconv.h langinfo.h unistd.h stropts.h errno.h \
     529        sys/resource.h sys/systeminfo.h locale.h \
     530        sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \
    492531diff -Naur vim71.orig/src/buffer.c vim71/src/buffer.c
    493 --- vim71.orig/src/buffer.c     2007-05-10 08:25:59.000000000 -0700
    494 +++ vim71/src/buffer.c  2007-10-29 08:09:50.000000000 -0700
     532--- vim71.orig/src/buffer.c     2007-05-10 11:25:59.000000000 -0400
     533+++ vim71/src/buffer.c  2007-12-20 23:59:17.000000000 -0500
    495534@@ -171,6 +171,13 @@
    496535            /* Put the cursor on the first line. */
     
    602641 }
    603642diff -Naur vim71.orig/src/charset.c vim71/src/charset.c
    604 --- vim71.orig/src/charset.c    2007-03-24 13:10:37.000000000 -0700
    605 +++ vim71/src/charset.c 2007-10-29 08:09:30.000000000 -0700
     643--- vim71.orig/src/charset.c    2007-03-24 16:10:37.000000000 -0400
     644+++ vim71/src/charset.c 2007-12-20 23:58:12.000000000 -0500
    606645@@ -207,7 +207,10 @@
    607646            }
     
    650689 /*
    651690diff -Naur vim71.orig/src/configure.in vim71/src/configure.in
    652 --- vim71.orig/src/configure.in 2007-05-12 02:19:27.000000000 -0700
    653 +++ vim71/src/configure.in      2007-10-29 08:09:16.000000000 -0700
     691--- vim71.orig/src/configure.in 2007-05-12 05:19:27.000000000 -0400
     692+++ vim71/src/configure.in      2007-12-20 23:59:34.000000000 -0500
    654693@@ -423,7 +423,9 @@
    655694   fi
     
    663702     else
    664703       MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
     704@@ -2024,7 +2026,7 @@
     705 fi
     706 
     707 AC_CHECK_HEADERS(stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \
     708-       termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h termio.h \
     709+       termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h sys/types.h termio.h \
     710        iconv.h langinfo.h unistd.h stropts.h errno.h \
     711        sys/resource.h sys/systeminfo.h locale.h \
     712        sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \
    665713diff -Naur vim71.orig/src/diff.c vim71/src/diff.c
    666 --- vim71.orig/src/diff.c       2007-02-15 16:18:41.000000000 -0800
    667 +++ vim71/src/diff.c    2007-10-29 08:09:51.000000000 -0700
     714--- vim71.orig/src/diff.c       2007-02-15 19:18:41.000000000 -0500
     715+++ vim71/src/diff.c    2007-12-20 23:59:28.000000000 -0500
    668716@@ -791,6 +791,9 @@
    669717     }
     
    714762                                                       - dp->df_lnum[i] + off;
    715763diff -Naur vim71.orig/src/digraph.c vim71/src/digraph.c
    716 --- vim71.orig/src/digraph.c    2006-05-02 11:24:04.000000000 -0700
    717 +++ vim71/src/digraph.c 2007-10-29 08:09:37.000000000 -0700
     764--- vim71.orig/src/digraph.c    2006-05-02 14:24:04.000000000 -0400
     765+++ vim71/src/digraph.c 2007-12-20 23:58:39.000000000 -0500
    718766@@ -2028,7 +2028,7 @@
    719767 
     
    755803 #endif
    756804diff -Naur vim71.orig/src/edit.c vim71/src/edit.c
    757 --- vim71.orig/src/edit.c       2007-05-07 12:43:55.000000000 -0700
    758 +++ vim71/src/edit.c    2007-10-29 08:09:51.000000000 -0700
     805--- vim71.orig/src/edit.c       2007-05-07 15:43:55.000000000 -0400
     806+++ vim71/src/edit.c    2007-12-21 00:00:07.000000000 -0500
    759807@@ -129,6 +129,7 @@
    760808 
     
    855903 
    856904-    if (p_ic && curbuf->b_p_inf && len < IOSIZE)
    857 +    if (p_ic && curbuf->b_p_inf)
     905+    if (p_ic && curbuf->b_p_inf && len > 0)
    858906     {
    859907-       /* Infer case of completed part -- webb */
     
    897945+#ifdef FEAT_MBYTE
    898946+       if (has_mbyte)
    899         {
    900 -           for (idx = 0; idx < compl_length; ++idx)
     947+       {
    901948+           p = compl_orig_text;
    902949+           actual_compl_length = 0;
    903950+           while (*p != NUL)
    904             {
    905 -               if (was_letter && isupper(compl_orig_text[idx])
    906 -                                                     && islower(IObuff[idx]))
     951+           {
    907952+               mb_ptr_adv(p);
    908953+               ++actual_compl_length;
     
    916961+       wca = (int *)alloc(actual_len * sizeof(int));
    917962+       if (wca != NULL)
    918 +       {
     963        {
     964-           for (idx = 0; idx < compl_length; ++idx)
    919965+           p = str;
    920966+           for (i = 0; i < actual_len; ++i)
     
    929975+           p = compl_orig_text;
    930976+           for (i = 0; i < actual_compl_length; ++i)
    931 +           {
     977            {
     978-               if (was_letter && isupper(compl_orig_text[idx])
     979-                                                     && islower(IObuff[idx]))
    932980+#ifdef FEAT_MBYTE
    933981+               if (has_mbyte)
     
    9991047+           }
    10001048+
    1001 +           /* 
     1049+           /*
    10021050+            * Generate encoding specific output from wide character array.
    10031051+            * Multi-byte characters can occupy up to five bytes more than
     
    10101058+#ifdef FEAT_MBYTE
    10111059+               if (has_mbyte)
    1012 +                   p += mb_char2bytes(wca[i++], p);
     1060+                   p += (*mb_char2bytes)(wca[i++], p);
    10131061+               else
    10141062+#endif
     
    10681116 
    10691117     /* Deleted more than what was used to find matches or didn't finish
     1118@@ -3250,8 +3385,8 @@
     1119     if (c != Ctrl_R && vim_is_ctrl_x_key(c))
     1120        edit_submode_extra = NULL;
     1121 
     1122-    /* Ignore end of Select mode mapping */
     1123-    if (c == K_SELECT)
     1124+    /* Ignore end of Select mode mapping and mouse scroll buttons. */
     1125+    if (c == K_SELECT || c == K_MOUSEDOWN || c == K_MOUSEUP)
     1126        return retval;
     1127 
     1128     /* Set "compl_get_longest" when finding the first matches. */
    10701129@@ -4495,14 +4630,13 @@
    10711130        curs_col = curwin->w_cursor.col;
     
    11001159        if (!(State & CMDLINE)
    11011160 # ifdef FEAT_MBYTE
    1102 @@ -7215,6 +7346,8 @@
     1161@@ -6313,8 +6444,10 @@
     1162 {
     1163     vim_free(last_insert);
     1164     last_insert = NULL;
     1165+# ifdef FEAT_INS_EXPAND
     1166     vim_free(compl_orig_text);
     1167     compl_orig_text = NULL;
     1168+# endif
     1169 }
     1170 #endif
     1171 
     1172@@ -7215,6 +7348,8 @@
    11031173                p = ml_get_curline();
    11041174                if (cin_iscase(p) || cin_isscopedecl(p) || cin_islabel(30))
     
    11091179                        && p[curwin->w_cursor.col - 1] == ':'
    11101180                        && p[curwin->w_cursor.col - 2] == ':')
    1111 @@ -7477,7 +7610,7 @@
     1181@@ -7477,7 +7612,7 @@
    11121182      * deleted when ESC is hit.
    11131183      */
     
    11181188     LANGMAP_ADJUST(regname, TRUE);
    11191189 #endif
    1120 @@ -7488,7 +7621,7 @@
     1190@@ -7488,7 +7623,7 @@
    11211191 #ifdef FEAT_CMDL_INFO
    11221192        add_to_showcmd_c(literally);
     
    11271197        LANGMAP_ADJUST(regname, TRUE);
    11281198 #endif
    1129 @@ -7579,7 +7712,7 @@
     1199@@ -7579,7 +7714,7 @@
    11301200      * deleted when ESC is hit.
    11311201      */
     
    11361206     switch (c)
    11371207     {
    1138 @@ -7998,7 +8131,8 @@
     1208@@ -7998,7 +8133,8 @@
    11391209     /*
    11401210      * 0^D and ^^D: remove all indent.
     
    11461216        --curwin->w_cursor.col;
    11471217        (void)del_char(FALSE);          /* delete the '^' or '0' */
    1148 @@ -9257,7 +9391,7 @@
     1218@@ -8053,6 +8189,29 @@
     1219     AppendCharToRedobuff(K_DEL);
     1220 }
     1221 
     1222+static void ins_bs_one __ARGS((colnr_T *vcolp));
     1223+
     1224+/*
     1225+ * Delete one character for ins_bs().
     1226+ */
     1227+    static void
     1228+ins_bs_one(vcolp)
     1229+    colnr_T    *vcolp;
     1230+{
     1231+    dec_cursor();
     1232+    getvcol(curwin, &curwin->w_cursor, vcolp, NULL, NULL);
     1233+    if (State & REPLACE_FLAG)
     1234+    {
     1235+       /* Don't delete characters before the insert point when in
     1236+        * Replace mode */
     1237+       if (curwin->w_cursor.lnum != Insstart.lnum
     1238+               || curwin->w_cursor.col >= Insstart.col)
     1239+           replace_do_bs();
     1240+    }
     1241+    else
     1242+       (void)del_char(FALSE);
     1243+}
     1244+
     1245 /*
     1246  * Handle Backspace, delete-word and delete-line in Insert mode.
     1247  * Return TRUE when backspace was actually used.
     1248@@ -8282,9 +8441,7 @@
     1249            int         ts;
     1250            colnr_T     vcol;
     1251            colnr_T     want_vcol;
     1252-#if 0
     1253-           int         extra = 0;
     1254-#endif
     1255+           colnr_T     start_vcol;
     1256 
     1257            *inserted_space_p = FALSE;
     1258            if (p_sta && in_indent)
     1259@@ -8295,6 +8452,7 @@
     1260             * 'showbreak' may get in the way, need to get the last column of
     1261             * the previous character. */
     1262            getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL);
     1263+           start_vcol = vcol;
     1264            dec_cursor();
     1265            getvcol(curwin, &curwin->w_cursor, NULL, NULL, &want_vcol);
     1266            inc_cursor();
     1267@@ -8303,30 +8461,7 @@
     1268            /* delete characters until we are at or before want_vcol */
     1269            while (vcol > want_vcol
     1270                    && (cc = *(ml_get_cursor() - 1), vim_iswhite(cc)))
     1271-           {
     1272-               dec_cursor();
     1273-               getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL);
     1274-               if (State & REPLACE_FLAG)
     1275-               {
     1276-                   /* Don't delete characters before the insert point when in
     1277-                    * Replace mode */
     1278-                   if (curwin->w_cursor.lnum != Insstart.lnum
     1279-                           || curwin->w_cursor.col >= Insstart.col)
     1280-                   {
     1281-#if 0  /* what was this for?  It causes problems when sw != ts. */
     1282-                       if (State == REPLACE && (int)vcol < want_vcol)
     1283-                       {
     1284-                           (void)del_char(FALSE);
     1285-                           extra = 2;  /* don't pop too much */
     1286-                       }
     1287-                       else
     1288-#endif
     1289-                           replace_do_bs();
     1290-                   }
     1291-               }
     1292-               else
     1293-                   (void)del_char(FALSE);
     1294-           }
     1295+               ins_bs_one(&vcol);
     1296 
     1297            /* insert extra spaces until we are at want_vcol */
     1298            while (vcol < want_vcol)
     1299@@ -8343,22 +8478,16 @@
     1300 #endif
     1301                {
     1302                    ins_str((char_u *)" ");
     1303-                   if ((State & REPLACE_FLAG) /* && extra <= 1 */)
     1304-                   {
     1305-#if 0
     1306-                       if (extra)
     1307-                           replace_push_off(NUL);
     1308-                       else
     1309-#endif
     1310-                           replace_push(NUL);
     1311-                   }
     1312-#if 0
     1313-                   if (extra == 2)
     1314-                       extra = 1;
     1315-#endif
     1316+                   if ((State & REPLACE_FLAG))
     1317+                       replace_push(NUL);
     1318                }
     1319                getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL);
     1320            }
     1321+
     1322+           /* If we are now back where we started delete one character.  Can
     1323+            * happen when using 'sts' and 'linebreak'. */
     1324+           if (vcol >= start_vcol)
     1325+               ins_bs_one(&vcol);
     1326        }
     1327 
     1328        /*
     1329@@ -8518,15 +8647,16 @@
     1330     int                up;
     1331 {
     1332     pos_T      tpos;
     1333-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
     1334-    win_T      *old_curwin;
     1335+# if defined(FEAT_WINDOWS)
     1336+    win_T      *old_curwin = curwin;
     1337+# endif
     1338+# ifdef FEAT_INS_EXPAND
     1339+    int                did_scroll = FALSE;
     1340 # endif
     1341 
     1342     tpos = curwin->w_cursor;
     1343 
     1344 # if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
     1345-    old_curwin = curwin;
     1346-
     1347     /* Currently the mouse coordinates are only known in the GUI. */
     1348     if (gui.in_use && mouse_row >= 0 && mouse_col >= 0)
     1349     {
     1350@@ -8543,10 +8673,23 @@
     1351 # endif
     1352        undisplay_dollar();
     1353 
     1354-    if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
     1355-       scroll_redraw(up, (long)(curwin->w_botline - curwin->w_topline));
     1356-    else
     1357-       scroll_redraw(up, 3L);
     1358+# ifdef FEAT_INS_EXPAND
     1359+    /* Don't scroll the window in which completion is being done. */
     1360+    if (!pum_visible()
     1361+#  if defined(FEAT_WINDOWS)
     1362+           || curwin != old_curwin
     1363+#  endif
     1364+           )
     1365+# endif
     1366+    {
     1367+       if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
     1368+           scroll_redraw(up, (long)(curwin->w_botline - curwin->w_topline));
     1369+       else
     1370+           scroll_redraw(up, 3L);
     1371+# ifdef FEAT_INS_EXPAND
     1372+       did_scroll = TRUE;
     1373+# endif
     1374+    }
     1375 
     1376 # if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
     1377     curwin->w_redr_status = TRUE;
     1378@@ -8555,6 +8698,17 @@
     1379     curbuf = curwin->w_buffer;
     1380 # endif
     1381 
     1382+# ifdef FEAT_INS_EXPAND
     1383+    /* The popup menu may overlay the window, need to redraw it.
     1384+     * TODO: Would be more efficient to only redraw the windows that are
     1385+     * overlapped by the popup menu. */
     1386+    if (pum_visible() && did_scroll)
     1387+    {
     1388+       redraw_all_later(NOT_VALID);
     1389+       ins_compl_show_pum();
     1390+    }
     1391+# endif
     1392+
     1393     if (!equalpos(curwin->w_cursor, tpos))
     1394     {
     1395        start_arrow(&tpos);
     1396@@ -9257,7 +9411,7 @@
    11491397      * mode message to be deleted when ESC is hit */
    11501398     ++no_mapping;
     
    11551403     --allow_keys;
    11561404     if (IS_SPECIAL(c) || mod_mask)         /* special key */
    1157 @@ -9289,7 +9423,7 @@
     1405@@ -9289,7 +9443,7 @@
    11581406        }
    11591407        ++no_mapping;
     
    11651413        if (cc != ESC)
    11661414diff -Naur vim71.orig/src/eval.c vim71/src/eval.c
    1167 --- vim71.orig/src/eval.c       2007-05-07 12:47:32.000000000 -0700
    1168 +++ vim71/src/eval.c    2007-10-29 08:09:48.000000000 -0700
     1415--- vim71.orig/src/eval.c       2007-05-07 15:47:32.000000000 -0400
     1416+++ vim71/src/eval.c    2007-12-21 00:00:00.000000000 -0500
    11691417@@ -369,17 +369,17 @@
    11701418 static int ex_let_vars __ARGS((char_u *arg, typval_T *tv, int copy, int semicolon, int var_count, char_u *nextchars));
     
    16751923  */
    16761924     static void
     1925@@ -8682,7 +8729,7 @@
     1926     static int         fnum = 0;
     1927     static int         change_start = 0;
     1928     static int         change_end = 0;
     1929-    static hlf_T       hlID = 0;
     1930+    static hlf_T       hlID = (hlf_T)0;
     1931     int                        filler_lines;
     1932     int                        col;
     1933 
    16771934@@ -9339,15 +9386,16 @@
    16781935 {
     
    20462303 }
    20472304 
     2305@@ -15599,7 +15826,7 @@
     2306     FILE       *fd;
     2307 
     2308     if (check_restricted() || check_secure())
     2309-       return;
     2310+       goto done;
     2311 
     2312     if (argvars[1].v_type != VAR_UNKNOWN)
     2313     {
     2314@@ -15610,7 +15837,7 @@
     2315        if ((infile = vim_tempname('i')) == NULL)
     2316        {
     2317            EMSG(_(e_notmp));
     2318-           return;
     2319+           goto done;
     2320        }
     2321 
     2322        fd = mch_fopen((char *)infile, WRITEBIN);
    20482323@@ -16497,9 +16724,9 @@
    20492324  * Returns NULL when there is an error.
     
    22582533     /* ":8" - shortname  */
    22592534diff -Naur vim71.orig/src/ex_cmds.c vim71/src/ex_cmds.c
    2260 --- vim71.orig/src/ex_cmds.c    2007-05-07 12:41:01.000000000 -0700
    2261 +++ vim71/src/ex_cmds.c 2007-10-29 08:09:37.000000000 -0700
     2535--- vim71.orig/src/ex_cmds.c    2007-05-07 15:41:01.000000000 -0400
     2536+++ vim71/src/ex_cmds.c 2007-12-21 00:00:05.000000000 -0500
    22622537@@ -408,7 +408,11 @@
    22632538                goto sortend;
     
    22732548                goto sortend;
    22742549            p = s;              /* continue after the regexp */
    2275 @@ -2912,22 +2916,35 @@
     2550@@ -1646,7 +1650,7 @@
     2551 {
     2552     vim_snprintf((char *)IObuff, IOSIZE, _("%sviminfo: %s in line: "),
     2553                                                             errnum, message);
     2554-    STRNCAT(IObuff, line, IOSIZE - STRLEN(IObuff));
     2555+    STRNCAT(IObuff, line, IOSIZE - STRLEN(IObuff) - 1);
     2556     if (IObuff[STRLEN(IObuff) - 1] == '\n')
     2557        IObuff[STRLEN(IObuff) - 1] = NUL;
     2558     emsg(IObuff);
     2559@@ -1770,7 +1774,8 @@
     2560         * overwrite a user's viminfo file after a "su root", with a
     2561         * viminfo file that the user can't read.
     2562         */
     2563-       st_old.st_dev = st_old.st_ino = 0;
     2564+       st_old.st_dev = 0;
     2565+       st_old.st_ino = 0;
     2566        st_old.st_mode = 0600;
     2567        if (mch_stat((char *)fname, &st_old) == 0
     2568                && getuid() != ROOT_UID
     2569@@ -2727,6 +2732,9 @@
     2570                    && vim_strchr(p_cpo, CPO_OVERNEW) == NULL)
     2571                || (buf->b_flags & BF_READERR))
     2572            && !p_wa
     2573+#ifdef FEAT_QUICKFIX
     2574+           && !bt_nofile(buf)
     2575+#endif
     2576            && vim_fexists(ffname))
     2577     {
     2578        if (!eap->forceit && !eap->append)
     2579@@ -2912,22 +2920,35 @@
    22762580 }
    22772581 
     
    23132617 
    23142618            if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) == VIM_YES)
    2315 @@ -2941,9 +2958,14 @@
     2619@@ -2941,9 +2962,14 @@
    23162620        }
    23172621        else
     
    23282632 }
    23292633 
    2330 @@ -2952,7 +2974,7 @@
     2634@@ -2952,7 +2978,7 @@
    23312635  * 'fnum' is the number of the file, if zero use ffname/sfname.
    23322636  *
     
    23372641  */
    23382642     int
    2339 @@ -3367,7 +3389,7 @@
     2643@@ -3367,7 +3393,7 @@
    23402644                 * was in this window (or another window).  If not used
    23412645                 * before, reset the local window options to the global
     
    23462650                did_get_winopts = TRUE;
    23472651 #endif
    2348 @@ -3562,9 +3584,20 @@
     2652@@ -3562,9 +3588,20 @@
    23492653        curwin_init();
    23502654 
     
    23692673 
    23702674        /* Change directories when the 'acd' option is set. */
    2371 @@ -3649,8 +3682,8 @@
     2675@@ -3649,8 +3686,8 @@
    23722676 #ifdef FEAT_SPELL
    23732677     /* If the window options were changed may need to set the spell language.
     
    23802684 
    23812685     if (command == NULL)
    2382 @@ -3754,7 +3787,7 @@
     2686@@ -3754,7 +3791,7 @@
    23832687            workshop_file_opened((char *)curbuf->b_ffname, curbuf->b_p_ro);
    23842688 # endif
     
    23892693 # endif
    23902694     }
    2391 @@ -4294,6 +4327,7 @@
     2695@@ -4294,6 +4331,7 @@
    23922696        do_error = TRUE;
    23932697        do_print = FALSE;
     
    23972701     }
    23982702     while (*cmd)
    2399 @@ -4464,7 +4498,7 @@
     2703@@ -4464,7 +4502,7 @@
    24002704             *
    24012705             * The new text is built up in new_start[].  It has some extra
     
    24062710             * Make a copy of the old line, so it won't be taken away when
    24072711             * updating the screen or handling a multi-line match.  The "old_"
    2408 @@ -4635,7 +4669,7 @@
     2712@@ -4635,7 +4673,7 @@
    24092713 #endif
    24102714                            ++no_mapping;       /* don't map this key */
     
    24152719                            --no_mapping;
    24162720 
    2417 @@ -6351,9 +6385,9 @@
     2721@@ -4850,7 +4888,8 @@
     2722                            ++line2;
     2723                            /* move the cursor to the new line, like Vi */
     2724                            ++curwin->w_cursor.lnum;
     2725-                           STRCPY(new_start, p1 + 1);  /* copy the rest */
     2726+                           /* copy the rest */
     2727+                           mch_memmove(new_start, p1 + 1, STRLEN(p1 + 1) + 1);
     2728                            p1 = new_start - 1;
     2729                        }
     2730                    }
     2731@@ -6351,9 +6390,9 @@
    24182732        for (i = 0; i < ga.ga_len; ++i)
    24192733        {
     
    24282742                fprintf(fd_tags, "%s\t/*", s);
    24292743diff -Naur vim71.orig/src/ex_docmd.c vim71/src/ex_docmd.c
    2430 --- vim71.orig/src/ex_docmd.c   2007-05-07 12:49:38.000000000 -0700
    2431 +++ vim71/src/ex_docmd.c        2007-10-29 08:09:51.000000000 -0700
     2744--- vim71.orig/src/ex_docmd.c   2007-05-07 15:49:38.000000000 -0400
     2745+++ vim71/src/ex_docmd.c        2007-12-21 00:00:05.000000000 -0500
    24322746@@ -133,6 +133,7 @@
    24332747 static void    get_flags __ARGS((exarg_T *eap));
     
    24382752 #endif
    24392753 static char_u  *invalid_range __ARGS((exarg_T *eap));
    2440 @@ -2118,7 +2119,11 @@
     2754@@ -666,7 +667,7 @@
     2755                if (ex_pressedreturn)
     2756                {
     2757                    /* go up one line, to overwrite the ":<CR>" line, so the
     2758-                    * output doensn't contain empty lines. */
     2759+                    * output doesn't contain empty lines. */
     2760                    msg_row = prev_msg_row;
     2761                    if (prev_msg_row == Rows - 1)
     2762                        msg_row--;
     2763@@ -1741,7 +1742,9 @@
     2764        }
     2765 
     2766        /* ignore comment and empty lines */
     2767-       if (*ea.cmd == '"' || *ea.cmd == NUL)
     2768+       if (*ea.cmd == '"')
     2769+           goto doend;
     2770+       if (*ea.cmd == NUL)
     2771        {
     2772            ex_pressedreturn = TRUE;
     2773            goto doend;
     2774@@ -2118,7 +2121,11 @@
    24412775 #ifdef FEAT_USR_CMDS
    24422776            !USER_CMDIDX(ea.cmdidx) &&
     
    24512785 #ifndef FEAT_EVAL
    24522786     /*
    2453 @@ -3276,39 +3281,65 @@
     2787@@ -2654,7 +2661,7 @@
     2788                errormsg = IObuff;
     2789            }
     2790            STRCAT(errormsg, ": ");
     2791-           STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff));
     2792+           STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff) - 1);
     2793        }
     2794        emsg(errormsg);
     2795     }
     2796@@ -2756,7 +2763,7 @@
     2797 
     2798     /*
     2799      * Isolate the command and search for it in the command table.
     2800-     * Exeptions:
     2801+     * Exceptions:
     2802      * - the 'k' command can directly be followed by any character.
     2803      * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
     2804      *     but :sre[wind] is another command, as are :scrip[tnames],
     2805@@ -2957,6 +2964,57 @@
     2806 #endif
     2807 
     2808 #if defined(FEAT_EVAL) || defined(PROTO)
     2809+static struct cmdmod
     2810+{
     2811+    char       *name;
     2812+    int                minlen;
     2813+    int                has_count;  /* :123verbose  :3tab */
     2814+} cmdmods[] = {
     2815+    {"aboveleft", 3, FALSE},
     2816+    {"belowright", 3, FALSE},
     2817+    {"botright", 2, FALSE},
     2818+    {"browse", 3, FALSE},
     2819+    {"confirm", 4, FALSE},
     2820+    {"hide", 3, FALSE},
     2821+    {"keepalt", 5, FALSE},
     2822+    {"keepjumps", 5, FALSE},
     2823+    {"keepmarks", 3, FALSE},
     2824+    {"leftabove", 5, FALSE},
     2825+    {"lockmarks", 3, FALSE},
     2826+    {"rightbelow", 6, FALSE},
     2827+    {"sandbox", 3, FALSE},
     2828+    {"silent", 3, FALSE},
     2829+    {"tab", 3, TRUE},
     2830+    {"topleft", 2, FALSE},
     2831+    {"verbose", 4, TRUE},
     2832+    {"vertical", 4, FALSE},
     2833+};
     2834+
     2835+/*
     2836+ * Return length of a command modifier (including optional count).
     2837+ * Return zero when it's not a modifier.
     2838+ */
     2839+    int
     2840+modifier_len(cmd)
     2841+    char_u     *cmd;
     2842+{
     2843+    int                i, j;
     2844+    char_u     *p = cmd;
     2845+
     2846+    if (VIM_ISDIGIT(*cmd))
     2847+       p = skipwhite(skipdigits(cmd));
     2848+    for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i)
     2849+    {
     2850+       for (j = 0; p[j] != NUL; ++j)
     2851+           if (p[j] != cmdmods[i].name[j])
     2852+               break;
     2853+       if (!isalpha(p[j]) && j >= cmdmods[i].minlen
     2854+                                       && (p == cmd || cmdmods[i].has_count))
     2855+           return j + (p - cmd);
     2856+    }
     2857+    return 0;
     2858+}
     2859+
     2860 /*
     2861  * Return > 0 if an Ex command "name" exists.
     2862  * Return 2 if there is an exact match.
     2863@@ -2971,30 +3029,6 @@
     2864     int                i;
     2865     int                j;
     2866     char_u     *p;
     2867-    static struct cmdmod
     2868-    {
     2869-       char    *name;
     2870-       int     minlen;
     2871-    } cmdmods[] = {
     2872-       {"aboveleft", 3},
     2873-       {"belowright", 3},
     2874-       {"botright", 2},
     2875-       {"browse", 3},
     2876-       {"confirm", 4},
     2877-       {"hide", 3},
     2878-       {"keepalt", 5},
     2879-       {"keepjumps", 5},
     2880-       {"keepmarks", 3},
     2881-       {"leftabove", 5},
     2882-       {"lockmarks", 3},
     2883-       {"rightbelow", 6},
     2884-       {"sandbox", 3},
     2885-       {"silent", 3},
     2886-       {"tab", 3},
     2887-       {"topleft", 2},
     2888-       {"verbose", 4},
     2889-       {"vertical", 4},
     2890-    };
     2891 
     2892     /* Check command modifiers. */
     2893     for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i)
     2894@@ -3276,39 +3310,65 @@
    24542895 
    24552896     if (ea.argt & XFILE)
     
    25342975            mb_ptr_adv(p);
    25352976        }
    2536 @@ -3401,14 +3432,13 @@
     2977@@ -3401,14 +3461,13 @@
    25372978        case CMD_windo:
    25382979            return arg;
     
    25532994                if (*arg != NUL)
    25542995                {
    2555 @@ -3417,9 +3447,8 @@
     2996@@ -3417,9 +3476,8 @@
    25562997                }
    25572998            }
     
    25643005  * All completion for the +cmdline_compl feature goes here.
    25653006  */
    2566 @@ -3617,8 +3646,7 @@
     3007@@ -3617,8 +3675,7 @@
    25673008            break;
    25683009 
     
    25743015 #endif
    25753016        case CMD_highlight:
    2576 @@ -3997,8 +4025,7 @@
     3017@@ -3997,8 +4054,7 @@
    25773018        eap->errmsg = (char_u *)N_("E319: Sorry, the command is not available in this version");
    25783019 }
     
    25843025  * Function called for script command which is Not Implemented.  NI!
    25853026  * Skips over ":perl <<EOF" constructs.
    2586 @@ -4376,7 +4403,7 @@
     3027@@ -4376,7 +4432,7 @@
    25873028                            || vim_strchr(eap->arg, '~') != NULL)
    25883029                    {
     
    25933034                        p = NameBuff;
    25943035                    }
    2595 @@ -4492,7 +4519,8 @@
     3036@@ -4492,7 +4548,8 @@
    25963037            if (eap->argt & (USECTRLV | XFILE))
    25973038                ++p;            /* skip CTRL-V and next char */
     
    26033044                break;
    26043045        }
    2605 @@ -8399,21 +8427,17 @@
     3046@@ -6650,7 +6707,7 @@
     3047  * The list should be allocated using alloc(), as should each item in the
     3048  * list. This function takes over responsibility for freeing the list.
     3049  *
     3050- * XXX The list is made into the arggument list. This is freed using
     3051+ * XXX The list is made into the argument list. This is freed using
     3052  * FreeWild(), which does a series of vim_free() calls, unless the two defines
     3053  * __EMX__ and __ALWAYS_HAS_TRAILING_NUL_POINTER are set. In this case, a
     3054  * routine _fnexplodefree() is used. This may cause problems, but as the drop
     3055@@ -7768,7 +7825,7 @@
     3056        if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged()
     3057                                                             && !eap->forceit)
     3058        {
     3059-           EMSG(_("E747: Cannot change directory, buffer is modifed (add ! to override)"));
     3060+           EMSG(_("E747: Cannot change directory, buffer is modified (add ! to override)"));
     3061            return;
     3062        }
     3063 
     3064@@ -8399,21 +8456,17 @@
    26063065                    || *arg == '"')
    26073066            {
     
    26323091            }
    26333092            if (*arg != NUL)
    2634 @@ -10816,12 +10840,13 @@
     3093@@ -9368,7 +9421,7 @@
     3094     if (src > srcstart && src[-1] == '\\')
     3095     {
     3096        *usedlen = 0;
     3097-       STRCPY(src - 1, src);           /* remove backslash */
     3098+       mch_memmove(src - 1, src, STRLEN(src) + 1);     /* remove backslash */
     3099        return NULL;
     3100     }
     3101 
     3102@@ -10816,12 +10869,13 @@
    26353103     exarg_T    *eap;
    26363104 {
     
    26483116     {
    26493117        EMSG(e_invcmd);
    2650 @@ -10830,13 +10855,7 @@
     3118@@ -10830,13 +10884,7 @@
    26513119 
    26523120     /* First clear any old pattern. */
     
    26633131     if (ends_excmd(*eap->arg))
    26643132        end = eap->arg;
    2665 @@ -10847,15 +10866,7 @@
     3133@@ -10847,15 +10895,7 @@
    26663134     {
    26673135        p = skiptowhite(eap->arg);
     
    26803148        if (*p == NUL)
    26813149        {
    2682 @@ -10879,14 +10890,8 @@
     3150@@ -10879,14 +10919,8 @@
    26833151 
    26843152            c = *end;
     
    26983166     }
    26993167diff -Naur vim71.orig/src/ex_eval.c vim71/src/ex_eval.c
    2700 --- vim71.orig/src/ex_eval.c    2007-05-07 12:47:50.000000000 -0700
    2701 +++ vim71/src/ex_eval.c 2007-10-29 08:09:18.000000000 -0700
     3168--- vim71.orig/src/ex_eval.c    2007-05-07 15:47:50.000000000 -0400
     3169+++ vim71/src/ex_eval.c 2007-12-20 23:59:51.000000000 -0500
    27023170@@ -1551,7 +1551,7 @@
    27033171                }
     
    27093177                if (end != NULL)
    27103178                    *end = save_char;
     3179@@ -2269,9 +2269,18 @@
     3180 has_loop_cmd(p)
     3181     char_u     *p;
     3182 {
     3183-    p = skipwhite(p);
     3184-    while (*p == ':')
     3185-       p = skipwhite(p + 1);
     3186+    int                len;
     3187+
     3188+    /* skip modifiers, white space and ':' */
     3189+    for (;;)
     3190+    {
     3191+       while (*p == ' ' || *p == '\t' || *p == ':')
     3192+           ++p;
     3193+       len = modifier_len(p);
     3194+       if (len == 0)
     3195+           break;
     3196+       p += len;
     3197+    }
     3198     if ((p[0] == 'w' && p[1] == 'h')
     3199            || (p[0] == 'f' && p[1] == 'o' && p[2] == 'r'))
     3200        return TRUE;
    27113201diff -Naur vim71.orig/src/ex_getln.c vim71/src/ex_getln.c
    2712 --- vim71.orig/src/ex_getln.c   2007-05-07 12:47:23.000000000 -0700
    2713 +++ vim71/src/ex_getln.c        2007-10-29 08:09:43.000000000 -0700
     3202--- vim71.orig/src/ex_getln.c   2007-05-07 15:47:23.000000000 -0400
     3203+++ vim71/src/ex_getln.c        2007-12-21 00:00:02.000000000 -0500
    27143204@@ -268,7 +268,9 @@
    27153205     {
     
    27803270 #ifdef FEAT_EVAL
    27813271                /*
    2782 @@ -2090,11 +2095,11 @@
     3272@@ -1181,10 +1186,10 @@
     3273        case K_LEFT:
     3274        case K_S_LEFT:
     3275        case K_C_LEFT:
     3276+               if (ccline.cmdpos == 0)
     3277+                   goto cmdline_not_changed;
     3278                do
     3279                {
     3280-                   if (ccline.cmdpos == 0)
     3281-                       break;
     3282                    --ccline.cmdpos;
     3283 #ifdef FEAT_MBYTE
     3284                    if (has_mbyte)      /* move to first byte of char */
     3285@@ -1193,7 +1198,8 @@
     3286 #endif
     3287                    ccline.cmdspos -= cmdline_charsize(ccline.cmdpos);
     3288                }
     3289-               while ((c == K_S_LEFT || c == K_C_LEFT
     3290+               while (ccline.cmdpos > 0
     3291+                       && (c == K_S_LEFT || c == K_C_LEFT
     3292                               || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL)))
     3293                        && ccline.cmdbuff[ccline.cmdpos - 1] != ' ');
     3294 #ifdef FEAT_MBYTE
     3295@@ -2090,11 +2096,11 @@
    27833296     garray_T   line_ga;
    27843297     char_u     *pend;
     
    27943307     /* Switch cursor on now.  This avoids that it happens after the "\n", which
    27953308      * confuses the system function that computes tabstops. */
    2796 @@ -2147,6 +2152,7 @@
     3309@@ -2147,6 +2153,7 @@
    27973310 
    27983311        /* Get one character at a time.  Don't use inchar(), it can't handle
     
    28023315 
    28033316        /*
    2804 @@ -2204,7 +2210,6 @@
     3317@@ -2204,7 +2211,6 @@
    28053318 redraw:
    28063319                /* redraw the line */
     
    28103323                for (p = (char_u *)line_ga.ga_data;
    28113324                          p < (char_u *)line_ga.ga_data + line_ga.ga_len; ++p)
    2812 @@ -2223,6 +2228,7 @@
     3325@@ -2223,6 +2229,7 @@
    28133326                    }
    28143327                }
     
    28183331            }
    28193332 
    2820 @@ -2268,7 +2274,6 @@
     3333@@ -2268,7 +2275,6 @@
    28213334        if (IS_SPECIAL(c1))
    28223335            c1 = '?';
     
    28263339            msg_putchar('\n');
    28273340        else if (c1 == TAB)
    2828 @@ -3311,6 +3316,10 @@
     3341@@ -3311,6 +3317,10 @@
    28293342  * Return a pointer to alloced memory containing the new string.
    28303343  * Return NULL for failure.
     
    28373350  * is WILD_EXPAND_FREE or WILD_ALL.
    28383351  *
    2839 @@ -3395,7 +3404,7 @@
     3352@@ -3344,6 +3354,7 @@
     3353     char_u     *ss = NULL;
     3354     static int findex;
     3355     static char_u *orig_save = NULL;   /* kept value of orig */
     3356+    int                orig_saved = FALSE;
     3357     int                i;
     3358     long_u     len;
     3359     int                non_suf_match;          /* number without matching suffix */
     3360@@ -3395,7 +3406,7 @@
    28403361            return NULL;
    28413362     }
     
    28463367     {
    28473368        FreeWild(xp->xp_numfiles, xp->xp_files);
    2848 @@ -3536,6 +3545,10 @@
     3369@@ -3412,6 +3423,7 @@
     3370     {
     3371        vim_free(orig_save);
     3372        orig_save = orig;
     3373+       orig_saved = TRUE;
     3374 
     3375        /*
     3376         * Do the expansion.
     3377@@ -3536,6 +3548,10 @@
    28493378     if (mode == WILD_EXPAND_FREE || mode == WILD_ALL)
    28503379        ExpandCleanup(xp);
    28513380 
    28523381+    /* Free "orig" if it wasn't stored in "orig_save". */
    2853 +    if (orig != orig_save)
     3382+    if (!orig_saved)
    28543383+       vim_free(orig);
    28553384+
     
    28573386 }
    28583387 
    2859 @@ -4148,13 +4161,19 @@
     3388@@ -4148,13 +4164,19 @@
    28603389 
    28613390 #ifdef FEAT_EVAL
     
    28773406     else
    28783407 #endif
    2879 @@ -4295,10 +4314,11 @@
     3408@@ -4295,10 +4317,11 @@
    28803409                            && pat[i + 1] == '\\'
    28813410                            && pat[i + 2] == '\\'
     
    28913420        }
    28923421 
    2893 @@ -4502,6 +4522,12 @@
     3422@@ -4502,6 +4525,12 @@
    28943423     if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
    28953424        sort_strings(*file, *num_file);
     
    29043433 }
    29053434 
    2906 @@ -4535,7 +4561,7 @@
     3435@@ -4535,7 +4564,7 @@
    29073436     pat = vim_strsave(filepat);
    29083437     for (i = 0; pat[i]; ++i)
     
    29133442     flags |= EW_FILE | EW_EXEC;
    29143443 
    2915 @@ -5907,7 +5933,7 @@
     3444@@ -5907,7 +5936,7 @@
    29163445 
    29173446 # ifdef FEAT_AUTOCMD
     
    29223451     /* don't use a new tab page */
    29233452     cmdmod.tab = 0;
    2924 @@ -5916,6 +5942,9 @@
     3453@@ -5916,6 +5945,9 @@
    29253454     if (win_split((int)p_cwh, WSP_BOT) == FAIL)
    29263455     {
     
    29323461     }
    29333462     cmdwin_type = ccline.cmdfirstc;
    2934 @@ -5938,7 +5967,7 @@
     3463@@ -5938,7 +5970,7 @@
    29353464 
    29363465 # ifdef FEAT_AUTOCMD
     
    29413470 
    29423471     /* Showing the prompt may have set need_wait_return, reset it. */
    2943 @@ -6092,7 +6121,7 @@
     3472@@ -6092,7 +6124,7 @@
    29443473 
    29453474 # ifdef FEAT_AUTOCMD
     
    29503479        wp = curwin;
    29513480        bp = curbuf;
    2952 @@ -6104,7 +6133,7 @@
     3481@@ -6104,7 +6136,7 @@
    29533482        win_size_restore(&winsizes);
    29543483 
     
    29603489 
    29613490diff -Naur vim71.orig/src/feature.h vim71/src/feature.h
    2962 --- vim71.orig/src/feature.h    2007-05-07 12:33:19.000000000 -0700
    2963 +++ vim71/src/feature.h 2007-10-29 08:09:18.000000000 -0700
     3491--- vim71.orig/src/feature.h    2007-05-07 15:33:19.000000000 -0400
     3492+++ vim71/src/feature.h 2007-12-20 23:57:30.000000000 -0500
    29643493@@ -673,7 +673,7 @@
    29653494 # define ESC_CHG_TO_ENG_MODE           /* if defined, when ESC pressed,
     
    29723501 # if defined(FEAT_XIM) && !defined(LINT)
    29733502diff -Naur vim71.orig/src/fileio.c vim71/src/fileio.c
    2974 --- vim71.orig/src/fileio.c     2007-05-10 04:29:44.000000000 -0700
    2975 +++ vim71/src/fileio.c  2007-10-29 08:09:48.000000000 -0700
     3503--- vim71.orig/src/fileio.c     2007-05-10 07:29:44.000000000 -0400
     3504+++ vim71/src/fileio.c  2007-12-20 23:59:40.000000000 -0500
    29763505@@ -44,6 +44,10 @@
    29773506 /* Is there any system that doesn't have access()? */
     
    31083637  *
    31093638  * We do our own buffering here because fwrite() is so slow.
    3110 @@ -3219,17 +3286,8 @@
     3639@@ -3142,7 +3209,8 @@
     3640      * Get information about original file (if there is one).
     3641      */
     3642 #if defined(UNIX) && !defined(ARCHIE)
     3643-    st_old.st_dev = st_old.st_ino = 0;
     3644+    st_old.st_dev = 0;
     3645+    st_old.st_ino = 0;
     3646     perm = -1;
     3647     if (mch_stat((char *)fname, &st_old) < 0)
     3648        newfile = TRUE;
     3649@@ -3219,17 +3287,8 @@
    31113650         * Check if the file is really writable (when renaming the file to
    31123651         * make a backup we won't discover it later).
     
    31283667        {
    31293668            if (vim_strchr(p_cpo, CPO_FWRITE) != NULL)
    3130 @@ -5495,6 +5553,8 @@
     3669@@ -5495,6 +5554,8 @@
    31313670 }
    31323671 #endif
     
    31373676  * Try to find a shortname by comparing the fullname with the current
    31383677  * directory.
    3139 @@ -5548,6 +5608,7 @@
     3678@@ -5548,6 +5609,7 @@
    31403679        p = NULL;
    31413680     return p;
     
    31453684 /*
    31463685  * Shorten filenames for all buffers.
    3147 @@ -7107,6 +7168,7 @@
     3686@@ -7107,6 +7169,7 @@
    31483687 
    31493688 static event_T last_event;
     
    31533692 /*
    31543693  * Show the autocommands for one AutoPat.
    3155 @@ -8396,7 +8458,7 @@
     3694@@ -8396,7 +8459,7 @@
    31563695      * Quickly return if there are no autocommands for this event or
    31573696      * autocommands are blocked.
     
    31623701 
    31633702     /*
    3164 @@ -8710,6 +8772,40 @@
     3703@@ -8710,6 +8773,40 @@
    31653704     return retval;
    31663705 }
     
    32043743  */
    32053744diff -Naur vim71.orig/src/fold.c vim71/src/fold.c
    3206 --- vim71.orig/src/fold.c       2007-05-07 12:46:32.000000000 -0700
    3207 +++ vim71/src/fold.c    2007-10-29 08:09:51.000000000 -0700
     3745--- vim71.orig/src/fold.c       2007-05-07 15:46:32.000000000 -0400
     3746+++ vim71/src/fold.c    2007-12-20 23:59:22.000000000 -0500
    32083747@@ -858,7 +858,14 @@
    32093748            || foldmethodIsDiff(wp)
     
    32223761 /* foldUpdateAll() {{{2 */
    32233762diff -Naur vim71.orig/src/getchar.c vim71/src/getchar.c
    3224 --- vim71.orig/src/getchar.c    2007-05-07 12:18:20.000000000 -0700
    3225 +++ vim71/src/getchar.c 2007-10-29 08:09:37.000000000 -0700
    3226 @@ -1596,8 +1596,16 @@
     3763--- vim71.orig/src/getchar.c    2007-05-07 15:18:20.000000000 -0400
     3764+++ vim71/src/getchar.c 2007-12-21 00:00:01.000000000 -0500
     3765@@ -253,8 +253,9 @@
     3766        return;
     3767     }
     3768     else if (buf->bh_index != 0)
     3769-       STRCPY(buf->bh_first.b_next->b_str,
     3770-                                buf->bh_first.b_next->b_str + buf->bh_index);
     3771+       mch_memmove(buf->bh_first.b_next->b_str,
     3772+                   buf->bh_first.b_next->b_str + buf->bh_index,
     3773+                   STRLEN(buf->bh_first.b_next->b_str + buf->bh_index) + 1);
     3774     buf->bh_index = 0;
     3775 
     3776     if (buf->bh_space >= (int)slen)
     3777@@ -1596,8 +1597,16 @@
    32273778                continue;
    32283779            }
     
    32423793             * it being recognized as the start of a special key. */
    32433794            if (c == K_CSI)
    3244 @@ -1741,6 +1749,22 @@
     3795@@ -1741,6 +1750,22 @@
    32453796 }
    32463797 
     
    32663817  * character is not valid!.
    32673818diff -Naur vim71.orig/src/globals.h vim71/src/globals.h
    3268 --- vim71.orig/src/globals.h    2007-05-07 12:44:26.000000000 -0700
    3269 +++ vim71/src/globals.h 2007-10-29 08:09:40.000000000 -0700
     3819--- vim71.orig/src/globals.h    2007-05-07 15:44:26.000000000 -0400
     3820+++ vim71/src/globals.h 2007-12-20 23:59:05.000000000 -0500
    32703821@@ -301,13 +301,17 @@
    32713822 #endif
     
    33063857 
    33073858diff -Naur vim71.orig/src/gui.c vim71/src/gui.c
    3308 --- vim71.orig/src/gui.c        2007-05-07 12:50:55.000000000 -0700
    3309 +++ vim71/src/gui.c     2007-10-29 08:09:37.000000000 -0700
     3859--- vim71.orig/src/gui.c        2007-05-07 15:50:55.000000000 -0400
     3860+++ vim71/src/gui.c     2007-12-20 23:59:35.000000000 -0500
    33103861@@ -1080,7 +1080,8 @@
    33113862                cur_width = gui.char_width;
     
    33273878        text_area_y += gui.tabline_height;
    33283879 #endif
    3329 @@ -4518,7 +4519,18 @@
     3880@@ -4213,7 +4214,19 @@
     3881 #endif
     3882            )
     3883     {
     3884-       redraw_win_later(wp, VALID);
     3885+       int type = VALID;
     3886+
     3887+#ifdef FEAT_INS_EXPAND
     3888+       if (pum_visible())
     3889+       {
     3890+           type = NOT_VALID;
     3891+           wp->w_lines_valid = 0;
     3892+       }
     3893+#endif
     3894+       /* Don't set must_redraw here, it may cause the popup menu to
     3895+        * disappear when losing focus after a scrollbar drag. */
     3896+       if (wp->w_redr_type < type)
     3897+           wp->w_redr_type = type;
     3898        updateWindow(wp);   /* update window, status line, and cmdline */
     3899     }
     3900 
     3901@@ -4518,7 +4531,18 @@
    33303902     xim_set_focus(in_focus);
    33313903 # endif
     
    33473919 }
    33483920 
    3349 @@ -5117,7 +5129,7 @@
     3921@@ -5117,7 +5141,7 @@
    33503922                p = vim_strsave_escaped(fnames[i], (char_u *)"\\ \t\"|");
    33513923 # endif
     
    33573929            }
    33583930diff -Naur vim71.orig/src/gui_gtk.c vim71/src/gui_gtk.c
    3359 --- vim71.orig/src/gui_gtk.c    2007-05-10 01:37:37.000000000 -0700
    3360 +++ vim71/src/gui_gtk.c 2007-10-29 08:09:23.000000000 -0700
     3931--- vim71.orig/src/gui_gtk.c    2007-05-10 04:37:37.000000000 -0400
     3932+++ vim71/src/gui_gtk.c 2007-12-20 23:57:55.000000000 -0500
    33613933@@ -53,8 +53,8 @@
    33623934 # ifdef bindtextdomain
     
    34033975     {
    34043976diff -Naur vim71.orig/src/gui_gtk_x11.c vim71/src/gui_gtk_x11.c
    3405 --- vim71.orig/src/gui_gtk_x11.c        2007-05-10 01:37:49.000000000 -0700
    3406 +++ vim71/src/gui_gtk_x11.c     2007-10-29 08:09:51.000000000 -0700
     3977--- vim71.orig/src/gui_gtk_x11.c        2007-05-10 04:37:49.000000000 -0400
     3978+++ vim71/src/gui_gtk_x11.c     2007-12-20 23:59:24.000000000 -0500
    34073979@@ -36,8 +36,8 @@
    34083980 # ifdef bindtextdomain
     
    35334105            init_window_hints_state = 1;
    35344106            g_timeout_add(1000, check_startup_plug_hints, NULL);
     4107diff -Naur vim71.orig/src/gui_xmebw.c vim71/src/gui_xmebw.c
     4108--- vim71.orig/src/gui_xmebw.c  2007-05-07 15:30:49.000000000 -0400
     4109+++ vim71/src/gui_xmebw.c       2007-12-20 23:59:40.000000000 -0500
     4110@@ -395,11 +395,15 @@
     4111 
     4112     /* Create the "highlight" pixmap. */
     4113     color[4].pixel = eb->primitive.bottom_shadow_color;
     4114+#ifdef XpmAllocColor /* SGI doesn't have it */
     4115     attr.valuemask = XpmColorSymbols | XpmCloseness | XpmAllocColor;
     4116+    attr.alloc_color = alloc_color;
     4117+#else
     4118+    attr.valuemask = XpmColorSymbols | XpmCloseness;
     4119+#endif
     4120     attr.closeness = 65535;    /* accuracy isn't crucial */
     4121     attr.colorsymbols = color;
     4122     attr.numsymbols = XtNumber(color);
     4123-    attr.alloc_color = alloc_color;
     4124 
     4125     status = XpmCreatePixmapFromData(dpy, root, data, &pix, NULL, &attr);
     4126     XpmFreeAttributes(&attr);
    35354127diff -Naur vim71.orig/src/if_cscope.c vim71/src/if_cscope.c
    3536 --- vim71.orig/src/if_cscope.c  2007-03-11 07:29:57.000000000 -0700
    3537 +++ vim71/src/if_cscope.c       2007-10-29 08:09:37.000000000 -0700
     4128--- vim71.orig/src/if_cscope.c  2007-03-11 10:29:57.000000000 -0400
     4129+++ vim71/src/if_cscope.c       2007-12-20 23:58:44.000000000 -0500
    35384130@@ -24,11 +24,6 @@
    35394131     /* not UNIX, must be WIN32 */
     
    39454537 /* the end */
    39464538diff -Naur vim71.orig/src/if_cscope.h vim71/src/if_cscope.h
    3947 --- vim71.orig/src/if_cscope.h  2005-06-30 10:14:22.000000000 -0700
    3948 +++ vim71/src/if_cscope.h       2007-10-29 08:09:37.000000000 -0700
     4539--- vim71.orig/src/if_cscope.h  2005-06-30 13:14:22.000000000 -0400
     4540+++ vim71/src/if_cscope.h       2007-12-20 23:58:34.000000000 -0500
    39494541@@ -72,7 +72,7 @@
    39504542     ino_t          st_ino;     /* inode number of cscope db */
     
    39574549     DWORD          nIndexHigh; /* st_ino has no meaning in the Windows */
    39584550diff -Naur vim71.orig/src/if_mzsch.c vim71/src/if_mzsch.c
    3959 --- vim71.orig/src/if_mzsch.c   2007-05-12 04:13:47.000000000 -0700
    3960 +++ vim71/src/if_mzsch.c        2007-10-29 08:09:16.000000000 -0700
     4551--- vim71.orig/src/if_mzsch.c   2007-05-12 07:13:47.000000000 -0400
     4552+++ vim71/src/if_mzsch.c        2007-12-20 23:56:55.000000000 -0500
    39614553@@ -308,6 +308,8 @@
    39624554 static Scheme_Config *(*dll_scheme_current_config)(void);
     
    40034595 #ifdef HAVE_SANDBOX
    40044596diff -Naur vim71.orig/src/if_perl.xs vim71/src/if_perl.xs
    4005 --- vim71.orig/src/if_perl.xs   2006-08-16 05:45:15.000000000 -0700
    4006 +++ vim71/src/if_perl.xs        2007-10-29 08:09:51.000000000 -0700
     4597--- vim71.orig/src/if_perl.xs   2006-08-16 08:45:15.000000000 -0400
     4598+++ vim71/src/if_perl.xs        2007-12-20 23:59:21.000000000 -0500
    40074599@@ -40,6 +40,28 @@
    40084600 #    define PERL_SUBVERSION SUBVERSION
     
    40844676 
    40854677diff -Naur vim71.orig/src/if_ruby.c vim71/src/if_ruby.c
    4086 --- vim71.orig/src/if_ruby.c    2007-05-12 02:54:12.000000000 -0700
    4087 +++ vim71/src/if_ruby.c 2007-10-29 08:09:37.000000000 -0700
     4678--- vim71.orig/src/if_ruby.c    2007-05-12 05:54:12.000000000 -0400
     4679+++ vim71/src/if_ruby.c 2007-12-20 23:58:35.000000000 -0500
    40884680@@ -789,7 +789,7 @@
    40894681     return get_buffer_line(curbuf, curwin->w_cursor.lnum);
     
    40964688 }
    40974689diff -Naur vim71.orig/src/keymap.h vim71/src/keymap.h
    4098 --- vim71.orig/src/keymap.h     2006-08-22 04:38:38.000000000 -0700
    4099 +++ vim71/src/keymap.h  2007-10-29 08:09:37.000000000 -0700
     4690--- vim71.orig/src/keymap.h     2006-08-22 07:38:38.000000000 -0400
     4691+++ vim71/src/keymap.h  2007-12-20 23:58:27.000000000 -0500
    41004692@@ -254,6 +254,8 @@
    41014693     , KE_DROP          /* DnD data is available */
     
    41174709 
    41184710diff -Naur vim71.orig/src/macros.h vim71/src/macros.h
    4119 --- vim71.orig/src/macros.h     2007-05-07 12:38:22.000000000 -0700
    4120 +++ vim71/src/macros.h  2007-10-29 08:09:28.000000000 -0700
     4711--- vim71.orig/src/macros.h     2007-05-07 15:38:22.000000000 -0400
     4712+++ vim71/src/macros.h  2007-12-20 23:58:07.000000000 -0500
    41214713@@ -54,10 +54,12 @@
    41224714 
     
    41354727 #  define TOUPPER_LOC(c)       toupper_tab[(c) & 255]
    41364728diff -Naur vim71.orig/src/main.aap vim71/src/main.aap
    4137 --- vim71.orig/src/main.aap     2007-05-07 12:46:43.000000000 -0700
    4138 +++ vim71/src/main.aap  2007-10-29 08:09:38.000000000 -0700
     4729--- vim71.orig/src/main.aap     2007-05-07 15:46:43.000000000 -0400
     4730+++ vim71/src/main.aap  2007-12-20 23:59:01.000000000 -0500
    41394731@@ -56,9 +56,16 @@
    41404732     config {virtual} auto/config.h auto/config.aap :
     
    41744766 # Resource fork (in the form of a .rsrc file) for Classic Vim (Mac OS 9)
    41754767diff -Naur vim71.orig/src/main.c vim71/src/main.c
    4176 --- vim71.orig/src/main.c       2007-05-07 12:38:44.000000000 -0700
    4177 +++ vim71/src/main.c    2007-10-29 08:09:38.000000000 -0700
     4768--- vim71.orig/src/main.c       2007-05-07 15:38:44.000000000 -0400
     4769+++ vim71/src/main.c    2007-12-20 23:58:59.000000000 -0500
    41784770@@ -954,7 +954,8 @@
    41794771     int                cmdwin;     /* TRUE when working in the command-line window */
     
    42634855     ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
    42644856diff -Naur vim71.orig/src/mbyte.c vim71/src/mbyte.c
    4265 --- vim71.orig/src/mbyte.c      2007-05-07 12:47:09.000000000 -0700
    4266 +++ vim71/src/mbyte.c   2007-10-29 08:09:37.000000000 -0700
     4857--- vim71.orig/src/mbyte.c      2007-05-07 15:47:09.000000000 -0400
     4858+++ vim71/src/mbyte.c   2007-12-20 23:58:25.000000000 -0500
    42674859@@ -1310,20 +1310,26 @@
    42684860 /*
     
    43344926 # if defined(FEAT_CLIPBOARD) || defined(FEAT_GUI) || defined(FEAT_RIGHTLEFT) \
    43354927diff -Naur vim71.orig/src/message.c vim71/src/message.c
    4336 --- vim71.orig/src/message.c    2007-05-07 12:31:59.000000000 -0700
    4337 +++ vim71/src/message.c 2007-10-29 08:09:37.000000000 -0700
     4928--- vim71.orig/src/message.c    2007-05-07 15:31:59.000000000 -0400
     4929+++ vim71/src/message.c 2007-12-20 23:59:49.000000000 -0500
    43384930@@ -828,7 +828,7 @@
    43394931                _("Messages maintainer: Bram Moolenaar <Bram@vim.org>"),
     
    44265018                /* displayed the requested text, more prompt again */
    44275019                screen_fill((int)Rows - 1, (int)Rows, 0,
    4428 @@ -3456,11 +3458,11 @@
     5020@@ -2848,6 +2850,15 @@
     5021     }
     5022     else if (State == HITRETURN || State == SETWSIZE)
     5023     {
     5024+       if (msg_row == Rows - 1)
     5025+       {
     5026+           /* Avoid drawing the "hit-enter" prompt below the previous one,
     5027+            * overwrite it.  Esp. useful when regaining focus and a
     5028+            * FocusGained autocmd exists but didn't draw anything. */
     5029+           msg_didout = FALSE;
     5030+           msg_col = 0;
     5031+           msg_clr_eos();
     5032+       }
     5033        hit_return_msg();
     5034        msg_row = Rows - 1;
     5035     }
     5036@@ -3456,11 +3467,11 @@
    44295037                    /* advance to next hotkey and set default hotkey */
    44305038 #ifdef FEAT_MBYTE
     
    44405048                        --dfltbutton;
    44415049 
    4442 @@ -3493,7 +3495,7 @@
     5050@@ -3493,7 +3504,7 @@
    44435051                        *msgp++ = (dfltbutton == 1) ? ']' : ')';
    44445052 
     
    44495057                }
    44505058                else
    4451 @@ -3519,8 +3521,6 @@
     5059@@ -3519,8 +3530,6 @@
    44525060            *msgp++ = ':';
    44535061            *msgp++ = ' ';
     
    44585066        else
    44595067        {
    4460 @@ -3555,8 +3555,9 @@
     5068@@ -3555,8 +3564,9 @@
    44615069            msgp = confirm_msg + 1 + STRLEN(message);
    44625070            hotkp = hotk;
     
    44715079             * "hotkp" typed at the more prompt. */
    44725080diff -Naur vim71.orig/src/misc1.c vim71/src/misc1.c
    4473 --- vim71.orig/src/misc1.c      2007-05-07 12:49:03.000000000 -0700
    4474 +++ vim71/src/misc1.c   2007-10-29 08:09:38.000000000 -0700
     5081--- vim71.orig/src/misc1.c      2007-05-07 15:49:03.000000000 -0400
     5082+++ vim71/src/misc1.c   2007-12-20 23:59:02.000000000 -0500
    44755083@@ -90,7 +90,7 @@
    44765084  */
     
    47915399 #ifdef UNIX
    47925400diff -Naur vim71.orig/src/misc2.c vim71/src/misc2.c
    4793 --- vim71.orig/src/misc2.c      2007-05-07 12:49:26.000000000 -0700
    4794 +++ vim71/src/misc2.c   2007-10-29 08:09:51.000000000 -0700
    4795 @@ -972,7 +972,7 @@
     5401--- vim71.orig/src/misc2.c      2007-05-07 15:49:26.000000000 -0400
     5402+++ vim71/src/misc2.c   2007-12-20 23:59:50.000000000 -0500
     5403@@ -964,7 +964,6 @@
     5404 {
     5405     buf_T      *buf, *nextbuf;
     5406     static int entered = FALSE;
     5407-    win_T      *win;
     5408 
     5409     /* When we cause a crash here it is caught and Vim tries to exit cleanly.
     5410      * Don't try freeing everything again. */
     5411@@ -972,15 +971,17 @@
    47965412        return;
    47975413     entered = TRUE;
    47985414 
    47995415-    ++autocmd_block;       /* don't want to trigger autocommands here */
     5416+# ifdef FEAT_AUTOCMD
    48005417+    block_autocmds();      /* don't want to trigger autocommands here */
    4801  
    4802  #ifdef FEAT_WINDOWS
     5418+# endif
     5419 
     5420-#ifdef FEAT_WINDOWS
     5421+# ifdef FEAT_WINDOWS
    48035422     /* close all tabs and windows */
    4804 @@ -1037,7 +1037,9 @@
     5423     if (first_tabpage->tp_next != NULL)
     5424        do_cmdline_cmd((char_u *)"tabonly!");
     5425     if (firstwin != lastwin)
     5426        do_cmdline_cmd((char_u *)"only!");
     5427-#endif
     5428+# endif
     5429 
     5430 # if defined(FEAT_SPELL)
     5431     /* Free all spell info. */
     5432@@ -1031,27 +1032,41 @@
     5433     free_regexp_stuff();
     5434     free_tag_stuff();
     5435     free_cd_dir();
     5436+# ifdef FEAT_EVAL
     5437     set_expr_line(NULL);
     5438+# endif
     5439+# ifdef FEAT_DIFF
     5440     diff_clear(curtab);
     5441+# endif
     5442     clear_sb_text();         /* free any scrollback text */
    48055443 
    48065444     /* Free some global vars. */
     
    48105448+# endif
    48115449     vim_free(last_cmdline);
     5450+# ifdef FEAT_CMDHIST
    48125451     vim_free(new_last_cmdline);
     5452+# endif
    48135453     set_keep_msg(NULL, 0);
     5454     vim_free(ff_expand_buffer);
     5455 
     5456     /* Clear cmdline history. */
     5457     p_hi = 0;
     5458+# ifdef FEAT_CMDHIST
     5459     init_history();
     5460+# endif
     5461 
     5462 #ifdef FEAT_QUICKFIX
     5463-    qf_free_all(NULL);
     5464-    /* Free all location lists */
     5465-    FOR_ALL_WINDOWS(win)
     5466-       qf_free_all(win);
     5467+    {
     5468+       win_T   *win;
     5469+
     5470+       qf_free_all(NULL);
     5471+       /* Free all location lists */
     5472+       FOR_ALL_WINDOWS(win)
     5473+           qf_free_all(win);
     5474+    }
     5475 #endif
     5476 
     5477     /* Close all script inputs. */
     5478@@ -5922,7 +5937,11 @@
     5479 {
     5480     if (emsg_not_now())
     5481        return TRUE;            /* no error messages at the moment */
     5482+#ifdef HAVE_STDARG_H
     5483+    vim_snprintf((char *)IObuff, IOSIZE, (char *)s, a1, a2);
     5484+#else
     5485     vim_snprintf((char *)IObuff, IOSIZE, (char *)s, (long_u)a1, (long_u)a2);
     5486+#endif
     5487     return emsg(IObuff);
     5488 }
     5489 
    48145490diff -Naur vim71.orig/src/normal.c vim71/src/normal.c
    4815 --- vim71.orig/src/normal.c     2007-05-07 12:34:39.000000000 -0700
    4816 +++ vim71/src/normal.c  2007-10-29 08:09:51.000000000 -0700
     5491--- vim71.orig/src/normal.c     2007-05-07 15:34:39.000000000 -0400
     5492+++ vim71/src/normal.c  2007-12-20 23:59:23.000000000 -0500
    48175493@@ -690,13 +690,20 @@
    48185494                ca.count0 = ca.count0 * 10 + (c - '0');
     
    49685644        cap->oap->inclusive = TRUE;
    49695645diff -Naur vim71.orig/src/ops.c vim71/src/ops.c
    4970 --- vim71.orig/src/ops.c        2007-05-07 12:33:47.000000000 -0700
    4971 +++ vim71/src/ops.c     2007-10-29 08:09:38.000000000 -0700
    4972 @@ -2477,7 +2477,7 @@
     5646--- vim71.orig/src/ops.c        2007-05-07 15:33:47.000000000 -0400
     5647+++ vim71/src/ops.c     2007-12-20 23:59:56.000000000 -0500
     5648@@ -927,15 +927,16 @@
     5649     int                name;
     5650     int                copy;   /* make a copy, if FALSE make register empty. */
     5651 {
     5652-    static struct yankreg      *reg;
     5653-    int                                i;
     5654+    struct yankreg     *reg;
     5655+    int                        i;
     5656 
     5657 #ifdef FEAT_CLIPBOARD
     5658     /* When Visual area changed, may have to update selection.  Obtain the
     5659      * selection too. */
     5660-    if (name == '*' && clip_star.available && clip_isautosel())
     5661+    if (name == '*' && clip_star.available)
     5662     {
     5663-       clip_update_selection();
     5664+       if (clip_isautosel())
     5665+           clip_update_selection();
     5666        may_get_selection(name);
     5667     }
     5668 #endif
     5669@@ -966,7 +967,7 @@
     5670 }
     5671 
     5672 /*
     5673- * Put "reg" into register "name".  Free any previous contents.
     5674+ * Put "reg" into register "name".  Free any previous contents and "reg".
     5675  */
     5676     void
     5677 put_register(name, reg)
     5678@@ -976,6 +977,7 @@
     5679     get_yank_register(name, 0);
     5680     free_yank_all();
     5681     *y_current = *(struct yankreg *)reg;
     5682+    vim_free(reg);
     5683 
     5684 # ifdef FEAT_CLIPBOARD
     5685     /* Send text written to clipboard register to the clipboard. */
     5686@@ -2477,7 +2479,7 @@
    49735687 
    49745688        /*
     
    49795693         */
    49805694        block_prep(oap, &bd2, oap->start.lnum, TRUE);
    4981 @@ -2534,7 +2534,9 @@
     5695@@ -2534,7 +2536,9 @@
    49825696 #ifdef FEAT_VISUALEXTRA
    49835697     long               offset;
     
    49905704     char_u             *ins_text, *newp, *oldp;
    49915705     struct block_def   bd;
    4992 @@ -2579,7 +2581,9 @@
     5706@@ -2579,7 +2583,9 @@
    49935707                                                    || gchar_cursor() == NUL))
    49945708            coladvance_force(getviscol());
     
    50015715     }
    50025716 #endif
    5003 @@ -2598,13 +2602,22 @@
     5717@@ -2598,13 +2604,22 @@
    50045718      */
    50055719     if (oap->block_mode && oap->start.lnum != oap->end.lnum)
     
    50295743            {
    50305744                vim_strncpy(ins_text, firstline + bd.textcol, (size_t)ins_len);
    5031 @@ -3404,7 +3417,9 @@
     5745@@ -3404,7 +3419,9 @@
    50325746 
    50335747 #ifdef FEAT_VIRTUALEDIT
     
    50415755                ++col;
    50425756diff -Naur vim71.orig/src/option.c vim71/src/option.c
    5043 --- vim71.orig/src/option.c     2007-05-01 04:26:10.000000000 -0700
    5044 +++ vim71/src/option.c  2007-10-29 08:09:48.000000000 -0700
     5757--- vim71.orig/src/option.c     2007-05-01 07:26:10.000000000 -0400
     5758+++ vim71/src/option.c  2007-12-20 23:59:12.000000000 -0500
    50455759@@ -427,6 +427,8 @@
    50465760 #define P_NOGLOB       0x100000L/* do not use local value for global vimrc */
     
    52315945     return (STRCMP(buf->b_start_fenc, buf->b_p_fenc) != 0);
    52325946diff -Naur vim71.orig/src/os_unix.c vim71/src/os_unix.c
    5233 --- vim71.orig/src/os_unix.c    2007-05-09 12:41:58.000000000 -0700
    5234 +++ vim71/src/os_unix.c 2007-10-29 08:09:32.000000000 -0700
     5947--- vim71.orig/src/os_unix.c    2007-05-09 15:41:58.000000000 -0400
     5948+++ vim71/src/os_unix.c 2007-12-20 23:59:55.000000000 -0500
     5949@@ -310,7 +310,7 @@
     5950 }
     5951 
     5952 /*
     5953- * mch_inchar(): low level input funcion.
     5954+ * mch_inchar(): low level input function.
     5955  * Get a characters from the keyboard.
     5956  * Return the number of characters that are available.
     5957  * If wtime == 0 do not wait for characters.
    52355958@@ -753,7 +753,8 @@
    52365959     if (signal_stack != NULL)
     
    52435966         * "struct sigaltstack" needs to be declared. */
    52445967        extern int sigaltstack __ARGS((const struct sigaltstack *ss, struct sigaltstack *oss));
    5245 @@ -2499,7 +2500,13 @@
     5968@@ -1566,18 +1567,19 @@
     5969 #ifdef FEAT_XCLIPBOARD
     5970     if (xterm_dpy != NULL && x11_window != 0)
     5971     {
     5972-       /* Checked it already. */
     5973-       if (x11_display_from == XD_XTERM)
     5974-           return OK;
     5975-
     5976-       /*
     5977-        * If the X11 display was opened here before, for the window where Vim
     5978-        * was started, close that one now to avoid a memory leak.
     5979-        */
     5980-       if (x11_display_from == XD_HERE && x11_display != NULL)
     5981-           XCloseDisplay(x11_display);
     5982-       x11_display = xterm_dpy;
     5983-       x11_display_from = XD_XTERM;
     5984+       /* We may have checked it already, but Gnome terminal can move us to
     5985+        * another window, so we need to check every time. */
     5986+       if (x11_display_from != XD_XTERM)
     5987+       {
     5988+           /*
     5989+            * If the X11 display was opened here before, for the window where
     5990+            * Vim was started, close that one now to avoid a memory leak.
     5991+            */
     5992+           if (x11_display_from == XD_HERE && x11_display != NULL)
     5993+               XCloseDisplay(x11_display);
     5994+           x11_display = xterm_dpy;
     5995+           x11_display_from = XD_XTERM;
     5996+       }
     5997        if (test_x11_window(x11_display) == FAIL)
     5998        {
     5999            /* probably bad $WINDOWID */
     6000@@ -2420,7 +2422,7 @@
     6001 /*
     6002  * Set the case of the file name, if it already exists.  This will cause the
     6003  * file name to remain exactly the same.
     6004- * Only required for file systems where case is ingored and preserved.
     6005+ * Only required for file systems where case is ignored and preserved.
     6006  */
     6007 /*ARGSUSED*/
     6008     void
     6009@@ -2499,7 +2501,13 @@
    52466010     if (stat((char *)name, &statb))
    52476011 #endif
     
    52576021 
    52586022 /*
    5259 @@ -5682,7 +5689,7 @@
     6023@@ -4646,7 +4654,7 @@
     6024        ret = poll(fds, nfd, towait);
     6025 # ifdef FEAT_MZSCHEME
     6026        if (ret == 0 && mzquantum_used)
     6027-           /* MzThreads scheduling is required and timeout occured */
     6028+           /* MzThreads scheduling is required and timeout occurred */
     6029            finished = FALSE;
     6030 # endif
     6031 
     6032@@ -4794,7 +4802,7 @@
     6033 #endif
     6034 # ifdef FEAT_MZSCHEME
     6035        if (ret == 0 && mzquantum_used)
     6036-           /* loop if MzThreads must be scheduled and timeout occured */
     6037+           /* loop if MzThreads must be scheduled and timeout occurred */
     6038            finished = FALSE;
     6039 # endif
     6040 
     6041@@ -5184,7 +5192,7 @@
     6042        {
     6043            /* When using system() always add extra quotes, because the shell
     6044             * is started twice.  Otherwise put a backslash before special
     6045-            * characters, except insice ``. */
     6046+            * characters, except inside ``. */
     6047 #ifdef USE_SYSTEM
     6048            STRCAT(command, " \"");
     6049            STRCAT(command, pat[i]);
     6050@@ -5668,7 +5676,7 @@
     6051            /* gpm library tries to handling TSTP causes
     6052             * problems. Anyways, we close connection to Gpm whenever
     6053             * we are going to suspend or starting an external process
     6054-            * so we should'nt  have problem with this
     6055+            * so we shouldn't  have problem with this
     6056             */
     6057            signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
     6058            return 1; /* succeed */
     6059@@ -5682,7 +5690,7 @@
    52606060 
    52616061 /*
     
    52676067 gpm_close()
    52686068diff -Naur vim71.orig/src/os_unix.h vim71/src/os_unix.h
    5269 --- vim71.orig/src/os_unix.h    2007-05-07 12:35:05.000000000 -0700
    5270 +++ vim71/src/os_unix.h 2007-10-29 08:09:16.000000000 -0700
     6069--- vim71.orig/src/os_unix.h    2007-05-07 15:35:05.000000000 -0400
     6070+++ vim71/src/os_unix.h 2007-12-20 23:57:02.000000000 -0500
    52716071@@ -508,6 +508,9 @@
    52726072 #if !defined(S_ISFIFO) && defined(S_IFIFO)
     
    52806080  * some systems can't handle both, only use string.h in that case. */
    52816081diff -Naur vim71.orig/src/popupmnu.c vim71/src/popupmnu.c
    5282 --- vim71.orig/src/popupmnu.c   2007-03-24 13:07:39.000000000 -0700
    5283 +++ vim71/src/popupmnu.c        2007-10-29 08:09:18.000000000 -0700
     6082--- vim71.orig/src/popupmnu.c   2007-03-24 16:07:39.000000000 -0400
     6083+++ vim71/src/popupmnu.c        2007-12-20 23:57:41.000000000 -0500
    52846084@@ -75,7 +75,6 @@
    52856085 
     
    55146314                if (res == OK)
    55156315diff -Naur vim71.orig/src/proto/charset.pro vim71/src/proto/charset.pro
    5516 --- vim71.orig/src/proto/charset.pro    2007-05-12 03:39:01.000000000 -0700
    5517 +++ vim71/src/proto/charset.pro 2007-10-29 08:09:30.000000000 -0700
     6316--- vim71.orig/src/proto/charset.pro    2007-05-12 06:39:01.000000000 -0400
     6317+++ vim71/src/proto/charset.pro 2007-12-20 23:58:12.000000000 -0500
    55186318@@ -21,6 +21,7 @@
    55196319 int vim_iswordp __ARGS((char_u *p));
     
    55246324 int vim_isprintc_strict __ARGS((int c));
    55256325 int lbr_chartabsize __ARGS((unsigned char *s, colnr_T col));
     6326diff -Naur vim71.orig/src/proto/ex_docmd.pro vim71/src/proto/ex_docmd.pro
     6327--- vim71.orig/src/proto/ex_docmd.pro   2007-05-12 06:39:10.000000000 -0400
     6328+++ vim71/src/proto/ex_docmd.pro        2007-12-20 23:59:51.000000000 -0500
     6329@@ -5,6 +5,7 @@
     6330 int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int)));
     6331 void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie));
     6332 int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
     6333+int modifier_len __ARGS((char_u *cmd));
     6334 int cmd_exists __ARGS((char_u *name));
     6335 char_u *set_one_cmd_context __ARGS((expand_T *xp, char_u *buff));
     6336 char_u *skip_range __ARGS((char_u *cmd, int *ctx));
    55266337diff -Naur vim71.orig/src/proto/fileio.pro vim71/src/proto/fileio.pro
    5527 --- vim71.orig/src/proto/fileio.pro     2007-05-12 03:39:14.000000000 -0700
    5528 +++ vim71/src/proto/fileio.pro  2007-10-29 08:09:40.000000000 -0700
     6338--- vim71.orig/src/proto/fileio.pro     2007-05-12 06:39:14.000000000 -0400
     6339+++ vim71/src/proto/fileio.pro  2007-12-20 23:59:05.000000000 -0500
    55296340@@ -2,6 +2,7 @@
    55306341 void filemess __ARGS((buf_T *buf, char_u *name, char_u *s, int attr));
     
    55456356 char_u *set_context_in_autocmd __ARGS((expand_T *xp, char_u *arg, int doautocmd));
    55466357diff -Naur vim71.orig/src/proto/getchar.pro vim71/src/proto/getchar.pro
    5547 --- vim71.orig/src/proto/getchar.pro    2007-05-12 03:39:16.000000000 -0700
    5548 +++ vim71/src/proto/getchar.pro 2007-10-29 08:09:37.000000000 -0700
     6358--- vim71.orig/src/proto/getchar.pro    2007-05-12 06:39:16.000000000 -0400
     6359+++ vim71/src/proto/getchar.pro 2007-12-20 23:58:39.000000000 -0500
    55496360@@ -38,6 +38,7 @@
    55506361 void updatescript __ARGS((int c));
     
    55566367 int vpeekc_any __ARGS((void));
    55576368diff -Naur vim71.orig/src/proto/if_cscope.pro vim71/src/proto/if_cscope.pro
    5558 --- vim71.orig/src/proto/if_cscope.pro  2007-05-12 03:39:21.000000000 -0700
    5559 +++ vim71/src/proto/if_cscope.pro       2007-10-29 08:09:37.000000000 -0700
     6369--- vim71.orig/src/proto/if_cscope.pro  2007-05-12 06:39:21.000000000 -0400
     6370+++ vim71/src/proto/if_cscope.pro       2007-12-20 23:58:34.000000000 -0500
    55606371@@ -6,4 +6,5 @@
    55616372 void cs_free_tags __ARGS((void));
     
    55656376 /* vim: set ft=c : */
    55666377diff -Naur vim71.orig/src/proto/mbyte.pro vim71/src/proto/mbyte.pro
    5567 --- vim71.orig/src/proto/mbyte.pro      2007-05-12 03:39:38.000000000 -0700
    5568 +++ vim71/src/proto/mbyte.pro   2007-10-29 08:09:37.000000000 -0700
     6378--- vim71.orig/src/proto/mbyte.pro      2007-05-12 06:39:38.000000000 -0400
     6379+++ vim71/src/proto/mbyte.pro   2007-12-20 23:58:25.000000000 -0500
    55696380@@ -12,9 +12,9 @@
    55706381 int utf_ptr2cells __ARGS((char_u *p));
     
    55816392 int mb_ptr2char_adv __ARGS((char_u **pp));
    55826393diff -Naur vim71.orig/src/proto/misc1.pro vim71/src/proto/misc1.pro
    5583 --- vim71.orig/src/proto/misc1.pro      2007-05-12 03:39:34.000000000 -0700
    5584 +++ vim71/src/proto/misc1.pro   2007-10-29 08:09:38.000000000 -0700
     6394--- vim71.orig/src/proto/misc1.pro      2007-05-12 06:39:34.000000000 -0400
     6395+++ vim71/src/proto/misc1.pro   2007-12-20 23:59:02.000000000 -0500
    55856396@@ -48,10 +48,11 @@
    55866397 void vim_beep __ARGS((void));
     
    55986409 void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int one));
    55996410diff -Naur vim71.orig/src/proto/search.pro vim71/src/proto/search.pro
    5600 --- vim71.orig/src/proto/search.pro     2007-05-12 03:39:50.000000000 -0700
    5601 +++ vim71/src/proto/search.pro  2007-10-29 08:09:18.000000000 -0700
     6411--- vim71.orig/src/proto/search.pro     2007-05-12 06:39:50.000000000 -0400
     6412+++ vim71/src/proto/search.pro  2007-12-20 23:57:41.000000000 -0500
    56026413@@ -1,6 +1,7 @@
    56036414 /* search.c */
     
    56096420 void free_search_patterns __ARGS((void));
    56106421diff -Naur vim71.orig/src/proto/syntax.pro vim71/src/proto/syntax.pro
    5611 --- vim71.orig/src/proto/syntax.pro     2007-05-12 03:39:52.000000000 -0700
    5612 +++ vim71/src/proto/syntax.pro  2007-10-29 08:09:16.000000000 -0700
     6422--- vim71.orig/src/proto/syntax.pro     2007-05-12 06:39:52.000000000 -0400
     6423+++ vim71/src/proto/syntax.pro  2007-12-20 23:57:14.000000000 -0500
    56136424@@ -8,6 +8,8 @@
    56146425 void syntax_clear __ARGS((buf_T *buf));
     
    56216432 int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp));
    56226433diff -Naur vim71.orig/src/proto/window.pro vim71/src/proto/window.pro
    5623 --- vim71.orig/src/proto/window.pro     2007-05-12 03:40:00.000000000 -0700
    5624 +++ vim71/src/proto/window.pro  2007-10-29 08:09:16.000000000 -0700
     6434--- vim71.orig/src/proto/window.pro     2007-05-12 06:40:00.000000000 -0400
     6435+++ vim71/src/proto/window.pro  2007-12-20 23:57:20.000000000 -0500
    56256436@@ -59,4 +59,8 @@
    56266437 int only_one_window __ARGS((void));
     
    56336444 /* vim: set ft=c : */
    56346445diff -Naur vim71.orig/src/quickfix.c vim71/src/quickfix.c
    5635 --- vim71.orig/src/quickfix.c   2007-02-03 16:50:17.000000000 -0800
    5636 +++ vim71/src/quickfix.c        2007-10-29 08:09:38.000000000 -0700
     6446--- vim71.orig/src/quickfix.c   2007-02-03 19:50:17.000000000 -0500
     6447+++ vim71/src/quickfix.c        2007-12-20 23:58:47.000000000 -0500
    56376448@@ -1612,8 +1612,8 @@
    56386449        }
     
    57026513 }
    57036514diff -Naur vim71.orig/src/regexp.c vim71/src/regexp.c
    5704 --- vim71.orig/src/regexp.c     2007-05-07 12:50:03.000000000 -0700
    5705 +++ vim71/src/regexp.c  2007-10-29 08:09:18.000000000 -0700
     6515--- vim71.orig/src/regexp.c     2007-05-07 15:50:03.000000000 -0400
     6516+++ vim71/src/regexp.c  2007-12-21 00:00:04.000000000 -0500
    57066517@@ -2220,7 +2220,7 @@
    57076518                                break;
     
    57226533                                break;
    57236534                            case CLASS_XDIGIT:
    5724 @@ -3465,7 +3465,7 @@
     6535@@ -2770,7 +2770,8 @@
     6536     {
     6537 #ifdef FEAT_MBYTE
     6538        if (enc_utf8)
     6539-           prevchr_len += utf_char2len(mb_ptr2char(regparse + prevchr_len));
     6540+           /* exclude composing chars that mb_ptr2len does include */
     6541+           prevchr_len += utf_ptr2len(regparse + prevchr_len);
     6542        else if (has_mbyte)
     6543            prevchr_len += (*mb_ptr2len)(regparse + prevchr_len);
     6544        else
     6545@@ -3465,7 +3466,7 @@
    57256546                        (enc_utf8 && utf_fold(prog->regstart) == utf_fold(c)))
    57266547                        || (c < 255 && prog->regstart < 255 &&
     
    57316552        else
    57326553            retval = 0;
    5733 @@ -4200,7 +4200,7 @@
     6554@@ -3809,11 +3810,11 @@
     6555            break;
     6556 
     6557          case RE_BOF:
     6558-           /* Passing -1 to the getline() function provided for the search
     6559-            * should always return NULL if the current line is the first
     6560-            * line of the file. */
     6561+           /* We're not at the beginning of the file when below the first
     6562+            * line where we started, not at the start of the line or we
     6563+            * didn't start at the first line of the buffer. */
     6564            if (reglnum != 0 || reginput != regline
     6565-                       || (REG_MULTI && reg_getline((linenr_T)-1) != NULL))
     6566+                                         || (REG_MULTI && reg_firstlnum > 1))
     6567                status = RA_NOMATCH;
     6568            break;
     6569 
     6570@@ -4200,7 +4201,7 @@
    57346571 #ifdef FEAT_MBYTE
    57356572                            !enc_utf8 &&
     
    57406577                else if (*opnd == NUL)
    57416578                {
    5742 @@ -4733,10 +4733,10 @@
     6579@@ -4733,10 +4734,10 @@
    57436580                    rst.nextb = *OPERAND(next);
    57446581                    if (ireg_ic)
     
    57546591                    else
    57556592                        rst.nextb_ic = rst.nextb;
    5756 @@ -5558,11 +5558,12 @@
     6593@@ -5558,11 +5559,12 @@
    57576594            int     cu, cl;
    57586595 
     
    57706607                {
    57716608                    count++;
    5772 @@ -6490,10 +6491,10 @@
     6609@@ -6490,10 +6492,10 @@
    57736610        cc = utf_fold(c);
    57746611     else
     
    57856622        return vim_strchr(s, c);
    57866623 
    5787 @@ -6637,9 +6638,9 @@
     6624@@ -6637,9 +6639,9 @@
    57886625                }
    57896626            }
     
    57976634        }
    57986635        else
    5799 @@ -7014,7 +7015,14 @@
     6636@@ -7014,7 +7016,14 @@
    58006637 #ifdef FEAT_MBYTE
    58016638                            if (has_mbyte)
     
    58146651                                len -= l;
    58156652diff -Naur vim71.orig/src/screen.c vim71/src/screen.c
    5816 --- vim71.orig/src/screen.c     2007-05-07 12:27:53.000000000 -0700
    5817 +++ vim71/src/screen.c  2007-10-29 08:09:38.000000000 -0700
     6653--- vim71.orig/src/screen.c     2007-05-07 15:27:53.000000000 -0400
     6654+++ vim71/src/screen.c  2007-12-20 23:59:41.000000000 -0500
    58186655@@ -100,27 +100,7 @@
    58196656 static int     screen_cur_row, screen_cur_col; /* last known cursor position */
     
    59956832     int                extra_attr = 0;         /* attributes when n_extra != 0 */
    59966833     static char_u *at_end_str = (char_u *)""; /* used for p_extra when
    5997 @@ -2626,10 +2641,13 @@
     6834@@ -2584,6 +2599,7 @@
     6835     int                syntax_attr = 0;        /* attributes desired by syntax */
     6836     int                has_syntax = FALSE;     /* this buffer has syntax highl. */
     6837     int                save_did_emsg;
     6838+    int                eol_hl_off = 0;         /* 1 if highlighted char after EOL */
     6839 #endif
     6840 #ifdef FEAT_SPELL
     6841     int                has_spell = FALSE;      /* this buffer has spell checking */
     6842@@ -2626,10 +2642,13 @@
    59986843     int                line_attr = 0;          /* atrribute for the whole line */
    59996844 #endif
     
    60136858 #ifdef FEAT_ARABIC
    60146859     int                prev_c = 0;             /* previous Arabic character */
    6015 @@ -3074,12 +3092,20 @@
     6860@@ -3074,12 +3093,20 @@
    60166861 
    60176862 #ifdef FEAT_SEARCH_EXTRA
     
    60386883        shl->endcol = MAXCOL;
    60396884        shl->attr_cur = 0;
    6040 @@ -3122,6 +3148,8 @@
     6885@@ -3122,6 +3149,8 @@
    60416886                area_highlighting = TRUE;
    60426887            }
     
    60476892 #endif
    60486893 
    6049 @@ -3163,10 +3191,8 @@
     6894@@ -3163,10 +3192,8 @@
    60506895                if (cmdwin_type != 0 && wp == curwin)
    60516896                {
     
    60596904                }
    60606905            }
    6061 @@ -3182,6 +3208,7 @@
     6906@@ -3182,6 +3209,7 @@
    60626907                    fill_foldcolumn(extra, wp, FALSE, lnum);
    60636908                    n_extra = wp->w_p_fdc;
     
    60676912                    char_attr = hl_attr(HLF_FC);
    60686913                }
    6069 @@ -3388,13 +3415,24 @@
     6914@@ -3388,13 +3416,24 @@
    60706915                 * After end, check for start/end of next match.
    60716916                 * When another match, have to check for start again.
     
    60976942                    {
    60986943                        if (shl->startcol != MAXCOL
    6099 @@ -3442,26 +3480,43 @@
     6944@@ -3442,26 +3481,43 @@
    61006945                        }
    61016946                        break;
     
    61506995                line_attr = hl_attr(diff_hlf);
    61516996            }
    6152 @@ -3496,9 +3551,11 @@
     6997@@ -3496,9 +3552,11 @@
    61536998         * Get the next character to put on the screen.
    61546999         */
     
    61657010         */
    61667011        if (n_extra > 0)
    6167 @@ -3611,6 +3668,8 @@
     7012@@ -3611,6 +3669,8 @@
    61687013                         * Draw it as a space with a composing char. */
    61697014                        if (utf_iscomposing(mb_c))
     
    61747019                                u8cc[i] = u8cc[i - 1];
    61757020                            u8cc[0] = mb_c;
    6176 @@ -3621,13 +3680,18 @@
     7021@@ -3621,13 +3681,18 @@
    61777022                    if ((mb_l == 1 && c >= 0x80)
    61787023                            || (mb_l >= 1 && mb_c == 0)
     
    61947039                            transchar_hex(extra, mb_c);
    61957040 # ifdef FEAT_RIGHTLEFT
    6196 @@ -3635,11 +3699,13 @@
     7041@@ -3635,11 +3700,13 @@
    61977042                                rl_mirror(extra);
    61987043 # endif
     
    62087053                        p_extra = extra;
    62097054                        c = *p_extra;
    6210 @@ -3752,10 +3818,8 @@
     7055@@ -3752,10 +3819,8 @@
    62117056                 * a '<' in the first column. */
    62127057                if (n_skip > 0 && mb_l > 1)
     
    62207065                    if (area_attr == 0 && search_attr == 0)
    62217066                    {
    6222 @@ -4254,14 +4318,29 @@
     7067@@ -4248,20 +4313,39 @@
     7068        {
     7069 #ifdef FEAT_SEARCH_EXTRA
     7070            long prevcol = (long)(ptr - line) - (c == NUL);
     7071+
     7072+           /* we're not really at that column when skipping some text */
     7073+           if ((long)(wp->w_p_wrap ? wp->w_skipcol : wp->w_leftcol) > prevcol)
     7074+               ++prevcol;
     7075 #endif
     7076 
     7077            /* invert at least one char, used for Visual and empty line or
    62237078             * highlight match at end of line. If it's beyond the last
    62247079             * char on the screen, just overwrite that one (tricky!)  Not
     
    62547109                            && did_line_attr <= 1
    62557110 # endif
    6256 @@ -4302,15 +4381,27 @@
     7111@@ -4302,26 +4386,47 @@
    62577112 #ifdef FEAT_SEARCH_EXTRA
    62587113                if (area_attr == 0)
     
    62897144                }
    62907145 #endif
    6291 @@ -4460,6 +4551,8 @@
     7146                ScreenAttrs[off] = char_attr;
     7147 #ifdef FEAT_RIGHTLEFT
     7148                if (wp->w_p_rl)
     7149+               {
     7150                    --col;
     7151+                   --off;
     7152+               }
     7153                else
     7154 #endif
     7155+               {
     7156                    ++col;
     7157+                   ++off;
     7158+               }
     7159                ++vcol;
     7160+#ifdef FEAT_SYN_HL
     7161+               eol_hl_off = 1;
     7162+#endif
     7163            }
     7164        }
     7165 
     7166@@ -4331,6 +4436,14 @@
     7167        if (c == NUL)
     7168        {
     7169 #ifdef FEAT_SYN_HL
     7170+           if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol)
     7171+           {
     7172+               /* highlight last char after line */
     7173+               --col;
     7174+               --off;
     7175+               --vcol;
     7176+           }
     7177+
     7178            /* Highlight 'cursorcolumn' past end of the line. */
     7179            if (wp->w_p_wrap)
     7180                v = wp->w_skipcol;
     7181@@ -4341,7 +4454,7 @@
     7182 
     7183                vcol = v + col - win_col_off(wp);
     7184            if (wp->w_p_cuc
     7185-                   && (int)wp->w_virtcol >= vcol
     7186+                   && (int)wp->w_virtcol >= vcol - eol_hl_off
     7187                    && (int)wp->w_virtcol < W_WIDTH(wp) * (row - startrow + 1)
     7188                                                                           + v
     7189                    && lnum != wp->w_cursor.lnum
     7190@@ -4460,6 +4573,8 @@
    62927191            {
    62937192                if (mb_utf8)
     
    62987197                    if ((c & 0xff) == 0)
    62997198                        ScreenLines[off] = 0x80;   /* avoid storing zero */
    6300 @@ -4548,7 +4641,7 @@
     7199@@ -4548,7 +4663,7 @@
    63017200 
    63027201        /*
     
    63077206        if ((
    63087207 #ifdef FEAT_RIGHTLEFT
    6309 @@ -4625,9 +4718,13 @@
     7208@@ -4625,9 +4740,13 @@
    63107209 #endif
    63117210 #ifdef FEAT_MBYTE
     
    63237222                   )
    63247223                {
    6325 @@ -4787,6 +4884,10 @@
     7224@@ -4787,6 +4906,10 @@
    63267225 {
    63277226     unsigned       off_from;
     
    63347233 #if defined(FEAT_GUI) || defined(UNIX) || defined(FEAT_VERTSPLIT)
    63357234     int                    hl;
    6336 @@ -4813,6 +4914,10 @@
     7235@@ -4813,6 +4936,10 @@
    63377236 
    63387237     off_from = (unsigned)(current_ScreenLine - ScreenLines);
     
    63457244 #ifdef FEAT_RIGHTLEFT
    63467245     if (rlflag)
    6347 @@ -4847,7 +4952,7 @@
     7246@@ -4847,7 +4974,7 @@
    63487247     {
    63497248 #ifdef FEAT_MBYTE
     
    63547253            char_cells = 1;
    63557254 #endif
    6356 @@ -4924,7 +5029,7 @@
     7255@@ -4924,7 +5051,7 @@
    63577256                 * ScreenLinesUC[] is sufficient. */
    63587257                if (char_cells == 1
     
    63637262                    /* Writing a single-cell character over a double-cell
    63647263                     * character: need to redraw the next cell. */
    6365 @@ -4933,8 +5038,8 @@
     7264@@ -4933,8 +5060,8 @@
    63667265                }
    63677266                else if (char_cells == 2
     
    63747273                    /* Writing the second half of a double-cell character over
    63757274                     * a double-cell character: need to redraw the second
    6376 @@ -4953,10 +5058,10 @@
     7275@@ -4953,10 +5080,10 @@
    63777276             * char over the left halve of an existing one. */
    63787277            if (has_mbyte && col + char_cells == endcol
     
    63887287 #endif
    63897288 
    6390 @@ -5096,10 +5201,11 @@
     7289@@ -5096,10 +5223,11 @@
    63917290                        /* find previous character by counting from first
    63927291                         * column and get its width. */
     
    64017300                        }
    64027301                    }
    6403 @@ -5285,7 +5391,7 @@
     7302@@ -5285,7 +5413,7 @@
    64047303 static int skip_status_match_char __ARGS((expand_T *xp, char_u *s));
    64057304 
     
    64107309     static int
    64117310 status_match_len(xp, s)
    6412 @@ -5351,7 +5457,7 @@
     7311@@ -5351,7 +5479,7 @@
    64137312     int                row;
    64147313     char_u     *buf;
     
    64197318     int                attr;
    64207319     int                i;
    6421 @@ -6103,6 +6209,7 @@
     7320@@ -6103,6 +6231,7 @@
    64227321     char_u     *ptr = text;
    64237322     int                c;
     
    64277326     int                mbyte_cells = 1;
    64287327     int                u8c = 0;
    6429 @@ -6119,8 +6226,12 @@
     7328@@ -6119,8 +6248,12 @@
    64307329        return;
    64317330 
     
    64427341        c = *ptr;
    64437342 #ifdef FEAT_MBYTE
    6444 @@ -6143,6 +6254,7 @@
     7343@@ -6143,6 +6276,7 @@
    64457344                else
    64467345                    u8c = utfc_ptr2char(ptr, u8cc);
     
    64507349                if (u8c >= 0x10000)
    64517350                {
    6452 @@ -6150,6 +6262,7 @@
     7351@@ -6150,6 +6284,7 @@
    64537352                    if (attr == 0)
    64547353                        attr = hl_attr(HLF_8);
     
    64587357                if (p_arshape && !p_tbidi && ARABIC_CHAR(u8c))
    64597358                {
    6460 @@ -6241,19 +6354,19 @@
     7359@@ -6241,19 +6376,19 @@
    64617360            else if (has_mbyte
    64627361                    && (len < 0 ? ptr[mbyte_blen] == NUL
     
    64847383 #endif
    64857384            ScreenLines[off] = c;
    6486 @@ -6318,7 +6431,7 @@
     7385@@ -6318,7 +6453,7 @@
    64877386 
    64887387 #ifdef FEAT_SEARCH_EXTRA
     
    64937392     static void
    64947393 start_search_hl()
    6495 @@ -6331,7 +6444,7 @@
     7394@@ -6331,7 +6466,7 @@
    64967395 }
    64977396 
     
    65027401     static void
    65037402 end_search_hl()
    6504 @@ -6351,18 +6464,28 @@
     7403@@ -6351,18 +6486,28 @@
    65057404     win_T      *wp;
    65067405     linenr_T   lnum;
     
    65367435                && shl->lnum == 0
    65377436                && re_multiline(shl->rm.regprog))
    6538 @@ -6397,11 +6520,13 @@
     7437@@ -6397,11 +6542,13 @@
    65397438                }
    65407439            }
     
    65517450  * Sets shl->lnum and shl->rm contents.
    65527451  * Note: Assumes a previous match is always before "lnum", unless
    6553 @@ -6411,7 +6536,7 @@
     7452@@ -6411,7 +6558,7 @@
    65547453     static void
    65557454 next_search_hl(win, shl, lnum, mincol)
     
    65607459     colnr_T    mincol;         /* minimal column for a match */
    65617460 {
    6562 @@ -6479,7 +6604,7 @@
     7461@@ -6479,7 +6626,7 @@
    65637462            /* Error while handling regexp: stop using this regexp. */
    65647463            if (shl == &search_hl)
     
    65697468                no_hlsearch = TRUE;
    65707469            }
    6571 @@ -6827,6 +6952,9 @@
     7470@@ -6827,6 +6974,9 @@
    65727471 {
    65737472     int                r, c;
     
    65797478     /* Can't use ScreenLines unless initialized */
    65807479     if (ScreenLines == NULL)
    6581 @@ -6837,10 +6965,13 @@
     7480@@ -6837,10 +6987,13 @@
    65827481     for (r = row; r < row + height; ++r)
    65837482     {
     
    65947493                screen_char_2(off + c, r, c);
    65957494                ++c;
    6596 @@ -6850,7 +6981,7 @@
     7495@@ -6850,7 +7003,7 @@
    65977496            {
    65987497                screen_char(off + c, r, c);
     
    66047503            }
    66057504diff -Naur vim71.orig/src/search.c vim71/src/search.c
    6606 --- vim71.orig/src/search.c     2007-05-07 12:42:02.000000000 -0700
    6607 +++ vim71/src/search.c  2007-10-29 08:09:18.000000000 -0700
     7505--- vim71.orig/src/search.c     2007-05-07 15:42:02.000000000 -0400
     7506+++ vim71/src/search.c  2007-12-20 23:57:41.000000000 -0500
    66087507@@ -101,7 +101,6 @@
    66097508 static char_u      *mr_pattern = NULL; /* pattern used by search_regcomp() */
     
    67417640 
    67427641diff -Naur vim71.orig/src/spell.c vim71/src/spell.c
    6743 --- vim71.orig/src/spell.c      2007-05-07 12:48:38.000000000 -0700
    6744 +++ vim71/src/spell.c   2007-10-29 08:09:18.000000000 -0700
     7642--- vim71.orig/src/spell.c      2007-05-07 15:48:38.000000000 -0400
     7643+++ vim71/src/spell.c   2007-12-20 23:57:33.000000000 -0500
    67457644@@ -7829,7 +7829,7 @@
    67467645 # if (_MSC_VER <= 1200)
     
    67967695            if (c == c2)
    67977696diff -Naur vim71.orig/src/structs.h vim71/src/structs.h
    6798 --- vim71.orig/src/structs.h    2007-05-07 12:50:49.000000000 -0700
    6799 +++ vim71/src/structs.h 2007-10-29 08:09:48.000000000 -0700
     7697--- vim71.orig/src/structs.h    2007-05-07 15:50:49.000000000 -0400
     7698+++ vim71/src/structs.h 2007-12-20 23:59:11.000000000 -0500
    68007699@@ -278,6 +278,9 @@
    68017700     linenr_T   ue_lcount;      /* linecount when u_save called */
     
    68817780     /*
    68827781diff -Naur vim71.orig/src/syntax.c vim71/src/syntax.c
    6883 --- vim71.orig/src/syntax.c     2007-05-07 12:42:55.000000000 -0700
    6884 +++ vim71/src/syntax.c  2007-10-29 08:09:51.000000000 -0700
     7782--- vim71.orig/src/syntax.c     2007-05-07 15:42:55.000000000 -0400
     7783+++ vim71/src/syntax.c  2007-12-20 23:59:18.000000000 -0500
    68857784@@ -66,8 +66,10 @@
    68867785 #define HL_TABLE() ((struct hl_group *)((highlight_ga.ga_data)))
     
    71358034  * Used when quitting for systems which need it.
    71368035diff -Naur vim71.orig/src/term.c vim71/src/term.c
    7137 --- vim71.orig/src/term.c       2007-05-07 12:39:11.000000000 -0700
    7138 +++ vim71/src/term.c    2007-10-29 08:09:37.000000000 -0700
     8036--- vim71.orig/src/term.c       2007-05-07 15:39:11.000000000 -0400
     8037+++ vim71/src/term.c    2007-12-20 23:58:45.000000000 -0500
    71398038@@ -4809,6 +4809,8 @@
    71408039            if (num_bytes == -1)
     
    71478046        else if (key_name[0] == (int)KS_TABMENU)
    71488047diff -Naur vim71.orig/src/termlib.c vim71/src/termlib.c
    7149 --- vim71.orig/src/termlib.c    2007-05-07 12:39:49.000000000 -0700
    7150 +++ vim71/src/termlib.c 2007-10-29 08:09:18.000000000 -0700
     8048--- vim71.orig/src/termlib.c    2007-05-07 15:39:49.000000000 -0400
     8049+++ vim71/src/termlib.c 2007-12-20 23:57:38.000000000 -0500
    71518050@@ -191,7 +191,7 @@
    71528051            lbuf[0] == '\t' &&
     
    71598058        if (lbuf[llen-2] == '\\')               /* and continuations */
    71608059diff -Naur vim71.orig/src/testdir/Makefile vim71/src/testdir/Makefile
    7161 --- vim71.orig/src/testdir/Makefile     2006-04-30 04:08:01.000000000 -0700
    7162 +++ vim71/src/testdir/Makefile  2007-10-29 08:09:38.000000000 -0700
     8060--- vim71.orig/src/testdir/Makefile     2006-04-30 07:08:01.000000000 -0400
     8061+++ vim71/src/testdir/Makefile  2007-12-20 23:58:59.000000000 -0500
    71638062@@ -1,9 +1,13 @@
    71648063 #
     
    72208119        -echo Test results: >test.log
    72218120diff -Naur vim71.orig/src/testdir/test14.in vim71/src/testdir/test14.in
    7222 --- vim71.orig/src/testdir/test14.in    2004-06-07 07:32:05.000000000 -0700
    7223 +++ vim71/src/testdir/test14.in 2007-10-29 08:09:38.000000000 -0700
     8121--- vim71.orig/src/testdir/test14.in    2004-06-07 10:32:05.000000000 -0400
     8122+++ vim71/src/testdir/test14.in 2007-12-20 23:58:59.000000000 -0500
    72248123@@ -18,6 +18,7 @@
    72258124 : let tt = "o\<C-V>65\<C-V>x42\<C-V>o103 \<C-V>33a\<C-V>xfg\<C-V>o78\<Esc>"
     
    72318130 /^Piece
    72328131diff -Naur vim71.orig/src/testdir/test26.in vim71/src/testdir/test26.in
    7233 --- vim71.orig/src/testdir/test26.in    2004-06-07 07:32:05.000000000 -0700
    7234 +++ vim71/src/testdir/test26.in 2007-10-29 08:09:38.000000000 -0700
     8132--- vim71.orig/src/testdir/test26.in    2004-06-07 10:32:05.000000000 -0400
     8133+++ vim71/src/testdir/test26.in 2007-12-20 23:58:59.000000000 -0500
    72358134@@ -37,6 +37,7 @@
    72368135 :    endif
     
    72428141 ENDTEST
    72438142diff -Naur vim71.orig/src/testdir/test34.in vim71/src/testdir/test34.in
    7244 --- vim71.orig/src/testdir/test34.in    2006-04-30 06:33:24.000000000 -0700
    7245 +++ vim71/src/testdir/test34.in 2007-10-29 08:09:38.000000000 -0700
     8143--- vim71.orig/src/testdir/test34.in    2006-04-30 09:33:24.000000000 -0400
     8144+++ vim71/src/testdir/test34.in 2007-12-20 23:58:59.000000000 -0500
    72468145@@ -52,7 +52,15 @@
    72478146 ---*---
     
    72628161 here
    72638162diff -Naur vim71.orig/src/testdir/test45.in vim71/src/testdir/test45.in
    7264 --- vim71.orig/src/testdir/test45.in    2004-06-07 07:32:05.000000000 -0700
    7265 +++ vim71/src/testdir/test45.in 2007-10-29 08:09:38.000000000 -0700
     8163--- vim71.orig/src/testdir/test45.in    2004-06-07 10:32:05.000000000 -0400
     8164+++ vim71/src/testdir/test45.in 2007-12-20 23:58:59.000000000 -0500
    72668165@@ -55,6 +55,7 @@
    72678166 /kk$
     
    72738172 
    72748173diff -Naur vim71.orig/src/testdir/test47.in vim71/src/testdir/test47.in
    7275 --- vim71.orig/src/testdir/test47.in    2004-06-07 07:32:05.000000000 -0700
    7276 +++ vim71/src/testdir/test47.in 2007-10-29 08:09:38.000000000 -0700
     8174--- vim71.orig/src/testdir/test47.in    2004-06-07 10:32:05.000000000 -0400
     8175+++ vim71/src/testdir/test47.in 2007-12-20 23:58:59.000000000 -0500
    72778176@@ -34,6 +34,7 @@
    72788177 :call append("$", two)
     
    72848183 
    72858184diff -Naur vim71.orig/src/testdir/test49.in vim71/src/testdir/test49.in
    7286 --- vim71.orig/src/testdir/test49.in    2006-04-28 02:29:54.000000000 -0700
    7287 +++ vim71/src/testdir/test49.in 2007-10-29 08:09:38.000000000 -0700
     8185--- vim71.orig/src/testdir/test49.in    2006-04-28 05:29:54.000000000 -0400
     8186+++ vim71/src/testdir/test49.in 2007-12-20 23:58:59.000000000 -0500
    72888187@@ -1,13 +1,29 @@
    72898188 This is a test of the script language.
     
    73198218 Results of test49.vim:
    73208219diff -Naur vim71.orig/src/testdir/test55.in vim71/src/testdir/test55.in
    7321 --- vim71.orig/src/testdir/test55.in    2006-10-15 07:07:05.000000000 -0700
    7322 +++ vim71/src/testdir/test55.in 2007-10-29 08:09:38.000000000 -0700
     8220--- vim71.orig/src/testdir/test55.in    2006-10-15 10:07:05.000000000 -0400
     8221+++ vim71/src/testdir/test55.in 2007-12-20 23:58:59.000000000 -0500
    73238222@@ -345,6 +345,10 @@
    73248223 :endfun
     
    73338232 
    73348233diff -Naur vim71.orig/src/testdir/test56.in vim71/src/testdir/test56.in
    7335 --- vim71.orig/src/testdir/test56.in    2006-09-03 07:28:41.000000000 -0700
    7336 +++ vim71/src/testdir/test56.in 2007-10-29 08:09:38.000000000 -0700
     8234--- vim71.orig/src/testdir/test56.in    2006-09-03 10:28:41.000000000 -0400
     8235+++ vim71/src/testdir/test56.in 2007-12-20 23:58:59.000000000 -0500
    73378236@@ -17,5 +17,5 @@
    73388237 fun s:DoNothing()
     
    73438242 end:
    73448243diff -Naur vim71.orig/src/testdir/test58.in vim71/src/testdir/test58.in
    7345 --- vim71.orig/src/testdir/test58.in    2006-04-03 11:24:04.000000000 -0700
    7346 +++ vim71/src/testdir/test58.in 2007-10-29 08:09:38.000000000 -0700
     8244--- vim71.orig/src/testdir/test58.in    2006-04-03 14:24:04.000000000 -0400
     8245+++ vim71/src/testdir/test58.in 2007-12-20 23:58:59.000000000 -0500
    73478246@@ -86,6 +86,7 @@
    73488247 :$put =str
     
    73658264 
    73668265diff -Naur vim71.orig/src/testdir/test59.in vim71/src/testdir/test59.in
    7367 --- vim71.orig/src/testdir/test59.in    2006-04-03 11:29:24.000000000 -0700
    7368 +++ vim71/src/testdir/test59.in 2007-10-29 08:09:38.000000000 -0700
     8266--- vim71.orig/src/testdir/test59.in    2006-04-03 14:29:24.000000000 -0400
     8267+++ vim71/src/testdir/test59.in 2007-12-20 23:58:59.000000000 -0500
    73698268@@ -90,6 +90,7 @@
    73708269 :$put =str
     
    73878286 
    73888287diff -Naur vim71.orig/src/testdir/test60.in vim71/src/testdir/test60.in
    7389 --- vim71.orig/src/testdir/test60.in    2006-05-05 11:41:18.000000000 -0700
    7390 +++ vim71/src/testdir/test60.in 2007-10-29 08:09:38.000000000 -0700
     8288--- vim71.orig/src/testdir/test60.in    2006-05-05 14:41:18.000000000 -0400
     8289+++ vim71/src/testdir/test60.in 2007-12-20 23:58:59.000000000 -0500
    73918290@@ -569,6 +569,9 @@
    73928291     redir END
     
    74008299 :w
    74018300diff -Naur vim71.orig/src/testdir/test60.vim vim71/src/testdir/test60.vim
    7402 --- vim71.orig/src/testdir/test60.vim   2006-01-12 11:45:59.000000000 -0800
    7403 +++ vim71/src/testdir/test60.vim        2007-10-29 08:09:38.000000000 -0700
     8301--- vim71.orig/src/testdir/test60.vim   2006-01-12 14:45:59.000000000 -0500
     8302+++ vim71/src/testdir/test60.vim        2007-12-20 23:58:59.000000000 -0500
    74048303@@ -94,4 +94,5 @@
    74058304 else
     
    74098308 
    74108309diff -Naur vim71.orig/src/testdir/test62.in vim71/src/testdir/test62.in
    7411 --- vim71.orig/src/testdir/test62.in    2006-04-30 04:29:15.000000000 -0700
    7412 +++ vim71/src/testdir/test62.in 2007-10-29 08:09:38.000000000 -0700
     8310--- vim71.orig/src/testdir/test62.in    2006-04-30 07:29:15.000000000 -0400
     8311+++ vim71/src/testdir/test62.in 2007-12-20 23:58:59.000000000 -0500
    74138312@@ -7,6 +7,7 @@
    74148313 :let nr = tabpagenr()
     
    74288327 :/^Results/,$w! test.out
    74298328diff -Naur vim71.orig/src/testdir/test63.in vim71/src/testdir/test63.in
    7430 --- vim71.orig/src/testdir/test63.in    1969-12-31 16:00:00.000000000 -0800
    7431 +++ vim71/src/testdir/test63.in 2007-10-29 08:09:38.000000000 -0700
     8329--- vim71.orig/src/testdir/test63.in    1969-12-31 19:00:00.000000000 -0500
     8330+++ vim71/src/testdir/test63.in 2007-12-20 23:58:59.000000000 -0500
    74328331@@ -0,0 +1,157 @@
    74338332+Test for ":match", ":2match", ":3match", "clearmatches()", "getmatches()",
     
    75898488+Results of test63:
    75908489diff -Naur vim71.orig/src/testdir/test63.ok vim71/src/testdir/test63.ok
    7591 --- vim71.orig/src/testdir/test63.ok    1969-12-31 16:00:00.000000000 -0800
    7592 +++ vim71/src/testdir/test63.ok 2007-10-29 08:09:16.000000000 -0700
     8490--- vim71.orig/src/testdir/test63.ok    1969-12-31 19:00:00.000000000 -0500
     8491+++ vim71/src/testdir/test63.ok 2007-12-20 23:57:20.000000000 -0500
    75938492@@ -0,0 +1,11 @@
    75948493+Results of test63:
     
    76048503+*** Test 10: OK
    76058504diff -Naur vim71.orig/src/testdir/test64.in vim71/src/testdir/test64.in
    7606 --- vim71.orig/src/testdir/test64.in    1969-12-31 16:00:00.000000000 -0800
    7607 +++ vim71/src/testdir/test64.in 2007-10-29 08:09:38.000000000 -0700
     8505--- vim71.orig/src/testdir/test64.in    1969-12-31 19:00:00.000000000 -0500
     8506+++ vim71/src/testdir/test64.in 2007-12-20 23:58:59.000000000 -0500
    76088507@@ -0,0 +1,54 @@
    76098508+Test for regexp patterns.
     
    76628561+Results of test64:
    76638562diff -Naur vim71.orig/src/testdir/test64.ok vim71/src/testdir/test64.ok
    7664 --- vim71.orig/src/testdir/test64.ok    1969-12-31 16:00:00.000000000 -0800
    7665 +++ vim71/src/testdir/test64.ok 2007-10-29 08:09:25.000000000 -0700
     8563--- vim71.orig/src/testdir/test64.ok    1969-12-31 19:00:00.000000000 -0500
     8564+++ vim71/src/testdir/test64.ok 2007-12-20 23:57:57.000000000 -0500
    76668565@@ -0,0 +1,6 @@
    76678566+Results of test64:
     
    76728571+OK
    76738572diff -Naur vim71.orig/src/ui.c vim71/src/ui.c
    7674 --- vim71.orig/src/ui.c 2007-05-07 12:49:09.000000000 -0700
    7675 +++ vim71/src/ui.c      2007-10-29 08:09:28.000000000 -0700
     8573--- vim71.orig/src/ui.c 2007-05-07 15:49:09.000000000 -0400
     8574+++ vim71/src/ui.c      2007-12-20 23:58:05.000000000 -0500
    76768575@@ -1603,8 +1603,6 @@
    76778576 #if defined(FEAT_GUI) || defined(FEAT_MOUSE_GPM) \
     
    76958594                || defined(FEAT_MENU))) \
    76968595diff -Naur vim71.orig/src/undo.c vim71/src/undo.c
    7697 --- vim71.orig/src/undo.c       2007-05-07 12:21:14.000000000 -0700
    7698 +++ vim71/src/undo.c    2007-10-29 08:09:48.000000000 -0700
     8596--- vim71.orig/src/undo.c       2007-05-07 15:21:14.000000000 -0400
     8597+++ vim71/src/undo.c    2007-12-20 23:59:42.000000000 -0500
    76998598@@ -76,6 +76,12 @@
    77008599  * buffer is unloaded.
     
    79188817     u_freeentries(buf, uhp, uhpp);
    79198818 }
    7920 @@ -1585,6 +1707,8 @@
     8819@@ -1556,6 +1678,14 @@
     8820 {
     8821     u_header_T     *tofree, *next;
     8822 
     8823+    /* If this is the top branch we may need to use u_freeheader() to update
     8824+     * all the pointers. */
     8825+    if (uhp == buf->b_u_oldhead)
     8826+    {
     8827+       u_freeheader(buf, uhp, uhpp);
     8828+       return;
     8829+    }
     8830+
     8831     if (uhp->uh_alt_prev != NULL)
     8832        uhp->uh_alt_prev->uh_alt_next = NULL;
     8833 
     8834@@ -1585,6 +1715,8 @@
    79218835     /* Check for pointers to the header that become invalid now. */
    79228836     if (buf->b_u_curhead == uhp)
     
    79278841        *uhpp = NULL;
    79288842 
    7929 @@ -1594,6 +1718,9 @@
     8843@@ -1594,6 +1726,9 @@
    79308844        u_freeentry(uep, uep->ue_size);
    79318845     }
     
    79378851     --buf->b_u_numhead;
    79388852 }
    7939 @@ -1609,6 +1736,9 @@
     8853@@ -1609,6 +1744,9 @@
    79408854     while (n > 0)
    79418855        U_FREE_LINE(uep->ue_array[--n]);
     
    79488862 
    79498863diff -Naur vim71.orig/src/version.c vim71/src/version.c
    7950 --- vim71.orig/src/version.c    2007-05-12 03:23:44.000000000 -0700
    7951 +++ vim71/src/version.c 2007-10-29 08:09:51.000000000 -0700
    7952 @@ -667,6 +667,266 @@
     8864--- vim71.orig/src/version.c    2007-05-12 06:23:44.000000000 -0400
     8865+++ vim71/src/version.c 2007-12-21 00:00:07.000000000 -0500
     8866@@ -667,6 +667,320 @@
    79538867 static int included_patches[] =
    79548868 {   /* Add new patch number below this line */
    79558869 /**/
     8870+    175,
     8871+/**/
     8872+    174,
     8873+/**/
     8874+    173,
     8875+/**/
     8876+    172,
     8877+/**/
     8878+    171,
     8879+/**/
     8880+    170,
     8881+/**/
     8882+    169,
     8883+/**/
     8884+    167,
     8885+/**/
     8886+    166,
     8887+/**/
     8888+    165,
     8889+/**/
     8890+    164,
     8891+/**/
     8892+    163,
     8893+/**/
     8894+    162,
     8895+/**/
     8896+    161,
     8897+/**/
     8898+    160,
     8899+/**/
     8900+    159,
     8901+/**/
     8902+    157,
     8903+/**/
     8904+    156,
     8905+/**/
     8906+    155,
     8907+/**/
     8908+    154,
     8909+/**/
     8910+    153,
     8911+/**/
     8912+    152,
     8913+/**/
     8914+    151,
     8915+/**/
     8916+    150,
     8917+/**/
     8918+    149,
     8919+/**/
     8920+    148,
     8921+/**/
     8922+    147,
     8923+/**/
    79568924+    145,
    79578925+/**/
     
    82189186 
    82199187diff -Naur vim71.orig/src/vim.h vim71/src/vim.h
    8220 --- vim71.orig/src/vim.h        2007-05-12 02:53:29.000000000 -0700
    8221 +++ vim71/src/vim.h     2007-10-29 08:09:18.000000000 -0700
     9188--- vim71.orig/src/vim.h        2007-05-12 05:53:29.000000000 -0400
     9189+++ vim71/src/vim.h     2007-12-20 23:57:45.000000000 -0500
    82229190@@ -1380,8 +1380,14 @@
    82239191 #endif
     
    82389206 # define MB_STRNICMP(d, s, n)  STRNICMP((d), (s), (n))
    82399207diff -Naur vim71.orig/src/vimtutor vim71/src/vimtutor
    8240 --- vim71.orig/src/vimtutor     2004-06-07 07:32:27.000000000 -0700
    8241 +++ vim71/src/vimtutor  2007-10-29 08:09:16.000000000 -0700
     9208--- vim71.orig/src/vimtutor     2004-06-07 10:32:27.000000000 -0400
     9209+++ vim71/src/vimtutor  2007-12-20 23:57:06.000000000 -0500
    82429210@@ -39,18 +39,22 @@
    82439211 # remove the copy of the tutor on exit
     
    82749242 # Use Vim to copy the tutor, it knows the value of $VIMRUNTIME
    82759243diff -Naur vim71.orig/src/window.c vim71/src/window.c
    8276 --- vim71.orig/src/window.c     2007-05-07 12:25:30.000000000 -0700
    8277 +++ vim71/src/window.c  2007-10-29 08:09:40.000000000 -0700
     9244--- vim71.orig/src/window.c     2007-05-07 15:25:30.000000000 -0400
     9245+++ vim71/src/window.c  2007-12-20 23:59:05.000000000 -0500
    82789246@@ -75,6 +75,7 @@
    82799247 static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
     
    87569724+}
    87579725+#endif
     9726diff -Naur vim71.orig/src/xxd/xxd.c vim71/src/xxd/xxd.c
     9727--- vim71.orig/src/xxd/xxd.c    2007-05-07 15:41:57.000000000 -0400
     9728+++ vim71/src/xxd/xxd.c 2007-12-20 23:59:57.000000000 -0500
     9729@@ -212,7 +212,7 @@
     9730 
     9731 #define TRY_SEEK       /* attempt to use lseek, or skip forward by reading */
     9732 #define COLS 256       /* change here, if you ever need more columns */
     9733-#define LLEN (9 + (5*COLS-1)/2 + 2 + COLS)
     9734+#define LLEN (11 + (9*COLS-1)/1 + COLS + 2)
     9735 
     9736 char hexxa[] = "0123456789abcdef0123456789ABCDEF", *hexx = hexxa;
     9737 
     9738@@ -590,7 +590,8 @@
     9739       default:                 octspergrp = 0; break;
     9740       }
     9741 
     9742-  if (cols < 1 || (!hextype && (cols > COLS)))
     9743+  if (cols < 1 || ((hextype == HEX_NORMAL || hextype == HEX_BITS)
     9744+                                                           && (cols > COLS)))
     9745     {
     9746       fprintf(stderr, "%s: invalid number of columns (max. %d).\n", pname, COLS);
     9747       exit(1);
     9748@@ -750,6 +751,7 @@
     9749        }
     9750       if (ebcdic)
     9751        e = (e < 64) ? '.' : etoa64[e-64];
     9752+      /* When changing this update definition of LLEN above. */
     9753       l[11 + (grplen * cols - 1)/octspergrp + p] =
     9754 #ifdef __MVS__
     9755          (e >= 64)
Note: See TracChangeset for help on using the changeset viewer.