--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.2.129
+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.129
+Problem: When opening a command window from input() it uses the search
+ history.
+Solution: Use get_cmdline_type(). (James Vega)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.2.128/src/ex_getln.c Fri Nov 28 10:59:57 2008
+--- src/ex_getln.c Mon Mar 2 00:53:39 2009
+***************
+*** 6047,6055 ****
+ # endif
+ return K_IGNORE;
+ }
+! cmdwin_type = ccline.cmdfirstc;
+! if (cmdwin_type == NUL)
+! cmdwin_type = '-';
+
+ /* Create the command-line buffer empty. */
+ (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL);
+--- 6062,6068 ----
+ # endif
+ return K_IGNORE;
+ }
+! cmdwin_type = get_cmdline_type();
+
+ /* Create the command-line buffer empty. */
+ (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL);
+***************
+*** 6073,6079 ****
+ /* Showing the prompt may have set need_wait_return, reset it. */
+ need_wait_return = FALSE;
+
+! histtype = hist_char2type(ccline.cmdfirstc);
+ if (histtype == HIST_CMD || histtype == HIST_DEBUG)
+ {
+ if (p_wc == TAB)
+--- 6086,6092 ----
+ /* Showing the prompt may have set need_wait_return, reset it. */
+ need_wait_return = FALSE;
+
+! histtype = hist_char2type(cmdwin_type);
+ if (histtype == HIST_CMD || histtype == HIST_DEBUG)
+ {
+ if (p_wc == TAB)
+*** ../vim-7.2.128/src/version.c Sun Mar 1 02:43:50 2009
+--- src/version.c Mon Mar 2 02:10:11 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 129,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+146. You experience ACTUAL physical withdrawal symptoms when away
+ from your 'puter and the net.
+
+ /// 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.130
+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.130
+Problem: Vim may haing until CTRL-C is typed when using CTRL-Z.
+Solution: Avoid using pause(). Also use "volatile" for variables used in
+ signal functions. (Dominique Pelle)
+Files: src/auto/configure, src/configure.in, src/config.h.in,
+ src/globals.h, src/os_unix.c
+
+
+*** ../vim-7.2.129/src/auto/configure Thu Nov 20 10:36:04 2008
+--- src/auto/configure Mon Mar 2 02:36:52 2009
+***************
+*** 11565,11570 ****
+--- 11565,11631 ----
+
+ fi
+
++ { $as_echo "$as_me:$LINENO: checking for working volatile" >&5
++ $as_echo_n "checking for working volatile... " >&6; }
++ if test "${ac_cv_c_volatile+set}" = set; then
++ $as_echo_n "(cached) " >&6
++ else
++ cat >conftest.$ac_ext <<_ACEOF
++ /* confdefs.h. */
++ _ACEOF
++ cat confdefs.h >>conftest.$ac_ext
++ cat >>conftest.$ac_ext <<_ACEOF
++ /* end confdefs.h. */
++
++ int
++ main ()
++ {
++
++ volatile int x;
++ int * volatile y = (int *) 0;
++ return !x && !y;
++ ;
++ return 0;
++ }
++ _ACEOF
++ rm -f conftest.$ac_objext
++ if { (ac_try="$ac_compile"
++ case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++ esac
++ eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
++ $as_echo "$ac_try_echo") >&5
++ (eval "$ac_compile") 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_cv_c_volatile=yes
++ else
++ $as_echo "$as_me: failed program was:" >&5
++ sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_cv_c_volatile=no
++ fi
++
++ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ fi
++ { $as_echo "$as_me:$LINENO: result: $ac_cv_c_volatile" >&5
++ $as_echo "$ac_cv_c_volatile" >&6; }
++ if test $ac_cv_c_volatile = no; then
++
++ cat >>confdefs.h <<\_ACEOF
++ #define volatile /**/
++ _ACEOF
++
++ fi
++
+ { $as_echo "$as_me:$LINENO: checking for mode_t" >&5
+ $as_echo_n "checking for mode_t... " >&6; }
+ if test "${ac_cv_type_mode_t+set}" = set; then
+*** ../vim-7.2.129/src/configure.in Thu Nov 20 10:36:04 2008
+--- src/configure.in Sun Feb 22 21:47:44 2009
+***************
+*** 2148,2153 ****
+--- 2148,2154 ----
+ dnl Checks for typedefs, structures, and compiler characteristics.
+ AC_PROG_GCC_TRADITIONAL
+ AC_C_CONST
++ AC_C_VOLATILE
+ AC_TYPE_MODE_T
+ AC_TYPE_OFF_T
+ AC_TYPE_PID_T
+*** ../vim-7.2.129/src/config.h.in Tue Jun 24 23:47:46 2008
+--- src/config.h.in Mon Feb 23 00:13:17 2009
+***************
+*** 50,55 ****
+--- 50,58 ----
+ /* Define to empty if the keyword does not work. */
+ #undef const
+
++ /* Define to empty if the keyword does not work. */
++ #undef volatile
++
+ /* Define to `int' if <sys/types.h> doesn't define. */
+ #undef mode_t
+
+*** ../vim-7.2.129/src/globals.h Tue Jan 6 16:13:42 2009
+--- src/globals.h Mon Mar 2 02:40:16 2009
+***************
+*** 482,489 ****
+ /*
+ * While executing external commands or in Ex mode, should not insert GUI
+ * events in the input buffer: Set hold_gui_events to non-zero.
+ */
+! EXTERN int hold_gui_events INIT(= 0);
+
+ /*
+ * When resizing the shell is postponed, remember the new size, and call
+--- 482,491 ----
+ /*
+ * While executing external commands or in Ex mode, should not insert GUI
+ * events in the input buffer: Set hold_gui_events to non-zero.
++ *
++ * volatile because it is used in signal handler sig_sysmouse().
+ */
+! EXTERN volatile int hold_gui_events INIT(= 0);
+
+ /*
+ * When resizing the shell is postponed, remember the new size, and call
+***************
+*** 597,603 ****
+ EXTERN int really_exiting INIT(= FALSE);
+ /* TRUE when we are sure to exit, e.g., after
+ * a deadly signal */
+! EXTERN int full_screen INIT(= FALSE);
+ /* TRUE when doing full-screen output
+ * otherwise only writing some messages */
+
+--- 599,606 ----
+ EXTERN int really_exiting INIT(= FALSE);
+ /* TRUE when we are sure to exit, e.g., after
+ * a deadly signal */
+! /* volatile because it is used in signal handler deathtrap(). */
+! EXTERN volatile int full_screen INIT(= FALSE);
+ /* TRUE when doing full-screen output
+ * otherwise only writing some messages */
+
+***************
+*** 739,748 ****
+ */
+ EXTERN JMP_BUF lc_jump_env; /* argument to SETJMP() */
+ # ifdef SIGHASARG
+! EXTERN int lc_signal; /* catched signal number, 0 when no was signal
+! catched; used for mch_libcall() */
+ # endif
+! EXTERN int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */
+ #endif
+
+ #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT)
+--- 747,758 ----
+ */
+ EXTERN JMP_BUF lc_jump_env; /* argument to SETJMP() */
+ # ifdef SIGHASARG
+! /* volatile because it is used in signal handlers. */
+! EXTERN volatile int lc_signal; /* caught signal number, 0 when no was signal
+! caught; used for mch_libcall() */
+ # endif
+! /* volatile because it is used in signal handler deathtrap(). */
+! EXTERN volatile int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */
+ #endif
+
+ #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT)
+***************
+*** 986,992 ****
+ EXTERN FILE *scriptout INIT(= NULL); /* stream to write script to */
+ EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */
+
+! EXTERN int got_int INIT(= FALSE); /* set to TRUE when interrupt
+ signal occurred */
+ #ifdef USE_TERM_CONSOLE
+ EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */
+--- 996,1003 ----
+ EXTERN FILE *scriptout INIT(= NULL); /* stream to write script to */
+ EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */
+
+! /* volatile because it is used in signal handler catch_sigint(). */
+! EXTERN volatile int got_int INIT(= FALSE); /* set to TRUE when interrupt
+ signal occurred */
+ #ifdef USE_TERM_CONSOLE
+ EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */
+*** ../vim-7.2.129/src/os_unix.c Sun Feb 22 02:51:37 2009
+--- src/os_unix.c Mon Mar 2 01:05:50 2009
+***************
+*** 181,187 ****
+ && defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK)
+ # define SET_SIG_ALARM
+ static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG);
+! static int sig_alarm_called;
+ #endif
+ static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG);
+
+--- 181,188 ----
+ && defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK)
+ # define SET_SIG_ALARM
+ static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG);
+! /* volatile because it is used in signal handler sig_alarm(). */
+! static volatile int sig_alarm_called;
+ #endif
+ static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG);
+
+***************
+*** 201,213 ****
+ # define SIG_ERR ((RETSIGTYPE (*)())-1)
+ #endif
+
+! static int do_resize = FALSE;
+ #ifndef __EMX__
+ static char_u *extra_shell_arg = NULL;
+ static int show_shell_mess = TRUE;
+ #endif
+! static int deadly_signal = 0; /* The signal we caught */
+! static int in_mch_delay = FALSE; /* sleeping in mch_delay() */
+
+ static int curr_tmode = TMODE_COOK; /* contains current terminal mode */
+
+--- 202,217 ----
+ # define SIG_ERR ((RETSIGTYPE (*)())-1)
+ #endif
+
+! /* volatile because it is used in signal handler sig_winch(). */
+! static volatile int do_resize = FALSE;
+ #ifndef __EMX__
+ static char_u *extra_shell_arg = NULL;
+ static int show_shell_mess = TRUE;
+ #endif
+! /* volatile because it is used in signal handler deathtrap(). */
+! static volatile int deadly_signal = 0; /* The signal we caught */
+! /* volatile because it is used in signal handler deathtrap(). */
+! static volatile int in_mch_delay = FALSE; /* sleeping in mch_delay() */
+
+ static int curr_tmode = TMODE_COOK; /* contains current terminal mode */
+
+***************
+*** 802,808 ****
+ #endif
+
+ /*
+! * We need correct potatotypes for a signal function, otherwise mean compilers
+ * will barf when the second argument to signal() is ``wrong''.
+ * Let me try it with a few tricky defines from my own osdef.h (jw).
+ */
+--- 806,812 ----
+ #endif
+
+ /*
+! * We need correct prototypes for a signal function, otherwise mean compilers
+ * will barf when the second argument to signal() is ``wrong''.
+ * Let me try it with a few tricky defines from my own osdef.h (jw).
+ */
+***************
+*** 1068,1080 ****
+ SIGRETURN;
+ }
+
+! #ifdef _REENTRANT
+ /*
+ * On Solaris with multi-threading, suspending might not work immediately.
+ * Catch the SIGCONT signal, which will be used as an indication whether the
+ * suspending has been done or not.
+ */
+! static int sigcont_received;
+ static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
+
+ /*
+--- 1072,1089 ----
+ SIGRETURN;
+ }
+
+! #if defined(_REENTRANT) && defined(SIGCONT)
+ /*
+ * On Solaris with multi-threading, suspending might not work immediately.
+ * Catch the SIGCONT signal, which will be used as an indication whether the
+ * suspending has been done or not.
++ *
++ * On Linux, signal is not always handled immediately either.
++ * See https://bugs.launchpad.net/bugs/291373
++ *
++ * volatile because it is used in in signal handler sigcont_handler().
+ */
+! static volatile int sigcont_received;
+ static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
+
+ /*
+***************
+*** 1118,1132 ****
+ }
+ # endif
+
+! # ifdef _REENTRANT
+ sigcont_received = FALSE;
+ # endif
+ kill(0, SIGTSTP); /* send ourselves a STOP signal */
+! # ifdef _REENTRANT
+! /* When we didn't suspend immediately in the kill(), do it now. Happens
+! * on multi-threaded Solaris. */
+! if (!sigcont_received)
+! pause();
+ # endif
+
+ # ifdef FEAT_TITLE
+--- 1127,1154 ----
+ }
+ # endif
+
+! # if defined(_REENTRANT) && defined(SIGCONT)
+ sigcont_received = FALSE;
+ # endif
+ kill(0, SIGTSTP); /* send ourselves a STOP signal */
+! # if defined(_REENTRANT) && defined(SIGCONT)
+! /*
+! * Wait for the SIGCONT signal to be handled. It generally happens
+! * immediately, but somehow not all the time. Do not call pause()
+! * because there would be race condition which would hang Vim if
+! * signal happened in between the test of sigcont_received and the
+! * call to pause(). If signal is not yet received, call sleep(0)
+! * to just yield CPU. Signal should then be received. If somehow
+! * it's still not received, sleep 1, 2, 3 ms. Don't bother waiting
+! * further if signal is not received after 1+2+3+4 ms (not expected
+! * to happen).
+! */
+! {
+! long wait;
+! for (wait = 0; !sigcont_received && wait <= 3L; wait++)
+! /* Loop is not entered most of the time */
+! mch_delay(wait, FALSE);
+! }
+ # endif
+
+ # ifdef FEAT_TITLE
+***************
+*** 1175,1181 ****
+ #ifdef SIGTSTP
+ signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
+ #endif
+! #ifdef _REENTRANT
+ signal(SIGCONT, sigcont_handler);
+ #endif
+
+--- 1197,1203 ----
+ #ifdef SIGTSTP
+ signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
+ #endif
+! #if defined(_REENTRANT) && defined(SIGCONT)
+ signal(SIGCONT, sigcont_handler);
+ #endif
+
+***************
+*** 1234,1240 ****
+ reset_signals()
+ {
+ catch_signals(SIG_DFL, SIG_DFL);
+! #ifdef _REENTRANT
+ /* SIGCONT isn't in the list, because its default action is ignore */
+ signal(SIGCONT, SIG_DFL);
+ #endif
+--- 1256,1262 ----
+ reset_signals()
+ {
+ catch_signals(SIG_DFL, SIG_DFL);
+! #if defined(_REENTRANT) && defined(SIGCONT)
+ /* SIGCONT isn't in the list, because its default action is ignore */
+ signal(SIGCONT, SIG_DFL);
+ #endif
+***************
+*** 5899,5905 ****
+--- 5921,5929 ----
+ * we are going to suspend or starting an external process
+ * so we shouldn't have problem with this
+ */
++ # ifdef SIGTSTP
+ signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
++ # endif
+ return 1; /* succeed */
+ }
+ if (gpm_fd == -2)
+*** ../vim-7.2.129/src/version.c Mon Mar 2 02:11:09 2009
+--- src/version.c Mon Mar 2 02:36:00 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 130,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+148. You find it easier to dial-up the National Weather Service
+ Weather/your_town/now.html than to simply look out the window.
+
+ /// 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.131
+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.131
+Problem: When 'keymap' is cleared may still use the cursor highlighting for
+ when it's enabled.
+Solution: Reset 'iminsert' and 'imsearch'. (partly by Dominique Pelle)
+ Also avoid ":setlocal" for these options have a global effect.
+Files: src/option.c
+
+
+*** ../vim-7.2.130/src/option.c Sat Feb 21 20:27:00 2009
+--- src/option.c Wed Mar 4 04:09:51 2009
+***************
+*** 5797,5810 ****
+ /* load or unload key mapping tables */
+ errmsg = keymap_init();
+
+! /* When successfully installed a new keymap switch on using it. */
+! if (*curbuf->b_p_keymap != NUL && errmsg == NULL)
+ {
+! curbuf->b_p_iminsert = B_IMODE_LMAP;
+! if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT)
+! curbuf->b_p_imsearch = B_IMODE_LMAP;
+! set_iminsert_global();
+! set_imsearch_global();
+ # ifdef FEAT_WINDOWS
+ status_redraw_curbuf();
+ # endif
+--- 5797,5824 ----
+ /* load or unload key mapping tables */
+ errmsg = keymap_init();
+
+! if (errmsg == NULL)
+ {
+! if (*curbuf->b_p_keymap != NUL)
+! {
+! /* Installed a new keymap, switch on using it. */
+! curbuf->b_p_iminsert = B_IMODE_LMAP;
+! if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT)
+! curbuf->b_p_imsearch = B_IMODE_LMAP;
+! }
+! else
+! {
+! /* Cleared the keymap, may reset 'iminsert' and 'imsearch'. */
+! if (curbuf->b_p_iminsert == B_IMODE_LMAP)
+! curbuf->b_p_iminsert = B_IMODE_NONE;
+! if (curbuf->b_p_imsearch == B_IMODE_LMAP)
+! curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
+! }
+! if ((opt_flags & OPT_LOCAL) == 0)
+! {
+! set_iminsert_global();
+! set_imsearch_global();
+! }
+ # ifdef FEAT_WINDOWS
+ status_redraw_curbuf();
+ # endif
+*** ../vim-7.2.130/src/version.c Mon Mar 2 02:44:54 2009
+--- src/version.c Wed Mar 4 04:10:32 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 131,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+157. You fum through a magazine, you first check to see if it has a web
+ 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.132
+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.132
+Problem: When changing directory during a SwapExists autocmd freed memory
+ may be accessed. (Dominique Pelle)
+Solution: Add the allbuf_lock flag.
+Files: src/ex_getln.c, src/globals.h, src/fileio.c,
+ src/proto/ex_getln.pro
+
+
+*** ../vim-7.2.131/src/ex_getln.c Mon Mar 2 02:11:09 2009
+--- src/ex_getln.c Mon Mar 2 00:53:39 2009
+***************
+*** 2000,2007 ****
+
+ #if defined(FEAT_AUTOCMD) || defined(PROTO)
+ /*
+! * Check if "curbuf_lock" is set and return TRUE when it is and give an error
+! * message.
+ */
+ int
+ curbuf_locked()
+--- 2000,2007 ----
+
+ #if defined(FEAT_AUTOCMD) || defined(PROTO)
+ /*
+! * Check if "curbuf_lock" or "allbuf_lock" is set and return TRUE when it is
+! * and give an error message.
+ */
+ int
+ curbuf_locked()
+***************
+*** 2011,2016 ****
+--- 2011,2031 ----
+ EMSG(_("E788: Not allowed to edit another buffer now"));
+ return TRUE;
+ }
++ return allbuf_locked();
++ }
++
++ /*
++ * Check if "allbuf_lock" is set and return TRUE when it is and give an error
++ * message.
++ */
++ int
++ allbuf_locked()
++ {
++ if (allbuf_lock > 0)
++ {
++ EMSG(_("E811: Not allowed to change buffer information now"));
++ return TRUE;
++ }
+ return FALSE;
+ }
+ #endif
+*** ../vim-7.2.131/src/globals.h Mon Mar 2 02:44:54 2009
+--- src/globals.h Mon Mar 2 02:40:16 2009
+***************
+*** 619,624 ****
+--- 619,629 ----
+ EXTERN int curbuf_lock INIT(= 0);
+ /* non-zero when the current buffer can't be
+ * changed. Used for FileChangedRO. */
++ EXTERN int allbuf_lock INIT(= 0);
++ /* non-zero when no buffer name can be
++ * changed, no buffer can be deleted and
++ * current directory can't be changed.
++ * Used for SwapExists et al. */
+ #endif
+ #ifdef FEAT_EVAL
+ # define HAVE_SANDBOX
+*** ../vim-7.2.131/src/fileio.c Wed Dec 31 16:20:54 2008
+--- src/fileio.c Sun Mar 1 23:37:10 2009
+***************
+*** 69,75 ****
+ static int au_find_group __ARGS((char_u *name));
+
+ # define AUGROUP_DEFAULT -1 /* default autocmd group */
+! # define AUGROUP_ERROR -2 /* errornouse autocmd group */
+ # define AUGROUP_ALL -3 /* all autocmd groups */
+ #endif
+
+--- 69,75 ----
+ static int au_find_group __ARGS((char_u *name));
+
+ # define AUGROUP_DEFAULT -1 /* default autocmd group */
+! # define AUGROUP_ERROR -2 /* erroneous autocmd group */
+ # define AUGROUP_ALL -3 /* all autocmd groups */
+ #endif
+
+***************
+*** 144,150 ****
+ # endif
+ #endif
+ static int move_lines __ARGS((buf_T *frombuf, buf_T *tobuf));
+!
+
+ void
+ filemess(buf, name, s, attr)
+--- 144,152 ----
+ # endif
+ #endif
+ static int move_lines __ARGS((buf_T *frombuf, buf_T *tobuf));
+! #ifdef FEAT_AUTOCMD
+! static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer name");
+! #endif
+
+ void
+ filemess(buf, name, s, attr)
+***************
+*** 295,300 ****
+--- 297,315 ----
+ int conv_restlen = 0; /* nr of bytes in conv_rest[] */
+ #endif
+
++ #ifdef FEAT_AUTOCMD
++ /* Remember the initial values of curbuf, curbuf->b_ffname and
++ * curbuf->b_fname to detect whether they are altered as a result of
++ * executing nasty autocommands. Also check if "fname" and "sfname"
++ * point to one of these values. */
++ buf_T *old_curbuf = curbuf;
++ char_u *old_b_ffname = curbuf->b_ffname;
++ char_u *old_b_fname = curbuf->b_fname;
++ int using_b_ffname = (fname == curbuf->b_ffname)
++ || (sfname == curbuf->b_ffname);
++ int using_b_fname = (fname == curbuf->b_fname)
++ || (sfname == curbuf->b_fname);
++ #endif
+ write_no_eol_lnum = 0; /* in case it was set by the previous read */
+
+ /*
+***************
+*** 589,595 ****
+--- 604,624 ----
+ #ifdef FEAT_QUICKFIX
+ if (!bt_dontwrite(curbuf))
+ #endif
++ {
+ check_need_swap(newfile);
++ #ifdef FEAT_AUTOCMD
++ /* SwapExists autocommand may mess things up */
++ if (curbuf != old_curbuf
++ || (using_b_ffname
++ && (old_b_ffname != curbuf->b_ffname))
++ || (using_b_fname
++ && (old_b_fname != curbuf->b_fname)))
++ {
++ EMSG(_(e_auchangedbuf));
++ return FAIL;
++ }
++ #endif
++ }
+ if (dir_of_file_exists(fname))
+ filemess(curbuf, sfname, (char_u *)_("[New File]"), 0);
+ else
+***************
+*** 668,673 ****
+--- 697,713 ----
+ #endif
+ {
+ check_need_swap(newfile);
++ #ifdef FEAT_AUTOCMD
++ if (!read_stdin && (curbuf != old_curbuf
++ || (using_b_ffname && (old_b_ffname != curbuf->b_ffname))
++ || (using_b_fname && (old_b_fname != curbuf->b_fname))))
++ {
++ EMSG(_(e_auchangedbuf));
++ if (!read_buffer)
++ close(fd);
++ return FAIL;
++ }
++ #endif
+ #ifdef UNIX
+ /* Set swap file protection bits after creating it. */
+ if (swap_mode > 0 && curbuf->b_ml.ml_mfp->mf_fname != NULL)
+***************
+*** 698,704 ****
+ {
+ int m = msg_scroll;
+ int n = msg_scrolled;
+- buf_T *old_curbuf = curbuf;
+
+ /*
+ * The file must be closed again, the autocommands may want to change
+--- 738,743 ----
+***************
+*** 740,747 ****
+--- 779,791 ----
+ /*
+ * Don't allow the autocommands to change the current buffer.
+ * Try to re-open the file.
++ *
++ * Don't allow the autocommands to change the buffer name either
++ * (cd for example) if it invalidates fname or sfname.
+ */
+ if (!read_stdin && (curbuf != old_curbuf
++ || (using_b_ffname && (old_b_ffname != curbuf->b_ffname))
++ || (using_b_fname && (old_b_fname != curbuf->b_fname))
+ || (fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0)) < 0))
+ {
+ --no_wait_return;
+***************
+*** 6320,6326 ****
+
+ if (!stuff_empty() || global_busy || !typebuf_typed()
+ #ifdef FEAT_AUTOCMD
+! || autocmd_busy || curbuf_lock > 0
+ #endif
+ )
+ need_check_timestamps = TRUE; /* check later */
+--- 6364,6370 ----
+
+ if (!stuff_empty() || global_busy || !typebuf_typed()
+ #ifdef FEAT_AUTOCMD
+! || autocmd_busy || curbuf_lock > 0 || allbuf_lock > 0
+ #endif
+ )
+ need_check_timestamps = TRUE; /* check later */
+***************
+*** 6522,6529 ****
+--- 6566,6575 ----
+ set_vim_var_string(VV_FCS_REASON, (char_u *)reason, -1);
+ set_vim_var_string(VV_FCS_CHOICE, (char_u *)"", -1);
+ # endif
++ ++allbuf_lock;
+ n = apply_autocmds(EVENT_FILECHANGEDSHELL,
+ buf->b_fname, buf->b_fname, FALSE, buf);
++ --allbuf_lock;
+ busy = FALSE;
+ if (n)
+ {
+*** ../vim-7.2.131/src/proto/ex_getln.pro Fri Nov 28 10:59:57 2008
+--- src/proto/ex_getln.pro Sun Mar 1 00:27:12 2009
+***************
+*** 4,9 ****
+--- 4,10 ----
+ int text_locked __ARGS((void));
+ void text_locked_msg __ARGS((void));
+ int curbuf_locked __ARGS((void));
++ int allbuf_locked __ARGS((void));
+ char_u *getexline __ARGS((int c, void *dummy, int indent));
+ char_u *getexmodeline __ARGS((int promptc, void *dummy, int indent));
+ int cmdline_overstrike __ARGS((void));
+*** ../vim-7.2.131/src/version.c Wed Mar 4 04:11:56 2009
+--- src/version.c Thu Mar 5 03:08:54 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 132,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+168. You have your own domain name.
+
+ /// 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.133
+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.133
+Problem: ":diffoff!" changes settings in windows not in diff mode.
+Solution: Only change settings in other windows when 'diff' is set, always
+ do it for the current window. (Lech Lorens)
+Files: src/diff.c
+
+
+*** ../vim-7.2.132/src/diff.c Thu Jan 22 20:48:07 2009
+--- src/diff.c Fri Mar 6 04:17:41 2009
+***************
+*** 1153,1159 ****
+
+ for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ {
+! if (wp == curwin || eap->forceit)
+ {
+ /* Set 'diff', 'scrollbind' off and 'wrap' on. */
+ wp->w_p_diff = FALSE;
+--- 1153,1159 ----
+
+ for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ {
+! if (wp == curwin || (eap->forceit && wp->w_p_diff))
+ {
+ /* Set 'diff', 'scrollbind' off and 'wrap' on. */
+ wp->w_p_diff = FALSE;
+*** ../vim-7.2.132/src/version.c Thu Mar 5 03:13:51 2009
+--- src/version.c Wed Mar 11 12:45:10 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 133,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+192. Your boss asks you to "go fer" coffee and you come up with 235 FTP sites.
+
+ /// 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.134
+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.134
+Problem: Warning for discarding "const" from pointer.
+Solution: Don't pass const pointer to mch_memmove().
+Files: src/fileio.c
+
+
+*** ../vim-7.2.133/src/fileio.c Thu Mar 5 03:13:51 2009
+--- src/fileio.c Wed Mar 11 12:59:35 2009
+***************
+*** 5288,5300 ****
+ /* Convert with iconv(). */
+ if (ip->bw_restlen > 0)
+ {
+ /* Need to concatenate the remainder of the previous call and
+ * the bytes of the current call. Use the end of the
+ * conversion buffer for this. */
+ fromlen = len + ip->bw_restlen;
+! from = (char *)ip->bw_conv_buf + ip->bw_conv_buflen - fromlen;
+! mch_memmove((void *)from, ip->bw_rest, (size_t)ip->bw_restlen);
+! mch_memmove((void *)(from + ip->bw_restlen), buf, (size_t)len);
+ tolen = ip->bw_conv_buflen - fromlen;
+ }
+ else
+--- 5288,5303 ----
+ /* Convert with iconv(). */
+ if (ip->bw_restlen > 0)
+ {
++ char *fp;
++
+ /* Need to concatenate the remainder of the previous call and
+ * the bytes of the current call. Use the end of the
+ * conversion buffer for this. */
+ fromlen = len + ip->bw_restlen;
+! fp = (char *)ip->bw_conv_buf + ip->bw_conv_buflen - fromlen;
+! mch_memmove(fp, ip->bw_rest, (size_t)ip->bw_restlen);
+! mch_memmove(fp + ip->bw_restlen, buf, (size_t)len);
+! from = fp;
+ tolen = ip->bw_conv_buflen - fromlen;
+ }
+ else
+*** ../vim-7.2.133/src/version.c Wed Mar 11 12:45:44 2009
+--- src/version.c Wed Mar 11 13:08:25 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 134,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+193. You ask your girlfriend to drive home so you can sit back with
+ your PDA and download the information to your laptop
+
+ /// 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.135
+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.135
+Problem: Memory leak when redefining user command with complete argument.
+Solution: Free the old complete argument. (Dominique Pelle)
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.2.134/src/ex_docmd.c Sun Mar 1 02:43:50 2009
+--- src/ex_docmd.c Wed Mar 11 11:13:31 2009
+***************
+*** 5124,5130 ****
+ }
+
+ vim_free(cmd->uc_rep);
+! cmd->uc_rep = 0;
+ break;
+ }
+
+--- 5124,5134 ----
+ }
+
+ vim_free(cmd->uc_rep);
+! cmd->uc_rep = NULL;
+! #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+! vim_free(cmd->uc_compl_arg);
+! cmd->uc_compl_arg = NULL;
+! #endif
+ break;
+ }
+
+***************
+*** 5941,5947 ****
+ for (;;)
+ {
+ p = cmd->uc_rep; /* source */
+! q = buf; /* destinateion */
+ totlen = 0;
+
+ for (;;)
+--- 5945,5951 ----
+ for (;;)
+ {
+ p = cmd->uc_rep; /* source */
+! q = buf; /* destination */
+ totlen = 0;
+
+ for (;;)
+***************
+*** 7846,7851 ****
+--- 7850,7858 ----
+ {
+ vim_free(prev_dir);
+ prev_dir = NULL;
++
++ vim_free(globaldir);
++ globaldir = NULL;
+ }
+ #endif
+
+*** ../vim-7.2.134/src/version.c Wed Mar 11 13:09:30 2009
+--- src/version.c Wed Mar 11 15:06:23 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 135,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+194. Your business cards contain your e-mail and home page 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.136
+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.136 (after 7.2.132)
+Problem: ":cd" is still possible in a SwapExists autocmd.
+Solution: Check the allbuf_lock flag in ex_cd().
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.2.135/src/ex_docmd.c Wed Mar 11 15:09:07 2009
+--- src/ex_docmd.c Wed Mar 11 11:13:31 2009
+***************
+*** 7875,7880 ****
+--- 7875,7884 ----
+ else
+ #endif
+ {
++ #ifdef FEAT_AUTOCMD
++ if (allbuf_locked())
++ return;
++ #endif
+ if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged()
+ && !eap->forceit)
+ {
+*** ../vim-7.2.135/src/version.c Wed Mar 11 15:09:07 2009
+--- src/version.c Wed Mar 11 15:35:36 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 136,
+ /**/
+
+--
+Press any key to continue, press any other key to quit.
+
+ /// 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.137
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Note: The special characters in the patch may cause problems.
+
+Patch 7.2.137
+Problem: When 'virtualedit' is set, a left shift of a blockwise selection
+ that starts and ends inside a tab shifts too much. (Helmut
+ Stiegler)
+Solution: Redo the block left shift code. (Lech Lorens)
+Files: src/ops.c, src/testdir/Makefile, src/testdir/test66.in,
+ src/testdir/test66.ok
+
+
+*** ../vim-7.2.136/src/ops.c Wed Dec 3 13:38:00 2008
+--- src/ops.c Thu Mar 5 04:47:09 2009
+***************
+*** 72,82 ****
+ */
+ struct block_def
+ {
+! int startspaces; /* 'extra' cols of first char */
+! int endspaces; /* 'extra' cols of first char */
+ int textlen; /* chars in block */
+! char_u *textstart; /* pointer to 1st char in block */
+! colnr_T textcol; /* cols of chars (at least part.) in block */
+ colnr_T start_vcol; /* start col of 1st char wholly inside block */
+ colnr_T end_vcol; /* start col of 1st char wholly after block */
+ #ifdef FEAT_VISUALEXTRA
+--- 72,82 ----
+ */
+ struct block_def
+ {
+! int startspaces; /* 'extra' cols before first char */
+! int endspaces; /* 'extra' cols after last char */
+ int textlen; /* chars in block */
+! char_u *textstart; /* pointer to 1st char (partially) in block */
+! colnr_T textcol; /* index of chars (partially) in block */
+ colnr_T start_vcol; /* start col of 1st char wholly inside block */
+ colnr_T end_vcol; /* start col of 1st char wholly after block */
+ #ifdef FEAT_VISUALEXTRA
+***************
+*** 382,396 ****
+ {
+ int left = (oap->op_type == OP_LSHIFT);
+ int oldstate = State;
+! int total, split;
+! char_u *newp, *oldp, *midp, *ptr;
+ int oldcol = curwin->w_cursor.col;
+ int p_sw = (int)curbuf->b_p_sw;
+ int p_ts = (int)curbuf->b_p_ts;
+ struct block_def bd;
+- int internal = 0;
+ int incr;
+! colnr_T vcol, col = 0, ws_vcol;
+ int i = 0, j = 0;
+ int len;
+
+--- 382,395 ----
+ {
+ int left = (oap->op_type == OP_LSHIFT);
+ int oldstate = State;
+! int total;
+! char_u *newp, *oldp;
+ int oldcol = curwin->w_cursor.col;
+ int p_sw = (int)curbuf->b_p_sw;
+ int p_ts = (int)curbuf->b_p_ts;
+ struct block_def bd;
+ int incr;
+! colnr_T ws_vcol;
+ int i = 0, j = 0;
+ int len;
+
+***************
+*** 456,522 ****
+ }
+ else /* left */
+ {
+! vcol = oap->start_vcol;
+! /* walk vcol past ws to be removed */
+! for (midp = oldp + bd.textcol;
+! vcol < (oap->start_vcol + total) && vim_iswhite(*midp); )
+! {
+! incr = lbr_chartabsize_adv(&midp, (colnr_T)vcol);
+! vcol += incr;
+! }
+! /* internal is the block-internal ws replacing a split TAB */
+! if (vcol > (oap->start_vcol + total))
+! {
+! /* we have to split the TAB *(midp-1) */
+! internal = vcol - (oap->start_vcol + total);
+! }
+! /* if 'expandtab' is not set, use TABs */
+
+! split = bd.startspaces + internal;
+! if (split > 0)
+! {
+! if (!curbuf->b_p_et)
+! {
+! for (ptr = oldp, col = 0; ptr < oldp+bd.textcol; )
+! col += lbr_chartabsize_adv(&ptr, (colnr_T)col);
+
+! /* col+1 now equals the start col of the first char of the
+! * block (may be < oap.start_vcol if we're splitting a TAB) */
+! i = ((col % p_ts) + split) / p_ts; /* number of tabs */
+! }
+! if (i)
+! j = ((col % p_ts) + split) % p_ts; /* number of spp */
+! else
+! j = split;
+! }
+
+! newp = alloc_check(bd.textcol + i + j + (unsigned)STRLEN(midp) + 1);
+! if (newp == NULL)
+! return;
+! vim_memset(newp, NUL, (size_t)(bd.textcol + i + j + STRLEN(midp) + 1));
+
+! /* copy first part we want to keep */
+! mch_memmove(newp, oldp, (size_t)bd.textcol);
+! /* Now copy any TABS and spp to ensure correct alignment! */
+! while (vim_iswhite(*midp))
+ {
+! if (*midp == TAB)
+! i++;
+! else /*space */
+! j++;
+! midp++;
+ }
+! /* We might have an extra TAB worth of spp now! */
+! if (j / p_ts && !curbuf->b_p_et)
+ {
+! i++;
+! j -= p_ts;
+ }
+- copy_chars(newp + bd.textcol, (size_t)i, TAB);
+- copy_spaces(newp + bd.textcol + i, (size_t)j);
+
+! /* the end */
+! STRMOVE(newp + STRLEN(newp), midp);
+ }
+ /* replace the line */
+ ml_replace(curwin->w_cursor.lnum, newp, FALSE);
+--- 455,543 ----
+ }
+ else /* left */
+ {
+! colnr_T destination_col; /* column to which text in block will
+! be shifted */
+! char_u *verbatim_copy_end; /* end of the part of the line which is
+! copied verbatim */
+! colnr_T verbatim_copy_width;/* the (displayed) width of this part
+! of line */
+! unsigned fill; /* nr of spaces that replace a TAB */
+! unsigned new_line_len; /* the length of the line after the
+! block shift */
+! size_t block_space_width;
+! size_t shift_amount;
+! char_u *non_white = bd.textstart;
+! colnr_T non_white_col;
+
+! /*
+! * Firstly, let's find the first non-whitespace character that is
+! * displayed after the block's start column and the character's column
+! * number. Also, let's calculate the width of all the whitespace
+! * characters that are displayed in the block and precede the searched
+! * non-whitespace character.
+! */
+
+! /* If "bd.startspaces" is set, "bd.textstart" points to the character,
+! * the part of which is displayed at the block's beginning. Let's start
+! * searching from the next character. */
+! if (bd.startspaces)
+! mb_ptr_adv(non_white);
+
+! /* The character's column is in "bd.start_vcol". */
+! non_white_col = bd.start_vcol;
+
+! while (vim_iswhite(*non_white))
+ {
+! incr = lbr_chartabsize_adv(&non_white, non_white_col);
+! non_white_col += incr;
+ }
+!
+! block_space_width = non_white_col - oap->start_vcol;
+! /* We will shift by "total" or "block_space_width", whichever is less.
+! */
+! shift_amount = (block_space_width < total? block_space_width: total);
+!
+! /* The column to which we will shift the text. */
+! destination_col = non_white_col - shift_amount;
+!
+! /* Now let's find out how much of the beginning of the line we can
+! * reuse without modification. */
+! verbatim_copy_end = bd.textstart;
+! verbatim_copy_width = bd.start_vcol;
+!
+! /* If "bd.startspaces" is set, "bd.textstart" points to the character
+! * preceding the block. We have to subtract its width to obtain its
+! * column number. */
+! if (bd.startspaces)
+! verbatim_copy_width -= bd.start_char_vcols;
+! while (verbatim_copy_width < destination_col)
+ {
+! incr = lbr_chartabsize(verbatim_copy_end, verbatim_copy_width);
+! if (verbatim_copy_width + incr > destination_col)
+! break;
+! verbatim_copy_width += incr;
+! mb_ptr_adv(verbatim_copy_end);
+ }
+
+! /* If "destination_col" is different from the width of the initial
+! * part of the line that will be copied, it means we encountered a tab
+! * character, which we will have to partly replace with spaces. */
+! fill = destination_col - verbatim_copy_width;
+!
+! /* The replacement line will consist of:
+! * - the beginning of the original line up to "verbatim_copy_end",
+! * - "fill" number of spaces,
+! * - the rest of the line, pointed to by non_white. */
+! new_line_len = (unsigned)(verbatim_copy_end - oldp)
+! + fill
+! + (unsigned)STRLEN(non_white) + 1;
+!
+! newp = alloc_check(new_line_len);
+! if (newp == NULL)
+! return;
+! mch_memmove(newp, oldp, (size_t)(verbatim_copy_end - oldp));
+! copy_spaces(newp + (verbatim_copy_end - oldp), (size_t)fill);
+! STRMOVE(newp + (verbatim_copy_end - oldp) + fill, non_white);
+ }
+ /* replace the line */
+ ml_replace(curwin->w_cursor.lnum, newp, FALSE);
+***************
+*** 4851,4857 ****
+ * - textlen includes the first/last char to be (partly) deleted
+ * - start/endspaces is the number of columns that are taken by the
+ * first/last deleted char minus the number of columns that have to be
+! * deleted. for yank and tilde:
+ * - textlen includes the first/last char to be wholly yanked
+ * - start/endspaces is the number of columns of the first/last yanked char
+ * that are to be yanked.
+--- 4872,4879 ----
+ * - textlen includes the first/last char to be (partly) deleted
+ * - start/endspaces is the number of columns that are taken by the
+ * first/last deleted char minus the number of columns that have to be
+! * deleted.
+! * for yank and tilde:
+ * - textlen includes the first/last char to be wholly yanked
+ * - start/endspaces is the number of columns of the first/last yanked char
+ * that are to be yanked.
+*** ../vim-7.2.136/src/testdir/Makefile Wed Sep 10 18:25:18 2008
+--- src/testdir/Makefile Thu Mar 5 04:53:58 2009
+***************
+*** 20,26 ****
+ test48.out test49.out test51.out test52.out test53.out \
+ test54.out test55.out test56.out test57.out test58.out \
+ test59.out test60.out test61.out test62.out test63.out \
+! test64.out test65.out
+
+ SCRIPTS_GUI = test16.out
+
+--- 20,26 ----
+ test48.out test49.out test51.out test52.out test53.out \
+ test54.out test55.out test56.out test57.out test58.out \
+ test59.out test60.out test61.out test62.out test63.out \
+! test64.out test65.out test66.out
+
+ SCRIPTS_GUI = test16.out
+
+*** ../vim-7.2.136/src/testdir/test66.in Wed Mar 11 16:24:44 2009
+--- src/testdir/test66.in Wed Mar 11 11:52:57 2009
+***************
+*** 0 ****
+--- 1,25 ----
++
++ Test for visual block shift and tab characters.
++
++ STARTTEST
++ :so small.vim
++ /^abcdefgh
++ \164jI \ej<<11|D
++ 7|a \e
++ 7|a \e
++ 7|a \e4k13|\164j<
++ :$-4,$w! test.out
++ :$-4,$s/\s\+//g
++ \164kI \ej<<
++ 7|a \e
++ 7|a \e
++ 7|a \e4k13|\164j3<
++ :$-4,$w >> test.out
++ :qa!
++ ENDTEST
++
++ abcdefghijklmnopqrstuvwxyz
++ abcdefghijklmnopqrstuvwxyz
++ abcdefghijklmnopqrstuvwxyz
++ abcdefghijklmnopqrstuvwxyz
++ abcdefghijklmnopqrstuvwxyz
+*** ../vim-7.2.136/src/testdir/test66.ok Wed Mar 11 16:24:44 2009
+--- src/testdir/test66.ok Thu Mar 5 04:39:36 2009
+***************
+*** 0 ****
+--- 1,10 ----
++ abcdefghijklmnopqrstuvwxyz
++ abcdefghij
++ abc defghijklmnopqrstuvwxyz
++ abc defghijklmnopqrstuvwxyz
++ abc defghijklmnopqrstuvwxyz
++ abcdefghijklmnopqrstuvwxyz
++ abcdefghij
++ abc defghijklmnopqrstuvwxyz
++ abc defghijklmnopqrstuvwxyz
++ abc defghijklmnopqrstuvwxyz
+*** ../vim-7.2.136/src/version.c Wed Mar 11 15:36:01 2009
+--- src/version.c Wed Mar 11 16:23:07 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 137,
+ /**/
+
+--
+% cat /usr/include/sys/errno.h
+#define EPERM 1 /* Operation not permitted */
+#define ENOENT 2 /* No such file or directory */
+#define ESRCH 3 /* No such process */
+[...]
+#define EMACS 666 /* Too many macros */
+%
+
+ /// 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.138 (extra)
+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.138 (extra part of 7.2.137)
+Problem: See 7.2.137.
+Solution: See 7.2.137.
+Files: src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+ src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+ src/testdir/Make_vms.mms
+
+
+*** ../vim-7.2.137/src/testdir/Make_amiga.mak Tue Jun 24 23:46:42 2008
+--- src/testdir/Make_amiga.mak Thu Mar 5 04:49:38 2009
+***************
+*** 25,31 ****
+ test43.out test44.out test45.out test46.out test47.out \
+ test48.out test51.out test53.out test54.out test55.out \
+ test56.out test57.out test58.out test59.out test60.out \
+! test61.out test62.out test63.out test64.out test65.out
+
+ .SUFFIXES: .in .out
+
+--- 25,32 ----
+ test43.out test44.out test45.out test46.out test47.out \
+ test48.out test51.out test53.out test54.out test55.out \
+ test56.out test57.out test58.out test59.out test60.out \
+! test61.out test62.out test63.out test64.out test65.out \
+! test66.out
+
+ .SUFFIXES: .in .out
+
+***************
+*** 110,112 ****
+--- 111,114 ----
+ test63.out: test63.in
+ test64.out: test64.in
+ test65.out: test65.in
++ test66.out: test66.in
+*** ../vim-7.2.137/src/testdir/Make_dos.mak Tue Jun 24 23:39:51 2008
+--- src/testdir/Make_dos.mak Thu Mar 5 04:52:47 2009
+***************
+*** 26,32 ****
+ test15.out test17.out test18.out test21.out test26.out \
+ test30.out test31.out test32.out test33.out test34.out \
+ test37.out test38.out test39.out test40.out test41.out \
+! test42.out test52.out test65.out
+
+ SCRIPTS32 = test50.out
+
+--- 26,32 ----
+ test15.out test17.out test18.out test21.out test26.out \
+ test30.out test31.out test32.out test33.out test34.out \
+ test37.out test38.out test39.out test40.out test41.out \
+! test42.out test52.out test65.out test66.out
+
+ SCRIPTS32 = test50.out
+
+*** ../vim-7.2.137/src/testdir/Make_ming.mak Sat Sep 20 16:26:10 2008
+--- src/testdir/Make_ming.mak Thu Mar 5 04:53:16 2009
+***************
+*** 45,51 ****
+ test15.out test17.out test18.out test21.out test26.out \
+ test30.out test31.out test32.out test33.out test34.out \
+ test37.out test38.out test39.out test40.out test41.out \
+! test42.out test52.out test65.out
+
+ SCRIPTS32 = test50.out
+
+--- 45,51 ----
+ test15.out test17.out test18.out test21.out test26.out \
+ test30.out test31.out test32.out test33.out test34.out \
+ test37.out test38.out test39.out test40.out test41.out \
+! test42.out test52.out test65.out test66.out
+
+ SCRIPTS32 = test50.out
+
+*** ../vim-7.2.137/src/testdir/Make_os2.mak Tue Jun 24 22:37:41 2008
+--- src/testdir/Make_os2.mak Thu Mar 5 04:53:31 2009
+***************
+*** 25,31 ****
+ test43.out test44.out test45.out test46.out test47.out \
+ test48.out test51.out test53.out test54.out test55.out \
+ test56.out test57.out test58.out test59.out test60.out \
+! test61.out test62.out test63.out test64.out test65.out
+
+ .SUFFIXES: .in .out
+
+--- 25,32 ----
+ test43.out test44.out test45.out test46.out test47.out \
+ test48.out test51.out test53.out test54.out test55.out \
+ test56.out test57.out test58.out test59.out test60.out \
+! test61.out test62.out test63.out test64.out test65.out \
+! test66.out
+
+ .SUFFIXES: .in .out
+
+*** ../vim-7.2.137/src/testdir/Make_vms.mms Mon Sep 1 16:50:09 2008
+--- src/testdir/Make_vms.mms Thu Mar 5 04:53:42 2009
+***************
+*** 4,10 ****
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2008 Aug 19
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
+ # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
+ #
+! # Last change: 2009 Mar 05
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+***************
+*** 68,74 ****
+ test43.out test44.out test45.out test46.out \
+ test48.out test51.out test53.out test54.out test55.out \
+ test56.out test57.out test60.out \
+! test61.out test62.out test63.out test64.out test65.out
+
+ .IFDEF WANT_GUI
+ SCRIPT_GUI = test16.out
+--- 68,75 ----
+ test43.out test44.out test45.out test46.out \
+ test48.out test51.out test53.out test54.out test55.out \
+ test56.out test57.out test60.out \
+! test61.out test62.out test63.out test64.out test65.out \
+! test66.out
+
+ .IFDEF WANT_GUI
+ SCRIPT_GUI = test16.out
+*** ../vim-7.2.137/src/version.c Wed Mar 11 16:26:01 2009
+--- src/version.c Wed Mar 11 16:35:06 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 138,
+ /**/
+
+--
+Some of the well know MS-Windows errors:
+ ESLEEP Operator fell asleep
+ ENOERR No error yet
+ EDOLLAR OS too expensive
+ EWINDOWS MS-Windows loaded, system in danger
+
+ /// 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.139
+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.139
+Problem: Crash when 'virtualedit' is "all". (James Vega)
+Solution: Avoid overflow when column is MAXCOL. (Dominique Pelle)
+Files: src/misc2.c
+
+
+*** ../vim-7.2.138/src/misc2.c Tue Feb 24 04:28:40 2009
+--- src/misc2.c Wed Mar 11 16:45:05 2009
+***************
+*** 496,502 ****
+ {
+ colnr_T len;
+ #ifdef FEAT_VIRTUALEDIT
+! colnr_T oldcol = curwin->w_cursor.col + curwin->w_cursor.coladd;
+ #endif
+
+ len = (colnr_T)STRLEN(ml_get_curline());
+--- 496,503 ----
+ {
+ colnr_T len;
+ #ifdef FEAT_VIRTUALEDIT
+! colnr_T oldcol = curwin->w_cursor.col;
+! colnr_T oldcoladd = curwin->w_cursor.col + curwin->w_cursor.coladd;
+ #endif
+
+ len = (colnr_T)STRLEN(ml_get_curline());
+***************
+*** 535,541 ****
+ if (oldcol == MAXCOL)
+ curwin->w_cursor.coladd = 0;
+ else if (ve_flags == VE_ALL)
+! curwin->w_cursor.coladd = oldcol - curwin->w_cursor.col;
+ #endif
+ }
+
+--- 536,548 ----
+ if (oldcol == MAXCOL)
+ curwin->w_cursor.coladd = 0;
+ else if (ve_flags == VE_ALL)
+! {
+! if (oldcoladd > curwin->w_cursor.col)
+! curwin->w_cursor.coladd = oldcoladd - curwin->w_cursor.col;
+! else
+! /* avoid weird number when there is a miscalculation or overflow */
+! curwin->w_cursor.coladd = 0;
+! }
+ #endif
+ }
+
+*** ../vim-7.2.138/src/version.c Wed Mar 11 16:36:04 2009
+--- src/version.c Wed Mar 11 17:26:50 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 139,
+ /**/
+
+--
+Some of the well know MS-Windows errors:
+ EHUH Unexpected error
+ EUSER User error, not our fault!
+ EGOD Horrible problem, god knows what has happened
+ EERR Errornous error: nothing wrong
+
+ /// 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.140
+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.140
+Problem: Diff highlighting isn't displayed before the Visual area if it
+ starts at the cursor position. (Markus Heidelberg)
+Solution: Also check fromcol_prev.
+Files: src/screen.c
+
+
+*** ../vim-7.2.139/src/screen.c Sun Feb 22 21:12:22 2009
+--- src/screen.c Wed Mar 11 13:59:24 2009
+***************
+*** 3555,3561 ****
+ /* Use line_attr when not in the Visual or 'incsearch' area
+ * (area_attr may be 0 when "noinvcur" is set). */
+ else if (line_attr != 0 && ((fromcol == -10 && tocol == MAXCOL)
+! || (vcol < fromcol || vcol >= tocol)))
+ char_attr = line_attr;
+ #endif
+ else
+--- 3555,3562 ----
+ /* Use line_attr when not in the Visual or 'incsearch' area
+ * (area_attr may be 0 when "noinvcur" is set). */
+ else if (line_attr != 0 && ((fromcol == -10 && tocol == MAXCOL)
+! || vcol < fromcol || vcol_prev < fromcol_prev
+! || vcol >= tocol))
+ char_attr = line_attr;
+ #endif
+ else
+*** ../vim-7.2.139/src/version.c Wed Mar 11 17:27:46 2009
+--- src/version.c Wed Mar 11 17:42:19 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 140,
+ /**/
+
+--
+Some of the well know MS-Windows errors:
+ EMEMORY Memory error caused by..., eh...
+ ELICENSE Your license has expired, give us more money!
+ EMOUSE Mouse moved, reinstall Windows
+ EILLEGAL Illegal error, you are not allowed to see this
+ EVIRUS Undetectable virus found
+
+ /// 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.141
+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.141
+Problem: When redrawing a character for bold spill this causes the next
+ character to be redrawn as well.
+Solution: Only redraw one extra character. (Yukihiro Nakadaira)
+Files: src/screen.c
+
+
+*** ../vim-7.2.140/src/screen.c Wed Mar 11 17:44:38 2009
+--- src/screen.c Wed Mar 11 13:59:24 2009
+***************
+*** 5132,5139 ****
+ #endif
+
+ #if defined(FEAT_GUI) || defined(UNIX)
+! /* The bold trick makes a single row of pixels appear in the next
+! * character. When a bold character is removed, the next
+ * character should be redrawn too. This happens for our own GUI
+ * and for some xterms. */
+ if (
+--- 5132,5139 ----
+ #endif
+
+ #if defined(FEAT_GUI) || defined(UNIX)
+! /* The bold trick makes a single column of pixels appear in the
+! * next character. When a bold character is removed, the next
+ * character should be redrawn too. This happens for our own GUI
+ * and for some xterms. */
+ if (
+***************
+*** 6276,6284 ****
+--- 6276,6290 ----
+ int pcc[MAX_MCO];
+ # endif
+ #endif
++ #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
++ int force_redraw_this;
++ int force_redraw_next = FALSE;
++ #endif
++ int need_redraw;
+
+ if (ScreenLines == NULL || row >= screen_Rows) /* safety check */
+ return;
++ off = LineOffset[row] + col;
+
+ #ifdef FEAT_MBYTE
+ /* When drawing over the right halve of a double-wide char clear out the
+***************
+*** 6288,6297 ****
+ && !gui.in_use
+ # endif
+ && mb_fix_col(col, row) != col)
+! screen_puts_len((char_u *)" ", 1, row, col - 1, 0);
+ #endif
+
+- off = LineOffset[row] + col;
+ #ifdef FEAT_MBYTE
+ max_off = LineOffset[row] + screen_Columns;
+ #endif
+--- 6294,6314 ----
+ && !gui.in_use
+ # endif
+ && mb_fix_col(col, row) != col)
+! {
+! ScreenLines[off - 1] = ' ';
+! ScreenAttrs[off - 1] = 0;
+! if (enc_utf8)
+! {
+! ScreenLinesUC[off - 1] = 0;
+! ScreenLinesC[0][off - 1] = 0;
+! }
+! /* redraw the previous cell, make it empty */
+! screen_char(off - 1, row, col - 1);
+! /* force the cell at "col" to be redrawn */
+! force_redraw_next = TRUE;
+! }
+ #endif
+
+ #ifdef FEAT_MBYTE
+ max_off = LineOffset[row] + screen_Columns;
+ #endif
+***************
+*** 6355,6361 ****
+ }
+ #endif
+
+! if (ScreenLines[off] != c
+ #ifdef FEAT_MBYTE
+ || (mbyte_cells == 2
+ && ScreenLines[off + 1] != (enc_dbcs ? ptr[1] : 0))
+--- 6372,6383 ----
+ }
+ #endif
+
+! #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
+! force_redraw_this = force_redraw_next;
+! force_redraw_next = FALSE;
+! #endif
+!
+! need_redraw = ScreenLines[off] != c
+ #ifdef FEAT_MBYTE
+ || (mbyte_cells == 2
+ && ScreenLines[off + 1] != (enc_dbcs ? ptr[1] : 0))
+***************
+*** 6367,6386 ****
+ || screen_comp_differs(off, u8cc)))
+ #endif
+ || ScreenAttrs[off] != attr
+! || exmode_active
+ )
+ {
+ #if defined(FEAT_GUI) || defined(UNIX)
+ /* The bold trick makes a single row of pixels appear in the next
+ * character. When a bold character is removed, the next
+ * character should be redrawn too. This happens for our own GUI
+! * and for some xterms.
+! * Force the redraw by setting the attribute to a different value
+! * than "attr", the contents of ScreenLines[] may be needed by
+! * mb_off2cells() further on.
+! * Don't do this for the last drawn character, because the next
+! * character may not be redrawn. */
+! if (
+ # ifdef FEAT_GUI
+ gui.in_use
+ # endif
+--- 6389,6408 ----
+ || screen_comp_differs(off, u8cc)))
+ #endif
+ || ScreenAttrs[off] != attr
+! || exmode_active;
+!
+! if (need_redraw
+! #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
+! || force_redraw_this
+! #endif
+ )
+ {
+ #if defined(FEAT_GUI) || defined(UNIX)
+ /* The bold trick makes a single row of pixels appear in the next
+ * character. When a bold character is removed, the next
+ * character should be redrawn too. This happens for our own GUI
+! * and for some xterms. */
+! if (need_redraw && ScreenLines[off] != ' ' && (
+ # ifdef FEAT_GUI
+ gui.in_use
+ # endif
+***************
+*** 6390,6412 ****
+ # ifdef UNIX
+ term_is_xterm
+ # endif
+! )
+ {
+! int n;
+
+! n = ScreenAttrs[off];
+! # ifdef FEAT_MBYTE
+! if (col + mbyte_cells < screen_Columns
+! && (n > HL_ALL || (n & HL_BOLD))
+! && (len < 0 ? ptr[mbyte_blen] != NUL
+! : ptr + mbyte_blen < text + len))
+! ScreenAttrs[off + mbyte_cells] = attr + 1;
+! # else
+! if (col + 1 < screen_Columns
+! && (n > HL_ALL || (n & HL_BOLD))
+! && (len < 0 ? ptr[1] != NUL : ptr + 1 < text + len))
+! ScreenLines[off + 1] = 0;
+! # endif
+ }
+ #endif
+ #ifdef FEAT_MBYTE
+--- 6412,6425 ----
+ # ifdef UNIX
+ term_is_xterm
+ # endif
+! ))
+ {
+! int n = ScreenAttrs[off];
+
+! if (n > HL_ALL)
+! n = syn_attr2attr(n);
+! if (n & HL_BOLD)
+! force_redraw_next = TRUE;
+ }
+ #endif
+ #ifdef FEAT_MBYTE
+***************
+*** 6493,6498 ****
+--- 6506,6525 ----
+ ++ptr;
+ }
+ }
++
++ #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
++ /* If we detected the next character needs to be redrawn, but the text
++ * doesn't extend up to there, update the character here. */
++ if (force_redraw_next && col < screen_Columns)
++ {
++ # ifdef FEAT_MBYTE
++ if (enc_dbcs != 0 && dbcs_off2cells(off, max_off) > 1)
++ screen_char_2(off, row, col);
++ else
++ # endif
++ screen_char(off, row, col);
++ }
++ #endif
+ }
+
+ #ifdef FEAT_SEARCH_EXTRA
+*** ../vim-7.2.140/src/version.c Wed Mar 11 17:44:38 2009
+--- src/version.c Wed Mar 11 17:55:22 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 141,
+ /**/
+
+--
+Some of the well know MS-Windows errors:
+ ETIME Wrong time, wait a little while
+ ECRASH Try again...
+ EDETECT Unable to detect errors
+ EOVER You lost! Play another game?
+ ENOCLUE Eh, what did you want?
+
+ /// 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.142
+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.142
+Problem: Motif and Athena balloons don't use tooltip colors.
+Solution: Set the colors. (Matt Wozniski)
+Files: src/gui_beval.c
+
+
+*** ../vim-7.2.141/src/gui_beval.c Thu May 10 21:29:20 2007
+--- src/gui_beval.c Wed Mar 11 15:20:36 2009
+***************
+*** 1291,1296 ****
+--- 1291,1313 ----
+ XtNy, ty,
+ NULL);
+ #endif
++ /* Set tooltip colors */
++ {
++ Arg args[2];
++
++ #ifdef FEAT_GUI_MOTIF
++ args[0].name = XmNbackground;
++ args[0].value = gui.tooltip_bg_pixel;
++ args[1].name = XmNforeground;
++ args[1].value = gui.tooltip_fg_pixel;
++ #else /* Athena */
++ args[0].name = XtNbackground;
++ args[0].value = gui.tooltip_bg_pixel;
++ args[1].name = XtNforeground;
++ args[1].value = gui.tooltip_fg_pixel;
++ #endif
++ XtSetValues(beval->balloonLabel, &args[0], XtNumber(args));
++ }
+
+ XtPopup(beval->balloonShell, XtGrabNone);
+
+*** ../vim-7.2.141/src/version.c Wed Mar 11 17:57:05 2009
+--- src/version.c Wed Mar 18 12:20:01 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 142,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+233. You start dreaming about web pages...in html.
+
+ /// 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.143
+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.143
+Problem: No command line completion for ":cscope" command.
+Solution: Add the completion for ":cscope". (Dominique Pelle)
+Files: src/ex_docmd.c, src/ex_getln.c, src/if_cscope.c,
+ src/proto/if_cscope.pro, src/vim.h
+
+
+*** ../vim-7.2.142/src/ex_docmd.c Wed Mar 11 15:36:01 2009
+--- src/ex_docmd.c Wed Mar 11 15:45:04 2009
+***************
+*** 3683,3688 ****
+--- 3683,3693 ----
+ case CMD_highlight:
+ set_context_in_highlight_cmd(xp, arg);
+ break;
++ #ifdef FEAT_CSCOPE
++ case CMD_cscope:
++ set_context_in_cscope_cmd(xp, arg);
++ break;
++ #endif
+ #ifdef FEAT_LISTCMDS
+ case CMD_bdelete:
+ case CMD_bwipeout:
+***************
+*** 5187,5192 ****
+--- 5192,5200 ----
+ {EXPAND_AUGROUP, "augroup"},
+ {EXPAND_BUFFERS, "buffer"},
+ {EXPAND_COMMANDS, "command"},
++ #if defined(FEAT_CSCOPE)
++ {EXPAND_CSCOPE, "cscope"},
++ #endif
+ #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+ {EXPAND_USER_DEFINED, "custom"},
+ {EXPAND_USER_LIST, "customlist"},
+*** ../vim-7.2.142/src/ex_getln.c Thu Mar 5 03:13:51 2009
+--- src/ex_getln.c Wed Mar 11 15:45:04 2009
+***************
+*** 4518,4523 ****
+--- 4518,4526 ----
+ {EXPAND_EVENTS, get_event_name, TRUE},
+ {EXPAND_AUGROUP, get_augroup_name, TRUE},
+ #endif
++ #ifdef FEAT_CSCOPE
++ {EXPAND_CSCOPE, get_cscope_name, TRUE},
++ #endif
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ {EXPAND_LANGUAGE, get_lang_arg, TRUE},
+*** ../vim-7.2.142/src/if_cscope.c Wed Jan 28 16:03:51 2009
+--- src/if_cscope.c Wed Mar 11 15:56:07 2009
+***************
+*** 93,104 ****
+ (void)EMSG2(_("E560: Usage: cs[cope] %s"), cs_cmds[(int)x].usage);
+ }
+
+ /*
+ * PRIVATE: do_cscope_general
+ *
+! * find the command, print help if invalid, and the then call the
+! * corresponding command function,
+! * called from do_cscope and do_scscope
+ */
+ static void
+ do_cscope_general(eap, make_split)
+--- 93,209 ----
+ (void)EMSG2(_("E560: Usage: cs[cope] %s"), cs_cmds[(int)x].usage);
+ }
+
++ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++
++ static enum
++ {
++ EXP_CSCOPE_SUBCMD, /* expand ":cscope" sub-commands */
++ EXP_CSCOPE_FIND, /* expand ":cscope find" arguments */
++ EXP_CSCOPE_KILL /* expand ":cscope kill" arguments */
++ } expand_what;
++
++ /*
++ * Function given to ExpandGeneric() to obtain the cscope command
++ * expansion.
++ */
++ /*ARGSUSED*/
++ char_u *
++ get_cscope_name(xp, idx)
++ expand_T *xp;
++ int idx;
++ {
++ switch (expand_what)
++ {
++ case EXP_CSCOPE_SUBCMD:
++ /* Complete with sub-commands of ":cscope":
++ * add, find, help, kill, reset, show */
++ return (char_u *)cs_cmds[idx].name;
++ case EXP_CSCOPE_FIND:
++ {
++ const char *query_type[] =
++ {
++ "c", "d", "e", "f", "g", "i", "s", "t", NULL
++ };
++
++ /* Complete with query type of ":cscope find {query_type}".
++ * {query_type} can be letters (c, d, ... t) or numbers (0, 1,
++ * ..., 8) but only complete with letters, since numbers are
++ * redundant. */
++ return (char_u *)query_type[idx];
++ }
++ case EXP_CSCOPE_KILL:
++ {
++ int i;
++ int current_idx = 0;
++ static char_u connection[2];
++
++ /* ":cscope kill" accepts connection numbers or partial names of
++ * the pathname of the cscope database as argument. Only complete
++ * with connection numbers. -1 can also be used to kill all
++ * connections. */
++ for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
++ {
++ if (csinfo[i].fname == NULL)
++ continue;
++ if (current_idx++ == idx)
++ {
++ /* Connection number fits in one character since
++ * CSCOPE_MAX_CONNECTIONS is < 10 */
++ connection[0] = i + '0';
++ connection[1] = NUL;
++ return connection;
++ }
++ }
++ return (current_idx == idx && idx > 0) ? (char_u *)"-1" : NULL;
++ }
++ default:
++ return NULL;
++ }
++ }
++
++ /*
++ * Handle command line completion for :cscope command.
++ */
++ void
++ set_context_in_cscope_cmd(xp, arg)
++ expand_T *xp;
++ char_u *arg;
++ {
++ char_u *p;
++
++ /* Default: expand subcommands */
++ xp->xp_context = EXPAND_CSCOPE;
++ expand_what = EXP_CSCOPE_SUBCMD;
++ xp->xp_pattern = arg;
++
++ /* (part of) subcommand already typed */
++ if (*arg != NUL)
++ {
++ p = skiptowhite(arg);
++ if (*p != NUL) /* past first word */
++ {
++ xp->xp_pattern = skipwhite(p);
++ if (*skiptowhite(xp->xp_pattern) != NUL)
++ xp->xp_context = EXPAND_NOTHING;
++ else if (STRNICMP(arg, "add", p - arg) == 0)
++ xp->xp_context = EXPAND_FILES;
++ else if (STRNICMP(arg, "kill", p - arg) == 0)
++ expand_what = EXP_CSCOPE_KILL;
++ else if (STRNICMP(arg, "find", p - arg) == 0)
++ expand_what = EXP_CSCOPE_FIND;
++ else
++ xp->xp_context = EXPAND_NOTHING;
++ }
++ }
++ }
++
++ #endif /* FEAT_CMDL_COMPL */
++
+ /*
+ * PRIVATE: do_cscope_general
+ *
+! * Find the command, print help if invalid, and then call the corresponding
+! * command function.
+ */
+ static void
+ do_cscope_general(eap, make_split)
+*** ../vim-7.2.142/src/proto/if_cscope.pro Thu Sep 6 17:38:21 2007
+--- src/proto/if_cscope.pro Wed Mar 11 15:57:03 2009
+***************
+*** 1,4 ****
+--- 1,6 ----
+ /* if_cscope.c */
++ char_u *get_cscope_name __ARGS((expand_T *xp, int idx));
++ void set_context_in_cscope_cmd __ARGS((expand_T *xp, char_u *arg));
+ void do_cscope __ARGS((exarg_T *eap));
+ void do_scscope __ARGS((exarg_T *eap));
+ void do_cstag __ARGS((exarg_T *eap));
+*** ../vim-7.2.142/src/vim.h Sun Feb 22 02:36:36 2009
+--- src/vim.h Wed Mar 11 15:45:04 2009
+***************
+*** 708,713 ****
+--- 708,714 ----
+ #define EXPAND_USER_DEFINED 30
+ #define EXPAND_USER_LIST 31
+ #define EXPAND_SHELLCMD 32
++ #define EXPAND_CSCOPE 33
+
+ /* Values for exmode_active (0 is no exmode) */
+ #define EXMODE_NORMAL 1
+*** ../vim-7.2.142/src/version.c Wed Mar 18 12:20:35 2009
+--- src/version.c Wed Mar 18 12:48:08 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 143,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+234. You started college as a chemistry major, and walk out four years
+ later as an Internet 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.144
+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.144
+Problem: When 't_Co' is set to the value it already had the color scheme is
+ reloaded anyway.
+Solution: Only load the colorscheme when the t_Co value changes. (Dominique
+ Pelle)
+Files: src/option.c
+
+
+*** ../vim-7.2.143/src/option.c Wed Mar 4 04:11:56 2009
+--- src/option.c Wed Mar 18 12:00:28 2009
+***************
+*** 6022,6036 ****
+ /* ":set t_Co=0" and ":set t_Co=1" do ":set t_Co=" */
+ if (varp == &T_CCO)
+ {
+! t_colors = atoi((char *)T_CCO);
+! if (t_colors <= 1)
+ {
+! if (new_value_alloced)
+! vim_free(T_CCO);
+! T_CCO = empty_option;
+ }
+- /* We now have a different color setup, initialize it again. */
+- init_highlight(TRUE, FALSE);
+ }
+ ttest(FALSE);
+ if (varp == &T_ME)
+--- 6022,6044 ----
+ /* ":set t_Co=0" and ":set t_Co=1" do ":set t_Co=" */
+ if (varp == &T_CCO)
+ {
+! int colors = atoi((char *)T_CCO);
+!
+! /* Only reinitialize colors if t_Co value has really changed to
+! * avoid expensive reload of colorscheme if t_Co is set to the
+! * same value multiple times. */
+! if (colors != t_colors)
+ {
+! t_colors = colors;
+! if (t_colors <= 1)
+! {
+! if (new_value_alloced)
+! vim_free(T_CCO);
+! T_CCO = empty_option;
+! }
+! /* We now have a different color setup, initialize it again. */
+! init_highlight(TRUE, FALSE);
+ }
+ }
+ ttest(FALSE);
+ if (varp == &T_ME)
+*** ../vim-7.2.143/src/version.c Wed Mar 18 12:50:58 2009
+--- src/version.c Wed Mar 18 14:16:48 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 144,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+235. You start naming your kids Pascal, COBOL, Algol and Fortran.
+
+ /// 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.145
+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.145
+Problem: White space in ":cscope find" is not ignored.
+Solution: Ignore the white space, but not when the leading white space is
+ useful for the argument.
+Files: runtime/doc/if_cscop.txt, src/if_cscope.c
+
+
+*** ../vim-7.2.144/runtime/doc/if_cscop.txt Sat Aug 9 19:36:48 2008
+--- runtime/doc/if_cscop.txt Wed Mar 18 14:30:09 2009
+***************
+*** 1,4 ****
+! *if_cscop.txt* For Vim version 7.2. Last change: 2005 Mar 29
+
+
+ VIM REFERENCE MANUAL by Andy Kahn
+--- 1,4 ----
+! *if_cscop.txt* For Vim version 7.2. Last change: 2009 Mar 18
+
+
+ VIM REFERENCE MANUAL by Andy Kahn
+***************
+*** 131,141 ****
+ 7 or f: Find this file
+ 8 or i: Find files #including this file
+
+ EXAMPLES >
+ :cscope find c vim_free
+! :cscope find 3 vim_free
+ <
+! These two examples perform the same query. >
+
+ :cscope find 0 DEFAULT_TERM
+ <
+--- 131,152 ----
+ 7 or f: Find this file
+ 8 or i: Find files #including this file
+
++ For all types, except 4 and 6, leading white space for {name} is
++ removed. For 4 and 6 there is exactly one space between {querytype}
++ and {name}. Further white space is included in {name}.
++
+ EXAMPLES >
+ :cscope find c vim_free
+! :cscope find 3 vim_free
+! <
+! These two examples perform the same query: functions calling
+! "vim_free". >
+!
+! :cscope find t initOnce
+! :cscope find t initOnce
+ <
+! The first one searches for the text "initOnce", the second one for
+! " initOnce". >
+
+ :cscope find 0 DEFAULT_TERM
+ <
+*** ../vim-7.2.144/src/if_cscope.c Wed Mar 18 12:50:58 2009
+--- src/if_cscope.c Wed Mar 18 13:23:53 2009
+***************
+*** 764,769 ****
+--- 764,770 ----
+ {
+ char *cmd;
+ short search;
++ char *pat;
+
+ switch (csoption[0])
+ {
+***************
+*** 797,806 ****
+ return NULL;
+ }
+
+! if ((cmd = (char *)alloc((unsigned)(strlen(pattern) + 2))) == NULL)
+ return NULL;
+
+! (void)sprintf(cmd, "%d%s", search, pattern);
+
+ return cmd;
+ } /* cs_create_cmd */
+--- 798,814 ----
+ return NULL;
+ }
+
+! /* Skip white space before the patter, except for text and pattern search,
+! * they may want to use the leading white space. */
+! pat = pattern;
+! if (search != 4 && search != 6)
+! while vim_iswhite(*pat)
+! ++pat;
+!
+! if ((cmd = (char *)alloc((unsigned)(strlen(pat) + 2))) == NULL)
+ return NULL;
+
+! (void)sprintf(cmd, "%d%s", search, pat);
+
+ return cmd;
+ } /* cs_create_cmd */
+*** ../vim-7.2.144/src/version.c Wed Mar 18 14:19:28 2009
+--- src/version.c Wed Mar 18 14:28:46 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 145,
+ /**/
+
+--
+Google is kind of like Dr. Who's Tardis; it's weirder on the
+inside than on the outside...
+
+ /// 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.146
+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.146
+Problem: v:warningmsg isn't used for all warnings.
+Solution: Set v:warningmsg for relevant warnings. (Ingo Karkat)
+Files: src/fileio.c, src/misc1.c, src/option.c
+
+
+*** ../vim-7.2.145/src/fileio.c Wed Mar 11 13:09:30 2009
+--- src/fileio.c Wed Mar 18 15:03:46 2009
+***************
+*** 6647,6652 ****
+--- 6647,6657 ----
+ tbuf = alloc((unsigned)(STRLEN(path) + STRLEN(mesg)
+ + STRLEN(mesg2) + 2));
+ sprintf((char *)tbuf, mesg, path);
++ #ifdef FEAT_EVAL
++ /* Set warningmsg here, before the unimportant and output-specific
++ * mesg2 has been appended. */
++ set_vim_var_string(VV_WARNINGMSG, tbuf, -1);
++ #endif
+ #if defined(FEAT_CON_DIALOG) || defined(FEAT_GUI_DIALOG)
+ if (can_reload)
+ {
+*** ../vim-7.2.145/src/misc1.c Thu Nov 20 17:09:09 2008
+--- src/misc1.c Wed Mar 18 15:06:59 2009
+***************
+*** 2955,2960 ****
+--- 2955,2962 ----
+ int col; /* column for message; non-zero when in insert
+ mode and 'showmode' is on */
+ {
++ static char *w_readonly = N_("W10: Warning: Changing a readonly file");
++
+ if (curbuf->b_did_warn == FALSE
+ && curbufIsChanged() == 0
+ #ifdef FEAT_AUTOCMD
+***************
+*** 2977,2984 ****
+ if (msg_row == Rows - 1)
+ msg_col = col;
+ msg_source(hl_attr(HLF_W));
+! MSG_PUTS_ATTR(_("W10: Warning: Changing a readonly file"),
+! hl_attr(HLF_W) | MSG_HIST);
+ msg_clr_eos();
+ (void)msg_end();
+ if (msg_silent == 0 && !silent_mode)
+--- 2979,2988 ----
+ if (msg_row == Rows - 1)
+ msg_col = col;
+ msg_source(hl_attr(HLF_W));
+! MSG_PUTS_ATTR(_(w_readonly), hl_attr(HLF_W) | MSG_HIST);
+! #ifdef FEAT_EVAL
+! set_vim_var_string(VV_WARNINGMSG, (char_u *)_(w_readonly), -1);
+! #endif
+ msg_clr_eos();
+ (void)msg_end();
+ if (msg_silent == 0 && !silent_mode)
+*** ../vim-7.2.145/src/option.c Wed Mar 18 14:19:28 2009
+--- src/option.c Wed Mar 18 15:06:11 2009
+***************
+*** 7563,7571 ****
+ * set. */
+ if (STRCMP(p_enc, "utf-8") != 0)
+ {
+ msg_source(hl_attr(HLF_W));
+! MSG_ATTR(_("W17: Arabic requires UTF-8, do ':set encoding=utf-8'"),
+! hl_attr(HLF_W));
+ }
+
+ # ifdef FEAT_MBYTE
+--- 7563,7575 ----
+ * set. */
+ if (STRCMP(p_enc, "utf-8") != 0)
+ {
++ static char *w_arabic = N_("W17: Arabic requires UTF-8, do ':set encoding=utf-8'");
++
+ msg_source(hl_attr(HLF_W));
+! MSG_ATTR(_(w_arabic), hl_attr(HLF_W));
+! #ifdef FEAT_EVAL
+! set_vim_var_string(VV_WARNINGMSG, (char_u *)_(w_arabic), -1);
+! #endif
+ }
+
+ # ifdef FEAT_MBYTE
+*** ../vim-7.2.145/src/version.c Wed Mar 18 14:30:46 2009
+--- src/version.c Wed Mar 18 15:38:27 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 146,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+238. You think faxes are old-fashioned.
+
+ /// 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.147
+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.147
+Problem: When compiled as small version and 'number' is on the cursor is
+ displayed in the wrong position after a tab. (James Vega)
+Solution: Don't increment vcol when still displaying the line number.
+Files: src/screen.c
+
+
+*** ../vim-7.2.146/src/screen.c Wed Mar 11 17:57:05 2009
+--- src/screen.c Wed Mar 18 16:18:00 2009
+***************
+*** 4665,4671 ****
+ --n_skip;
+
+ /* Only advance the "vcol" when after the 'number' column. */
+! if (draw_state >= WL_SBR
+ #ifdef FEAT_DIFF
+ && filler_todo <= 0
+ #endif
+--- 4665,4671 ----
+ --n_skip;
+
+ /* Only advance the "vcol" when after the 'number' column. */
+! if (draw_state > WL_NR
+ #ifdef FEAT_DIFF
+ && filler_todo <= 0
+ #endif
+*** ../vim-7.2.146/src/version.c Wed Mar 18 15:40:03 2009
+--- src/version.c Wed Mar 18 16:26:00 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 147,
+ /**/
+
+--
+You can tune a file system, but you can't tuna fish
+ -- man tunefs
+
+ /// 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.148
+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.148
+Problem: When searching for "$" while 'hlsearch' is set, highlighting the
+ character after the line does not work in the cursor column.
+ Also highlighting for Visual mode after the line end when this
+ isn't needed. (Markus Heidelberg)
+Solution: Only compare the cursor column in the cursor line. Only highlight
+ for Visual selection after the last character when it's needed to
+ see where the Visual selection ends.
+Files: src/screen.c
+
+
+*** ../vim-7.2.147/src/screen.c Wed Mar 18 16:26:31 2009
+--- src/screen.c Wed Mar 18 17:24:56 2009
+***************
+*** 2889,2896 ****
+ }
+ else
+ tocol = MAXCOL;
+! if (fromcol == tocol) /* do at least one character */
+! tocol = fromcol + 1; /* happens when past end of line */
+ area_highlighting = TRUE;
+ attr = hl_attr(HLF_I);
+ }
+--- 2889,2897 ----
+ }
+ else
+ tocol = MAXCOL;
+! /* do at least one character; happens when past end of line */
+! if (fromcol == tocol)
+! tocol = fromcol + 1;
+ area_highlighting = TRUE;
+ attr = hl_attr(HLF_I);
+ }
+***************
+*** 4118,4123 ****
+--- 4119,4125 ----
+ # endif
+ (col < W_WIDTH(wp)))
+ && !(noinvcur
++ && lnum == wp->w_cursor.lnum
+ && (colnr_T)vcol == wp->w_virtcol)))
+ && lcs_eol_one >= 0)
+ {
+***************
+*** 4259,4265 ****
+ * preedit_changed and commit. Thus Vim can't set "im_is_active", use
+ * im_is_preediting() here. */
+ if (xic != NULL
+! && lnum == curwin->w_cursor.lnum
+ && (State & INSERT)
+ && !p_imdisable
+ && im_is_preediting()
+--- 4261,4267 ----
+ * preedit_changed and commit. Thus Vim can't set "im_is_active", use
+ * im_is_preediting() here. */
+ if (xic != NULL
+! && lnum == wp->w_cursor.lnum
+ && (State & INSERT)
+ && !p_imdisable
+ && im_is_preediting()
+***************
+*** 4268,4274 ****
+ colnr_T tcol;
+
+ if (preedit_end_col == MAXCOL)
+! getvcol(curwin, &(curwin->w_cursor), &tcol, NULL, NULL);
+ else
+ tcol = preedit_end_col;
+ if ((long)preedit_start_col <= vcol && vcol < (long)tcol)
+--- 4270,4276 ----
+ colnr_T tcol;
+
+ if (preedit_end_col == MAXCOL)
+! getvcol(curwin, &(wp->w_cursor), &tcol, NULL, NULL);
+ else
+ tcol = preedit_end_col;
+ if ((long)preedit_start_col <= vcol && vcol < (long)tcol)
+***************
+*** 4365,4371 ****
+ }
+ #endif
+ if (lcs_eol == lcs_eol_one
+! && ((area_attr != 0 && vcol == fromcol && c == NUL)
+ #ifdef FEAT_SEARCH_EXTRA
+ /* highlight 'hlsearch' match at end of line */
+ || (prevcol_hl_flag == TRUE
+--- 4367,4379 ----
+ }
+ #endif
+ if (lcs_eol == lcs_eol_one
+! && ((area_attr != 0 && vcol == fromcol
+! #ifdef FEAT_VISUAL
+! && (VIsual_mode != Ctrl_V
+! || lnum == VIsual.lnum
+! || lnum == curwin->w_cursor.lnum)
+! #endif
+! && c == NUL)
+ #ifdef FEAT_SEARCH_EXTRA
+ /* highlight 'hlsearch' match at end of line */
+ || (prevcol_hl_flag == TRUE
+***************
+*** 4459,4465 ****
+ if (c == NUL)
+ {
+ #ifdef FEAT_SYN_HL
+! if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol)
+ {
+ /* highlight last char after line */
+ --col;
+--- 4467,4474 ----
+ if (c == NUL)
+ {
+ #ifdef FEAT_SYN_HL
+! if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol
+! && lnum == wp->w_cursor.lnum)
+ {
+ /* highlight last char after line */
+ --col;
+*** ../vim-7.2.147/src/version.c Wed Mar 18 16:26:31 2009
+--- src/version.c Wed Mar 18 19:05:37 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 148,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+239. You think "surfing" is something you do on dry land.
+
+ /// 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 ///