--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.103
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.103
+Problem: When 'bomb' is changed the window title is updated to show/hide a
+ "+", but the tab page label isn't. (Patrick Texier)
+Solution: Set "redraw_tabline" in most places where "need_maketitle" is set.
+ (partly by Lech Lorens)
+Files: src/option.c
+
+
+*** ../vim-7.2.102/src/option.c Wed Feb 4 17:27:50 2009
+--- src/option.c Wed Feb 4 17:40:02 2009
+***************
+*** 5268,5273 ****
+--- 5268,5288 ----
+ }
+ #endif
+
++ #ifdef FEAT_TITLE
++ static void redraw_titles __ARGS((void));
++
++ /*
++ * Redraw the window title and/or tab page text later.
++ */
++ static void redraw_titles()
++ {
++ need_maketitle = TRUE;
++ # ifdef FEAT_WINDOWS
++ redraw_tabline = TRUE;
++ # endif
++ }
++ #endif
++
+ /*
+ * Set a string option to a new value (without checking the effect).
+ * The string is copied into allocated memory.
+***************
+*** 5672,5678 ****
+ {
+ # ifdef FEAT_TITLE
+ /* May show a "+" in the title now. */
+! need_maketitle = TRUE;
+ # endif
+ /* Add 'fileencoding' to the swap file. */
+ ml_setflags(curbuf);
+--- 5687,5693 ----
+ {
+ # ifdef FEAT_TITLE
+ /* May show a "+" in the title now. */
+! redraw_titles();
+ # endif
+ /* Add 'fileencoding' to the swap file. */
+ ml_setflags(curbuf);
+***************
+*** 5691,5697 ****
+ {
+ errmsg = mb_init();
+ # ifdef FEAT_TITLE
+! need_maketitle = TRUE;
+ # endif
+ }
+ }
+--- 5706,5712 ----
+ {
+ errmsg = mb_init();
+ # ifdef FEAT_TITLE
+! redraw_titles();
+ # endif
+ }
+ }
+***************
+*** 5800,5806 ****
+ else
+ curbuf->b_p_tx = FALSE;
+ #ifdef FEAT_TITLE
+! need_maketitle = TRUE;
+ #endif
+ /* update flag in swap file */
+ ml_setflags(curbuf);
+--- 5815,5821 ----
+ else
+ curbuf->b_p_tx = FALSE;
+ #ifdef FEAT_TITLE
+! redraw_titles();
+ #endif
+ /* update flag in swap file */
+ ml_setflags(curbuf);
+***************
+*** 7127,7148 ****
+ curbuf->b_did_warn = FALSE;
+
+ #ifdef FEAT_TITLE
+! need_maketitle = TRUE;
+ #endif
+ }
+
+ #ifdef FEAT_TITLE
+ /* when 'modifiable' is changed, redraw the window title */
+ else if ((int *)varp == &curbuf->b_p_ma)
+! need_maketitle = TRUE;
+ /* when 'endofline' is changed, redraw the window title */
+ else if ((int *)varp == &curbuf->b_p_eol)
+! need_maketitle = TRUE;
+! #ifdef FEAT_MBYTE
+! /* when 'bomb' is changed, redraw the window title */
+ else if ((int *)varp == &curbuf->b_p_bomb)
+! need_maketitle = TRUE;
+! #endif
+ #endif
+
+ /* when 'bin' is set also set some other options */
+--- 7142,7169 ----
+ curbuf->b_did_warn = FALSE;
+
+ #ifdef FEAT_TITLE
+! redraw_titles();
+ #endif
+ }
+
+ #ifdef FEAT_TITLE
+ /* when 'modifiable' is changed, redraw the window title */
+ else if ((int *)varp == &curbuf->b_p_ma)
+! {
+! redraw_titles();
+! }
+ /* when 'endofline' is changed, redraw the window title */
+ else if ((int *)varp == &curbuf->b_p_eol)
+! {
+! redraw_titles();
+! }
+! # ifdef FEAT_MBYTE
+! /* when 'bomb' is changed, redraw the window title and tab page text */
+ else if ((int *)varp == &curbuf->b_p_bomb)
+! {
+! redraw_titles();
+! }
+! # endif
+ #endif
+
+ /* when 'bin' is set also set some other options */
+***************
+*** 7150,7156 ****
+ {
+ set_options_bin(old_value, curbuf->b_p_bin, opt_flags);
+ #ifdef FEAT_TITLE
+! need_maketitle = TRUE;
+ #endif
+ }
+
+--- 7171,7177 ----
+ {
+ set_options_bin(old_value, curbuf->b_p_bin, opt_flags);
+ #ifdef FEAT_TITLE
+! redraw_titles();
+ #endif
+ }
+
+***************
+*** 7301,7307 ****
+ if (!value)
+ save_file_ff(curbuf); /* Buffer is unchanged */
+ #ifdef FEAT_TITLE
+! need_maketitle = TRUE;
+ #endif
+ #ifdef FEAT_AUTOCMD
+ modified_was_set = value;
+--- 7322,7328 ----
+ if (!value)
+ save_file_ff(curbuf); /* Buffer is unchanged */
+ #ifdef FEAT_TITLE
+! redraw_titles();
+ #endif
+ #ifdef FEAT_AUTOCMD
+ modified_was_set = value;
+***************
+*** 7736,7742 ****
+ newFoldLevel();
+ }
+
+! /* 'foldminlevel' */
+ else if (pp == &curwin->w_p_fml)
+ {
+ foldUpdateAll(curwin);
+--- 7757,7763 ----
+ newFoldLevel();
+ }
+
+! /* 'foldminlines' */
+ else if (pp == &curwin->w_p_fml)
+ {
+ foldUpdateAll(curwin);
+*** ../vim-7.2.102/src/version.c Thu Feb 5 20:47:14 2009
+--- src/version.c Wed Feb 11 11:32:20 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 103,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+73. You give your dog used motherboards instead of bones
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.104
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.104
+Problem: When using ":saveas bar.c" the tab label isn't updated right away.
+Solution: Set redraw_tabline. (Francois Ingelrest)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.2.103/src/ex_cmds.c Wed Feb 4 13:13:42 2009
+--- src/ex_cmds.c Wed Feb 11 15:58:06 2009
+***************
+*** 2707,2713 ****
+--- 2707,2718 ----
+ if (eap->cmdidx == CMD_saveas)
+ {
+ if (retval == OK)
++ {
+ curbuf->b_p_ro = FALSE;
++ #ifdef FEAT_WINDOWS
++ redraw_tabline = TRUE;
++ #endif
++ }
+ /* Change directories when the 'acd' option is set. */
+ DO_AUTOCHDIR
+ }
+*** ../vim-7.2.103/src/version.c Wed Feb 11 11:34:24 2009
+--- src/version.c Wed Feb 11 16:02:19 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 104,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+75. You start wondering whether you could actually upgrade your brain
+ with a Pentium Pro microprocessor 80. The upgrade works just fine.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.105
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.105
+Problem: Modeline setting for 'foldmethod' overrules diff options. (Ingo
+ Karkat)
+Solution: Don't set 'foldmethod' and 'wrap' from a modeline when 'diff' is
+ on.
+Files: src/option.c
+
+
+*** ../vim-7.2.104/src/option.c Wed Feb 11 11:34:24 2009
+--- src/option.c Wed Feb 11 16:29:56 2009
+***************
+*** 4119,4129 ****
+ && options[opt_idx].var == VAR_WIN)
+ goto skip;
+
+! /* Disallow changing some options from modelines */
+! if ((opt_flags & OPT_MODELINE) && (flags & P_SECURE))
+ {
+! errmsg = (char_u *)_("E520: Not allowed in a modeline");
+! goto skip;
+ }
+
+ #ifdef HAVE_SANDBOX
+--- 4119,4139 ----
+ && options[opt_idx].var == VAR_WIN)
+ goto skip;
+
+! /* Disallow changing some options from modelines. */
+! if (opt_flags & OPT_MODELINE)
+ {
+! if (flags & P_SECURE)
+! {
+! errmsg = (char_u *)_("E520: Not allowed in a modeline");
+! goto skip;
+! }
+! /* In diff mode some options are overruled. This avoids that
+! * 'foldmethod' becomes "marker" instead of "diff" and that
+! * "wrap" gets set. */
+! if (curwin->w_p_diff
+! && (options[opt_idx].indir == PV_FDM
+! || options[opt_idx].indir == PV_WRAP))
+! goto skip;
+ }
+
+ #ifdef HAVE_SANDBOX
+*** ../vim-7.2.104/src/version.c Wed Feb 11 16:02:29 2009
+--- src/version.c Wed Feb 11 16:40:35 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 105,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+76. Your ISP regards you as a business partner rather than as a customer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.106
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.106
+Problem: Endless loop when using "]s" in HTML when there are no
+ misspellings. (Ingo Karkat)
+Solution: Break the search loop. Also fix pointer alignment for systems
+ with pointers larger than int.
+Files: src/spell.c
+
+
+*** ../vim-7.2.105/src/spell.c Tue Dec 9 22:34:02 2008
+--- src/spell.c Wed Feb 11 17:54:50 2009
+***************
+*** 2376,2382 ****
+
+ /* If we are back at the starting line and there is no match then
+ * give up. */
+! if (lnum == wp->w_cursor.lnum && !found_one)
+ break;
+
+ /* Skip the characters at the start of the next line that were
+--- 2376,2382 ----
+
+ /* If we are back at the starting line and there is no match then
+ * give up. */
+! if (lnum == wp->w_cursor.lnum && (!found_one || wrapped))
+ break;
+
+ /* Skip the characters at the start of the next line that were
+***************
+*** 4956,4968 ****
+ * Structure that is used to store the items in the word tree. This avoids
+ * the need to keep track of each allocated thing, everything is freed all at
+ * once after ":mkspell" is done.
+ */
+ #define SBLOCKSIZE 16000 /* size of sb_data */
+ typedef struct sblock_S sblock_T;
+ struct sblock_S
+ {
+- sblock_T *sb_next; /* next block in list */
+ int sb_used; /* nr of bytes already in use */
+ char_u sb_data[1]; /* data, actually longer */
+ };
+
+--- 4956,4971 ----
+ * Structure that is used to store the items in the word tree. This avoids
+ * the need to keep track of each allocated thing, everything is freed all at
+ * once after ":mkspell" is done.
++ * Note: "sb_next" must be just before "sb_data" to make sure the alignment of
++ * "sb_data" is correct for systems where pointers must be aligned on
++ * pointer-size boundaries and sizeof(pointer) > sizeof(int) (e.g., Sparc).
+ */
+ #define SBLOCKSIZE 16000 /* size of sb_data */
+ typedef struct sblock_S sblock_T;
+ struct sblock_S
+ {
+ int sb_used; /* nr of bytes already in use */
++ sblock_T *sb_next; /* next block in list */
+ char_u sb_data[1]; /* data, actually longer */
+ };
+
+***************
+*** 15011,15017 ****
+
+ case 0:
+ /*
+! * Lenghts are equal, thus changes must result in same length: An
+ * insert is only possible in combination with a delete.
+ * 1: check if for identical strings
+ */
+--- 15014,15020 ----
+
+ case 0:
+ /*
+! * Lengths are equal, thus changes must result in same length: An
+ * insert is only possible in combination with a delete.
+ * 1: check if for identical strings
+ */
+*** ../vim-7.2.105/src/version.c Wed Feb 11 16:45:56 2009
+--- src/version.c Wed Feb 11 17:56:34 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 106,
+ /**/
+
+--
+If bankers can count, how come they have eight windows and
+only four tellers?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.107
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.107
+Problem: When using a GUI dialog and ":echo" commands the messages are
+ deleted after the dialog. (Vicent Birebent)
+Solution: Don't call msg_end_prompt() since there was no prompt.
+Files: src/message.c
+
+
+*** ../vim-7.2.106/src/message.c Tue Jan 13 16:37:31 2009
+--- src/message.c Wed Feb 11 18:38:14 2009
+***************
+*** 3309,3315 ****
+ {
+ c = gui_mch_dialog(type, title, message, buttons, dfltbutton,
+ textfield);
+! msg_end_prompt();
+
+ /* Flush output to avoid that further messages and redrawing is done
+ * in the wrong order. */
+--- 3309,3318 ----
+ {
+ c = gui_mch_dialog(type, title, message, buttons, dfltbutton,
+ textfield);
+! /* avoid a hit-enter prompt without clearing the cmdline */
+! need_wait_return = FALSE;
+! emsg_on_display = FALSE;
+! cmdline_row = msg_row;
+
+ /* Flush output to avoid that further messages and redrawing is done
+ * in the wrong order. */
+*** ../vim-7.2.106/src/version.c Wed Feb 11 17:57:43 2009
+--- src/version.c Wed Feb 11 18:46:12 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 107,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+79. All of your most erotic dreams have a scrollbar at the right side.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.108
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.108 (after 7.2.105)
+Problem: Can't build without the diff feature.
+Solution: Add #ifdef.
+Files: src/option.c
+
+
+*** ../vim-7.2.107/src/option.c Wed Feb 11 16:45:56 2009
+--- src/option.c Wed Feb 11 22:21:16 2009
+***************
+*** 4127,4132 ****
+--- 4127,4133 ----
+ errmsg = (char_u *)_("E520: Not allowed in a modeline");
+ goto skip;
+ }
++ #ifdef FEAT_DIFF
+ /* In diff mode some options are overruled. This avoids that
+ * 'foldmethod' becomes "marker" instead of "diff" and that
+ * "wrap" gets set. */
+***************
+*** 4134,4139 ****
+--- 4135,4141 ----
+ && (options[opt_idx].indir == PV_FDM
+ || options[opt_idx].indir == PV_WRAP))
+ goto skip;
++ #endif
+ }
+
+ #ifdef HAVE_SANDBOX
+*** ../vim-7.2.107/src/version.c Wed Feb 11 18:46:48 2009
+--- src/version.c Wed Feb 11 22:46:40 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 108,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+80. At parties, you introduce your spouse as your "service provider."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.109
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.109
+Problem: 'langmap' does not work for multi-byte characters.
+Solution: Add a list of mapped multi-byte characters. (based on work by
+ Konstantin Korikov, Agathoklis Hatzimanikas)
+Files: runtime/doc/options.txt, src/edit.c, src/getchar.c, src/macros.h,
+ src/normal.c, src/option.c, src/proto/option.pro, src/window.c
+
+
+*** ../vim-7.2.108/runtime/doc/options.txt Fri Nov 28 10:59:57 2008
+--- runtime/doc/options.txt Wed Feb 11 18:59:34 2009
+***************
+*** 4175,4183 ****
+ be able to execute Normal mode commands.
+ This is the opposite of the 'keymap' option, where characters are
+ mapped in Insert mode.
+- This only works for 8-bit characters. The value of 'langmap' may be
+- specified with multi-byte characters (e.g., UTF-8), but only the lower
+- 8 bits of each character will be used.
+
+ Example (for Greek, in UTF-8): *greek* >
+ :set langmap=ΑA,ΒB,ΨC,ΔD,ΕE,ΦF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ΜM,ΝN,ΟO,ΠP,QQ,ΡR,ΣS,ΤT,ΘU,ΩV,WW,ΧX,ΥY,ΖZ,αa,βb,ψc,δd,εe,φf,γg,ηh,ιi,ξj,κk,λl,μm,νn,οo,πp,qq,ρr,σs,τt,θu,ωv,ςw,χx,υy,ζz
+--- 4188,4193 ----
+*** ../vim-7.2.108/src/edit.c Wed Feb 4 11:19:40 2009
+--- src/edit.c Sat Feb 21 19:54:03 2009
+***************
+*** 7703,7711 ****
+ */
+ ++no_mapping;
+ regname = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(regname, TRUE);
+- #endif
+ if (regname == Ctrl_R || regname == Ctrl_O || regname == Ctrl_P)
+ {
+ /* Get a third key for literal register insertion */
+--- 7703,7709 ----
+***************
+*** 7714,7722 ****
+ add_to_showcmd_c(literally);
+ #endif
+ regname = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(regname, TRUE);
+- #endif
+ }
+ --no_mapping;
+
+--- 7712,7718 ----
+*** ../vim-7.2.108/src/macros.h Wed Aug 15 20:41:07 2007
+--- src/macros.h Sat Feb 21 19:55:38 2009
+***************
+*** 127,141 ****
+ #ifdef FEAT_LANGMAP
+ /*
+ * Adjust chars in a language according to 'langmap' option.
+! * NOTE that there is NO overhead if 'langmap' is not set; but even
+! * when set we only have to do 2 ifs and an array lookup.
+ * Don't apply 'langmap' if the character comes from the Stuff buffer.
+ * The do-while is just to ignore a ';' after the macro.
+ */
+! # define LANGMAP_ADJUST(c, condition) do { \
+! if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \
+! c = langmap_mapchar[c]; \
+ } while (0)
+ #endif
+
+ /*
+--- 127,157 ----
+ #ifdef FEAT_LANGMAP
+ /*
+ * Adjust chars in a language according to 'langmap' option.
+! * NOTE that there is no noticeable overhead if 'langmap' is not set.
+! * When set the overhead for characters < 256 is small.
+ * Don't apply 'langmap' if the character comes from the Stuff buffer.
+ * The do-while is just to ignore a ';' after the macro.
+ */
+! # ifdef FEAT_MBYTE
+! # define LANGMAP_ADJUST(c, condition) \
+! do { \
+! if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0) \
+! { \
+! if ((c) < 256) \
+! c = langmap_mapchar[c]; \
+! else \
+! c = langmap_adjust_mb(c); \
+! } \
+ } while (0)
++ # else
++ # define LANGMAP_ADJUST(c, condition) \
++ do { \
++ if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \
++ c = langmap_mapchar[c]; \
++ } while (0)
++ # endif
++ #else
++ # define LANGMAP_ADJUST(c, condition) /* nop */
+ #endif
+
+ /*
+*** ../vim-7.2.108/src/normal.c Wed Feb 4 11:45:28 2009
+--- src/normal.c Sat Feb 21 19:55:17 2009
+***************
+*** 651,660 ****
+ * Get the command character from the user.
+ */
+ c = safe_vgetc();
+-
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(c, TRUE);
+- #endif
+
+ #ifdef FEAT_VISUAL
+ /*
+--- 651,657 ----
+***************
+*** 744,752 ****
+ }
+ ++no_zero_mapping; /* don't map zero here */
+ c = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(c, TRUE);
+- #endif
+ --no_zero_mapping;
+ if (ctrl_w)
+ {
+--- 741,747 ----
+***************
+*** 769,777 ****
+ ++no_mapping;
+ ++allow_keys; /* no mapping for nchar, but keys */
+ c = plain_vgetc(); /* get next character */
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(c, TRUE);
+- #endif
+ --no_mapping;
+ --allow_keys;
+ #ifdef FEAT_CMDL_INFO
+--- 764,770 ----
+***************
+*** 959,967 ****
+ * "gr", "g'" and "g`".
+ */
+ ca.nchar = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(ca.nchar, TRUE);
+- #endif
+ #ifdef FEAT_CMDL_INFO
+ need_flushbuf |= add_to_showcmd(ca.nchar);
+ #endif
+--- 952,958 ----
+***************
+*** 1062,1071 ****
+ }
+ #endif
+
+- #ifdef FEAT_LANGMAP
+ /* adjust chars > 127, except after "tTfFr" commands */
+ LANGMAP_ADJUST(*cp, !lang);
+- #endif
+ #ifdef FEAT_RIGHTLEFT
+ /* adjust Hebrew mapped char */
+ if (p_hkmap && lang && KeyTyped)
+--- 1053,1060 ----
+***************
+*** 4630,4638 ****
+ ++no_mapping;
+ ++allow_keys; /* no mapping for nchar, but allow key codes */
+ nchar = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(nchar, TRUE);
+- #endif
+ --no_mapping;
+ --allow_keys;
+ #ifdef FEAT_CMDL_INFO
+--- 4619,4625 ----
+***************
+*** 4988,4996 ****
+ ++no_mapping;
+ ++allow_keys; /* no mapping for nchar, but allow key codes */
+ nchar = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(nchar, TRUE);
+- #endif
+ --no_mapping;
+ --allow_keys;
+ #ifdef FEAT_CMDL_INFO
+--- 4975,4981 ----
+*** ../vim-7.2.108/src/option.c Wed Feb 11 22:47:32 2009
+--- src/option.c Sat Feb 21 19:46:13 2009
+***************
+*** 10153,10177 ****
+
+ #ifdef FEAT_LANGMAP
+ /*
+! * Any character has an equivalent character. This is used for keyboards that
+! * have a special language mode that sends characters above 128 (although
+! * other characters can be translated too).
+ */
+
+ /*
+! * char_u langmap_mapchar[256];
+! * Normally maps each of the 128 upper chars to an <128 ascii char; used to
+! * "translate" native lang chars in normal mode or some cases of
+! * insert mode without having to tediously switch lang mode back&forth.
+ */
+
+ static void
+ langmap_init()
+ {
+ int i;
+
+! for (i = 0; i < 256; i++) /* we init with a-one-to one map */
+! langmap_mapchar[i] = i;
+ }
+
+ /*
+--- 10153,10262 ----
+
+ #ifdef FEAT_LANGMAP
+ /*
+! * Any character has an equivalent 'langmap' character. This is used for
+! * keyboards that have a special language mode that sends characters above
+! * 128 (although other characters can be translated too). The "to" field is a
+! * Vim command character. This avoids having to switch the keyboard back to
+! * ASCII mode when leaving Insert mode.
+! *
+! * langmap_mapchar[] maps any of 256 chars to an ASCII char used for Vim
+! * commands.
+! * When FEAT_MBYTE is defined langmap_mapga.ga_data is a sorted table of
+! * langmap_entry_T. This does the same as langmap_mapchar[] for characters >=
+! * 256.
+! */
+! # ifdef FEAT_MBYTE
+! /*
+! * With multi-byte support use growarray for 'langmap' chars >= 256
+ */
++ typedef struct
++ {
++ int from;
++ int to;
++ } langmap_entry_T;
++
++ static garray_T langmap_mapga;
++ static void langmap_set_entry __ARGS((int from, int to));
++
++ /*
++ * Search for an entry in "langmap_mapga" for "from". If found set the "to"
++ * field. If not found insert a new entry at the appropriate location.
++ */
++ static void
++ langmap_set_entry(from, to)
++ int from;
++ int to;
++ {
++ langmap_entry_T *entries = (langmap_entry_T *)(langmap_mapga.ga_data);
++ int a = 0;
++ int b = langmap_mapga.ga_len;
++
++ /* Do a binary search for an existing entry. */
++ while (a != b)
++ {
++ int i = (a + b) / 2;
++ int d = entries[i].from - from;
++
++ if (d == 0)
++ {
++ entries[i].to = to;
++ return;
++ }
++ if (d < 0)
++ a = i + 1;
++ else
++ b = i;
++ }
++
++ if (ga_grow(&langmap_mapga, 1) != OK)
++ return; /* out of memory */
++
++ /* insert new entry at position "a" */
++ entries = (langmap_entry_T *)(langmap_mapga.ga_data) + a;
++ mch_memmove(entries + 1, entries,
++ (langmap_mapga.ga_len - a) * sizeof(langmap_entry_T));
++ ++langmap_mapga.ga_len;
++ entries[0].from = from;
++ entries[0].to = to;
++ }
+
+ /*
+! * Apply 'langmap' to multi-byte character "c" and return the result.
+ */
++ int
++ langmap_adjust_mb(c)
++ int c;
++ {
++ langmap_entry_T *entries = (langmap_entry_T *)(langmap_mapga.ga_data);
++ int a = 0;
++ int b = langmap_mapga.ga_len;
++
++ while (a != b)
++ {
++ int i = (a + b) / 2;
++ int d = entries[i].from - c;
++
++ if (d == 0)
++ return entries[i].to; /* found matching entry */
++ if (d < 0)
++ a = i + 1;
++ else
++ b = i;
++ }
++ return c; /* no entry found, return "c" unmodified */
++ }
++ # endif
+
+ static void
+ langmap_init()
+ {
+ int i;
+
+! for (i = 0; i < 256; i++)
+! langmap_mapchar[i] = i; /* we init with a one-to-one map */
+! # ifdef FEAT_MBYTE
+! ga_init2(&langmap_mapga, sizeof(langmap_entry_T), 8);
+! # endif
+ }
+
+ /*
+***************
+*** 10185,10191 ****
+ char_u *p2;
+ int from, to;
+
+! langmap_init(); /* back to one-to-one map first */
+
+ for (p = p_langmap; p[0] != NUL; )
+ {
+--- 10270,10279 ----
+ char_u *p2;
+ int from, to;
+
+! #ifdef FEAT_MBYTE
+! ga_clear(&langmap_mapga); /* clear the previous map first */
+! #endif
+! langmap_init(); /* back to one-to-one map */
+
+ for (p = p_langmap; p[0] != NUL; )
+ {
+***************
+*** 10235,10241 ****
+ transchar(from));
+ return;
+ }
+! langmap_mapchar[from & 255] = to;
+
+ /* Advance to next pair */
+ mb_ptr_adv(p);
+--- 10323,10335 ----
+ transchar(from));
+ return;
+ }
+!
+! #ifdef FEAT_MBYTE
+! if (from >= 256)
+! langmap_set_entry(from, to);
+! else
+! #endif
+! langmap_mapchar[from & 255] = to;
+
+ /* Advance to next pair */
+ mb_ptr_adv(p);
+*** ../vim-7.2.108/src/proto/option.pro Sat May 5 19:28:04 2007
+--- src/proto/option.pro Wed Feb 11 21:21:05 2009
+***************
+*** 44,49 ****
+--- 44,50 ----
+ void set_context_in_set_cmd __ARGS((expand_T *xp, char_u *arg, int opt_flags));
+ int ExpandSettings __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
+ int ExpandOldSetting __ARGS((int *num_file, char_u ***file));
++ int langmap_adjust_mb __ARGS((int c));
+ int has_format_option __ARGS((int x));
+ int shortmess __ARGS((int x));
+ void vimrc_found __ARGS((char_u *fname, char_u *envname));
+*** ../vim-7.2.108/src/window.c Fri Nov 28 21:26:50 2008
+--- src/window.c Sat Feb 21 19:55:25 2009
+***************
+*** 594,602 ****
+ ++allow_keys; /* no mapping for xchar, but allow key codes */
+ if (xchar == NUL)
+ xchar = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(xchar, TRUE);
+- #endif
+ --no_mapping;
+ --allow_keys;
+ #ifdef FEAT_CMDL_INFO
+--- 594,600 ----
+*** ../vim-7.2.108/src/version.c Wed Feb 11 22:47:32 2009
+--- src/version.c Sat Feb 21 19:34:28 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 109,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+99. The hum of a cooling fan and the click of keys is comforting to you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.110
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.110
+Problem: Compiler warning for unused variable.
+Solution: Init the variable.
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.2.109/src/ex_docmd.c Wed Jan 28 15:42:07 2009
+--- src/ex_docmd.c Tue Feb 17 03:47:13 2009
+***************
+*** 5916,5922 ****
+ char_u *q;
+
+ char_u *start;
+! char_u *end;
+ char_u *ksp;
+ size_t len, totlen;
+
+--- 5916,5922 ----
+ char_u *q;
+
+ char_u *start;
+! char_u *end = NULL;
+ char_u *ksp;
+ size_t len, totlen;
+
+*** ../vim-7.2.109/src/version.c Sat Feb 21 20:27:00 2009
+--- src/version.c Sat Feb 21 20:35:50 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 110,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+100. The most exciting sporting events you noticed during summer 1996
+ was Netscape vs. Microsoft.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.111
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.111
+Problem: When using Visual block mode with 'cursorcolumn' it's unclear what
+ is selected.
+Solution: Don't use 'cursorcolumn' highlighting inside the Visual selection.
+ (idea by Dominique Pelle)
+Files: src/screen.c
+
+
+*** ../vim-7.2.110/src/screen.c Wed Oct 1 21:09:02 2008
+--- src/screen.c Sat Feb 21 21:04:19 2009
+***************
+*** 2596,2601 ****
+--- 2596,2602 ----
+ int noinvcur = FALSE; /* don't invert the cursor */
+ #ifdef FEAT_VISUAL
+ pos_T *top, *bot;
++ int lnum_in_visual_area = FALSE;
+ #endif
+ pos_T pos;
+ long v;
+***************
+*** 2792,2800 ****
+ top = &VIsual;
+ bot = &curwin->w_cursor;
+ }
+ if (VIsual_mode == Ctrl_V) /* block mode */
+ {
+! if (lnum >= top->lnum && lnum <= bot->lnum)
+ {
+ fromcol = wp->w_old_cursor_fcol;
+ tocol = wp->w_old_cursor_lcol;
+--- 2793,2802 ----
+ top = &VIsual;
+ bot = &curwin->w_cursor;
+ }
++ lnum_in_visual_area = (lnum >= top->lnum && lnum <= bot->lnum);
+ if (VIsual_mode == Ctrl_V) /* block mode */
+ {
+! if (lnum_in_visual_area)
+ {
+ fromcol = wp->w_old_cursor_fcol;
+ tocol = wp->w_old_cursor_lcol;
+***************
+*** 4557,4563 ****
+ * highlight the cursor position itself. */
+ if (wp->w_p_cuc && vcol == (long)wp->w_virtcol
+ && lnum != wp->w_cursor.lnum
+! && draw_state == WL_LINE)
+ {
+ vcol_save_attr = char_attr;
+ char_attr = hl_combine_attr(char_attr, hl_attr(HLF_CUC));
+--- 4560,4567 ----
+ * highlight the cursor position itself. */
+ if (wp->w_p_cuc && vcol == (long)wp->w_virtcol
+ && lnum != wp->w_cursor.lnum
+! && draw_state == WL_LINE
+! && !lnum_in_visual_area)
+ {
+ vcol_save_attr = char_attr;
+ char_attr = hl_combine_attr(char_attr, hl_attr(HLF_CUC));
+*** ../vim-7.2.110/src/version.c Sat Feb 21 20:36:30 2009
+--- src/version.c Sat Feb 21 21:08:14 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 111,
+ /**/
+
+--
+Contrary to popular belief, Unix is user friendly.
+It just happens to be selective about who it makes friends with.
+ -- Dave Parnas
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.112
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.112
+Problem: Cursor invisible in Visual mode when 'number' is set and cursor in
+ first column. (Matti Niemenmaa, Renato Alves)
+Solution: Check that vcol_prev is smaller than vcol.
+Files: src/screen.c
+
+
+*** ../vim-7.2.111/src/screen.c Sat Feb 21 21:10:24 2009
+--- src/screen.c Sat Feb 21 21:04:19 2009
+***************
+*** 3422,3427 ****
+--- 3422,3428 ----
+ && (*mb_ptr2cells)(ptr) > 1)
+ #endif
+ || ((int)vcol_prev == fromcol_prev
++ && vcol_prev < vcol /* not at margin */
+ && vcol < tocol))
+ area_attr = attr; /* start highlighting */
+ else if (area_attr != 0
+*** ../vim-7.2.111/src/version.c Sat Feb 21 21:10:24 2009
+--- src/version.c Sat Feb 21 21:20:51 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 112,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+102. When filling out your driver's license application, you give
+ your IP address.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.113
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.113
+Problem: Crash for substitute() call using submatch(1) while there is no
+ such submatch. (Yukihiro Nakadaira)
+Solution: Also check the start of the submatch is set, it can be NULL when
+ an attempted match didn't work out.
+Files: src/regexp.c
+
+
+*** ../vim-7.2.112/src/regexp.c Fri Aug 8 13:45:31 2008
+--- src/regexp.c Sat Feb 21 21:46:49 2009
+***************
+*** 4532,4538 ****
+ cleanup_subexpr();
+ if (!REG_MULTI) /* Single-line regexp */
+ {
+! if (reg_endp[no] == NULL)
+ {
+ /* Backref was not set: Match an empty string. */
+ len = 0;
+--- 4532,4538 ----
+ cleanup_subexpr();
+ if (!REG_MULTI) /* Single-line regexp */
+ {
+! if (reg_startp[no] == NULL || reg_endp[no] == NULL)
+ {
+ /* Backref was not set: Match an empty string. */
+ len = 0;
+***************
+*** 4548,4554 ****
+ }
+ else /* Multi-line regexp */
+ {
+! if (reg_endpos[no].lnum < 0)
+ {
+ /* Backref was not set: Match an empty string. */
+ len = 0;
+--- 4548,4554 ----
+ }
+ else /* Multi-line regexp */
+ {
+! if (reg_startpos[no].lnum < 0 || reg_endpos[no].lnum < 0)
+ {
+ /* Backref was not set: Match an empty string. */
+ len = 0;
+***************
+*** 7279,7291 ****
+ }
+ else
+ {
+! if (submatch_match->endp[no] == NULL)
+ retval = NULL;
+ else
+- {
+- s = submatch_match->startp[no];
+ retval = vim_strnsave(s, (int)(submatch_match->endp[no] - s));
+- }
+ }
+
+ return retval;
+--- 7279,7289 ----
+ }
+ else
+ {
+! s = submatch_match->startp[no];
+! if (s == NULL || submatch_match->endp[no] == NULL)
+ retval = NULL;
+ else
+ retval = vim_strnsave(s, (int)(submatch_match->endp[no] - s));
+ }
+
+ return retval;
+*** ../vim-7.2.112/src/version.c Sat Feb 21 21:22:44 2009
+--- src/version.c Sat Feb 21 22:01:56 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 113,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+103. When you find yourself in the "Computer" section of Barnes & Noble
+ enjoying yourself.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.114
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.114
+Problem: Using wrong printf format.
+Solution: Use "%ld" instead of "%d". (Dominique Pelle)
+Files: src/netbeans.c
+
+
+*** ../vim-7.2.113/src/netbeans.c Tue Jan 6 16:13:42 2009
+--- src/netbeans.c Tue Feb 17 03:21:33 2009
+***************
+*** 1924,1930 ****
+ vim_free(path);
+ if (bufp == NULL)
+ {
+! nbdebug((" File %s not found in setBufferNumber\n", args));
+ EMSG2("E642: File %s not found in setBufferNumber", args);
+ return FAIL;
+ }
+--- 1924,1930 ----
+ vim_free(path);
+ if (bufp == NULL)
+ {
+! nbdebug((" File %s not found in setBufferNumber\n", args));
+ EMSG2("E642: File %s not found in setBufferNumber", args);
+ return FAIL;
+ }
+***************
+*** 2318,2324 ****
+ }
+ if (pos)
+ {
+! coloncmd(":sign place %d line=%d name=%d buffer=%d",
+ serNum, pos->lnum, typeNum, buf->bufp->b_fnum);
+ if (typeNum == curPCtype)
+ coloncmd(":sign jump %d buffer=%d", serNum,
+--- 2318,2324 ----
+ }
+ if (pos)
+ {
+! coloncmd(":sign place %d line=%ld name=%d buffer=%d",
+ serNum, pos->lnum, typeNum, buf->bufp->b_fnum);
+ if (typeNum == curPCtype)
+ coloncmd(":sign jump %d buffer=%d", serNum,
+***************
+*** 2422,2428 ****
+ GUARDED) == 0)
+ {
+ coloncmd(
+! ":sign place %d line=%d name=%d buffer=%d",
+ guardId++, lnum, GUARDED,
+ buf->bufp->b_fnum);
+ }
+--- 2422,2428 ----
+ GUARDED) == 0)
+ {
+ coloncmd(
+! ":sign place %d line=%ld name=%d buffer=%d",
+ guardId++, lnum, GUARDED,
+ buf->bufp->b_fnum);
+ }
+*** ../vim-7.2.113/src/version.c Sat Feb 21 22:03:06 2009
+--- src/version.c Sat Feb 21 22:11:21 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 114,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+104. When people ask about the Presidential Election you ask "Which country?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.115
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.115
+Problem: Some debugging code is never used.
+Solution: Remove nbtrace() and nbprt(). (Dominique Pelle)
+Files: src/nbdebug.c, src/nbdebug.h
+
+*** ../vim-7.2.114/src/nbdebug.c Tue Jun 24 23:54:30 2008
+--- src/nbdebug.c Tue Feb 17 03:26:07 2009
+***************
+*** 33,39 ****
+ u_int nb_dlevel = 0; /* nb_debug verbosity level */
+
+ void nbdb(char *, ...);
+- void nbtrace(char *, ...);
+
+ static int lookup(char *);
+ #ifdef USE_NB_ERRORHANDLER
+--- 33,38 ----
+***************
+*** 100,124 ****
+ } /* end nbdebug_log_init */
+
+
+-
+-
+- void
+- nbtrace(
+- char *fmt,
+- ...)
+- {
+- va_list ap;
+-
+- if (nb_debug!= NULL && (nb_dlevel & (NB_TRACE | NB_TRACE_VERBOSE))) {
+- va_start(ap, fmt);
+- vfprintf(nb_debug, fmt, ap);
+- va_end(ap);
+- fflush(nb_debug);
+- }
+-
+- } /* end nbtrace */
+-
+-
+ void
+ nbdbg(
+ char *fmt,
+--- 99,104 ----
+***************
+*** 136,158 ****
+ } /* end nbdbg */
+
+
+- void
+- nbprt(
+- char *fmt,
+- ...)
+- {
+- va_list ap;
+-
+- if (nb_debug != NULL && nb_dlevel & NB_PRINT) {
+- va_start(ap, fmt);
+- vfprintf(nb_debug, fmt, ap);
+- va_end(ap);
+- fflush(nb_debug);
+- }
+-
+- } /* end nbprt */
+-
+-
+ static int
+ lookup(
+ char *file)
+--- 116,121 ----
+*** ../vim-7.2.114/src/nbdebug.h Wed Jun 25 00:47:21 2008
+--- src/nbdebug.h Tue Feb 17 03:26:38 2009
+***************
+*** 43,50 ****
+
+
+ void nbdbg(char *, ...);
+- void nbprt(char *, ...);
+- void nbtrace(char *, ...);
+
+ void nbdebug_wait __ARGS((u_int wait_flags, char *wait_var, u_int wait_secs));
+ void nbdebug_log_init __ARGS((char *log_var, char *level_var));
+--- 43,48 ----
+***************
+*** 70,88 ****
+ {
+ }
+
+- void
+- nbprt(
+- char *fmt,
+- ...)
+- {
+- }
+-
+- void
+- nbtrace(
+- char *fmt,
+- ...)
+- {
+- }
+-
+ #endif /* NBDEBUG */
+ #endif /* NBDEBUG_H */
+--- 68,72 ----
+*** ../vim-7.2.114/src/version.c Sat Feb 21 22:12:43 2009
+--- src/version.c Sat Feb 21 22:28:21 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 115,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+105. When someone asks you for your address, you tell them your URL.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.116
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.116
+Problem: Not all memory is freed when EXITFREE is defined.
+Solution: Free allocated memory on exit. (Dominique Pelle)
+Files: src/ex_docmd.c, src/gui_gtk_x11.c, src/misc2.c, src/search.c,
+ src/tag.c
+
+
+*** ../vim-7.2.115/src/tag.c Tue Jan 13 17:27:18 2009
+--- src/tag.c Tue Feb 17 03:43:32 2009
+***************
+*** 2542,2547 ****
+--- 2542,2556 ----
+ {
+ ga_clear_strings(&tag_fnames);
+ do_tag(NULL, DT_FREE, 0, 0, 0);
++ tag_freematch();
++
++ # if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
++ if (ptag_entry.tagname)
++ {
++ vim_free(ptag_entry.tagname);
++ ptag_entry.tagname = NULL;
++ }
++ # endif
+ }
+ #endif
+
+*** ../vim-7.2.115/src/version.c Sat Feb 21 22:29:12 2009
+--- src/version.c Sat Feb 21 22:56:14 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 116,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+106. When told to "go to your room" you inform your parents that you
+ can't...because you were kicked out and banned.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.117
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.117
+Problem: Location list incorrectly labelled "Quickfix List".
+Solution: Break out of both loops for finding window for location list
+ buffer. (Lech Lorens)
+Files: src/buffer.c, src/quickfix.c, src/screen.c
+
+
+*** ../vim-7.2.116/src/buffer.c Tue Jan 6 16:13:42 2009
+--- src/buffer.c Tue Feb 17 04:00:51 2009
+***************
+*** 5098,5104 ****
+ */
+ FOR_ALL_TAB_WINDOWS(tp, win)
+ if (win->w_buffer == buf)
+! break;
+ if (win != NULL && win->w_llist_ref != NULL)
+ return _("[Location List]");
+ else
+--- 5098,5105 ----
+ */
+ FOR_ALL_TAB_WINDOWS(tp, win)
+ if (win->w_buffer == buf)
+! goto win_found;
+! win_found:
+ if (win != NULL && win->w_llist_ref != NULL)
+ return _("[Location List]");
+ else
+*** ../vim-7.2.116/src/quickfix.c Sat Nov 15 14:10:23 2008
+--- src/quickfix.c Sat Feb 21 22:54:25 2009
+***************
+*** 1610,1619 ****
+ {
+ goto_tabpage_win(tp, wp);
+ usable_win = 1;
+! break;
+ }
+ }
+ }
+
+ /*
+ * If there is only one window and it is the quickfix window, create a
+--- 1612,1622 ----
+ {
+ goto_tabpage_win(tp, wp);
+ usable_win = 1;
+! goto win_found;
+ }
+ }
+ }
++ win_found:
+
+ /*
+ * If there is only one window and it is the quickfix window, create a
+*** ../vim-7.2.116/src/screen.c Sat Feb 21 21:22:44 2009
+--- src/screen.c Sat Feb 21 21:04:19 2009
+***************
+*** 7452,7461 ****
+ {
+ outofmem = TRUE;
+ #ifdef FEAT_WINDOWS
+! break;
+ #endif
+ }
+ }
+
+ #ifdef FEAT_MBYTE
+ for (i = 0; i < p_mco; ++i)
+--- 7452,7464 ----
+ {
+ outofmem = TRUE;
+ #ifdef FEAT_WINDOWS
+! goto give_up;
+ #endif
+ }
+ }
++ #ifdef FEAT_WINDOWS
++ give_up:
++ #endif
+
+ #ifdef FEAT_MBYTE
+ for (i = 0; i < p_mco; ++i)
+*** ../vim-7.2.116/src/version.c Sat Feb 21 22:57:10 2009
+--- src/version.c Sat Feb 21 23:58:24 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 117,
+ /**/
+
+--
+Laughing helps. It's like jogging on the inside.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.118
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.118
+Problem: <PageUp> at the more prompt only does half a page.
+Solution: Make <PageUp> go up a whole page. Also make 'f' go a page
+ forward, but not quit the more prompt. (Markus Heidelberg)
+Files: src/message.c
+
+
+*** ../vim-7.2.117/src/message.c Wed Feb 11 18:46:48 2009
+--- src/message.c Fri Feb 20 05:20:15 2009
+***************
+*** 976,982 ****
+ }
+ }
+ else if (msg_scrolled > Rows - 2
+! && (c == 'j' || c == K_DOWN || c == 'd'))
+ c = K_IGNORE;
+ }
+ } while ((had_got_int && c == Ctrl_C)
+--- 976,982 ----
+ }
+ }
+ else if (msg_scrolled > Rows - 2
+! && (c == 'j' || c == K_DOWN || c == 'd' || c == 'f'))
+ c = K_IGNORE;
+ }
+ } while ((had_got_int && c == Ctrl_C)
+***************
+*** 2504,2510 ****
+ break;
+
+ case 'u': /* Up half a page */
+- case K_PAGEUP:
+ scroll = -(Rows / 2);
+ break;
+
+--- 2504,2509 ----
+***************
+*** 2513,2522 ****
+--- 2512,2523 ----
+ break;
+
+ case 'b': /* one page back */
++ case K_PAGEUP:
+ scroll = -(Rows - 1);
+ break;
+
+ case ' ': /* one extra page */
++ case 'f':
+ case K_PAGEDOWN:
+ case K_LEFTMOUSE:
+ scroll = Rows - 1;
+*** ../vim-7.2.117/src/version.c Sun Feb 22 00:01:42 2009
+--- src/version.c Sun Feb 22 00:57:16 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 118,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+109. You actually read -- and enjoy -- lists like this.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.119
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.119
+Problem: Status line is redrawn too often.
+Solution: Check ScreeenLinesUC[] properly. (Yukihiro Nakadaira)
+Files: src/screen.c
+
+
+*** ../vim-7.2.118/src/screen.c Sun Feb 22 00:01:42 2009
+--- src/screen.c Sun Feb 22 01:07:38 2009
+***************
+*** 6362,6368 ****
+ && c == 0x8e
+ && ScreenLines2[off] != ptr[1])
+ || (enc_utf8
+! && (ScreenLinesUC[off] != (u8char_T)u8c
+ || screen_comp_differs(off, u8cc)))
+ #endif
+ || ScreenAttrs[off] != attr
+--- 6362,6368 ----
+ && c == 0x8e
+ && ScreenLines2[off] != ptr[1])
+ || (enc_utf8
+! && (ScreenLinesUC[off] != (u8char_T)(c >= 0x80 ? u8c : 0)
+ || screen_comp_differs(off, u8cc)))
+ #endif
+ || ScreenAttrs[off] != attr
+*** ../vim-7.2.118/src/version.c Sun Feb 22 00:58:03 2009
+--- src/version.c Sun Feb 22 01:09:54 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 119,
+ /**/
+
+--
+In a world without walls and borders, who needs windows and gates?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.120
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.120
+Problem: When opening the quickfix window or splitting the window and
+ setting the location list, the location list is copied and then
+ deleted, which is inefficient.
+Solution: Don't copy the location list when not needed. (Lech Lorens)
+Files: src/quickfix.c, src/vim.h, src/window.c
+
+
+*** ../vim-7.2.119/src/quickfix.c Sun Feb 22 00:01:42 2009
+--- src/quickfix.c Sat Feb 21 22:54:25 2009
+***************
+*** 1419,1424 ****
+--- 1419,1425 ----
+ int opened_window = FALSE;
+ win_T *win;
+ win_T *altwin;
++ int flags;
+ #endif
+ win_T *oldwin = curwin;
+ int print_message = TRUE;
+***************
+*** 1531,1537 ****
+ if (qf_ptr->qf_type == 1 && (!curwin->w_buffer->b_help || cmdmod.tab != 0))
+ {
+ win_T *wp;
+- int n;
+
+ if (cmdmod.tab != 0)
+ wp = NULL;
+--- 1532,1537 ----
+***************
+*** 1547,1559 ****
+ * Split off help window; put it at far top if no position
+ * specified, the current window is vertically split and narrow.
+ */
+! n = WSP_HELP;
+ # ifdef FEAT_VERTSPLIT
+ if (cmdmod.split == 0 && curwin->w_width != Columns
+ && curwin->w_width < 80)
+! n |= WSP_TOP;
+ # endif
+! if (win_split(0, n) == FAIL)
+ goto theend;
+ opened_window = TRUE; /* close it when fail */
+
+--- 1547,1562 ----
+ * Split off help window; put it at far top if no position
+ * specified, the current window is vertically split and narrow.
+ */
+! flags = WSP_HELP;
+ # ifdef FEAT_VERTSPLIT
+ if (cmdmod.split == 0 && curwin->w_width != Columns
+ && curwin->w_width < 80)
+! flags |= WSP_TOP;
+ # endif
+! if (qi != &ql_info)
+! flags |= WSP_NEWLOC; /* don't copy the location list */
+!
+! if (win_split(0, flags) == FAIL)
+ goto theend;
+ opened_window = TRUE; /* close it when fail */
+
+***************
+*** 1563,1569 ****
+ if (qi != &ql_info) /* not a quickfix list */
+ {
+ /* The new window should use the supplied location list */
+- qf_free_all(curwin);
+ curwin->w_llist = qi;
+ qi->qf_refcount++;
+ }
+--- 1566,1571 ----
+***************
+*** 1624,1630 ****
+ {
+ ll_ref = curwin->w_llist_ref;
+
+! if (win_split(0, WSP_ABOVE) == FAIL)
+ goto failed; /* not enough room for window */
+ opened_window = TRUE; /* close it when fail */
+ p_swb = empty_option; /* don't split again */
+--- 1626,1635 ----
+ {
+ ll_ref = curwin->w_llist_ref;
+
+! flags = WSP_ABOVE;
+! if (ll_ref != NULL)
+! flags |= WSP_NEWLOC;
+! if (win_split(0, flags) == FAIL)
+ goto failed; /* not enough room for window */
+ opened_window = TRUE; /* close it when fail */
+ p_swb = empty_option; /* don't split again */
+***************
+*** 1636,1642 ****
+ {
+ /* The new window should use the location list from the
+ * location list window */
+- qf_free_all(curwin);
+ curwin->w_llist = ll_ref;
+ ll_ref->qf_refcount++;
+ }
+--- 1641,1646 ----
+***************
+*** 2311,2325 ****
+ if (eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow)
+ /* Create the new window at the very bottom. */
+ win_goto(lastwin);
+! if (win_split(height, WSP_BELOW) == FAIL)
+ return; /* not enough room for window */
+ #ifdef FEAT_SCROLLBIND
+ curwin->w_p_scb = FALSE;
+ #endif
+
+- /* Remove the location list for the quickfix window */
+- qf_free_all(curwin);
+-
+ if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
+ {
+ /*
+--- 2315,2326 ----
+ if (eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow)
+ /* Create the new window at the very bottom. */
+ win_goto(lastwin);
+! if (win_split(height, WSP_BELOW | WSP_NEWLOC) == FAIL)
+ return; /* not enough room for window */
+ #ifdef FEAT_SCROLLBIND
+ curwin->w_p_scb = FALSE;
+ #endif
+
+ if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
+ {
+ /*
+*** ../vim-7.2.119/src/vim.h Thu Nov 20 14:11:47 2008
+--- src/vim.h Sat Feb 21 22:53:03 2009
+***************
+*** 1057,1062 ****
+--- 1057,1063 ----
+ #define WSP_HELP 16 /* creating the help window */
+ #define WSP_BELOW 32 /* put new window below/right */
+ #define WSP_ABOVE 64 /* put new window above/left */
++ #define WSP_NEWLOC 128 /* don't copy location list */
+
+ /*
+ * arguments for gui_set_shellsize()
+*** ../vim-7.2.119/src/window.c Sat Feb 21 20:27:00 2009
+--- src/window.c Sat Feb 21 23:56:41 2009
+***************
+*** 12,18 ****
+ static int path_is_url __ARGS((char_u *p));
+ #if defined(FEAT_WINDOWS) || defined(PROTO)
+ static int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
+! static void win_init __ARGS((win_T *newp, win_T *oldp));
+ static void frame_comp_pos __ARGS((frame_T *topfrp, int *row, int *col));
+ static void frame_setheight __ARGS((frame_T *curfrp, int height));
+ #ifdef FEAT_VERTSPLIT
+--- 12,18 ----
+ static int path_is_url __ARGS((char_u *p));
+ #if defined(FEAT_WINDOWS) || defined(PROTO)
+ static int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
+! static void win_init __ARGS((win_T *newp, win_T *oldp, int flags));
+ static void frame_comp_pos __ARGS((frame_T *topfrp, int *row, int *col));
+ static void frame_setheight __ARGS((frame_T *curfrp, int height));
+ #ifdef FEAT_VERTSPLIT
+***************
+*** 911,917 ****
+ return FAIL;
+
+ /* make the contents of the new window the same as the current one */
+! win_init(wp, curwin);
+ }
+
+ /*
+--- 911,917 ----
+ return FAIL;
+
+ /* make the contents of the new window the same as the current one */
+! win_init(wp, curwin, flags);
+ }
+
+ /*
+***************
+*** 1160,1170 ****
+ * Initialize window "newp" from window "oldp".
+ * Used when splitting a window and when creating a new tab page.
+ * The windows will both edit the same buffer.
+ */
+ static void
+! win_init(newp, oldp)
+ win_T *newp;
+ win_T *oldp;
+ {
+ int i;
+
+--- 1160,1174 ----
+ * Initialize window "newp" from window "oldp".
+ * Used when splitting a window and when creating a new tab page.
+ * The windows will both edit the same buffer.
++ * WSP_NEWLOC may be specified in flags to prevent the location list from
++ * being copied.
+ */
++ /*ARGSUSED*/
+ static void
+! win_init(newp, oldp, flags)
+ win_T *newp;
+ win_T *oldp;
++ int flags;
+ {
+ int i;
+
+***************
+*** 1189,1195 ****
+ copy_jumplist(oldp, newp);
+ #endif
+ #ifdef FEAT_QUICKFIX
+! copy_loclist(oldp, newp);
+ #endif
+ if (oldp->w_localdir != NULL)
+ newp->w_localdir = vim_strsave(oldp->w_localdir);
+--- 1193,1206 ----
+ copy_jumplist(oldp, newp);
+ #endif
+ #ifdef FEAT_QUICKFIX
+! if (flags & WSP_NEWLOC)
+! {
+! /* Don't copy the location list. */
+! newp->w_llist = NULL;
+! newp->w_llist_ref = NULL;
+! }
+! else
+! copy_loclist(oldp, newp);
+ #endif
+ if (oldp->w_localdir != NULL)
+ newp->w_localdir = vim_strsave(oldp->w_localdir);
+***************
+*** 3219,3225 ****
+ else
+ {
+ /* First window in new tab page, initialize it from "oldwin". */
+! win_init(curwin, oldwin);
+
+ # ifdef FEAT_SCROLLBIND
+ /* We don't want scroll-binding in the first window. */
+--- 3230,3236 ----
+ else
+ {
+ /* First window in new tab page, initialize it from "oldwin". */
+! win_init(curwin, oldwin, 0);
+
+ # ifdef FEAT_SCROLLBIND
+ /* We don't want scroll-binding in the first window. */
+*** ../vim-7.2.119/src/version.c Sun Feb 22 01:13:45 2009
+--- src/version.c Sun Feb 22 02:32:14 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 120,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+110. You actually volunteer to become your employer's webmaster.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.121
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.121
+Problem: In gvim "!grep a *.c" spews out a lot of text that can't be
+ stopped with CTRL-C.
+Solution: When looping to read and show text, do check for typed characters
+ every two seconds.
+Files: src/os_unix.c
+
+
+*** ../vim-7.2.120/src/os_unix.c Wed Feb 4 14:18:44 2009
+--- src/os_unix.c Sun Feb 22 00:54:05 2009
+***************
+*** 4092,4097 ****
+--- 4092,4100 ----
+ int fromshell_fd;
+ garray_T ga;
+ int noread_cnt;
++ # if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
++ struct timeval start_tv;
++ # endif
+
+ # ifdef FEAT_GUI
+ if (pty_master_fd >= 0)
+***************
+*** 4201,4207 ****
+ ga_init2(&ga, 1, BUFLEN);
+
+ noread_cnt = 0;
+!
+ for (;;)
+ {
+ /*
+--- 4204,4212 ----
+ ga_init2(&ga, 1, BUFLEN);
+
+ noread_cnt = 0;
+! # if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
+! gettimeofday(&start_tv, NULL);
+! # endif
+ for (;;)
+ {
+ /*
+***************
+*** 4214,4238 ****
+ * that a typed password is echoed for ssh or gpg command.
+ * Don't get characters when the child has already
+ * finished (wait_pid == 0).
+- * Don't get extra characters when we already have one.
+ * Don't read characters unless we didn't get output for a
+! * while, avoids that ":r !ls" eats typeahead.
+ */
+ len = 0;
+ if (!(options & SHELL_EXPAND)
+ && ((options &
+ (SHELL_READ|SHELL_WRITE|SHELL_COOKED))
+ != (SHELL_READ|SHELL_WRITE|SHELL_COOKED)
+! #ifdef FEAT_GUI
+ || gui.in_use
+! #endif
+ )
+ && wait_pid == 0
+! && (ta_len > 0
+! || (noread_cnt > 4
+! && (len = ui_inchar(ta_buf,
+! BUFLEN, 10L, 0)) > 0)))
+ {
+ /*
+ * For pipes:
+ * Check for CTRL-C: send interrupt signal to child.
+--- 4219,4252 ----
+ * that a typed password is echoed for ssh or gpg command.
+ * Don't get characters when the child has already
+ * finished (wait_pid == 0).
+ * Don't read characters unless we didn't get output for a
+! * while (noread_cnt > 4), avoids that ":r !ls" eats
+! * typeahead.
+ */
+ len = 0;
+ if (!(options & SHELL_EXPAND)
+ && ((options &
+ (SHELL_READ|SHELL_WRITE|SHELL_COOKED))
+ != (SHELL_READ|SHELL_WRITE|SHELL_COOKED)
+! # ifdef FEAT_GUI
+ || gui.in_use
+! # endif
+ )
+ && wait_pid == 0
+! && (ta_len > 0 || noread_cnt > 4))
+ {
++ if (ta_len == 0)
++ {
++ /* Get extra characters when we don't have any.
++ * Reset the counter and timer. */
++ noread_cnt = 0;
++ # if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
++ gettimeofday(&start_tv, NULL);
++ # endif
++ len = ui_inchar(ta_buf, BUFLEN, 10L, 0);
++ }
++ if (ta_len > 0 || len > 0)
++ {
+ /*
+ * For pipes:
+ * Check for CTRL-C: send interrupt signal to child.
+***************
+*** 4334,4342 ****
+ {
+ ta_len -= len;
+ mch_memmove(ta_buf, ta_buf + len, ta_len);
+- noread_cnt = 0;
+ }
+ }
+ }
+
+ if (got_int)
+--- 4348,4356 ----
+ {
+ ta_len -= len;
+ mch_memmove(ta_buf, ta_buf + len, ta_len);
+ }
+ }
++ }
+ }
+
+ if (got_int)
+***************
+*** 4444,4449 ****
+--- 4458,4482 ----
+ out_flush();
+ if (got_int)
+ break;
++
++ # if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
++ {
++ struct timeval now_tv;
++ long msec;
++
++ /* Avoid that we keep looping here without
++ * checking for a CTRL-C for a long time. Don't
++ * break out too often to avoid losing typeahead. */
++ gettimeofday(&now_tv, NULL);
++ msec = (now_tv.tv_sec - start_tv.tv_sec) * 1000L
++ + (now_tv.tv_usec - start_tv.tv_usec) / 1000L;
++ if (msec > 2000)
++ {
++ noread_cnt = 5;
++ break;
++ }
++ }
++ # endif
+ }
+
+ /* If we already detected the child has finished break the
+*** ../vim-7.2.120/src/version.c Sun Feb 22 02:36:36 2009
+--- src/version.c Sun Feb 22 02:48:03 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 121,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+111. You and your friends get together regularly on IRC, even though
+ all of you live in the same city.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///