Author: matthew
Date: 2007-06-30 09:43:07 -0600 (Sat, 30 Jun 2007)
New Revision: 1841

Added:
   trunk/vim/vim-7.1-fixes-1.patch
Log:
Add upstream fixes for Vim-7.1

Added: trunk/vim/vim-7.1-fixes-1.patch
===================================================================
--- trunk/vim/vim-7.1-fixes-1.patch                             (rev 0)
+++ trunk/vim/vim-7.1-fixes-1.patch     2007-06-30 15:43:07 UTC (rev 1841)
@@ -0,0 +1,582 @@
+Submitted By: Matt Burgess (matthew at linuxfromscratch dot org)
+Date: 2007-06-30
+Initial Package Version: 7.1
+Origin: Upstream
+Upstream Status: Applied
+Description: Contains patches 001-018 from upstream excluding patches 003 and
+             007 as they are for "extras" (e.g. Mac, Windows) only.
+
+diff -Naur vim71.orig/runtime/doc/eval.txt vim71/runtime/doc/eval.txt
+--- vim71.orig/runtime/doc/eval.txt    2007-05-12 10:18:46.000000000 +0000
++++ vim71/runtime/doc/eval.txt 2007-06-29 22:03:24.000000000 +0000
+@@ -1,4 +1,4 @@
+-*eval.txt*      For Vim version 7.1.  Last change: 2007 May 11
++*eval.txt*      For Vim version 7.1.  Last change: 2007 Jun 09
+ 
+ 
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -2824,6 +2824,8 @@
+               given file {fname}.
+               If {fname} is a directory, 0 is returned.
+               If the file {fname} can't be found, -1 is returned.
++              If the size of {fname} is too big to fit in a Number then -2
++              is returned.
+ 
+ getfontname([{name}])                                 *getfontname()*
+               Without an argument returns the name of the normal font being
+diff -Naur vim71.orig/runtime/filetype.vim vim71/runtime/filetype.vim
+--- vim71.orig/runtime/filetype.vim    2007-05-10 15:14:37.000000000 +0000
++++ vim71/runtime/filetype.vim 2007-06-29 22:03:24.000000000 +0000
+@@ -1,7 +1,7 @@
+ " Vim support file to detect file types
+ "
+ " Maintainer: Bram Moolenaar <[EMAIL PROTECTED]>
+-" Last Change:        2007 May 10
++" Last Change:        2007 May 15
+ 
+ " Listen very carefully, I will say this only once
+ if exists("did_load_filetypes")
+@@ -1286,7 +1286,7 @@
+ au BufNewFile,BufRead *.it,*.ih                       setf ppwiz
+ 
+ " Oracle Pro*C/C++
+-au BufNewFile,BufRead .pc                     setf proc
++au BufNewFile,BufRead *.pc                    setf proc
+ 
+ " Privoxy actions file
+ au BufNewFile,BufRead *.action                        setf privoxy
+diff -Naur vim71.orig/src/auto/configure vim71/src/auto/configure
+--- vim71.orig/src/auto/configure      2007-05-12 11:49:09.000000000 +0000
++++ vim71/src/auto/configure   2007-06-29 22:03:24.000000000 +0000
+@@ -3843,7 +3843,9 @@
+   fi
+ 
+   if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
+-    if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
++    if test "x$MACOSX" = "xyes"; then
++      MZSCHEME_LIBS="-framework PLT_MzScheme"
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
+       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a 
${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
+     else
+       MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
+diff -Naur vim71.orig/src/buffer.c vim71/src/buffer.c
+--- vim71.orig/src/buffer.c    2007-05-10 15:25:59.000000000 +0000
++++ vim71/src/buffer.c 2007-06-29 22:03:24.000000000 +0000
+@@ -171,6 +171,13 @@
+           /* Put the cursor on the first line. */
+           curwin->w_cursor.lnum = 1;
+           curwin->w_cursor.col = 0;
++
++          /* Set or reset 'modified' before executing autocommands, so that
++           * it can be changed there. */
++          if (!readonlymode && !bufempty())
++              changed();
++          else if (retval != FAIL)
++              unchanged(curbuf, FALSE);
+ #ifdef FEAT_AUTOCMD
+ # ifdef FEAT_EVAL
+           apply_autocmds_retval(EVENT_STDINREADPOST, NULL, NULL, FALSE,
+@@ -194,16 +201,16 @@
+     /* When reading stdin, the buffer contents always needs writing, so set
+      * the changed flag.  Unless in readonly mode: "ls | gview -".
+      * When interrupted and 'cpoptions' contains 'i' set changed flag. */
+-    if ((read_stdin && !readonlymode && !bufempty())
++    if ((got_int && vim_strchr(p_cpo, CPO_INTMOD) != NULL)
+ #ifdef FEAT_AUTOCMD
+               || modified_was_set     /* ":set modified" used in autocmd */
+ # ifdef FEAT_EVAL
+               || (aborting() && vim_strchr(p_cpo, CPO_INTMOD) != NULL)
+ # endif
+ #endif
+-              || (got_int && vim_strchr(p_cpo, CPO_INTMOD) != NULL))
++       )
+       changed();
+-    else if (retval != FAIL)
++    else if (retval != FAIL && !read_stdin)
+       unchanged(curbuf, FALSE);
+     save_file_ff(curbuf);             /* keep this fileformat */
+ 
+diff -Naur vim71.orig/src/configure.in vim71/src/configure.in
+--- vim71.orig/src/configure.in        2007-05-12 09:19:27.000000000 +0000
++++ vim71/src/configure.in     2007-06-29 22:03:24.000000000 +0000
+@@ -423,7 +423,9 @@
+   fi
+ 
+   if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
+-    if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
++    if test "x$MACOSX" = "xyes"; then
++      MZSCHEME_LIBS="-framework PLT_MzScheme"
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
+       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a 
${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
+     else
+       MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
+diff -Naur vim71.orig/src/edit.c vim71/src/edit.c
+--- vim71.orig/src/edit.c      2007-05-07 19:43:55.000000000 +0000
++++ vim71/src/edit.c   2007-06-29 22:03:24.000000000 +0000
+@@ -7215,6 +7215,8 @@
+               p = ml_get_curline();
+               if (cin_iscase(p) || cin_isscopedecl(p) || cin_islabel(30))
+                   return TRUE;
++              /* Need to get the line again after cin_islabel(). */
++              p = ml_get_curline();
+               if (curwin->w_cursor.col > 2
+                       && p[curwin->w_cursor.col - 1] == ':'
+                       && p[curwin->w_cursor.col - 2] == ':')
+diff -Naur vim71.orig/src/eval.c vim71/src/eval.c
+--- vim71.orig/src/eval.c      2007-05-07 19:47:32.000000000 +0000
++++ vim71/src/eval.c   2007-06-29 22:03:24.000000000 +0000
+@@ -10136,7 +10136,13 @@
+       if (mch_isdir(fname))
+           rettv->vval.v_number = 0;
+       else
++      {
+           rettv->vval.v_number = (varnumber_T)st.st_size;
++
++          /* non-perfect check for overflow */
++          if ((off_t)rettv->vval.v_number != (off_t)st.st_size)
++              rettv->vval.v_number = -2;
++      }
+     }
+     else
+         rettv->vval.v_number = -1;
+diff -Naur vim71.orig/src/ex_cmds.c vim71/src/ex_cmds.c
+--- vim71.orig/src/ex_cmds.c   2007-05-07 19:41:01.000000000 +0000
++++ vim71/src/ex_cmds.c        2007-06-29 22:03:24.000000000 +0000
+@@ -2912,22 +2912,35 @@
+ }
+ 
+ /*
+- * Check if a buffer is read-only.  Ask for overruling in a dialog.
+- * Return TRUE and give an error message when the buffer is readonly.
++ * Check if a buffer is read-only (either 'readonly' option is set or file is
++ * read-only). Ask for overruling in a dialog. Return TRUE and give an error
++ * message when the buffer is readonly.
+  */
+     static int
+ check_readonly(forceit, buf)
+     int               *forceit;
+     buf_T     *buf;
+ {
+-    if (!*forceit && buf->b_p_ro)
++    struct stat       st;
++
++    /* Handle a file being readonly when the 'readonly' option is set or when
++     * the file exists and permissions are read-only.
++     * We will send 0777 to check_file_readonly(), as the "perm" variable is
++     * important for device checks but not here. */
++    if (!*forceit && (buf->b_p_ro
++              || (mch_stat((char *)buf->b_ffname, &st) >= 0
++                  && check_file_readonly(buf->b_ffname, 0777))))
+     {
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+       if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
+       {
+           char_u      buff[IOSIZE];
+ 
+-          dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you 
wish to write anyway?"),
++          if (buf->b_p_ro)
++              dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo 
you wish to write anyway?"),
++                  buf->b_fname);
++          else
++              dialog_msg(buff, _("File permissions of \"%s\" are 
read-only.\nIt may still be possible to write it.\nDo you wish to try?"),
+                   buf->b_fname);
+ 
+           if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) == VIM_YES)
+@@ -2941,9 +2954,14 @@
+       }
+       else
+ #endif
++      if (buf->b_p_ro)
+           EMSG(_(e_readonly));
++      else
++          EMSG2(_("E505: \"%s\" is read-only (add ! to override)"),
++                  buf->b_fname);
+       return TRUE;
+     }
++
+     return FALSE;
+ }
+ 
+@@ -3367,7 +3385,7 @@
+                * was in this window (or another window).  If not used
+                * before, reset the local window options to the global
+                * values.  Also restores old folding stuff. */
+-              get_winopts(buf);
++              get_winopts(curbuf);
+ #ifdef FEAT_SPELL
+               did_get_winopts = TRUE;
+ #endif
+@@ -3649,8 +3667,8 @@
+ #ifdef FEAT_SPELL
+     /* If the window options were changed may need to set the spell language.
+      * Can only do this after the buffer has been properly setup. */
+-    if (did_get_winopts && curwin->w_p_spell && *buf->b_p_spl != NUL)
+-      did_set_spelllang(buf);
++    if (did_get_winopts && curwin->w_p_spell && *curbuf->b_p_spl != NUL)
++      did_set_spelllang(curbuf);
+ #endif
+ 
+     if (command == NULL)
+diff -Naur vim71.orig/src/fileio.c vim71/src/fileio.c
+--- vim71.orig/src/fileio.c    2007-05-10 11:29:44.000000000 +0000
++++ vim71/src/fileio.c 2007-06-29 22:03:24.000000000 +0000
+@@ -424,7 +424,7 @@
+        */
+       if (!p_odev && mch_nodetype(fname) == NODE_WRITABLE)
+       {
+-          filemess(curbuf, fname, (char_u *)_("is a device (disabled with 
'opendevice' option"), 0);
++          filemess(curbuf, fname, (char_u *)_("is a device (disabled with 
'opendevice' option)"), 0);
+           msg_end();
+           msg_scroll = msg_save;
+           return FAIL;
+@@ -2734,6 +2734,32 @@
+ #endif
+ 
+ /*
++ * Return TRUE if a file appears to be read-only from the file permissions.
++ */
++    int
++check_file_readonly(fname, perm)
++    char_u    *fname;         /* full path to file */
++    int               perm;           /* known permissions on file */
++{
++#ifndef USE_MCH_ACCESS
++    int           fd = 0;
++#endif
++
++    return (
++#ifdef USE_MCH_ACCESS
++# ifdef UNIX
++      (perm & 0222) == 0 ||
++# endif
++      mch_access((char *)fname, W_OK)
++#else
++      (fd = mch_open((char *)fname, O_RDWR | O_EXTRA, 0)) < 0
++                                      ? TRUE : (close(fd), FALSE)
++#endif
++      );
++}
++
++
++/*
+  * buf_write() - write to file "fname" lines "start" through "end"
+  *
+  * We do our own buffering here because fwrite() is so slow.
+@@ -3219,17 +3245,8 @@
+        * Check if the file is really writable (when renaming the file to
+        * make a backup we won't discover it later).
+        */
+-      file_readonly = (
+-# ifdef USE_MCH_ACCESS
+-#  ifdef UNIX
+-                  (perm & 0222) == 0 ||
+-#  endif
+-                  mch_access((char *)fname, W_OK)
+-# else
+-                  (fd = mch_open((char *)fname, O_RDWR | O_EXTRA, 0)) < 0
+-                                                 ? TRUE : (close(fd), FALSE)
+-# endif
+-                  );
++      file_readonly = check_file_readonly(fname, (int)perm);
++
+       if (!forceit && file_readonly)
+       {
+           if (vim_strchr(p_cpo, CPO_FWRITE) != NULL)
+diff -Naur vim71.orig/src/gui_gtk.c vim71/src/gui_gtk.c
+--- vim71.orig/src/gui_gtk.c   2007-05-10 08:37:37.000000000 +0000
++++ vim71/src/gui_gtk.c        2007-06-29 22:03:24.000000000 +0000
+@@ -53,8 +53,8 @@
+ # ifdef bindtextdomain
+ #  undef bindtextdomain
+ # endif
+-# ifdef bindtextdomain_codeset
+-#  undef bindtextdomain_codeset
++# ifdef bind_textdomain_codeset
++#  undef bind_textdomain_codeset
+ # endif
+ # if defined(FEAT_GETTEXT) && !defined(ENABLE_NLS)
+ #  define ENABLE_NLS  /* so the texts in the dialog boxes are translated */
+diff -Naur vim71.orig/src/gui_gtk_x11.c vim71/src/gui_gtk_x11.c
+--- vim71.orig/src/gui_gtk_x11.c       2007-05-10 08:37:49.000000000 +0000
++++ vim71/src/gui_gtk_x11.c    2007-06-29 22:03:24.000000000 +0000
+@@ -36,8 +36,8 @@
+ # ifdef bindtextdomain
+ #  undef bindtextdomain
+ # endif
+-# ifdef bindtextdomain_codeset
+-#  undef bindtextdomain_codeset
++# ifdef bind_textdomain_codeset
++#  undef bind_textdomain_codeset
+ # endif
+ # if defined(FEAT_GETTEXT) && !defined(ENABLE_NLS)
+ #  define ENABLE_NLS  /* so the texts in the dialog boxes are translated */
+@@ -2188,8 +2188,10 @@
+     escaped_filename = vim_strsave_escaped(filename, escape_chars);
+     if (escaped_filename == NULL)
+       return FALSE;
+-    mksession_cmdline = g_strconcat("mksession ", (char *)escaped_filename, 
NULL);
++    mksession_cmdline = g_strconcat("mksession ", (char *)escaped_filename,
++                                                                      NULL);
+     vim_free(escaped_filename);
++
+     /*
+      * Use a reasonable hardcoded set of 'sessionoptions' flags to avoid
+      * unpredictable effects when the session is saved automatically.  Also,
+@@ -2199,7 +2201,7 @@
+      */
+     save_ssop_flags = ssop_flags;
+     ssop_flags = (SSOP_BLANK|SSOP_CURDIR|SSOP_FOLDS|SSOP_GLOBALS
+-                |SSOP_HELP|SSOP_OPTIONS|SSOP_WINSIZE);
++                |SSOP_HELP|SSOP_OPTIONS|SSOP_WINSIZE|SSOP_TABPAGES);
+ 
+     do_cmdline_cmd((char_u *)"let Save_VV_this_session = v:this_session");
+     failed = (do_cmdline_cmd((char_u *)mksession_cmdline) == FAIL);
+diff -Naur vim71.orig/src/if_mzsch.c vim71/src/if_mzsch.c
+--- vim71.orig/src/if_mzsch.c  2007-05-12 11:13:47.000000000 +0000
++++ vim71/src/if_mzsch.c       2007-06-29 22:03:24.000000000 +0000
+@@ -773,8 +773,7 @@
+ #ifdef MZSCHEME_COLLECTS
+     /* setup 'current-library-collection-paths' parameter */
+     scheme_set_param(scheme_config, MZCONFIG_COLLECTION_PATHS,
+-          scheme_make_pair(scheme_make_string(MZSCHEME_COLLECTS),
+-              scheme_null));
++          scheme_build_list(0, scheme_make_string(MZSCHEME_COLLECTS)));
+ #endif
+ #ifdef HAVE_SANDBOX
+     /* setup sandbox guards */
+diff -Naur vim71.orig/src/main.c vim71/src/main.c
+--- vim71.orig/src/main.c      2007-05-07 19:38:44.000000000 +0000
++++ vim71/src/main.c   2007-06-29 22:03:24.000000000 +0000
+@@ -1360,8 +1360,7 @@
+       p = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
+       if (p != NULL && *p != NUL)
+       {
+-          STRCPY(NameBuff, p);
+-          STRCAT(NameBuff, "/lang");
++          vim_snprintf((char *)NameBuff, MAXPATHL, "%s/lang", p);
+           bindtextdomain(VIMPACKAGE, (char *)NameBuff);
+       }
+       if (mustfree)
+diff -Naur vim71.orig/src/ops.c vim71/src/ops.c
+--- vim71.orig/src/ops.c       2007-05-07 19:33:47.000000000 +0000
++++ vim71/src/ops.c    2007-06-29 22:03:24.000000000 +0000
+@@ -3404,7 +3404,9 @@
+ 
+ #ifdef FEAT_VIRTUALEDIT
+       col += curwin->w_cursor.coladd;
+-      if (ve_flags == VE_ALL && curwin->w_cursor.coladd > 0)
++      if (ve_flags == VE_ALL
++              && (curwin->w_cursor.coladd > 0
++                  || endcol2 == curwin->w_cursor.col))
+       {
+           if (dir == FORWARD && c == NUL)
+               ++col;
+diff -Naur vim71.orig/src/option.c vim71/src/option.c
+--- vim71.orig/src/option.c    2007-05-01 11:26:10.000000000 +0000
++++ vim71/src/option.c 2007-06-29 22:03:24.000000000 +0000
+@@ -8219,6 +8219,25 @@
+           varp = get_varp(&options[opt_idx]);
+           if (varp != NULL)   /* hidden option is not changed */
+           {
++              if (number == 0 && string != NULL)
++              {
++                  int index;
++
++                  /* Either we are given a string or we are setting option
++                   * to zero. */
++                  for (index = 0; string[index] == '0'; ++index)
++                      ;
++                  if (string[index] != NUL || index == 0)
++                  {
++                      /* There's another character after zeros or the string
++                       * is empty.  In both cases, we are trying to set a
++                       * num option using a string. */
++                      EMSG3(_("E521: Number required: &%s = '%s'"),
++                                                              name, string);
++                      return;     /* do nothing as we hit an error */
++
++                  }
++              }
+               if (flags & P_NUM)
+                   (void)set_num_option(opt_idx, varp, number,
+                                                         NULL, 0, opt_flags);
+diff -Naur vim71.orig/src/popupmnu.c vim71/src/popupmnu.c
+--- vim71.orig/src/popupmnu.c  2007-03-24 20:07:39.000000000 +0000
++++ vim71/src/popupmnu.c       2007-06-29 22:03:24.000000000 +0000
+@@ -466,7 +466,7 @@
+                       set_option_value((char_u *)"bh", 0L,
+                                                (char_u *)"wipe", OPT_LOCAL);
+                       set_option_value((char_u *)"diff", 0L,
+-                                                   (char_u *)"", OPT_LOCAL);
++                                                           NULL, OPT_LOCAL);
+                   }
+               }
+               if (res == OK)
+diff -Naur vim71.orig/src/proto/fileio.pro vim71/src/proto/fileio.pro
+--- vim71.orig/src/proto/fileio.pro    2007-05-12 10:39:14.000000000 +0000
++++ vim71/src/proto/fileio.pro 2007-06-29 22:03:24.000000000 +0000
+@@ -2,6 +2,7 @@
+ void filemess __ARGS((buf_T *buf, char_u *name, char_u *s, int attr));
+ int readfile __ARGS((char_u *fname, char_u *sfname, linenr_T from, linenr_T 
lines_to_skip, linenr_T lines_to_read, exarg_T *eap, int flags));
+ int prep_exarg __ARGS((exarg_T *eap, buf_T *buf));
++int check_file_readonly __ARGS((char_u *fname, int perm));
+ int buf_write __ARGS((buf_T *buf, char_u *fname, char_u *sfname, linenr_T 
start, linenr_T end, exarg_T *eap, int append, int forceit, int reset_changed, 
int filtering));
+ void msg_add_fname __ARGS((buf_T *buf, char_u *fname));
+ void msg_add_lines __ARGS((int insert_space, long lnum, long nchars));
+diff -Naur vim71.orig/src/quickfix.c vim71/src/quickfix.c
+--- vim71.orig/src/quickfix.c  2007-02-04 00:50:17.000000000 +0000
++++ vim71/src/quickfix.c       2007-06-29 22:03:24.000000000 +0000
+@@ -2331,7 +2331,7 @@
+           set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
+                                                                  OPT_LOCAL);
+           set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
+-          set_option_value((char_u *)"diff", 0L, (char_u *)"", OPT_LOCAL);
++          set_option_value((char_u *)"diff", 0L, NULL, OPT_LOCAL);
+       }
+ 
+       /* Only set the height when still in the same tab page and there is no
+diff -Naur vim71.orig/src/screen.c vim71/src/screen.c
+--- vim71.orig/src/screen.c    2007-05-07 19:27:53.000000000 +0000
++++ vim71/src/screen.c 2007-06-29 22:03:24.000000000 +0000
+@@ -3459,9 +3459,11 @@
+ #ifdef FEAT_DIFF
+           if (diff_hlf != (hlf_T)0)
+           {
+-              if (diff_hlf == HLF_CHD && ptr - line >= change_start)
++              if (diff_hlf == HLF_CHD && ptr - line >= change_start
++                                                            && n_extra == 0)
+                   diff_hlf = HLF_TXD;         /* changed text */
+-              if (diff_hlf == HLF_TXD && ptr - line > change_end)
++              if (diff_hlf == HLF_TXD && ptr - line > change_end
++                                                            && n_extra == 0)
+                   diff_hlf = HLF_CHD;         /* changed line */
+               line_attr = hl_attr(diff_hlf);
+           }
+diff -Naur vim71.orig/src/search.c vim71/src/search.c
+--- vim71.orig/src/search.c    2007-05-07 19:42:02.000000000 +0000
++++ vim71/src/search.c 2007-06-29 22:03:24.000000000 +0000
+@@ -3600,13 +3600,16 @@
+     {
+       oap->start = start_pos;
+       oap->motion_type = MCHAR;
++      oap->inclusive = FALSE;
+       if (sol)
+-      {
+           incl(&curwin->w_cursor);
+-          oap->inclusive = FALSE;
+-      }
+-      else
++      else if (lt(start_pos, curwin->w_cursor))
++          /* Include the character under the cursor. */
+           oap->inclusive = TRUE;
++      else
++          /* End is before the start (no text in between <>, [], etc.): don't
++           * operate on any text. */
++          curwin->w_cursor = start_pos;
+     }
+ 
+     return OK;
+@@ -3734,7 +3737,7 @@
+ 
+       if (in_html_tag(FALSE))
+       {
+-          /* cursor on start tag, move to just after it */
++          /* cursor on start tag, move to its '>' */
+           while (*ml_get_cursor() != '>')
+               if (inc_cursor() < 0)
+                   break;
+@@ -3838,7 +3841,7 @@
+       /* Exclude the start tag. */
+       curwin->w_cursor = start_pos;
+       while (inc_cursor() >= 0)
+-          if (*ml_get_cursor() == '>' && lt(curwin->w_cursor, end_pos))
++          if (*ml_get_cursor() == '>')
+           {
+               inc_cursor();
+               start_pos = curwin->w_cursor;
+@@ -3860,7 +3863,11 @@
+ #ifdef FEAT_VISUAL
+     if (VIsual_active)
+     {
+-      if (*p_sel == 'e')
++      /* If the end is before the start there is no text between tags, select
++       * the char under the cursor. */
++      if (lt(end_pos, start_pos))
++          curwin->w_cursor = start_pos;
++      else if (*p_sel == 'e')
+           ++curwin->w_cursor.col;
+       VIsual = start_pos;
+       VIsual_mode = 'v';
+@@ -3872,7 +3879,15 @@
+     {
+       oap->start = start_pos;
+       oap->motion_type = MCHAR;
+-      oap->inclusive = TRUE;
++      if (lt(end_pos, start_pos))
++      {
++          /* End is before the start: there is no text between tags; operate
++           * on an empty area. */
++          curwin->w_cursor = start_pos;
++          oap->inclusive = FALSE;
++      }
++      else
++          oap->inclusive = TRUE;
+     }
+     retval = OK;
+ 
+diff -Naur vim71.orig/src/syntax.c vim71/src/syntax.c
+--- vim71.orig/src/syntax.c    2007-05-07 19:42:55.000000000 +0000
++++ vim71/src/syntax.c 2007-06-29 22:03:24.000000000 +0000
+@@ -4460,8 +4460,8 @@
+     current_syn_inc_tag = ++running_syn_inc_tag;
+     prev_toplvl_grp = curbuf->b_syn_topgrp;
+     curbuf->b_syn_topgrp = sgl_id;
+-    if (source ? do_source(eap->arg, FALSE, FALSE) == FAIL
+-                              : source_runtime(eap->arg, DOSO_NONE) == FAIL)
++    if (source ? do_source(eap->arg, FALSE, DOSO_NONE) == FAIL
++                              : source_runtime(eap->arg, TRUE) == FAIL)
+       EMSG2(_(e_notopen), eap->arg);
+     curbuf->b_syn_topgrp = prev_toplvl_grp;
+     current_syn_inc_tag = prev_syn_inc_tag;
+diff -Naur vim71.orig/src/version.c vim71/src/version.c
+--- vim71.orig/src/version.c   2007-05-12 10:23:44.000000000 +0000
++++ vim71/src/version.c        2007-06-29 22:03:24.000000000 +0000
+@@ -667,6 +667,38 @@
+ static int included_patches[] =
+ {   /* Add new patch number below this line */
+ /**/
++    18,
++/**/
++    17,
++/**/
++    16,
++/**/
++    15,
++/**/
++    14,
++/**/
++    13,
++/**/
++    12,
++/**/
++    11,
++/**/
++    10,
++/**/
++    9,
++/**/
++    8,
++/**/
++    6,
++/**/
++    5,
++/**/
++    4,
++/**/
++    2,
++/**/
++    1,
++/**/
+     0
+ };
+ 

-- 
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to