]> git.pld-linux.org Git - packages/vim.git/commitdiff
- from upstream
authorElan Ruusamäe <glen@pld-linux.org>
Mon, 21 Jan 2008 18:44:55 +0000 (18:44 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    7.1.204 -> 1.1
    7.1.205 -> 1.1
    7.1.206 -> 1.1
    7.1.207 -> 1.1
    7.1.208 -> 1.1
    7.1.209 -> 1.1
    7.1.210 -> 1.1
    7.1.211 -> 1.1
    7.1.212 -> 1.1
    7.1.213 -> 1.1
    7.1.214 -> 1.1
    7.1.215 -> 1.1
    7.1.216 -> 1.1
    7.1.217 -> 1.1
    7.1.218 -> 1.1
    7.1.219 -> 1.1
    7.1.220 -> 1.1
    7.1.221 -> 1.1
    7.1.222 -> 1.1
    7.1.223 -> 1.1
    7.1.224 -> 1.1
    7.1.225 -> 1.1
    7.1.226 -> 1.1
    7.1.227 -> 1.1
    7.1.228 -> 1.1
    7.1.229 -> 1.1
    7.1.230 -> 1.1
    7.1.231 -> 1.1
    7.1.232 -> 1.1
    7.1.233 -> 1.1
    7.1.234 -> 1.1
    7.1.235 -> 1.1
    7.1.236 -> 1.1

33 files changed:
7.1.204 [new file with mode: 0644]
7.1.205 [new file with mode: 0644]
7.1.206 [new file with mode: 0644]
7.1.207 [new file with mode: 0644]
7.1.208 [new file with mode: 0644]
7.1.209 [new file with mode: 0644]
7.1.210 [new file with mode: 0644]
7.1.211 [new file with mode: 0644]
7.1.212 [new file with mode: 0644]
7.1.213 [new file with mode: 0644]
7.1.214 [new file with mode: 0644]
7.1.215 [new file with mode: 0644]
7.1.216 [new file with mode: 0644]
7.1.217 [new file with mode: 0644]
7.1.218 [new file with mode: 0644]
7.1.219 [new file with mode: 0644]
7.1.220 [new file with mode: 0644]
7.1.221 [new file with mode: 0644]
7.1.222 [new file with mode: 0644]
7.1.223 [new file with mode: 0644]
7.1.224 [new file with mode: 0644]
7.1.225 [new file with mode: 0644]
7.1.226 [new file with mode: 0644]
7.1.227 [new file with mode: 0644]
7.1.228 [new file with mode: 0644]
7.1.229 [new file with mode: 0644]
7.1.230 [new file with mode: 0644]
7.1.231 [new file with mode: 0644]
7.1.232 [new file with mode: 0644]
7.1.233 [new file with mode: 0644]
7.1.234 [new file with mode: 0644]
7.1.235 [new file with mode: 0644]
7.1.236 [new file with mode: 0644]

diff --git a/7.1.204 b/7.1.204
new file mode 100644 (file)
index 0000000..085e88f
--- /dev/null
+++ b/7.1.204
@@ -0,0 +1,74 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.204 (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.1.204 (extra)
+Problem:    Win32: Using the example at 'balloonexpr' the balloon disappears
+           after four seconds and then comes back again.  Also moves the
+           mouse pointer a little bit.  (Yongwei Wu)
+Solution:   Set the autopop time to 30 seconds (the max value).  (Sergey
+           Khorev)  Move the mouse two pixels forward and one back to end up
+           in the same position (really!).
+Files:     src/gui_w32.c
+
+
+
+*** ../vim-7.1.203/src/gui_w32.c       Thu Jan  3 20:44:35 2008
+--- src/gui_w32.c      Sat Jan  5 13:09:56 2008
+***************
+*** 4575,4585 ****
+      SendMessage(beval->balloon, TTM_ADDTOOL, 0, (LPARAM)pti);
+      /* Make tooltip appear sooner */
+      SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_INITIAL, 10);
+      /*
+       * HACK: force tooltip to appear, because it'll not appear until
+       * first mouse move. D*mn M$
+       */
+!     mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);
+      mouse_event(MOUSEEVENTF_MOVE, (DWORD)-1, (DWORD)-1, 0, 0);
+      vim_free(pti);
+  }
+--- 4575,4589 ----
+      SendMessage(beval->balloon, TTM_ADDTOOL, 0, (LPARAM)pti);
+      /* Make tooltip appear sooner */
+      SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_INITIAL, 10);
++     /* I've performed some tests and it seems the longest possible life time
++      * of tooltip is 30 seconds */
++     SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_AUTOPOP, 30000);
+      /*
+       * HACK: force tooltip to appear, because it'll not appear until
+       * first mouse move. D*mn M$
++      * Amazingly moving (2, 2) and then (-1, -1) the mouse doesn't move.
+       */
+!     mouse_event(MOUSEEVENTF_MOVE, 2, 2, 0, 0);
+      mouse_event(MOUSEEVENTF_MOVE, (DWORD)-1, (DWORD)-1, 0, 0);
+      vim_free(pti);
+  }
+*** ../vim-7.1.203/src/version.c       Fri Jan  4 21:25:01 2008
+--- src/version.c      Sat Jan  5 13:12:22 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     204,
+  /**/
+
+-- 
+WOMAN:   I didn't know we had a king. I thought we were an autonomous
+         collective.
+DENNIS:  You're fooling yourself.  We're living in a dictatorship.  A
+         self-perpetuating autocracy in which the working classes--
+WOMAN:   Oh there you go, bringing class into it again.
+DENNIS:  That's what it's all about if only people would--
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// 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    ///
diff --git a/7.1.205 b/7.1.205
new file mode 100644 (file)
index 0000000..a1c15ed
--- /dev/null
+++ b/7.1.205
@@ -0,0 +1,181 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.205
+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.1.205
+Problem:    Can't get the operator in an ":omap".
+Solution:   Add the "v:operator" variable. (Ben Schmidt)
+Files:     runtime/doc/eval.txt, src/eval.c, src/normal.c, src/vim.h
+
+
+*** ../vim-7.1.204/runtime/doc/eval.txt        Tue Sep 25 17:54:41 2007
+--- runtime/doc/eval.txt       Fri Jan  4 20:38:55 2008
+***************
+*** 1,4 ****
+! *eval.txt*      For Vim version 7.1.  Last change: 2007 Sep 25
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 04
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 1401,1410 ****
+               This is the screen column number, like with |virtcol()|.  The
+               value is zero when there was no mouse button click.
+  
+                                       *v:prevcount* *prevcount-variable*
+  v:prevcount  The count given for the last but one Normal mode command.
+               This is the v:count value of the previous command.  Useful if
+!              you want to cancel Visual mode and then use the count. >
+                       :vmap % <Esc>:call MyFilter(v:prevcount)<CR>
+  <            Read-only.
+  
+--- 1401,1424 ----
+               This is the screen column number, like with |virtcol()|.  The
+               value is zero when there was no mouse button click.
+  
++                                      *v:operator* *operator-variable*
++ v:operator   The last operator given in Normal mode.  This is a single
++              character except for commands starting with <g> or <z>,
++              in which case it is two characters.  Best used alongside
++              |v:prevcount| and |v:register|.  Useful if you want to cancel
++              Operator-pending mode and then use the operator, e.g.: >
++                      :omap O <Esc>:call MyMotion(v:operator)<CR>
++ <            The value remains set until another operator is entered, thus
++              don't expect it to be empty.
++              v:operator is not set for |:delete|, |:yank| or other Ex
++              commands.
++              Read-only.
++ 
+                                       *v:prevcount* *prevcount-variable*
+  v:prevcount  The count given for the last but one Normal mode command.
+               This is the v:count value of the previous command.  Useful if
+!              you want to cancel Visual or Operator-pending mode and then
+!              use the count, e.g.: >
+                       :vmap % <Esc>:call MyFilter(v:prevcount)<CR>
+  <            Read-only.
+  
+*** ../vim-7.1.204/src/eval.c  Fri Dec  7 17:08:35 2007
+--- src/eval.c Sat Jan  5 13:22:52 2008
+***************
+*** 345,350 ****
+--- 345,351 ----
+      {VV_NAME("mouse_win",     VAR_NUMBER), 0},
+      {VV_NAME("mouse_lnum",    VAR_NUMBER), 0},
+      {VV_NAME("mouse_col",     VAR_NUMBER), 0},
++     {VV_NAME("operator",      VAR_STRING), VV_RO},
+  };
+  
+  /* shorthand */
+*** ../vim-7.1.204/src/normal.c        Thu Jan  3 13:19:50 2008
+--- src/normal.c       Fri Jan  4 20:53:43 2008
+***************
+*** 141,146 ****
+--- 141,149 ----
+  static void  nv_Undo __ARGS((cmdarg_T *cap));
+  static void  nv_tilde __ARGS((cmdarg_T *cap));
+  static void  nv_operator __ARGS((cmdarg_T *cap));
++ #ifdef FEAT_EVAL
++ static void  set_op_var __ARGS((int optype));
++ #endif
+  static void  nv_lineop __ARGS((cmdarg_T *cap));
+  static void  nv_home __ARGS((cmdarg_T *cap));
+  static void  nv_pipe __ARGS((cmdarg_T *cap));
+***************
+*** 7180,7185 ****
+--- 7183,7191 ----
+       {
+           cap->oap->start = curwin->w_cursor;
+           cap->oap->op_type = OP_DELETE;
++ #ifdef FEAT_EVAL
++          set_op_var(OP_DELETE);
++ #endif
+           cap->count1 = 1;
+           nv_dollar(cap);
+           finish_op = TRUE;
+***************
+*** 8219,8226 ****
+--- 8225,8257 ----
+      {
+       cap->oap->start = curwin->w_cursor;
+       cap->oap->op_type = op_type;
++ #ifdef FEAT_EVAL
++      set_op_var(op_type);
++ #endif
++     }
++ }
++ 
++ #ifdef FEAT_EVAL
++ /*
++  * Set v:operator to the characters for "optype".
++  */
++     static void
++ set_op_var(optype)
++     int optype;
++ {
++     char_u   opchars[3];
++ 
++     if (optype == OP_NOP)
++      set_vim_var_string(VV_OP, NULL, 0);
++     else
++     {
++      opchars[0] = get_op_char(optype);
++      opchars[1] = get_extra_op_char(optype);
++      opchars[2] = NUL;
++      set_vim_var_string(VV_OP, opchars, -1);
+      }
+  }
++ #endif
+  
+  /*
+   * Handle linewise operator "dd", "yy", etc.
+*** ../vim-7.1.204/src/vim.h   Sat Aug 11 13:57:31 2007
+--- src/vim.h  Fri Jan  4 19:11:31 2008
+***************
+*** 1688,1694 ****
+  #define VV_MOUSE_WIN 49
+  #define VV_MOUSE_LNUM   50
+  #define VV_MOUSE_COL 51
+! #define VV_LEN               52      /* number of v: vars */
+  
+  #ifdef FEAT_CLIPBOARD
+  
+--- 1688,1695 ----
+  #define VV_MOUSE_WIN 49
+  #define VV_MOUSE_LNUM   50
+  #define VV_MOUSE_COL 51
+! #define VV_OP                52
+! #define VV_LEN               53      /* number of v: vars */
+  
+  #ifdef FEAT_CLIPBOARD
+  
+*** ../vim-7.1.204/src/version.c       Sat Jan  5 13:15:08 2008
+--- src/version.c      Sat Jan  5 13:31:49 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     205,
+  /**/
+
+-- 
+ARTHUR:  Then who is your lord?
+WOMAN:   We don't have a lord.
+ARTHUR:  What?
+DENNIS:  I told you.  We're an anarcho-syndicalist commune.  We take it in
+         turns to act as a sort of executive officer for the week.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// 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    ///
diff --git a/7.1.206 b/7.1.206
new file mode 100644 (file)
index 0000000..4531a00
--- /dev/null
+++ b/7.1.206
@@ -0,0 +1,59 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.206
+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.1.206
+Problem:    Compiler warnings when using MODIFIED_BY.
+Solution:   Add type casts. (Ben Schmidt)
+Files:     src/version.c
+
+
+*** ../vim-7.1.205/src/version.c       Sat Jan  5 13:34:01 2008
+--- src/version.c      Sat Jan  5 13:56:55 2008
+***************
+*** 1587,1595 ****
+  
+      if (*mesg == ' ')
+      {
+!      vim_strncpy(modby, _("Modified by "), MODBY_LEN - 1);
+       l = STRLEN(modby);
+!      vim_strncpy(modby + l, MODIFIED_BY, MODBY_LEN - l - 1);
+       mesg = modby;
+      }
+  #endif
+--- 1589,1597 ----
+  
+      if (*mesg == ' ')
+      {
+!      vim_strncpy(modby, (char_u *)_("Modified by "), MODBY_LEN - 1);
+       l = STRLEN(modby);
+!      vim_strncpy(modby + l, (char_u *)MODIFIED_BY, MODBY_LEN - l - 1);
+       mesg = modby;
+      }
+  #endif
+*** ../vim-7.1.205/src/version.c       Sat Jan  5 13:34:01 2008
+--- src/version.c      Sat Jan  5 13:56:55 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     206,
+  /**/
+
+-- 
+ARTHUR:  I am your king!
+WOMAN:   Well, I didn't vote for you.
+ARTHUR:  You don't vote for kings.
+WOMAN:   Well, 'ow did you become king then?
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// 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    ///
diff --git a/7.1.207 b/7.1.207
new file mode 100644 (file)
index 0000000..1eba2cc
--- /dev/null
+++ b/7.1.207
@@ -0,0 +1,253 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.207
+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.1.207
+Problem:    Netbeans: "remove" cannot delete one line. 
+Solution:   Remove partial lines and whole lines properly.  Avoid a memory
+           leak.  (Xavier de Gaye)
+Files:     src/netbeans.c
+
+
+*** ../vim-7.1.206/src/netbeans.c      Thu May 10 18:40:48 2007
+--- src/netbeans.c     Sat Jan  5 18:03:24 2008
+***************
+*** 1204,1209 ****
+--- 1204,1257 ----
+      return result;
+  }
+  
++ /*
++  * Remove from "first" byte to "last" byte (inclusive), at line "lnum" of the
++  * current buffer.  Remove to end of line when "last" is MAXCOL.
++  */
++     static void
++ nb_partialremove(linenr_T lnum, colnr_T first, colnr_T last)
++ {
++     char_u *oldtext, *newtext;
++     int oldlen;
++     int lastbyte = last;
++ 
++     oldtext = ml_get(lnum);
++     oldlen = STRLEN(oldtext);
++     if (first >= oldlen || oldlen == 0)  /* just in case */
++      return;
++     if (lastbyte >= oldlen)
++      lastbyte = oldlen - 1;
++     newtext = alloc(oldlen - (int)(lastbyte - first));
++     if (newtext != NULL)
++     {
++      mch_memmove(newtext, oldtext, first);
++      mch_memmove(newtext + first, oldtext + lastbyte + 1, STRLEN(oldtext + lastbyte + 1) + 1);
++      nbdebug(("    NEW LINE %d: %s\n", lnum, newtext));
++      ml_replace(lnum, newtext, FALSE);
++     }
++ }
++ 
++ /*
++  * Replace the "first" line with the concatenation of the "first" and
++  * the "other" line. The "other" line is not removed.
++  */
++     static void
++ nb_joinlines(linenr_T first, linenr_T other)
++ {
++     int len_first, len_other;
++     char_u *p;
++ 
++     len_first = STRLEN(ml_get(first));
++     len_other = STRLEN(ml_get(other));
++     p = alloc((unsigned)(len_first + len_other + 1));
++     if (p != NULL)
++     {
++       mch_memmove(p, ml_get(first), len_first);
++       mch_memmove(p + len_first, ml_get(other), len_other + 1);
++       ml_replace(first, p, FALSE);
++     }
++ }
++ 
+  #define SKIP_STOP 2
+  #define streq(a,b) (strcmp(a,b) == 0)
+  static int needupdate = 0;
+***************
+*** 1371,1376 ****
+--- 1419,1426 ----
+           long count;
+           pos_T first, last;
+           pos_T *pos;
++          pos_T *next;
++          linenr_T del_from_lnum, del_to_lnum;  /* lines to be deleted as a whole */
+           int oldFire = netbeansFireChanges;
+           int oldSuppress = netbeansSuppressNoLines;
+           int wasChanged;
+***************
+*** 1420,1444 ****
+               }
+               last = *pos;
+               nbdebug(("    LAST POS: line %d, col %d\n", last.lnum, last.col));
+!              curwin->w_cursor = first;
+               doupdate = 1;
+  
+!              /* keep part of first line */
+!              if (first.lnum == last.lnum && first.col != last.col)
+               {
+!                  /* deletion is within one line */
+!                  char_u *p = ml_get(first.lnum);
+!                  mch_memmove(p + first.col, p + last.col + 1, STRLEN(p + last.col) + 1);
+!                  nbdebug(("    NEW LINE %d: %s\n", first.lnum, p));
+!                  ml_replace(first.lnum, p, TRUE);
+               }
+  
+!              if (first.lnum < last.lnum)
+               {
+                   int i;
+  
+                   /* delete signs from the lines being deleted */
+!                  for (i = first.lnum; i <= last.lnum; i++)
+                   {
+                       int id = buf_findsign_id(buf->bufp, (linenr_T)i);
+                       if (id > 0)
+--- 1470,1544 ----
+               }
+               last = *pos;
+               nbdebug(("    LAST POS: line %d, col %d\n", last.lnum, last.col));
+!              del_from_lnum = first.lnum;
+!              del_to_lnum = last.lnum;
+               doupdate = 1;
+  
+!              /* Get the position of the first byte after the deleted
+!               * section.  "next" is NULL when deleting to the end of the
+!               * file. */
+!              next = off2pos(buf->bufp, off + count);
+! 
+!              /* Remove part of the first line. */
+!              if (first.col != 0 || (next != NULL && first.lnum == next->lnum))
+               {
+!                  if (first.lnum != last.lnum
+!                          || (next != NULL && first.lnum != next->lnum))
+!                  {
+!                      /* remove to the end of the first line */
+!                      nb_partialremove(first.lnum, first.col,
+!                                                           (colnr_T)MAXCOL);
+!                      if (first.lnum == last.lnum)
+!                      {
+!                          /* Partial line to remove includes the end of
+!                           * line.  Join the line with the next one, have
+!                           * the next line deleted below. */
+!                          nb_joinlines(first.lnum, next->lnum);
+!                          del_to_lnum = next->lnum;
+!                      }
+!                  }
+!                  else
+!                  {
+!                      /* remove within one line */
+!                      nb_partialremove(first.lnum, first.col, last.col);
+!                  }
+!                  ++del_from_lnum;  /* don't delete the first line */
+!              }
+! 
+!              /* Remove part of the last line. */
+!              if (first.lnum != last.lnum && next != NULL
+!                      && next->col != 0 && last.lnum == next->lnum)
+!              {
+!                  nb_partialremove(last.lnum, 0, last.col);
+!                  if (del_from_lnum > first.lnum)
+!                  {
+!                      /* Join end of last line to start of first line; last
+!                       * line is deleted below. */
+!                      nb_joinlines(first.lnum, last.lnum);
+!                  }
+!                  else
+!                      /* First line is deleted as a whole, keep the last
+!                       * line. */
+!                      --del_to_lnum;
+               }
+  
+!              /* First is partial line; last line to remove includes
+!               * the end of line; join first line to line following last
+!               * line; line following last line is deleted below. */
+!              if (first.lnum != last.lnum && del_from_lnum > first.lnum
+!                      && next != NULL && last.lnum != next->lnum)
+!              {
+!                  nb_joinlines(first.lnum, next->lnum);
+!                  del_to_lnum = next->lnum;
+!              }
+! 
+!              /* Delete whole lines if there are any. */
+!              if (del_to_lnum >= del_from_lnum)
+               {
+                   int i;
+  
+                   /* delete signs from the lines being deleted */
+!                  for (i = del_from_lnum; i <= del_to_lnum; i++)
+                   {
+                       int id = buf_findsign_id(buf->bufp, (linenr_T)i);
+                       if (id > 0)
+***************
+*** 1450,1459 ****
+                           nbdebug(("    No sign on line %d\n", i));
+                   }
+  
+!                  /* delete whole lines */
+!                  nbdebug(("    Deleting lines %d through %d\n", first.lnum, last.lnum));
+!                  del_lines(last.lnum - first.lnum + 1, FALSE);
+               }
+               buf->bufp->b_changed = wasChanged; /* logically unchanged */
+               netbeansFireChanges = oldFire;
+               netbeansSuppressNoLines = oldSuppress;
+--- 1550,1564 ----
+                           nbdebug(("    No sign on line %d\n", i));
+                   }
+  
+!                  nbdebug(("    Deleting lines %d through %d\n", del_from_lnum, del_to_lnum));
+!                  curwin->w_cursor.lnum = del_from_lnum;
+!                  curwin->w_cursor.col = 0;
+!                  del_lines(del_to_lnum - del_from_lnum + 1, FALSE);
+               }
++ 
++              /* Leave cursor at first deleted byte. */
++              curwin->w_cursor = first;
++              check_cursor_lnum();
+               buf->bufp->b_changed = wasChanged; /* logically unchanged */
+               netbeansFireChanges = oldFire;
+               netbeansSuppressNoLines = oldSuppress;
+***************
+*** 2374,2381 ****
+   * the current buffer as "buf".
+   */
+      static void
+! nb_set_curbuf(buf)
+!     buf_T *buf;
+  {
+      if (curbuf != buf && buf_jump_open_win(buf) == NULL)
+       set_curbuf(buf, DOBUF_GOTO);
+--- 2479,2485 ----
+   * the current buffer as "buf".
+   */
+      static void
+! nb_set_curbuf(buf_T *buf)
+  {
+      if (curbuf != buf && buf_jump_open_win(buf) == NULL)
+       set_curbuf(buf, DOBUF_GOTO);
+*** ../vim-7.1.206/src/version.c       Sat Jan  5 13:58:48 2008
+--- src/version.c      Sat Jan  5 18:06:04 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     207,
+  /**/
+
+-- 
+Q:   How many hardware engineers does it take to change a lightbulb?
+A:   None.  We'll fix it in software.
+
+ /// 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    ///
diff --git a/7.1.208 b/7.1.208
new file mode 100644 (file)
index 0000000..44f6633
--- /dev/null
+++ b/7.1.208
@@ -0,0 +1,69 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.208
+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.1.208
+Problem:    On Alpha get an unaligned access error.
+Solution:   Store the dictitem pointer before using it. (Matthew Luckie)
+Files:     src/eval.c
+
+
+*** ../vim-7.1.207/src/eval.c  Sat Jan  5 13:34:01 2008
+--- src/eval.c Sat Jan  5 13:22:52 2008
+***************
+*** 3407,3412 ****
+--- 3407,3413 ----
+      hashtab_T        *ht;
+      hashitem_T       *hi;
+      char_u   *varname;
++     dictitem_T       *di;
+  
+      ht = find_var_ht(name, &varname);
+      if (ht != NULL && *varname != NUL)
+***************
+*** 3414,3422 ****
+       hi = hash_find(ht, varname);
+       if (!HASHITEM_EMPTY(hi))
+       {
+!          if (var_check_fixed(HI2DI(hi)->di_flags, name))
+!              return FAIL;
+!          if (var_check_ro(HI2DI(hi)->di_flags, name))
+               return FAIL;
+           delete_var(ht, hi);
+           return OK;
+--- 3415,3423 ----
+       hi = hash_find(ht, varname);
+       if (!HASHITEM_EMPTY(hi))
+       {
+!          di = HI2DI(hi);
+!          if (var_check_fixed(di->di_flags, name)
+!                  || var_check_ro(di->di_flags, name))
+               return FAIL;
+           delete_var(ht, hi);
+           return OK;
+*** ../vim-7.1.207/src/version.c       Sat Jan  5 18:06:33 2008
+--- src/version.c      Sat Jan  5 22:14:17 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     208,
+  /**/
+
+-- 
+ARTHUR:  Bloody peasant!
+DENNIS:  Oh, what a give away.  Did you here that, did you here that, eh?
+         That's what I'm on about -- did you see him repressing me, you saw it
+         didn't you?
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// 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    ///
diff --git a/7.1.209 b/7.1.209
new file mode 100644 (file)
index 0000000..c62d239
--- /dev/null
+++ b/7.1.209
@@ -0,0 +1,71 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.209
+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.1.209
+Problem:    GTK: When using the netrw plugin and doing ":gui" Vim hangs.
+Solution:   Stop getting a selection after three seconds.  This is a hack.
+Files:     src/gui_gtk_x11.c
+
+
+*** ../vim-7.1.208/src/gui_gtk_x11.c   Fri Oct 19 14:32:50 2007
+--- src/gui_gtk_x11.c  Sun Jan  6 15:15:52 2008
+***************
+*** 6660,6665 ****
+--- 6660,6666 ----
+      unsigned i;
+      int              nbytes;
+      char_u   *buffer;
++     time_t   start;
+  
+      for (i = 0; i < N_SELECTION_TARGETS; ++i)
+      {
+***************
+*** 6670,6676 ****
+                             cbd->gtk_sel_atom, target,
+                             (guint32)GDK_CURRENT_TIME);
+  
+!      while (received_selection == RS_NONE)
+           gtk_main(); /* wait for selection_received_cb */
+  
+       if (received_selection != RS_FAIL)
+--- 6671,6681 ----
+                             cbd->gtk_sel_atom, target,
+                             (guint32)GDK_CURRENT_TIME);
+  
+!      /* Hack: Wait up to three seconds for the selection.  A hang was
+!       * noticed here when using the netrw plugin combined with ":gui"
+!       * during the FocusGained event. */
+!      start = time(NULL);
+!      while (received_selection == RS_NONE && time(NULL) < start + 3)
+           gtk_main(); /* wait for selection_received_cb */
+  
+       if (received_selection != RS_FAIL)
+*** ../vim-7.1.208/src/version.c       Sat Jan  5 22:15:21 2008
+--- src/version.c      Sun Jan  6 15:14:48 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     209,
+  /**/
+
+-- 
+BLACK KNIGHT:  I move for no man.
+ARTHUR:        So be it!
+    [hah] [parry thrust]
+    [ARTHUR chops the BLACK KNIGHT's left arm off]
+ARTHUR:        Now stand aside, worthy adversary.
+BLACK KNIGHT:  'Tis but a scratch.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// 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    ///
diff --git a/7.1.210 b/7.1.210
new file mode 100644 (file)
index 0000000..aa92ccd
--- /dev/null
+++ b/7.1.210
@@ -0,0 +1,74 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.210
+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.1.210
+Problem:    Listing mapping for 0xdb fails when 'encoding' is utf-8. (Tony
+           Mechelynck)
+Solution:   Recognize K_SPECIAL KS_EXTRA KE_CSI as a CSI byte.
+Files:     src/mbyte.c
+
+
+*** ../vim-7.1.209/src/mbyte.c Fri Jan  4 17:46:46 2008
+--- src/mbyte.c        Sun Jan  6 17:13:51 2008
+***************
+*** 2863,2877 ****
+           buf[m++] = K_SPECIAL;
+           n += 2;
+       }
+  # ifdef FEAT_GUI
+!      else if (str[n] == CSI
+               && str[n + 1] == KS_EXTRA
+               && str[n + 2] == (int)KE_CSI)
+       {
+           buf[m++] = CSI;
+           n += 2;
+       }
+- # endif
+       else if (str[n] == K_SPECIAL
+  # ifdef FEAT_GUI
+               || str[n] == CSI
+--- 2882,2898 ----
+           buf[m++] = K_SPECIAL;
+           n += 2;
+       }
++      else if ((str[n] == K_SPECIAL
+  # ifdef FEAT_GUI
+!                  || str[n] == CSI
+! # endif
+!               )
+               && str[n + 1] == KS_EXTRA
+               && str[n + 2] == (int)KE_CSI)
+       {
+           buf[m++] = CSI;
+           n += 2;
+       }
+       else if (str[n] == K_SPECIAL
+  # ifdef FEAT_GUI
+               || str[n] == CSI
+*** ../vim-7.1.209/src/version.c       Sun Jan  6 15:16:12 2008
+--- src/version.c      Sun Jan  6 17:17:25 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     210,
+  /**/
+
+-- 
+ARTHUR:        A scratch?  Your arm's off!
+BLACK KNIGHT:  No, it isn't.
+ARTHUR:        Well, what's that then?
+BLACK KNIGHT:  I've had worse.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// 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    ///
diff --git a/7.1.211 b/7.1.211
new file mode 100644 (file)
index 0000000..38e3ea1
--- /dev/null
+++ b/7.1.211
@@ -0,0 +1,748 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.211
+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.1.211
+Problem:    The matchparen plugin may take an unexpected amount of time, so
+           that it looks like Vim hangs.
+Solution:   Add a timeout to searchpair(), searchpairpos(), search() and
+           searchpos().  Use half a second timeout in the plugin.
+Files:     runtime/doc/eval.txt, runtime/plugin/matchparen.vim, src/edit.c,
+           src/eval.c, src/ex_cmds2.c, src/ex_docmd.c, src/normal.c,
+           src/proto/eval.pro, src/proto/ex_cmds2.pro, src/proto/search.pro,
+           src/search.c
+
+
+*** ../vim-7.1.210/runtime/doc/eval.txt        Sat Jan  5 13:34:01 2008
+--- runtime/doc/eval.txt       Sun Jan  6 16:27:33 2008
+***************
+*** 1,4 ****
+! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 04
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 06
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 1733,1746 ****
+  repeat( {expr}, {count})     String  repeat {expr} {count} times
+  resolve( {filename})         String  get filename a shortcut points to
+  reverse( {list})             List    reverse {list} in-place
+! search( {pattern} [, {flags}])       Number  search for {pattern}
+  searchdecl({name} [, {global} [, {thisblock}]])
+                               Number  search for variable declaration
+! searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
+                               Number  search for other end of start/end pair
+! searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
+                               List    search for other end of start/end pair
+! searchpos( {pattern} [, {flags} [, {stopline}]])
+                               List    search for {pattern}
+  server2client( {clientid}, {string})
+                               Number  send reply string
+--- 1733,1747 ----
+  repeat( {expr}, {count})     String  repeat {expr} {count} times
+  resolve( {filename})         String  get filename a shortcut points to
+  reverse( {list})             List    reverse {list} in-place
+! search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
+!                              Number  search for {pattern}
+  searchdecl({name} [, {global} [, {thisblock}]])
+                               Number  search for variable declaration
+! searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
+                               Number  search for other end of start/end pair
+! searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
+                               List    search for other end of start/end pair
+! searchpos( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
+                               List    search for {pattern}
+  server2client( {clientid}, {string})
+                               Number  send reply string
+***************
+*** 4212,4218 ****
+               If you want a list to remain unmodified make a copy first: >
+                       :let revlist = reverse(copy(mylist))
+  
+! search({pattern} [, {flags} [, {stopline}]])                 *search()*
+               Search for regexp pattern {pattern}.  The search starts at the
+               cursor position (you can use |cursor()| to set it).
+  
+--- 4216,4222 ----
+               If you want a list to remain unmodified make a copy first: >
+                       :let revlist = reverse(copy(mylist))
+  
+! search({pattern} [, {flags} [, {stopline} [, {timeout}]]])   *search()*
+               Search for regexp pattern {pattern}.  The search starts at the
+               cursor position (you can use |cursor()| to set it).
+  
+***************
+*** 4240,4245 ****
+--- 4244,4257 ----
+                       let end = search('END', '', line("w$"))
+  <            When {stopline} is used and it is not zero this also implies
+               that the search does not wrap around the end of the file.
++              A zero value is equal to not giving the argument.
++ 
++              When the {timeout} argument is given the search stops when
++              more than this many milli seconds have passed.  Thus when
++              {timeout} is 500 the search stops after half a second.
++              The value must not be negative.  A zero value is like not
++              giving the argument.
++              {only available when compiled with the +reltime feature}
+  
+               If there is no match a 0 is returned and the cursor doesn't
+               move.  No error message is given.
+***************
+*** 4302,4308 ****
+                       endif
+  <
+                                                       *searchpair()*
+! searchpair({start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
+               Search for the match of a nested start-end pair.  This can be
+               used to find the "endif" that matches an "if", while other
+               if/endif pairs in between are ignored.
+--- 4314,4321 ----
+                       endif
+  <
+                                                       *searchpair()*
+! searchpair({start}, {middle}, {end} [, {flags} [, {skip}
+!                              [, {stopline} [, {timeout}]]]])
+               Search for the match of a nested start-end pair.  This can be
+               used to find the "endif" that matches an "if", while other
+               if/endif pairs in between are ignored.
+***************
+*** 4337,4343 ****
+               When evaluating {skip} causes an error the search is aborted
+               and -1 returned.
+  
+!              For {stopline} see |search()|.
+  
+               The value of 'ignorecase' is used.  'magic' is ignored, the
+               patterns are used like it's on.
+--- 4350,4356 ----
+               When evaluating {skip} causes an error the search is aborted
+               and -1 returned.
+  
+!              For {stopline} and {timeout} see |search()|.
+  
+               The value of 'ignorecase' is used.  'magic' is ignored, the
+               patterns are used like it's on.
+***************
+*** 4383,4389 ****
+            \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
+  <
+                                                       *searchpairpos()*
+! searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
+               Same as searchpair(), but returns a |List| with the line and
+               column position of the match. The first element of the |List|
+               is the line number and the second element is the byte index of
+--- 4396,4403 ----
+            \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
+  <
+                                                       *searchpairpos()*
+! searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}
+!                              [, {stopline} [, {timeout}]]]])
+               Same as searchpair(), but returns a |List| with the line and
+               column position of the match. The first element of the |List|
+               is the line number and the second element is the byte index of
+***************
+*** 4394,4400 ****
+  <
+               See |match-parens| for a bigger and more useful example.
+  
+! searchpos({pattern} [, {flags} [, {stopline}]])              *searchpos()*
+               Same as |search()|, but returns a |List| with the line and
+               column position of the match. The first element of the |List|
+               is the line number and the second element is the byte index of
+--- 4408,4414 ----
+  <
+               See |match-parens| for a bigger and more useful example.
+  
+! searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]])        *searchpos()*
+               Same as |search()|, but returns a |List| with the line and
+               column position of the match. The first element of the |List|
+               is the line number and the second element is the byte index of
+*** ../vim-7.1.210/runtime/plugin/matchparen.vim       Sat Aug 18 18:20:57 2007
+--- runtime/plugin/matchparen.vim      Sun Jan  6 16:22:39 2008
+***************
+*** 1,6 ****
+  " Vim plugin for showing matching parens
+  " Maintainer:  Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2007 Aug 8
+  
+  " Exit quickly when:
+  " - this plugin was already loaded (or disabled)
+--- 1,6 ----
+  " Vim plugin for showing matching parens
+  " Maintainer:  Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2008 Jan 06
+  
+  " Exit quickly when:
+  " - this plugin was already loaded (or disabled)
+***************
+*** 111,117 ****
+       \ '=~?  "string\\|character\\|singlequote\\|comment"'
+    execute 'if' s_skip '| let s_skip = 0 | endif'
+  
+!   let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
+  
+    if before > 0
+      call winrestview(save_cursor)
+--- 111,122 ----
+       \ '=~?  "string\\|character\\|singlequote\\|comment"'
+    execute 'if' s_skip '| let s_skip = 0 | endif'
+  
+!   try
+!     " Limit the search time to 500 msec to avoid a hang on very long lines.
+!     let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, 500)
+!   catch /E118/
+!     let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
+!   endtry
+  
+    if before > 0
+      call winrestview(save_cursor)
+*** ../vim-7.1.210/src/edit.c  Wed Jan  2 22:08:43 2008
+--- src/edit.c Sun Jan  6 16:08:00 2008
+***************
+*** 4062,4068 ****
+                   found_new_match = searchit(NULL, ins_buf, pos,
+                                                             compl_direction,
+                                compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
+!                                                      RE_LAST, (linenr_T)0);
+               --msg_silent;
+               if (!compl_started)
+               {
+--- 4062,4068 ----
+                   found_new_match = searchit(NULL, ins_buf, pos,
+                                                             compl_direction,
+                                compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
+!                                                RE_LAST, (linenr_T)0, NULL);
+               --msg_silent;
+               if (!compl_started)
+               {
+*** ../vim-7.1.210/src/eval.c  Sat Jan  5 22:15:21 2008
+--- src/eval.c Sun Jan  6 16:37:42 2008
+***************
+*** 7213,7223 ****
+      {"repeat",               2, 2, f_repeat},
+      {"resolve",              1, 1, f_resolve},
+      {"reverse",              1, 1, f_reverse},
+!     {"search",               1, 3, f_search},
+      {"searchdecl",   1, 3, f_searchdecl},
+!     {"searchpair",   3, 6, f_searchpair},
+!     {"searchpairpos",        3, 6, f_searchpairpos},
+!     {"searchpos",    1, 3, f_searchpos},
+      {"server2client",        2, 2, f_server2client},
+      {"serverlist",   0, 0, f_serverlist},
+      {"setbufvar",    3, 3, f_setbufvar},
+--- 7213,7223 ----
+      {"repeat",               2, 2, f_repeat},
+      {"resolve",              1, 1, f_resolve},
+      {"reverse",              1, 1, f_reverse},
+!     {"search",               1, 4, f_search},
+      {"searchdecl",   1, 3, f_searchdecl},
+!     {"searchpair",   3, 7, f_searchpair},
+!     {"searchpairpos",        3, 7, f_searchpairpos},
+!     {"searchpos",    1, 4, f_searchpos},
+      {"server2client",        2, 2, f_server2client},
+      {"serverlist",   0, 0, f_serverlist},
+      {"setbufvar",    3, 3, f_setbufvar},
+***************
+*** 14020,14025 ****
+--- 14020,14029 ----
+      int              dir;
+      int              retval = 0;     /* default: FAIL */
+      long     lnum_stop = 0;
++     proftime_T       tm;
++ #ifdef FEAT_RELTIME
++     long     time_limit = 0;
++ #endif
+      int              options = SEARCH_KEEP;
+      int              subpatnum;
+  
+***************
+*** 14033,14047 ****
+      if (flags & SP_END)
+       options |= SEARCH_END;
+  
+!     /* Optional extra argument: line number to stop searching. */
+!     if (argvars[1].v_type != VAR_UNKNOWN
+!          && argvars[2].v_type != VAR_UNKNOWN)
+      {
+       lnum_stop = get_tv_number_chk(&argvars[2], NULL);
+       if (lnum_stop < 0)
+           goto theend;
+      }
+  
+      /*
+       * This function does not accept SP_REPEAT and SP_RETCOUNT flags.
+       * Check to make sure only those flags are set.
+--- 14037,14063 ----
+      if (flags & SP_END)
+       options |= SEARCH_END;
+  
+!     /* Optional arguments: line number to stop searching and timeout. */
+!     if (argvars[1].v_type != VAR_UNKNOWN && argvars[2].v_type != VAR_UNKNOWN)
+      {
+       lnum_stop = get_tv_number_chk(&argvars[2], NULL);
+       if (lnum_stop < 0)
+           goto theend;
++ #ifdef FEAT_RELTIME
++      if (argvars[3].v_type != VAR_UNKNOWN)
++      {
++          time_limit = get_tv_number_chk(&argvars[3], NULL);
++          if (time_limit < 0)
++              goto theend;
++      }
++ #endif
+      }
+  
++ #ifdef FEAT_RELTIME
++     /* Set the time limit, if there is one. */
++     profile_setlimit(time_limit, &tm);
++ #endif
++ 
+      /*
+       * This function does not accept SP_REPEAT and SP_RETCOUNT flags.
+       * Check to make sure only those flags are set.
+***************
+*** 14057,14063 ****
+  
+      pos = save_cursor = curwin->w_cursor;
+      subpatnum = searchit(curwin, curbuf, &pos, dir, pat, 1L,
+!                                   options, RE_SEARCH, (linenr_T)lnum_stop);
+      if (subpatnum != FAIL)
+      {
+       if (flags & SP_SUBPAT)
+--- 14073,14079 ----
+  
+      pos = save_cursor = curwin->w_cursor;
+      subpatnum = searchit(curwin, curbuf, &pos, dir, pat, 1L,
+!                              options, RE_SEARCH, (linenr_T)lnum_stop, &tm);
+      if (subpatnum != FAIL)
+      {
+       if (flags & SP_SUBPAT)
+***************
+*** 14147,14152 ****
+--- 14163,14169 ----
+      char_u   nbuf3[NUMBUFLEN];
+      int              retval = 0;             /* default: FAIL */
+      long     lnum_stop = 0;
++     long     time_limit = 0;
+  
+      /* Get the three pattern arguments: start, middle, end. */
+      spat = get_tv_string_chk(&argvars[0]);
+***************
+*** 14182,14194 ****
+           lnum_stop = get_tv_number_chk(&argvars[5], NULL);
+           if (lnum_stop < 0)
+               goto theend;
+       }
+      }
+      if (skip == NULL)
+       goto theend;        /* type error */
+  
+      retval = do_searchpair(spat, mpat, epat, dir, skip, flags,
+!                                                      match_pos, lnum_stop);
+  
+  theend:
+      p_ws = save_p_ws;
+--- 14199,14219 ----
+           lnum_stop = get_tv_number_chk(&argvars[5], NULL);
+           if (lnum_stop < 0)
+               goto theend;
++ #ifdef FEAT_RELTIME
++          if (argvars[6].v_type != VAR_UNKNOWN)
++          {
++              time_limit = get_tv_number_chk(&argvars[6], NULL);
++              if (time_limit < 0)
++                  goto theend;
++          }
++ #endif
+       }
+      }
+      if (skip == NULL)
+       goto theend;        /* type error */
+  
+      retval = do_searchpair(spat, mpat, epat, dir, skip, flags,
+!                                          match_pos, lnum_stop, time_limit);
+  
+  theend:
+      p_ws = save_p_ws;
+***************
+*** 14240,14246 ****
+   * Returns 0 or -1 for no match,
+   */
+      long
+! do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos, lnum_stop)
+      char_u   *spat;      /* start pattern */
+      char_u   *mpat;      /* middle pattern */
+      char_u   *epat;      /* end pattern */
+--- 14265,14272 ----
+   * Returns 0 or -1 for no match,
+   */
+      long
+! do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos,
+!                                                      lnum_stop, time_limit)
+      char_u   *spat;      /* start pattern */
+      char_u   *mpat;      /* middle pattern */
+      char_u   *epat;      /* end pattern */
+***************
+*** 14249,14254 ****
+--- 14275,14281 ----
+      int              flags;      /* SP_SETPCMARK and other SP_ values */
+      pos_T    *match_pos;
+      linenr_T lnum_stop;  /* stop at this line if not zero */
++     long     time_limit; /* stop after this many msec */
+  {
+      char_u   *save_cpo;
+      char_u   *pat, *pat2 = NULL, *pat3 = NULL;
+***************
+*** 14263,14273 ****
+--- 14290,14306 ----
+      int              nest = 1;
+      int              err;
+      int              options = SEARCH_KEEP;
++     proftime_T       tm;
+  
+      /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
+      save_cpo = p_cpo;
+      p_cpo = (char_u *)"";
+  
++ #ifdef FEAT_RELTIME
++     /* Set the time limit, if there is one. */
++     profile_setlimit(time_limit, &tm);
++ #endif
++ 
+      /* Make two search patterns: start/end (pat2, for in nested pairs) and
+       * start/middle/end (pat3, for the top pair). */
+      pat2 = alloc((unsigned)(STRLEN(spat) + STRLEN(epat) + 15));
+***************
+*** 14291,14297 ****
+      for (;;)
+      {
+       n = searchit(curwin, curbuf, &pos, dir, pat, 1L,
+!                                             options, RE_SEARCH, lnum_stop);
+       if (n == FAIL || (firstpos.lnum != 0 && equalpos(pos, firstpos)))
+           /* didn't find it or found the first match again: FAIL */
+           break;
+--- 14324,14330 ----
+      for (;;)
+      {
+       n = searchit(curwin, curbuf, &pos, dir, pat, 1L,
+!                                         options, RE_SEARCH, lnum_stop, &tm);
+       if (n == FAIL || (firstpos.lnum != 0 && equalpos(pos, firstpos)))
+           /* didn't find it or found the first match again: FAIL */
+           break;
+*** ../vim-7.1.210/src/ex_cmds2.c      Fri Jan  4 16:00:10 2008
+--- src/ex_cmds2.c     Sun Jan  6 18:22:28 2008
+***************
+*** 895,913 ****
+      sprintf(buf, "%10.6lf", (double)tm->QuadPart / (double)fr.QuadPart);
+  # else
+      sprintf(buf, "%3ld.%06ld", (long)tm->tv_sec, (long)tm->tv_usec);
+! #endif
+      return buf;
+  }
+  
+! # endif  /* FEAT_PROFILE || FEAT_RELTIME */
+  
+- # if defined(FEAT_PROFILE) || defined(PROTO)
+  /*
+!  * Functions for profiling.
+   */
+! static void script_do_profile __ARGS((scriptitem_T *si));
+! static void script_dump_profile __ARGS((FILE *fd));
+! static proftime_T prof_wait_time;
+  
+  /*
+   * Set the time in "tm" to zero.
+--- 895,955 ----
+      sprintf(buf, "%10.6lf", (double)tm->QuadPart / (double)fr.QuadPart);
+  # else
+      sprintf(buf, "%3ld.%06ld", (long)tm->tv_sec, (long)tm->tv_usec);
+! # endif
+      return buf;
+  }
+  
+! /*
+!  * Put the time "msec" past now in "tm".
+!  */
+!     void
+! profile_setlimit(msec, tm)
+!     long     msec;
+!     proftime_T       *tm;
+! {
+!     if (msec <= 0)   /* no limit */
+!      profile_zero(tm);
+!     else
+!     {
+! # ifdef WIN3264
+!      LARGE_INTEGER   fr;
+! 
+!      QueryPerformanceCounter(tm);
+!      QueryPerformanceFrequency(&fr);
+!      tm->QuadPart +=  (double)msec / 1000.0 * (double)fr.QuadPart;
+! # else
+!      long        usec;
+! 
+!      gettimeofday(tm, NULL);
+!      usec = (long)tm->tv_usec + (long)msec * 1000;
+!      tm->tv_usec = usec % 1000000L;
+!      tm->tv_sec += usec / 1000000L;
+! # endif
+!     }
+! }
+  
+  /*
+!  * Return TRUE if the current time is past "tm".
+   */
+!     int
+! profile_passed_limit(tm)
+!     proftime_T       *tm;
+! {
+!     proftime_T       now;
+! 
+! # ifdef WIN3264
+!     if (tm->QuadPart == 0)  /* timer was not set */
+!      return FALSE;
+!     QueryPerformanceCounter(&now);
+!     return (now.QuadPart > tm->QuadPart);
+! # else
+!     if (tm->tv_sec == 0)    /* timer was not set */
+!      return FALSE;
+!     gettimeofday(&now, NULL);
+!     return (now.tv_sec > tm->tv_sec
+!          || (now.tv_sec == tm->tv_sec && now.tv_usec > tm->tv_usec));
+! # endif
+! }
+  
+  /*
+   * Set the time in "tm" to zero.
+***************
+*** 923,928 ****
+--- 965,980 ----
+      tm->tv_sec = 0;
+  # endif
+  }
++ 
++ # endif  /* FEAT_PROFILE || FEAT_RELTIME */
++ 
++ # if defined(FEAT_PROFILE) || defined(PROTO)
++ /*
++  * Functions for profiling.
++  */
++ static void script_do_profile __ARGS((scriptitem_T *si));
++ static void script_dump_profile __ARGS((FILE *fd));
++ static proftime_T prof_wait_time;
+  
+  /*
+   * Add the time "tm2" to "tm".
+*** ../vim-7.1.210/src/ex_docmd.c      Fri Jan  4 16:00:10 2008
+--- src/ex_docmd.c     Sun Jan  6 16:08:29 2008
+***************
+*** 3979,3985 ****
+                                       *cmd == '?' ? BACKWARD : FORWARD,
+                                       (char_u *)"", 1L,
+                                       SEARCH_MSG + SEARCH_START,
+!                                                    i, (linenr_T)0) != FAIL)
+                               lnum = pos.lnum;
+                           else
+                           {
+--- 3980,3986 ----
+                                       *cmd == '?' ? BACKWARD : FORWARD,
+                                       (char_u *)"", 1L,
+                                       SEARCH_MSG + SEARCH_START,
+!                                              i, (linenr_T)0, NULL) != FAIL)
+                               lnum = pos.lnum;
+                           else
+                           {
+*** ../vim-7.1.210/src/normal.c        Sat Jan  5 13:34:01 2008
+--- src/normal.c       Sun Jan  6 16:08:54 2008
+***************
+*** 4194,4200 ****
+      for (;;)
+      {
+       t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD,
+!                                pat, 1L, searchflags, RE_LAST, (linenr_T)0);
+       if (curwin->w_cursor.lnum >= old_pos.lnum)
+           t = FAIL;   /* match after start is failure too */
+  
+--- 4194,4200 ----
+      for (;;)
+      {
+       t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD,
+!                          pat, 1L, searchflags, RE_LAST, (linenr_T)0, NULL);
+       if (curwin->w_cursor.lnum >= old_pos.lnum)
+           t = FAIL;   /* match after start is failure too */
+  
+*** ../vim-7.1.210/src/proto/eval.pro  Sun May  6 15:18:09 2007
+--- src/proto/eval.pro Sun Jan  6 15:55:47 2008
+***************
+*** 54,60 ****
+  long get_dict_number __ARGS((dict_T *d, char_u *key));
+  char_u *get_function_name __ARGS((expand_T *xp, int idx));
+  char_u *get_expr_name __ARGS((expand_T *xp, int idx));
+! long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop));
+  void set_vim_var_nr __ARGS((int idx, long val));
+  long get_vim_var_nr __ARGS((int idx));
+  char_u *get_vim_var_str __ARGS((int idx));
+--- 54,60 ----
+  long get_dict_number __ARGS((dict_T *d, char_u *key));
+  char_u *get_function_name __ARGS((expand_T *xp, int idx));
+  char_u *get_expr_name __ARGS((expand_T *xp, int idx));
+! long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit));
+  void set_vim_var_nr __ARGS((int idx, long val));
+  long get_vim_var_nr __ARGS((int idx));
+  char_u *get_vim_var_str __ARGS((int idx));
+*** ../vim-7.1.210/src/proto/ex_cmds2.pro      Sat May  5 20:21:13 2007
+--- src/proto/ex_cmds2.pro     Sun Jan  6 16:42:24 2008
+***************
+*** 14,19 ****
+--- 14,21 ----
+  void profile_end __ARGS((proftime_T *tm));
+  void profile_sub __ARGS((proftime_T *tm, proftime_T *tm2));
+  char *profile_msg __ARGS((proftime_T *tm));
++ void profile_setlimit __ARGS((long msec, proftime_T *tm));
++ int profile_passed_limit __ARGS((proftime_T *tm));
+  void profile_zero __ARGS((proftime_T *tm));
+  void profile_add __ARGS((proftime_T *tm, proftime_T *tm2));
+  void profile_self __ARGS((proftime_T *self, proftime_T *total, proftime_T *children));
+*** ../vim-7.1.210/src/proto/search.pro        Wed Aug  8 22:48:16 2007
+--- src/proto/search.pro       Sun Jan  6 16:11:53 2008
+***************
+*** 10,16 ****
+  void reset_search_dir __ARGS((void));
+  void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
+  void last_pat_prog __ARGS((regmmatch_T *regmatch));
+! int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum));
+  int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options));
+  int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
+  int searchc __ARGS((cmdarg_T *cap, int t_cmd));
+--- 10,16 ----
+  void reset_search_dir __ARGS((void));
+  void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
+  void last_pat_prog __ARGS((regmmatch_T *regmatch));
+! int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum, proftime_T *tm));
+  int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options));
+  int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
+  int searchc __ARGS((cmdarg_T *cap, int t_cmd));
+*** ../vim-7.1.210/src/search.c        Tue Jan  1 15:42:45 2008
+--- src/search.c       Sun Jan  6 18:23:37 2008
+***************
+*** 494,501 ****
+   * When FEAT_EVAL is defined, returns the index of the first matching
+   * subpattern plus one; one if there was none.
+   */
+      int
+! searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum)
+      win_T    *win;           /* window to search in; can be NULL for a
+                                  buffer without a window! */
+      buf_T    *buf;
+--- 494,502 ----
+   * When FEAT_EVAL is defined, returns the index of the first matching
+   * subpattern plus one; one if there was none.
+   */
++ /*ARGSUSED*/
+      int
+! searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
+      win_T    *win;           /* window to search in; can be NULL for a
+                                  buffer without a window! */
+      buf_T    *buf;
+***************
+*** 506,511 ****
+--- 507,513 ----
+      int              options;
+      int              pat_use;        /* which pattern to use when "pat" is empty */
+      linenr_T stop_lnum;      /* stop after this line number when != 0 */
++     proftime_T       *tm;            /* timeout limit or NULL */
+  {
+      int              found;
+      linenr_T lnum;           /* no init to shut up Apollo cc */
+***************
+*** 594,599 ****
+--- 596,606 ----
+               if (stop_lnum != 0 && (dir == FORWARD
+                                      ? lnum > stop_lnum : lnum < stop_lnum))
+                   break;
++ #ifdef FEAT_RELTIME
++              /* Stop after passing the "tm" time limit. */
++              if (tm != NULL && profile_passed_limit(tm))
++                  break;
++ #endif
+  
+               /*
+                * Look for a match somewhere in line "lnum".
+***************
+*** 1249,1255 ****
+                      (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS
+                       + SEARCH_MSG + SEARCH_START
+                       + ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))),
+!              RE_LAST, (linenr_T)0);
+  
+       if (dircp != NULL)
+           *dircp = dirc;      /* restore second '/' or '?' for normal_cmd() */
+--- 1256,1262 ----
+                      (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS
+                       + SEARCH_MSG + SEARCH_START
+                       + ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))),
+!              RE_LAST, (linenr_T)0, NULL);
+  
+       if (dircp != NULL)
+           *dircp = dirc;      /* restore second '/' or '?' for normal_cmd() */
+***************
+*** 3780,3786 ****
+       if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|\\_s\\=>\\)",
+                   (char_u *)"",
+                   (char_u *)"</[^>]*>", BACKWARD, (char_u *)"", 0,
+!                                                    NULL, (linenr_T)0) <= 0)
+       {
+           curwin->w_cursor = old_pos;
+           goto theend;
+--- 3787,3793 ----
+       if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|\\_s\\=>\\)",
+                   (char_u *)"",
+                   (char_u *)"</[^>]*>", BACKWARD, (char_u *)"", 0,
+!                                                NULL, (linenr_T)0, 0L) <= 0)
+       {
+           curwin->w_cursor = old_pos;
+           goto theend;
+***************
+*** 3814,3820 ****
+      sprintf((char *)epat, "</%.*s>\\c", len, p);
+  
+      r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+!                                                     0, NULL, (linenr_T)0);
+  
+      vim_free(spat);
+      vim_free(epat);
+--- 3821,3827 ----
+      sprintf((char *)epat, "</%.*s>\\c", len, p);
+  
+      r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+!                                                  0, NULL, (linenr_T)0, 0L);
+  
+      vim_free(spat);
+      vim_free(epat);
+*** ../vim-7.1.210/src/version.c       Sun Jan  6 17:18:16 2008
+--- src/version.c      Sun Jan  6 20:00:03 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     211,
+  /**/
+
+-- 
+No letters of the alphabet were harmed in the creation of this message.
+
+ /// 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    ///
diff --git a/7.1.212 b/7.1.212
new file mode 100644 (file)
index 0000000..a9aa7f5
--- /dev/null
+++ b/7.1.212
@@ -0,0 +1,47 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.212
+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.1.212
+Problem:    Accessing a byte before a line.
+Solution:   Check that the column is 1 or more. (Dominuque Pelle)
+Files:     src/edit.c
+
+
+*** ../vim-7.1.211/src/edit.c  Sun Jan  6 20:05:36 2008
+--- src/edit.c Mon Jan  7 22:31:36 2008
+***************
+*** 8452,8457 ****
+--- 8452,8458 ----
+       if (       mode == BACKSPACE_CHAR
+               && ((p_sta && in_indent)
+                   || (curbuf->b_p_sts != 0
++                      && curwin->w_cursor.col > 0
+                       && (*(ml_get_cursor() - 1) == TAB
+                           || (*(ml_get_cursor() - 1) == ' '
+                               && (!*inserted_space_p
+*** ../vim-7.1.211/src/version.c       Sun Jan  6 20:05:36 2008
+--- src/version.c      Wed Jan  9 10:11:49 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     212,
+  /**/
+
+-- 
+CRONE:  Who sent you?
+ARTHUR: The Knights Who Say Ni!
+CRONE:  Aaaagh!  (she looks around in rear) No!  We have no shrubberies here.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.213 b/7.1.213
new file mode 100644 (file)
index 0000000..aee3248
--- /dev/null
+++ b/7.1.213
@@ -0,0 +1,57 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.213
+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.1.213
+Problem:    A ":tabedit" command that results in the "swap file exists" dialog
+           and selecting "abort" doesn't close the new tab. (Al Budden)
+Solution:   Pass "old_curwin" to do_exedit().
+Files:     src/ex_docmd.c
+
+
+*** ../vim-7.1.212/src/ex_docmd.c      Sun Jan  6 20:05:36 2008
+--- src/ex_docmd.c     Wed Jan  9 20:11:13 2008
+***************
+*** 7126,7132 ****
+                        : eap->addr_count == 0 ? 0
+                                              : (int)eap->line2 + 1) != FAIL)
+       {
+!          do_exedit(eap, NULL);
+  
+           /* set the alternate buffer for the window we came from */
+           if (curwin != old_curwin
+--- 7127,7133 ----
+                        : eap->addr_count == 0 ? 0
+                                              : (int)eap->line2 + 1) != FAIL)
+       {
+!          do_exedit(eap, old_curwin);
+  
+           /* set the alternate buffer for the window we came from */
+           if (curwin != old_curwin
+*** ../vim-7.1.212/src/version.c       Wed Jan  9 10:13:24 2008
+--- src/version.c      Wed Jan  9 20:29:09 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     213,
+  /**/
+
+-- 
+Q: What do you call a fish without an eye?
+A: fsh!
+Q: What do you call a deer with no eyes?
+A: no eye deer.
+Q: What do you call a deer with no eyes and no legs?
+A: still no eye deer.
+
+ /// 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    ///
diff --git a/7.1.214 b/7.1.214
new file mode 100644 (file)
index 0000000..8378667
--- /dev/null
+++ b/7.1.214
@@ -0,0 +1,266 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.214
+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.1.214
+Problem:    ":1s/g\n\zs1//" deletes characters from the first line. (A Politz)
+Solution:   Start replacing in the line where the match starts.
+Files:     src/ex_cmds.c
+
+
+*** ../vim-7.1.213/src/ex_cmds.c       Fri Jan  4 14:52:14 2008
+--- src/ex_cmds.c      Wed Jan  9 22:32:26 2008
+***************
+*** 4200,4206 ****
+      linenr_T old_line_count = curbuf->b_ml.ml_line_count;
+      linenr_T line2;
+      long     nmatch;                 /* number of lines in match */
+-     linenr_T sub_firstlnum;          /* nr of first sub line */
+      char_u   *sub_firstline;         /* allocated copy of first sub line */
+      int              endcolumn = FALSE;      /* cursor in last column when done */
+      pos_T    old_cursor = curwin->w_cursor;
+--- 4200,4205 ----
+***************
+*** 4447,4453 ****
+  #endif
+               ); ++lnum)
+      {
+-      sub_firstlnum = lnum;
+       nmatch = vim_regexec_multi(&regmatch, curwin, curbuf, lnum, (colnr_T)0);
+       if (nmatch)
+       {
+--- 4446,4451 ----
+***************
+*** 4463,4468 ****
+--- 4461,4467 ----
+           long        nmatch_tl = 0;  /* nr of lines matched below lnum */
+           int         do_again;       /* do it again after joining lines */
+           int         skip_match = FALSE;
++          linenr_T    sub_firstlnum;  /* nr of first sub line */
+  
+           /*
+            * The new text is build up step by step, to avoid too much
+***************
+*** 4482,4489 ****
+            *                  far.
+            * new_end          The new text, where to append new text.
+            *
+!           * lnum             The line number where we were looking for the
+!           *                  first match in the old line.
+            * sub_firstlnum    The line number in the buffer where to look
+            *                  for a match.  Can be different from "lnum"
+            *                  when the pattern or substitute string contains
+--- 4481,4490 ----
+            *                  far.
+            * new_end          The new text, where to append new text.
+            *
+!           * lnum             The line number where we found the start of
+!           *                  the match.  Can be below the line we searched
+!           *                  when there is a \n before a \zs in the
+!           *                  pattern.
+            * sub_firstlnum    The line number in the buffer where to look
+            *                  for a match.  Can be different from "lnum"
+            *                  when the pattern or substitute string contains
+***************
+*** 4507,4518 ****
+            * updating the screen or handling a multi-line match.  The "old_"
+            * pointers point into this copy.
+            */
+!          sub_firstline = vim_strsave(ml_get(sub_firstlnum));
+!          if (sub_firstline == NULL)
+!          {
+!              vim_free(new_start);
+!              goto outofmem;
+!          }
+           copycol = 0;
+           matchcol = 0;
+  
+--- 4508,4514 ----
+            * updating the screen or handling a multi-line match.  The "old_"
+            * pointers point into this copy.
+            */
+!          sub_firstlnum = lnum;
+           copycol = 0;
+           matchcol = 0;
+  
+***************
+*** 4533,4538 ****
+--- 4529,4556 ----
+            */
+           for (;;)
+           {
++              /* Advance "lnum" to the line where the match starts.  The
++               * match does not start in the first line when there is a line
++               * break before \zs. */
++              if (regmatch.startpos[0].lnum > 0)
++              {
++                  lnum += regmatch.startpos[0].lnum;
++                  sub_firstlnum += regmatch.startpos[0].lnum;
++                  nmatch -= regmatch.startpos[0].lnum;
++                  vim_free(sub_firstline);
++                  sub_firstline = NULL;
++              }
++ 
++              if (sub_firstline == NULL)
++              {
++                  sub_firstline = vim_strsave(ml_get(sub_firstlnum));
++                  if (sub_firstline == NULL)
++                  {
++                      vim_free(new_start);
++                      goto outofmem;
++                  }
++              }
++ 
+               /* Save the line number of the last change for the final
+                * cursor position (just like Vi). */
+               curwin->w_cursor.lnum = lnum;
+***************
+*** 4638,4644 ****
+                           temp = RedrawingDisabled;
+                           RedrawingDisabled = 0;
+  
+!                          search_match_lines = regmatch.endpos[0].lnum;
+                           search_match_endcol = regmatch.endpos[0].col;
+                           highlight_match = TRUE;
+  
+--- 4656,4663 ----
+                           temp = RedrawingDisabled;
+                           RedrawingDisabled = 0;
+  
+!                          search_match_lines = regmatch.endpos[0].lnum
+!                                                - regmatch.startpos[0].lnum;
+                           search_match_endcol = regmatch.endpos[0].col;
+                           highlight_match = TRUE;
+  
+***************
+*** 4749,4755 ****
+                * 3. substitute the string.
+                */
+               /* get length of substitution part */
+!              sublen = vim_regsub_multi(&regmatch, sub_firstlnum,
+                                   sub, sub_firstline, FALSE, p_magic, TRUE);
+  
+               /* When the match included the "$" of the last line it may
+--- 4768,4775 ----
+                * 3. substitute the string.
+                */
+               /* get length of substitution part */
+!              sublen = vim_regsub_multi(&regmatch,
+!                                  sub_firstlnum - regmatch.startpos[0].lnum,
+                                   sub, sub_firstline, FALSE, p_magic, TRUE);
+  
+               /* When the match included the "$" of the last line it may
+***************
+*** 4819,4825 ****
+               mch_memmove(new_end, sub_firstline + copycol, (size_t)i);
+               new_end += i;
+  
+!              (void)vim_regsub_multi(&regmatch, sub_firstlnum,
+                                          sub, new_end, TRUE, p_magic, TRUE);
+               sub_nsubs++;
+               did_sub = TRUE;
+--- 4839,4846 ----
+               mch_memmove(new_end, sub_firstline + copycol, (size_t)i);
+               new_end += i;
+  
+!              (void)vim_regsub_multi(&regmatch,
+!                                  sub_firstlnum - regmatch.startpos[0].lnum,
+                                          sub, new_end, TRUE, p_magic, TRUE);
+               sub_nsubs++;
+               did_sub = TRUE;
+***************
+*** 4908,4917 ****
+  skip:
+               /* We already know that we did the last subst when we are at
+                * the end of the line, except that a pattern like
+!               * "bar\|\nfoo" may match at the NUL. */
+               lastone = (skip_match
+                       || got_int
+                       || got_quit
+                       || !(do_all || do_again)
+                       || (sub_firstline[matchcol] == NUL && nmatch <= 1
+                                        && !re_multiline(regmatch.regprog)));
+--- 4929,4941 ----
+  skip:
+               /* We already know that we did the last subst when we are at
+                * the end of the line, except that a pattern like
+!               * "bar\|\nfoo" may match at the NUL.  "lnum" can be below
+!               * "line2" when there is a \zs in the pattern after a line
+!               * break. */
+               lastone = (skip_match
+                       || got_int
+                       || got_quit
++                      || lnum > line2
+                       || !(do_all || do_again)
+                       || (sub_firstline[matchcol] == NUL && nmatch <= 1
+                                        && !re_multiline(regmatch.regprog)));
+***************
+*** 4926,4937 ****
+                * When asking the user we like to show the already replaced
+                * text, but don't do it when "\<@=" or "\<@!" is used, it
+                * changes what matches.
+                */
+               if (lastone
+                       || (do_ask && !re_lookbehind(regmatch.regprog))
+                       || nmatch_tl > 0
+                       || (nmatch = vim_regexec_multi(&regmatch, curwin,
+!                                     curbuf, sub_firstlnum, matchcol)) == 0)
+               {
+                   if (new_start != NULL)
+                   {
+--- 4950,4964 ----
+                * When asking the user we like to show the already replaced
+                * text, but don't do it when "\<@=" or "\<@!" is used, it
+                * changes what matches.
++               * When the match starts below where we start searching also
++               * need to replace the line first (using \zs after \n).
+                */
+               if (lastone
+                       || (do_ask && !re_lookbehind(regmatch.regprog))
+                       || nmatch_tl > 0
+                       || (nmatch = vim_regexec_multi(&regmatch, curwin,
+!                                     curbuf, sub_firstlnum, matchcol)) == 0
+!                      || regmatch.startpos[0].lnum > 0)
+               {
+                   if (new_start != NULL)
+                   {
+***************
+*** 5001,5007 ****
+--- 5028,5041 ----
+                    * 5. break if there isn't another match in this line
+                    */
+                   if (nmatch <= 0)
++                  {
++                      /* If the match found didn't start where we were
++                       * searching, do the next search in the line where we
++                       * found the match. */
++                      if (nmatch == -1)
++                          lnum -= regmatch.startpos[0].lnum;
+                       break;
++                  }
+               }
+  
+               line_breakcheck();
+*** ../vim-7.1.213/src/version.c       Wed Jan  9 20:29:51 2008
+--- src/version.c      Wed Jan  9 22:37:47 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     214,
+  /**/
+
+-- 
+Q: What's orange and sounds like a parrot?
+A: A carrot
+
+ /// 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    ///
diff --git a/7.1.215 b/7.1.215
new file mode 100644 (file)
index 0000000..ea4a830
--- /dev/null
+++ b/7.1.215
@@ -0,0 +1,198 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.215
+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.1.215
+Problem:    It is difficult to figure out what syntax items are nested at a
+           certain position.
+Solution:   Add the synstack() function.
+Files:     runtime/doc/eval.txt, src/eval.c, src/proto/syntax.pro,
+           src/syntax.c
+
+
+*** ../vim-7.1.214/runtime/doc/eval.txt        Sun Jan  6 20:05:36 2008
+--- runtime/doc/eval.txt       Thu Jan 10 22:20:31 2008
+***************
+*** 1,4 ****
+! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 06
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 10
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 1786,1791 ****
+--- 1786,1792 ----
+  synIDattr( {synID}, {what} [, {mode}])
+                               String  attribute {what} of syntax ID {synID}
+  synIDtrans( {synID})         Number  translated syntax ID of {synID}
++ synstack({lnum}, {col})              List    stack of syntax IDs at {lnum} and {col}
+  system( {expr} [, {input}])  String  output of shell command/filter {expr}
+  tabpagebuflist( [{arg}])     List    list of buffer numbers in tab page
+  tabpagenr( [{arg}])          Number  number of current or last tab page
+***************
+*** 4962,4967 ****
+--- 4966,4989 ----
+               highlight the character.  Highlight links given with
+               ":highlight link" are followed.
+  
++ synstack({lnum}, {col})                                      *synstack()*
++              Return a |List|, which is the stack of syntax items at the
++              position {lnum} and {col} in the current window.  Each item in
++              the List is an ID like what |synID()| returns.
++              The stack is the situation in between the character at "col"
++              and the next character.  Note that a region of only one
++              character will not show up, it only exists inside that
++              character, not in between characters.
++              The first item in the List is the outer region, following are
++              items contained in that one.  The last one is what |synID()|
++              returns, unless not the whole item is highlighted or it is a
++              transparent item.
++              This function is useful for debugging a syntax file.
++              Example that shows the syntax stack under the cursor: >
++                      for id in synstack(line("."), col("."))
++                         echo synIDattr(id, "name")
++                      endfor
++ 
+  system({expr} [, {input}])                           *system()* *E677*
+               Get the output of the shell command {expr}.
+               When {input} is given, this string is written to a file and
+*** ../vim-7.1.214/src/eval.c  Sun Jan  6 20:05:36 2008
+--- src/eval.c Wed Jan  9 13:42:56 2008
+***************
+*** 651,656 ****
+--- 651,657 ----
+  static void f_synID __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_synIDattr __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_synIDtrans __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_synstack __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_system __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_tabpagebuflist __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_tabpagenr __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 7252,7257 ****
+--- 7253,7259 ----
+      {"synID",                3, 3, f_synID},
+      {"synIDattr",    2, 3, f_synIDattr},
+      {"synIDtrans",   1, 1, f_synIDtrans},
++     {"synstack",     2, 2, f_synstack},
+      {"system",               1, 2, f_system},
+      {"tabpagebuflist",       0, 1, f_tabpagebuflist},
+      {"tabpagenr",    0, 1, f_tabpagenr},
+***************
+*** 15843,15848 ****
+--- 15845,15890 ----
+       id = 0;
+  
+      rettv->vval.v_number = id;
++ }
++ 
++ /*
++  * "synstack(lnum, col)" function
++  */
++ /*ARGSUSED*/
++     static void
++ f_synstack(argvars, rettv)
++     typval_T *argvars;
++     typval_T *rettv;
++ {
++ #ifdef FEAT_SYN_HL
++     long     lnum;
++     long     col;
++     int              i;
++     int              id;
++ #endif
++ 
++     rettv->v_type = VAR_LIST;
++     rettv->vval.v_list = NULL;
++ 
++ #ifdef FEAT_SYN_HL
++     lnum = get_tv_lnum(argvars);             /* -1 on type error */
++     col = get_tv_number(&argvars[1]) - 1;    /* -1 on type error */
++ 
++     if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
++          && col >= 0 && col < (long)STRLEN(ml_get(lnum))
++          && rettv_list_alloc(rettv) != FAIL)
++     {
++      (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL);
++      for (i = 0; ; ++i)
++      {
++          id = syn_get_stack_item(i);
++          if (id < 0)
++              break;
++          if (list_append_number(rettv->vval.v_list, id) == FAIL)
++              break;
++      }
++     }
++ #endif
+  }
+  
+  /*
+*** ../vim-7.1.214/src/proto/syntax.pro        Tue Jul 24 14:32:44 2007
+--- src/proto/syntax.pro       Wed Jan  9 13:38:20 2008
+***************
+*** 13,18 ****
+--- 13,19 ----
+  void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg));
+  char_u *get_syntax_name __ARGS((expand_T *xp, int idx));
+  int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp));
++ int syn_get_stack_item __ARGS((int i));
+  int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
+  void init_highlight __ARGS((int both, int reset));
+  int load_colors __ARGS((char_u *name));
+*** ../vim-7.1.214/src/syntax.c        Sun Oct  7 15:21:31 2007
+--- src/syntax.c       Wed Jan  9 15:17:47 2008
+***************
+*** 6104,6109 ****
+--- 6102,6123 ----
+  
+      return (trans ? current_trans_id : current_id);
+  }
++ 
++ #if defined(FEAT_EVAL) || defined(PROTO)
++ /*
++  * Return the syntax ID at position "i" in the current stack.
++  * The caller must have called syn_get_id() before to fill the stack.
++  * Returns -1 when "i" is out of range.
++  */
++     int
++ syn_get_stack_item(i)
++     int i;
++ {
++     if (i >= current_state.ga_len )
++      return -1;
++     return CUR_STATE(i).si_id;
++ }
++ #endif
+  
+  #if defined(FEAT_FOLDING) || defined(PROTO)
+  /*
+*** ../vim-7.1.214/src/version.c       Wed Jan  9 22:39:55 2008
+--- src/version.c      Thu Jan 10 22:17:38 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     215,
+  /**/
+
+-- 
+TALL KNIGHT: We are now no longer the Knights Who Say Ni!
+ONE KNIGHT:  Ni!
+OTHERS:      Sh!
+ONE KNIGHT:  (whispers) Sorry.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.216 b/7.1.216
new file mode 100644 (file)
index 0000000..392d5d5
--- /dev/null
+++ b/7.1.216
@@ -0,0 +1,55 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.216
+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.1.216
+Problem:    Variants of --remote-tab are not mentioned for "vim --help".
+Solution:   Display optional -wait and -silent.
+Files:     src/main.c
+
+
+*** ../vim-7.1.215/src/main.c  Tue Sep 25 17:54:41 2007
+--- src/main.c Sun Dec 30 15:09:11 2007
+***************
+*** 3081,3087 ****
+      main_msg(_("--remote-wait <files>  As --remote but wait for files to have been edited"));
+      main_msg(_("--remote-wait-silent <files>  Same, don't complain if there is no server"));
+  # ifdef FEAT_WINDOWS
+!     main_msg(_("--remote-tab <files>  As --remote but open tab page for each file"));
+  # endif
+      main_msg(_("--remote-send <keys>\tSend <keys> to a Vim server and exit"));
+      main_msg(_("--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"));
+--- 3081,3087 ----
+      main_msg(_("--remote-wait <files>  As --remote but wait for files to have been edited"));
+      main_msg(_("--remote-wait-silent <files>  Same, don't complain if there is no server"));
+  # ifdef FEAT_WINDOWS
+!     main_msg(_("--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"));
+  # endif
+      main_msg(_("--remote-send <keys>\tSend <keys> to a Vim server and exit"));
+      main_msg(_("--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"));
+*** ../vim-7.1.215/src/version.c       Thu Jan 10 22:23:22 2008
+--- src/version.c      Fri Jan 11 20:25:14 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     216,
+  /**/
+
+-- 
+TIM: But follow only if you are men of valour.  For the entrance to this cave
+     is guarded by a monster, a creature so foul and cruel that no man yet has
+     fought with it and lived.  Bones of full fifty men lie strewn about its
+     lair ...
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.217 b/7.1.217
new file mode 100644 (file)
index 0000000..de40e64
--- /dev/null
+++ b/7.1.217
@@ -0,0 +1,228 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.217
+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.1.217
+Problem:    The "help-tags" tag may be missing from runtime/doc/tags when it
+           was generated during "make install".
+Solution:   Add the "++t" argument to ":helptags" to force adding the tag.
+Files:     runtime/doc/Makefile, runtime/doc/various.txt, src/ex_cmds.c,
+           src/ex_cmds.h
+
+
+*** ../vim-7.1.216/runtime/doc/Makefile        Sat May  5 19:14:15 2007
+--- runtime/doc/Makefile       Fri Jan 11 20:55:34 2008
+***************
+*** 301,307 ****
+  # Use Vim to generate the tags file.  Can only be used when Vim has been
+  # compiled and installed.  Supports multiple languages.
+  vimtags: $(DOCS)
+!      $(VIMEXE) -u NONE -esX -c "helptags ." -c quit
+  
+  # Use "doctags" to generate the tags file.  Only works for English!
+  tags: doctags $(DOCS)
+--- 301,307 ----
+  # Use Vim to generate the tags file.  Can only be used when Vim has been
+  # compiled and installed.  Supports multiple languages.
+  vimtags: $(DOCS)
+!      $(VIMEXE) -u NONE -esX -c "helptags ++t ." -c quit
+  
+  # Use "doctags" to generate the tags file.  Only works for English!
+  tags: doctags $(DOCS)
+*** ../vim-7.1.216/runtime/doc/various.txt     Sat May 12 17:05:26 2007
+--- runtime/doc/various.txt    Fri Jan 11 20:45:45 2008
+***************
+*** 1,4 ****
+! *various.txt*   For Vim version 7.1.  Last change: 2007 Jan 14
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *various.txt*   For Vim version 7.1.  Last change: 2008 Jan 11
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 748,754 ****
+  
+                                       *:helpt* *:helptags*
+                               *E154* *E150* *E151* *E152* *E153* *E670*
+! :helpt[ags] {dir}    Generate the help tags file(s) for directory {dir}.
+                       All "*.txt" and "*.??x" files in the directory are
+                       scanned for a help tag definition in between stars.
+                       The "*.??x" files are for translated docs, they
+--- 754,761 ----
+  
+                                       *:helpt* *:helptags*
+                               *E154* *E150* *E151* *E152* *E153* *E670*
+! :helpt[ags] [++t] {dir}
+!                      Generate the help tags file(s) for directory {dir}.
+                       All "*.txt" and "*.??x" files in the directory are
+                       scanned for a help tag definition in between stars.
+                       The "*.??x" files are for translated docs, they
+***************
+*** 756,761 ****
+--- 763,771 ----
+                       The generated tags files are sorted.
+                       When there are duplicates an error message is given.
+                       An existing tags file is silently overwritten.
++                      The optional "++t" argument forces adding the
++                      "help-tags" tag.  This is also done when the {dir} is
++                      equal to $VIMRUNTIME/doc.
+                       To rebuild the help tags in the runtime directory
+                       (requires write permission there): >
+                               :helptags $VIMRUNTIME/doc
+*** ../vim-7.1.216/src/ex_cmds.c       Wed Jan  9 22:39:55 2008
+--- src/ex_cmds.c      Fri Jan 11 20:47:13 2008
+***************
+*** 6091,6097 ****
+  }
+  
+  #if defined(FEAT_EX_EXTRA) || defined(PROTO)
+! static void helptags_one __ARGS((char_u *dir, char_u *ext, char_u *lang));
+  
+  /*
+   * ":helptags"
+--- 6091,6097 ----
+  }
+  
+  #if defined(FEAT_EX_EXTRA) || defined(PROTO)
+! static void helptags_one __ARGS((char_u *dir, char_u *ext, char_u *lang, int add_help_tags));
+  
+  /*
+   * ":helptags"
+***************
+*** 6110,6115 ****
+--- 6110,6123 ----
+      char_u   fname[8];
+      int              filecount;
+      char_u   **files;
++     int              add_help_tags = FALSE;
++ 
++     /* Check for ":helptags ++t {dir}". */
++     if (STRNCMP(eap->arg, "++t", 3) == 0 && vim_iswhite(eap->arg[3]))
++     {
++      add_help_tags = TRUE;
++      eap->arg = skipwhite(eap->arg + 3);
++     }
+  
+      if (!mch_isdir(eap->arg))
+      {
+***************
+*** 6192,6198 ****
+           ext[1] = fname[5];
+           ext[2] = fname[6];
+       }
+!      helptags_one(eap->arg, ext, fname);
+      }
+  
+      ga_clear(&ga);
+--- 6200,6206 ----
+           ext[1] = fname[5];
+           ext[2] = fname[6];
+       }
+!      helptags_one(eap->arg, ext, fname, add_help_tags);
+      }
+  
+      ga_clear(&ga);
+***************
+*** 6200,6214 ****
+  
+  #else
+      /* No language support, just use "*.txt" and "tags". */
+!     helptags_one(eap->arg, (char_u *)".txt", (char_u *)"tags");
+  #endif
+  }
+  
+      static void
+! helptags_one(dir, ext, tagfname)
+!     char_u   *dir;       /* doc directory */
+!     char_u   *ext;       /* suffix, ".txt", ".itx", ".frx", etc. */
+!     char_u   *tagfname;    /* "tags" for English, "tags-it" for Italian. */
+  {
+      FILE     *fd_tags;
+      FILE     *fd;
+--- 6208,6223 ----
+  
+  #else
+      /* No language support, just use "*.txt" and "tags". */
+!     helptags_one(eap->arg, (char_u *)".txt", (char_u *)"tags", add_help_tags);
+  #endif
+  }
+  
+      static void
+! helptags_one(dir, ext, tagfname, add_help_tags)
+!     char_u   *dir;           /* doc directory */
+!     char_u   *ext;           /* suffix, ".txt", ".itx", ".frx", etc. */
+!     char_u   *tagfname;      /* "tags" for English, "tags-fr" for French. */
+!     int              add_help_tags;  /* add "help-tags" tag */
+  {
+      FILE     *fd_tags;
+      FILE     *fd;
+***************
+*** 6259,6268 ****
+      }
+  
+      /*
+!      * If generating tags for "$VIMRUNTIME/doc" add the "help-tags" tag.
+       */
+      ga_init2(&ga, (int)sizeof(char_u *), 100);
+!     if (fullpathcmp((char_u *)"$VIMRUNTIME/doc", dir, FALSE) == FPC_SAME)
+      {
+       if (ga_grow(&ga, 1) == FAIL)
+           got_int = TRUE;
+--- 6268,6279 ----
+      }
+  
+      /*
+!      * If using the "++t" argument or generating tags for "$VIMRUNTIME/doc"
+!      * add the "help-tags" tag.
+       */
+      ga_init2(&ga, (int)sizeof(char_u *), 100);
+!     if (add_help_tags || fullpathcmp((char_u *)"$VIMRUNTIME/doc",
+!                                                    dir, FALSE) == FPC_SAME)
+      {
+       if (ga_grow(&ga, 1) == FAIL)
+           got_int = TRUE;
+*** ../vim-7.1.216/src/ex_cmds.h       Thu Mar  8 11:00:55 2007
+--- src/ex_cmds.h      Fri Jan 11 20:49:18 2008
+***************
+*** 422,428 ****
+  EX(CMD_helpgrep,     "helpgrep",     ex_helpgrep,
+                       EXTRA|NOTRLCOM|NEEDARG),
+  EX(CMD_helptags,     "helptags",     ex_helptags,
+!                      NEEDARG|FILE1|TRLBAR|CMDWIN),
+  EX(CMD_hardcopy,     "hardcopy",     ex_hardcopy,
+                       RANGE|COUNT|EXTRA|TRLBAR|DFLALL|BANG),
+  EX(CMD_highlight,    "highlight",    ex_highlight,
+--- 422,428 ----
+  EX(CMD_helpgrep,     "helpgrep",     ex_helpgrep,
+                       EXTRA|NOTRLCOM|NEEDARG),
+  EX(CMD_helptags,     "helptags",     ex_helptags,
+!                      NEEDARG|FILES|TRLBAR|CMDWIN),
+  EX(CMD_hardcopy,     "hardcopy",     ex_hardcopy,
+                       RANGE|COUNT|EXTRA|TRLBAR|DFLALL|BANG),
+  EX(CMD_highlight,    "highlight",    ex_highlight,
+*** ../vim-7.1.216/src/version.c       Fri Jan 11 20:25:42 2008
+--- src/version.c      Fri Jan 11 20:58:44 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     217,
+  /**/
+
+-- 
+My girlfriend told me I should be more affectionate.
+So I got TWO girlfriends.
+
+ /// 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    ///
diff --git a/7.1.218 b/7.1.218
new file mode 100644 (file)
index 0000000..859f0b7
--- /dev/null
+++ b/7.1.218
@@ -0,0 +1,58 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.218
+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.1.218
+Problem:    A syntax region without a "keepend", containing a region with
+           "extend" could be truncated at the end of the containing region.
+Solution:   Do not call syn_update_ends() when there are no keepend items.
+Files:     src/syntax.c
+
+
+*** ../vim-7.1.217/src/syntax.c        Thu Jan 10 22:23:22 2008
+--- src/syntax.c       Wed Jan  9 15:17:47 2008
+***************
+*** 2495,2501 ****
+               if (current_state.ga_len == 0)
+                   break;
+  
+!              if (had_extend)
+               {
+                   syn_update_ends(FALSE);
+                   if (current_state.ga_len == 0)
+--- 2493,2499 ----
+               if (current_state.ga_len == 0)
+                   break;
+  
+!              if (had_extend && keepend_level >= 0)
+               {
+                   syn_update_ends(FALSE);
+                   if (current_state.ga_len == 0)
+*** ../vim-7.1.217/src/version.c       Fri Jan 11 21:00:49 2008
+--- src/version.c      Fri Jan 11 21:25:46 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     218,
+  /**/
+
+-- 
+The Law of VIM:
+For each member b of the possible behaviour space B of program P, there exists
+a finite time t before which at least one user u in the total user space U of
+program P will request b becomes a member of the allowed behaviour space B'
+(B' <= B).
+In other words: Sooner or later everyone wants everything as an option.
+                                        -- Vince Negri
+
+ /// 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    ///
diff --git a/7.1.219 b/7.1.219
new file mode 100644 (file)
index 0000000..68e4cfa
--- /dev/null
+++ b/7.1.219
@@ -0,0 +1,378 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.219
+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.1.219 (after 7.1.215)
+Problem:    synstack() returns situation after the current character, can't
+           see the state for a one-character region.
+Solution:   Don't update ending states in the requested column.
+Files:     runtime/doc/eval.txt, src/eval.c, src/hardcopy.c,
+           src/proto/syntax.pro, src/screen.c, src/spell.c, src/syntax.c
+
+
+*** ../vim-7.1.218/runtime/doc/eval.txt        Thu Jan 10 22:23:22 2008
+--- runtime/doc/eval.txt       Fri Jan 11 22:04:59 2008
+***************
+*** 1,4 ****
+! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 10
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 11
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 4967,4976 ****
+               Return a |List|, which is the stack of syntax items at the
+               position {lnum} and {col} in the current window.  Each item in
+               the List is an ID like what |synID()| returns.
+-              The stack is the situation in between the character at "col"
+-              and the next character.  Note that a region of only one
+-              character will not show up, it only exists inside that
+-              character, not in between characters.
+               The first item in the List is the outer region, following are
+               items contained in that one.  The last one is what |synID()|
+               returns, unless not the whole item is highlighted or it is a
+--- 4970,4975 ----
+*** ../vim-7.1.218/src/eval.c  Thu Jan 10 22:23:22 2008
+--- src/eval.c Fri Jan 11 21:46:12 2008
+***************
+*** 15725,15731 ****
+  
+      if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
+           && col >= 0 && col < (long)STRLEN(ml_get(lnum)))
+!      id = syn_get_id(curwin, lnum, (colnr_T)col, trans, NULL);
+  #endif
+  
+      rettv->vval.v_number = id;
+--- 15725,15731 ----
+  
+      if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
+           && col >= 0 && col < (long)STRLEN(ml_get(lnum)))
+!      id = syn_get_id(curwin, lnum, (colnr_T)col, trans, NULL, FALSE);
+  #endif
+  
+      rettv->vval.v_number = id;
+***************
+*** 15874,15880 ****
+           && col >= 0 && col < (long)STRLEN(ml_get(lnum))
+           && rettv_list_alloc(rettv) != FAIL)
+      {
+!      (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL);
+       for (i = 0; ; ++i)
+       {
+           id = syn_get_stack_item(i);
+--- 15874,15880 ----
+           && col >= 0 && col < (long)STRLEN(ml_get(lnum))
+           && rettv_list_alloc(rettv) != FAIL)
+      {
+!      (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL, TRUE);
+       for (i = 0; ; ++i)
+       {
+           id = syn_get_stack_item(i);
+*** ../vim-7.1.218/src/hardcopy.c      Thu May 10 20:40:02 2007
+--- src/hardcopy.c     Fri Jan 11 21:46:20 2008
+***************
+*** 876,882 ****
+        */
+       if (psettings->do_syntax)
+       {
+!          id = syn_get_id(curwin, ppos->file_line, col, 1, NULL);
+           if (id > 0)
+               id = syn_get_final_id(id);
+           else
+--- 876,882 ----
+        */
+       if (psettings->do_syntax)
+       {
+!          id = syn_get_id(curwin, ppos->file_line, col, 1, NULL, FALSE);
+           if (id > 0)
+               id = syn_get_final_id(id);
+           else
+*** ../vim-7.1.218/src/proto/syntax.pro        Thu Jan 10 22:23:22 2008
+--- src/proto/syntax.pro       Fri Jan 11 21:54:19 2008
+***************
+*** 4,10 ****
+  void syn_stack_apply_changes __ARGS((buf_T *buf));
+  void syntax_end_parsing __ARGS((linenr_T lnum));
+  int syntax_check_changed __ARGS((linenr_T lnum));
+! int get_syntax_attr __ARGS((colnr_T col, int *can_spell));
+  void syntax_clear __ARGS((buf_T *buf));
+  void ex_syntax __ARGS((exarg_T *eap));
+  int syntax_present __ARGS((buf_T *buf));
+--- 4,10 ----
+  void syn_stack_apply_changes __ARGS((buf_T *buf));
+  void syntax_end_parsing __ARGS((linenr_T lnum));
+  int syntax_check_changed __ARGS((linenr_T lnum));
+! int get_syntax_attr __ARGS((colnr_T col, int *can_spell, int keep_state));
+  void syntax_clear __ARGS((buf_T *buf));
+  void ex_syntax __ARGS((exarg_T *eap));
+  int syntax_present __ARGS((buf_T *buf));
+***************
+*** 12,18 ****
+  void set_context_in_echohl_cmd __ARGS((expand_T *xp, char_u *arg));
+  void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg));
+  char_u *get_syntax_name __ARGS((expand_T *xp, int idx));
+! int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp));
+  int syn_get_stack_item __ARGS((int i));
+  int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
+  void init_highlight __ARGS((int both, int reset));
+--- 12,18 ----
+  void set_context_in_echohl_cmd __ARGS((expand_T *xp, char_u *arg));
+  void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg));
+  char_u *get_syntax_name __ARGS((expand_T *xp, int idx));
+! int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp, int keep_state));
+  int syn_get_stack_item __ARGS((int i));
+  int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
+  void init_highlight __ARGS((int both, int reset));
+*** ../vim-7.1.218/src/screen.c        Thu Nov  8 21:23:34 2007
+--- src/screen.c       Fri Jan 11 21:48:10 2008
+***************
+*** 3885,3891 ****
+  # ifdef FEAT_SPELL
+                                              has_spell ? &can_spell :
+  # endif
+!                                             NULL);
+  
+                   if (did_emsg)
+                   {
+--- 3885,3891 ----
+  # ifdef FEAT_SPELL
+                                              has_spell ? &can_spell :
+  # endif
+!                                             NULL, FALSE);
+  
+                   if (did_emsg)
+                   {
+*** ../vim-7.1.218/src/spell.c Sun Aug  5 18:32:21 2007
+--- src/spell.c        Fri Jan 11 21:46:50 2008
+***************
+*** 2146,2152 ****
+                       {
+                           col = (int)(p - buf);
+                           (void)syn_get_id(wp, lnum, (colnr_T)col,
+!                                                     FALSE, &can_spell);
+                           if (!can_spell)
+                               attr = HLF_COUNT;
+                       }
+--- 2146,2152 ----
+                       {
+                           col = (int)(p - buf);
+                           (void)syn_get_id(wp, lnum, (colnr_T)col,
+!                                                  FALSE, &can_spell, FALSE);
+                           if (!can_spell)
+                               attr = HLF_COUNT;
+                       }
+*** ../vim-7.1.218/src/syntax.c        Fri Jan 11 21:26:49 2008
+--- src/syntax.c       Sat Jan 12 16:42:25 2008
+***************
+*** 378,384 ****
+  static int syn_stack_equal __ARGS((synstate_T *sp));
+  static void validate_current_state __ARGS((void));
+  static int syn_finish_line __ARGS((int syncing));
+! static int syn_current_attr __ARGS((int syncing, int displaying, int *can_spell));
+  static int did_match_already __ARGS((int idx, garray_T *gap));
+  static stateitem_T *push_next_match __ARGS((stateitem_T *cur_si));
+  static void check_state_ends __ARGS((void));
+--- 378,384 ----
+  static int syn_stack_equal __ARGS((synstate_T *sp));
+  static void validate_current_state __ARGS((void));
+  static int syn_finish_line __ARGS((int syncing));
+! static int syn_current_attr __ARGS((int syncing, int displaying, int *can_spell, int keep_state));
+  static int did_match_already __ARGS((int idx, garray_T *gap));
+  static stateitem_T *push_next_match __ARGS((stateitem_T *cur_si));
+  static void check_state_ends __ARGS((void));
+***************
+*** 1691,1697 ****
+      {
+       while (!current_finished)
+       {
+!          (void)syn_current_attr(syncing, FALSE, NULL);
+           /*
+            * When syncing, and found some item, need to check the item.
+            */
+--- 1690,1696 ----
+      {
+       while (!current_finished)
+       {
+!          (void)syn_current_attr(syncing, FALSE, NULL, FALSE);
+           /*
+            * When syncing, and found some item, need to check the item.
+            */
+***************
+*** 1731,1739 ****
+   * done.
+   */
+      int
+! get_syntax_attr(col, can_spell)
+      colnr_T  col;
+      int              *can_spell;
+  {
+      int          attr = 0;
+  
+--- 1730,1739 ----
+   * done.
+   */
+      int
+! get_syntax_attr(col, can_spell, keep_state)
+      colnr_T  col;
+      int              *can_spell;
++     int              keep_state;     /* keep state of char at "col" */
+  {
+      int          attr = 0;
+  
+***************
+*** 1768,1774 ****
+       */
+      while (current_col <= col)
+      {
+!      attr = syn_current_attr(FALSE, TRUE, can_spell);
+       ++current_col;
+      }
+  
+--- 1768,1775 ----
+       */
+      while (current_col <= col)
+      {
+!      attr = syn_current_attr(FALSE, TRUE, can_spell,
+!                                   current_col == col ? keep_state : FALSE);
+       ++current_col;
+      }
+  
+***************
+*** 1779,1788 ****
+   * Get syntax attributes for current_lnum, current_col.
+   */
+      static int
+! syn_current_attr(syncing, displaying, can_spell)
+      int              syncing;                /* When 1: called for syncing */
+      int              displaying;             /* result will be displayed */
+      int              *can_spell;             /* return: do spell checking */
+  {
+      int              syn_id;
+      lpos_T   endpos;         /* was: char_u *endp; */
+--- 1780,1790 ----
+   * Get syntax attributes for current_lnum, current_col.
+   */
+      static int
+! syn_current_attr(syncing, displaying, can_spell, keep_state)
+      int              syncing;                /* When 1: called for syncing */
+      int              displaying;             /* result will be displayed */
+      int              *can_spell;             /* return: do spell checking */
++     int              keep_state;             /* keep syntax stack afterwards */
+  {
+      int              syn_id;
+      lpos_T   endpos;         /* was: char_u *endp; */
+***************
+*** 2298,2304 ****
+        * may be for an empty match and a containing item might end in the
+        * current column.
+        */
+!      if (!syncing)
+       {
+           check_state_ends();
+           if (current_state.ga_len > 0
+--- 2300,2306 ----
+        * may be for an empty match and a containing item might end in the
+        * current column.
+        */
+!      if (!syncing && !keep_state)
+       {
+           check_state_ends();
+           if (current_state.ga_len > 0
+***************
+*** 6086,6097 ****
+   * Function called for expression evaluation: get syntax ID at file position.
+   */
+      int
+! syn_get_id(wp, lnum, col, trans, spellp)
+      win_T    *wp;
+      long     lnum;
+      colnr_T  col;
+!     int              trans;      /* remove transparancy */
+!     int              *spellp;    /* return: can do spell checking */
+  {
+      /* When the position is not after the current position and in the same
+       * line of the same buffer, need to restart parsing. */
+--- 6088,6100 ----
+   * Function called for expression evaluation: get syntax ID at file position.
+   */
+      int
+! syn_get_id(wp, lnum, col, trans, spellp, keep_state)
+      win_T    *wp;
+      long     lnum;
+      colnr_T  col;
+!     int              trans;       /* remove transparancy */
+!     int              *spellp;     /* return: can do spell checking */
+!     int              keep_state;  /* keep state of char at "col" */
+  {
+      /* When the position is not after the current position and in the same
+       * line of the same buffer, need to restart parsing. */
+***************
+*** 6100,6106 ****
+           || col < current_col)
+       syntax_start(wp, lnum);
+  
+!     (void)get_syntax_attr(col, spellp);
+  
+      return (trans ? current_trans_id : current_id);
+  }
+--- 6103,6109 ----
+           || col < current_col)
+       syntax_start(wp, lnum);
+  
+!     (void)get_syntax_attr(col, spellp, keep_state);
+  
+      return (trans ? current_trans_id : current_id);
+  }
+***************
+*** 6115,6122 ****
+  syn_get_stack_item(i)
+      int i;
+  {
+!     if (i >= current_state.ga_len )
+       return -1;
+      return CUR_STATE(i).si_id;
+  }
+  #endif
+--- 6118,6131 ----
+  syn_get_stack_item(i)
+      int i;
+  {
+!     if (i >= current_state.ga_len)
+!     {
+!      /* Need to invalidate the state, because we didn't properly finish it
+!       * for the last character, "keep_state" was TRUE. */
+!      invalidate_current_state();
+!      current_col = MAXCOL;
+       return -1;
++     }
+      return CUR_STATE(i).si_id;
+  }
+  #endif
+*** ../vim-7.1.218/src/version.c       Fri Jan 11 21:26:49 2008
+--- src/version.c      Sat Jan 12 16:40:47 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     219,
+  /**/
+
+-- 
+ARTHUR: Go on, Bors, chop its head off.
+BORS:   Right.  Silly little bleeder.  One rabbit stew coming up.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.220 b/7.1.220
new file mode 100644 (file)
index 0000000..1ba8f04
--- /dev/null
+++ b/7.1.220
@@ -0,0 +1,136 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.220
+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.1.220
+Problem:    When a ")" or word movement command moves the cursor back from the
+           end of the line it may end up on the trail byte of a multi-byte
+           character.  It's also moved back when it isn't needed.
+Solution:   Add the adjust_cursor() function.
+Files:     src/normal.c
+
+
+*** ../vim-7.1.219/src/normal.c        Sun Jan  6 20:05:36 2008
+--- src/normal.c       Sat Jan 12 17:10:14 2008
+***************
+*** 150,155 ****
+--- 150,156 ----
+  static void  nv_bck_word __ARGS((cmdarg_T *cap));
+  static void  nv_wordcmd __ARGS((cmdarg_T *cap));
+  static void  nv_beginline __ARGS((cmdarg_T *cap));
++ static void  adjust_cursor __ARGS((oparg_T *oap));
+  #ifdef FEAT_VISUAL
+  static void  adjust_for_sel __ARGS((cmdarg_T *cap));
+  static int   unadjust_for_sel __ARGS((void));
+***************
+*** 6567,6578 ****
+       clearopbeep(cap->oap);
+      else
+      {
+!      /* Don't leave the cursor on the NUL past a line */
+!      if (curwin->w_cursor.col > 0 && gchar_cursor() == NUL)
+!      {
+!          --curwin->w_cursor.col;
+!          cap->oap->inclusive = TRUE;
+!      }
+  #ifdef FEAT_VIRTUALEDIT
+       curwin->w_cursor.coladd = 0;
+  #endif
+--- 6568,6575 ----
+       clearopbeep(cap->oap);
+      else
+      {
+!      /* Don't leave the cursor on the NUL past end of line. */
+!      adjust_cursor(cap->oap);
+  #ifdef FEAT_VIRTUALEDIT
+       curwin->w_cursor.coladd = 0;
+  #endif
+***************
+*** 8408,8419 ****
+      else
+       n = fwd_word(cap->count1, cap->arg, cap->oap->op_type != OP_NOP);
+  
+!     /* Don't leave the cursor on the NUL past a line */
+!     if (n != FAIL && curwin->w_cursor.col > 0 && gchar_cursor() == NUL)
+!     {
+!      --curwin->w_cursor.col;
+!      cap->oap->inclusive = TRUE;
+!     }
+  
+      if (n == FAIL && cap->oap->op_type == OP_NOP)
+       clearopbeep(cap->oap);
+--- 8405,8413 ----
+      else
+       n = fwd_word(cap->count1, cap->arg, cap->oap->op_type != OP_NOP);
+  
+!     /* Don't leave the cursor on the NUL past the end of line. */
+!     if (n != FAIL)
+!      adjust_cursor(cap->oap);
+  
+      if (n == FAIL && cap->oap->op_type == OP_NOP)
+       clearopbeep(cap->oap);
+***************
+*** 8426,8431 ****
+--- 8420,8458 ----
+       if ((fdo_flags & FDO_HOR) && KeyTyped && cap->oap->op_type == OP_NOP)
+           foldOpenCursor();
+  #endif
++     }
++ }
++ 
++ /*
++  * Used after a movement command: If the cursor ends up on the NUL after the
++  * end of the line, may move it back to the last character and make the motion
++  * inclusive.
++  */
++     static void
++ adjust_cursor(oap)
++     oparg_T *oap;
++ {
++     /* The cursor cannot remain on the NUL when:
++      * - the column is > 0
++      * - not in Visual mode or 'selection' is "o"
++      * - 'virtualedit' is not "all" and not "onemore".
++      */
++     if (curwin->w_cursor.col > 0 && gchar_cursor() == NUL
++ #ifdef FEAT_VISUAL
++              && (!VIsual_active || *p_sel == 'o')
++ #endif
++ #ifdef FEAT_VIRTUALEDIT
++              && !virtual_active() && (ve_flags & VE_ONEMORE) == 0
++ #endif
++              )
++     {
++      --curwin->w_cursor.col;
++ #ifdef FEAT_MBYTE
++      /* prevent cursor from moving on the trail byte */
++      if (has_mbyte)
++          mb_adjust_cursor();
++ #endif
++      oap->inclusive = TRUE;
+      }
+  }
+  
+*** ../vim-7.1.219/src/version.c       Sat Jan 12 16:45:25 2008
+--- src/version.c      Sat Jan 12 17:07:28 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     220,
+  /**/
+
+-- 
+A hamburger walks into a bar, and the bartender says: "I'm sorry,
+but we don't serve food here."
+
+ /// 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    ///
diff --git a/7.1.221 b/7.1.221
new file mode 100644 (file)
index 0000000..14fc947
--- /dev/null
+++ b/7.1.221
@@ -0,0 +1,58 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.221
+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.1.221
+Problem:    When inserting a "(", triggering the matchparen plugin, the
+           following highlighting may be messed up.
+Solution:   Before triggering the CursorMovedI autocommands update the display
+           to update the stored syntax stacks for the change.
+Files:     src/edit.c
+
+
+*** ../vim-7.1.220/src/edit.c  Wed Jan  9 10:13:24 2008
+--- src/edit.c Sat Jan 12 16:07:41 2008
+***************
+*** 1455,1460 ****
+--- 1455,1468 ----
+  # endif
+                            )
+       {
++ # ifdef FEAT_SYN_HL
++          /* Need to update the screen first, to make sure syntax
++           * highlighting is correct after making a change (e.g., inserting
++           * a "(".  The autocommand may also require a redraw, so it's done
++           * again below, unfortunately. */
++          if (syntax_present(curbuf) && must_redraw)
++              update_screen(0);
++ # endif
+           apply_autocmds(EVENT_CURSORMOVEDI, NULL, NULL, FALSE, curbuf);
+           last_cursormoved = curwin->w_cursor;
+       }
+*** ../vim-7.1.220/src/version.c       Sat Jan 12 17:11:25 2008
+--- src/version.c      Sat Jan 12 18:11:22 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     221,
+  /**/
+
+-- 
+ROBIN:  The what?
+ARTHUR: The Holy Hand Grenade of Antioch.  'Tis one of the sacred relics
+        Brother Maynard always carries with him.
+ALL:    Yes. Of course.
+ARTHUR: (shouting) Bring up the Holy Hand Grenade!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.222 b/7.1.222
new file mode 100644 (file)
index 0000000..f092e76
--- /dev/null
+++ b/7.1.222
@@ -0,0 +1,135 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.222
+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.1.222 (after 7.1.217)
+Problem:    Wildcards in argument of ":helptags" are not expanded.  (Marcel
+           Svitalsky)
+Solution:   Expand wildcards in the directory name.
+Files:     src/ex_cmds.c
+
+
+*** ../vim-7.1.221/src/ex_cmds.c       Fri Jan 11 21:00:49 2008
+--- src/ex_cmds.c      Sat Jan 12 21:40:51 2008
+***************
+*** 6106,6111 ****
+--- 6106,6113 ----
+  #ifdef FEAT_MULTI_LANG
+      char_u   lang[2];
+  #endif
++     expand_T xpc;
++     char_u   *dirname;
+      char_u   ext[5];
+      char_u   fname[8];
+      int              filecount;
+***************
+*** 6119,6125 ****
+       eap->arg = skipwhite(eap->arg + 3);
+      }
+  
+!     if (!mch_isdir(eap->arg))
+      {
+       EMSG2(_("E150: Not a directory: %s"), eap->arg);
+       return;
+--- 6121,6131 ----
+       eap->arg = skipwhite(eap->arg + 3);
+      }
+  
+!     ExpandInit(&xpc);
+!     xpc.xp_context = EXPAND_DIRECTORIES;
+!     dirname = ExpandOne(&xpc, eap->arg, NULL,
+!                          WILD_LIST_NOTFOUND|WILD_SILENT, WILD_EXPAND_FREE);
+!     if (dirname == NULL || !mch_isdir(dirname))
+      {
+       EMSG2(_("E150: Not a directory: %s"), eap->arg);
+       return;
+***************
+*** 6127,6133 ****
+  
+  #ifdef FEAT_MULTI_LANG
+      /* Get a list of all files in the directory. */
+!     STRCPY(NameBuff, eap->arg);
+      add_pathsep(NameBuff);
+      STRCAT(NameBuff, "*");
+      if (gen_expand_wildcards(1, &NameBuff, &filecount, &files,
+--- 6133,6139 ----
+  
+  #ifdef FEAT_MULTI_LANG
+      /* Get a list of all files in the directory. */
+!     STRCPY(NameBuff, dirname);
+      add_pathsep(NameBuff);
+      STRCAT(NameBuff, "*");
+      if (gen_expand_wildcards(1, &NameBuff, &filecount, &files,
+***************
+*** 6135,6140 ****
+--- 6141,6147 ----
+           || filecount == 0)
+      {
+       EMSG2("E151: No match: %s", NameBuff);
++      vim_free(dirname);
+       return;
+      }
+  
+***************
+*** 6200,6206 ****
+           ext[1] = fname[5];
+           ext[2] = fname[6];
+       }
+!      helptags_one(eap->arg, ext, fname, add_help_tags);
+      }
+  
+      ga_clear(&ga);
+--- 6207,6213 ----
+           ext[1] = fname[5];
+           ext[2] = fname[6];
+       }
+!      helptags_one(dirname, ext, fname, add_help_tags);
+      }
+  
+      ga_clear(&ga);
+***************
+*** 6208,6215 ****
+  
+  #else
+      /* No language support, just use "*.txt" and "tags". */
+!     helptags_one(eap->arg, (char_u *)".txt", (char_u *)"tags", add_help_tags);
+  #endif
+  }
+  
+      static void
+--- 6215,6223 ----
+  
+  #else
+      /* No language support, just use "*.txt" and "tags". */
+!     helptags_one(dirname, (char_u *)".txt", (char_u *)"tags", add_help_tags);
+  #endif
++     vim_free(dirname);
+  }
+  
+      static void
+*** ../vim-7.1.221/src/version.c       Sat Jan 12 18:13:05 2008
+--- src/version.c      Sun Jan 13 13:27:04 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     222,
+  /**/
+
+-- 
+   Arthur pulls Pin out.  The MONK blesses the grenade as ...
+ARTHUR:  (quietly) One, two, five ...
+GALAHAD: Three, sir!
+ARTHUR:  Three.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.223 b/7.1.223
new file mode 100644 (file)
index 0000000..0fbfb58
--- /dev/null
+++ b/7.1.223
@@ -0,0 +1,263 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.223
+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.1.223
+Problem:    glob() doesn't work properly when 'shell' is "sh" or "bash" and
+           the expanded name contains spaces, '~', single quotes and other
+           special characters.  (Adri Verhoef, Charles Campbell)
+Solution:   For Posix shells define a vimglob() function to list the matches
+           instead of using "echo" directly.
+Files:     src/os_unix.c
+
+
+*** ../vim-7.1.222/src/os_unix.c       Thu Jan  3 18:55:21 2008
+--- src/os_unix.c      Sun Jan 13 13:52:53 2008
+***************
+*** 4946,4951 ****
+--- 4946,4954 ----
+      char_u   *p;
+      int              dir;
+  #ifdef __EMX__
++     /*
++      * This is the OS/2 implementation.
++      */
+  # define EXPL_ALLOC_INC      16
+      char_u   **expl_files;
+      size_t   files_alloced, files_free;
+***************
+*** 5056,5075 ****
+      return OK;
+  
+  #else /* __EMX__ */
+! 
+      int              j;
+      char_u   *tempname;
+      char_u   *command;
+      FILE     *fd;
+      char_u   *buffer;
+! #define STYLE_ECHO  0            /* use "echo" to expand */
+! #define STYLE_GLOB  1            /* use "glob" to expand, for csh */
+! #define STYLE_PRINT 2            /* use "print -N" to expand, for zsh */
+! #define STYLE_BT    3            /* `cmd` expansion, execute the pattern directly */
+      int              shell_style = STYLE_ECHO;
+      int              check_spaces;
+      static int       did_find_nul = FALSE;
+      int              ampersent = FALSE;
+  
+      *num_file = 0;   /* default: no files found */
+      *file = NULL;
+--- 5059,5084 ----
+      return OK;
+  
+  #else /* __EMX__ */
+!     /*
+!      * This is the non-OS/2 implementation (really Unix).
+!      */
+      int              j;
+      char_u   *tempname;
+      char_u   *command;
+      FILE     *fd;
+      char_u   *buffer;
+! #define STYLE_ECHO   0       /* use "echo", the default */
+! #define STYLE_GLOB   1       /* use "glob", for csh */
+! #define STYLE_VIMGLOB        2       /* use "vimglob", for Posix sh */
+! #define STYLE_PRINT  3       /* use "print -N", for zsh */
+! #define STYLE_BT     4       /* `cmd` expansion, execute the pattern
+!                               * directly */
+      int              shell_style = STYLE_ECHO;
+      int              check_spaces;
+      static int       did_find_nul = FALSE;
+      int              ampersent = FALSE;
++              /* vimglob() function to define for Posix shell */
++     static char *sh_vimglob_func = "vimglob() { while [ $# -ge 1 ]; do echo -n \"$1\"; echo; shift; done }; vimglob >";
+  
+      *num_file = 0;   /* default: no files found */
+      *file = NULL;
+***************
+*** 5107,5115 ****
+  
+      /*
+       * Let the shell expand the patterns and write the result into the temp
+!      * file.  if expanding `cmd` execute it directly.
+!      * If we use csh, glob will work better than echo.
+!      * If we use zsh, print -N will work better than glob.
+       */
+      if (num_pat == 1 && *pat[0] == '`'
+           && (len = STRLEN(pat[0])) > 2
+--- 5116,5132 ----
+  
+      /*
+       * Let the shell expand the patterns and write the result into the temp
+!      * file.
+!      * STYLE_BT:     NL separated
+!      *           If expanding `cmd` execute it directly.
+!      * STYLE_GLOB:   NUL separated
+!      *           If we use *csh, "glob" will work better than "echo".
+!      * STYLE_PRINT:  NL or NUL separated
+!      *           If we use *zsh, "print -N" will work better than "glob".
+!      * STYLE_VIMGLOB:        NL separated
+!      *           If we use *sh*, we define "vimglob()".
+!      * STYLE_ECHO:   space separated.
+!      *           A shell we don't know, stay safe and use "echo".
+       */
+      if (num_pat == 1 && *pat[0] == '`'
+           && (len = STRLEN(pat[0])) > 2
+***************
+*** 5122,5130 ****
+       else if (STRCMP(p_sh + len - 3, "zsh") == 0)
+           shell_style = STYLE_PRINT;
+      }
+! 
+!     /* "unset nonomatch; print -N >" plus two is 29 */
+      len = STRLEN(tempname) + 29;
+      for (i = 0; i < num_pat; ++i)
+      {
+       /* Count the length of the patterns in the same way as they are put in
+--- 5139,5155 ----
+       else if (STRCMP(p_sh + len - 3, "zsh") == 0)
+           shell_style = STYLE_PRINT;
+      }
+!     if (shell_style == STYLE_ECHO && strstr((char *)gettail(p_sh),
+!                                                              "sh") != NULL)
+!      shell_style = STYLE_VIMGLOB;
+! 
+!     /* Compute the length of the command.  We need 2 extra bytes: for the
+!      * optional '&' and for the NUL.
+!      * Worst case: "unset nonomatch; print -N >" plus two is 29 */
+      len = STRLEN(tempname) + 29;
++     if (shell_style == STYLE_VIMGLOB)
++      len += STRLEN(sh_vimglob_func);
++ 
+      for (i = 0; i < num_pat; ++i)
+      {
+       /* Count the length of the patterns in the same way as they are put in
+***************
+*** 5183,5192 ****
+--- 5208,5221 ----
+           STRCAT(command, "glob >");
+       else if (shell_style == STYLE_PRINT)
+           STRCAT(command, "print -N >");
++      else if (shell_style == STYLE_VIMGLOB)
++          STRCAT(command, sh_vimglob_func);
+       else
+           STRCAT(command, "echo >");
+      }
++ 
+      STRCAT(command, tempname);
++ 
+      if (shell_style != STYLE_BT)
+       for (i = 0; i < num_pat; ++i)
+       {
+***************
+*** 5232,5239 ****
+      if (flags & EW_SILENT)
+       show_shell_mess = FALSE;
+      if (ampersent)
+!      STRCAT(command, "&");           /* put the '&' back after the
+!                                         redirection */
+  
+      /*
+       * Using zsh -G: If a pattern has no matches, it is just deleted from
+--- 5261,5267 ----
+      if (flags & EW_SILENT)
+       show_shell_mess = FALSE;
+      if (ampersent)
+!      STRCAT(command, "&");           /* put the '&' after the redirection */
+  
+      /*
+       * Using zsh -G: If a pattern has no matches, it is just deleted from
+***************
+*** 5265,5271 ****
+      show_shell_mess = TRUE;
+      vim_free(command);
+  
+!     if (i)                           /* mch_call_shell() failed */
+      {
+       mch_remove(tempname);
+       vim_free(tempname);
+--- 5293,5299 ----
+      show_shell_mess = TRUE;
+      vim_free(command);
+  
+!     if (i != 0)                              /* mch_call_shell() failed */
+      {
+       mch_remove(tempname);
+       vim_free(tempname);
+***************
+*** 5336,5342 ****
+      }
+      vim_free(tempname);
+  
+! #if defined(__CYGWIN__) || defined(__CYGWIN32__)
+      /* Translate <CR><NL> into <NL>.  Caution, buffer may contain NUL. */
+      p = buffer;
+      for (i = 0; i < len; ++i)
+--- 5364,5370 ----
+      }
+      vim_free(tempname);
+  
+! # if defined(__CYGWIN__) || defined(__CYGWIN32__)
+      /* Translate <CR><NL> into <NL>.  Caution, buffer may contain NUL. */
+      p = buffer;
+      for (i = 0; i < len; ++i)
+***************
+*** 5359,5365 ****
+       }
+      }
+      /* file names are separated with NL */
+!     else if (shell_style == STYLE_BT)
+      {
+       buffer[len] = NUL;              /* make sure the buffer ends in NUL */
+       p = buffer;
+--- 5387,5393 ----
+       }
+      }
+      /* file names are separated with NL */
+!     else if (shell_style == STYLE_BT || shell_style == STYLE_VIMGLOB)
+      {
+       buffer[len] = NUL;              /* make sure the buffer ends in NUL */
+       p = buffer;
+***************
+*** 5438,5444 ****
+      {
+       (*file)[i] = p;
+       /* Space or NL separates */
+!      if (shell_style == STYLE_ECHO || shell_style == STYLE_BT)
+       {
+           while (!(shell_style == STYLE_ECHO && *p == ' ')
+                                                  && *p != '\n' && *p != NUL)
+--- 5466,5473 ----
+      {
+       (*file)[i] = p;
+       /* Space or NL separates */
+!      if (shell_style == STYLE_ECHO || shell_style == STYLE_BT
+!                                            || shell_style == STYLE_VIMGLOB)
+       {
+           while (!(shell_style == STYLE_ECHO && *p == ' ')
+                                                  && *p != '\n' && *p != NUL)
+*** ../vim-7.1.222/src/version.c       Sun Jan 13 13:30:34 2008
+--- src/version.c      Sun Jan 13 13:45:04 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     223,
+  /**/
+
+-- 
+User:       I'm having problems with my text editor.
+Help desk:  Which editor are you using?
+User:       I don't know, but it's version VI (pronounced: 6).
+Help desk:  Oh, then you should upgrade to version VIM (pronounced: 994).
+
+ /// 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    ///
diff --git a/7.1.224 b/7.1.224
new file mode 100644 (file)
index 0000000..4e6c9d3
--- /dev/null
+++ b/7.1.224
@@ -0,0 +1,73 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.224
+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.1.224
+Problem:    When using "vim -F -o file1 file2" only one window is
+           right-to-left.  Same for "-H".  (Ben Schmidt)
+Solution:   use set_option_value() to set 'rightleft'.
+Files:     src/main.c
+
+
+*** ../vim-7.1.223/src/main.c  Fri Jan 11 20:25:42 2008
+--- src/main.c Sun Jan 13 16:12:09 2008
+***************
+*** 1775,1781 ****
+  
+           case 'F':           /* "-F" start in Farsi mode: rl + fkmap set */
+  #ifdef FEAT_FKMAP
+!              curwin->w_p_rl = p_fkmap = TRUE;
+  #else
+               mch_errmsg(_(e_nofarsi));
+               mch_exit(2);
+--- 1775,1782 ----
+  
+           case 'F':           /* "-F" start in Farsi mode: rl + fkmap set */
+  #ifdef FEAT_FKMAP
+!              p_fkmap = TRUE;
+!              set_option_value((char_u *)"rl", 1L, NULL, 0);
+  #else
+               mch_errmsg(_(e_nofarsi));
+               mch_exit(2);
+***************
+*** 1792,1798 ****
+  
+           case 'H':           /* "-H" start in Hebrew mode: rl + hkmap set */
+  #ifdef FEAT_RIGHTLEFT
+!              curwin->w_p_rl = p_hkmap = TRUE;
+  #else
+               mch_errmsg(_(e_nohebrew));
+               mch_exit(2);
+--- 1793,1800 ----
+  
+           case 'H':           /* "-H" start in Hebrew mode: rl + hkmap set */
+  #ifdef FEAT_RIGHTLEFT
+!              p_hkmap = TRUE;
+!              set_option_value((char_u *)"rl", 1L, NULL, 0);
+  #else
+               mch_errmsg(_(e_nohebrew));
+               mch_exit(2);
+*** ../vim-7.1.223/src/version.c       Sun Jan 13 13:53:30 2008
+--- src/version.c      Sun Jan 13 16:15:49 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     224,
+  /**/
+
+-- 
+LAUNCELOT: Isn't there a St. Aaaaarrrrrrggghhh's in Cornwall?
+ARTHUR:    No, that's Saint Ives.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.225 b/7.1.225
new file mode 100644 (file)
index 0000000..acce0c5
--- /dev/null
+++ b/7.1.225
@@ -0,0 +1,55 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.225
+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.1.225
+Problem:    Using unitialized value when XGetWMNormalHints() fails.
+Solution:   Check the return value. (Dominique Pelle)
+Files:     src/os_unix.c
+
+
+*** ../vim-7.1.224/src/os_unix.c       Sun Jan 13 13:53:30 2008
+--- src/os_unix.c      Sun Jan 13 13:52:53 2008
+***************
+*** 6145,6153 ****
+      if (xterm_trace == 1)
+      {
+       /* Get the hints just before tracking starts.  The font size might
+!       * have changed recently */
+!      XGetWMNormalHints(xterm_dpy, x11_window, &xterm_hints, &got_hints);
+!      if (!(got_hints & PResizeInc)
+               || xterm_hints.width_inc <= 1
+               || xterm_hints.height_inc <= 1)
+       {
+--- 6145,6153 ----
+      if (xterm_trace == 1)
+      {
+       /* Get the hints just before tracking starts.  The font size might
+!       * have changed recently. */
+!      if (!XGetWMNormalHints(xterm_dpy, x11_window, &xterm_hints, &got_hints)
+!              || !(got_hints & PResizeInc)
+               || xterm_hints.width_inc <= 1
+               || xterm_hints.height_inc <= 1)
+       {
+*** ../vim-7.1.224/src/version.c       Sun Jan 13 16:17:02 2008
+--- src/version.c      Sun Jan 13 16:29:51 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     225,
+  /**/
+
+-- 
+"When I die, I want a tombstone that says "GAME OVER" - Ton Richters
+
+ /// 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    ///
diff --git a/7.1.226 b/7.1.226
new file mode 100644 (file)
index 0000000..eb3cb6b
--- /dev/null
+++ b/7.1.226
@@ -0,0 +1,68 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.226
+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.1.226
+Problem:    Command line completion doesn't work when a file name contains a
+           '&' character.
+Solution:   Accept all characters in a file name, except ones that end a
+           command or white space.
+Files:     src/ex_docmd.c
+
+
+*** ../vim-7.1.225/src/ex_docmd.c      Wed Jan  9 20:29:51 2008
+--- src/ex_docmd.c     Wed Jan  9 20:11:13 2008
+***************
+*** 3338,3349 ****
+               }
+               in_quote = !in_quote;
+           }
+  #ifdef SPACE_IN_FILENAME
+!          else if (!vim_isfilec_or_wc(c)
+!                                       && (!(ea.argt & NOSPC) || usefilter))
+! #else
+!          else if (!vim_isfilec_or_wc(c))
+  #endif
+           {
+               while (*p != NUL)
+               {
+--- 3338,3350 ----
+               }
+               in_quote = !in_quote;
+           }
++          /* An argument can contain just about everything, except
++           * characters that end the command and white space. */
++          else if (c == '|' || c == '\n' || c == '"' || (vim_iswhite(c)
+  #ifdef SPACE_IN_FILENAME
+!                                       && (!(ea.argt & NOSPC) || usefilter)
+  #endif
++                  ))
+           {
+               while (*p != NUL)
+               {
+*** ../vim-7.1.225/src/version.c       Sun Jan 13 16:30:23 2008
+--- src/version.c      Sun Jan 13 17:10:15 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     226,
+  /**/
+
+-- 
+   [Another hideous roar.]
+BEDEVERE: That's it!
+ARTHUR:   What?
+BEDEVERE: It's The Legendary Black Beast of Aaaaarrrrrrggghhh!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.227 b/7.1.227
new file mode 100644 (file)
index 0000000..042c449
--- /dev/null
+++ b/7.1.227
@@ -0,0 +1,188 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.227
+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.1.227
+Problem:    Hang in syntax HL when moving over a ")". (Dominique Pelle)
+Solution:   Avoid storing a syntax state in the wrong position in the list of
+           remembered states.
+Files:     src/syntax.c
+
+
+*** ../vim-7.1.226/src/syntax.c        Sat Jan 12 16:45:25 2008
+--- src/syntax.c       Sat Jan 12 16:45:44 2008
+***************
+*** 372,378 ****
+  static int syn_stack_cleanup __ARGS((void));
+  static void syn_stack_free_entry __ARGS((buf_T *buf, synstate_T *p));
+  static synstate_T *syn_stack_find_entry __ARGS((linenr_T lnum));
+! static synstate_T *store_current_state __ARGS((synstate_T *sp));
+  static void load_current_state __ARGS((synstate_T *from));
+  static void invalidate_current_state __ARGS((void));
+  static int syn_stack_equal __ARGS((synstate_T *sp));
+--- 372,378 ----
+  static int syn_stack_cleanup __ARGS((void));
+  static void syn_stack_free_entry __ARGS((buf_T *buf, synstate_T *p));
+  static synstate_T *syn_stack_find_entry __ARGS((linenr_T lnum));
+! static synstate_T *store_current_state __ARGS((void));
+  static void load_current_state __ARGS((synstate_T *from));
+  static void invalidate_current_state __ARGS((void));
+  static int syn_stack_equal __ARGS((synstate_T *sp));
+***************
+*** 464,470 ****
+      synstate_T       *p;
+      synstate_T       *last_valid = NULL;
+      synstate_T       *last_min_valid = NULL;
+!     synstate_T       *sp, *prev;
+      linenr_T parsed_lnum;
+      linenr_T first_stored;
+      int              dist;
+--- 464,470 ----
+      synstate_T       *p;
+      synstate_T       *last_valid = NULL;
+      synstate_T       *last_min_valid = NULL;
+!     synstate_T       *sp, *prev = NULL;
+      linenr_T parsed_lnum;
+      linenr_T first_stored;
+      int              dist;
+***************
+*** 502,508 ****
+       if (!current_state_stored)
+       {
+           ++current_lnum;
+!          (void)store_current_state(NULL);
+       }
+  
+       /*
+--- 502,508 ----
+       if (!current_state_stored)
+       {
+           ++current_lnum;
+!          (void)store_current_state();
+       }
+  
+       /*
+***************
+*** 558,564 ****
+       dist = 999999;
+      else
+       dist = syn_buf->b_ml.ml_line_count / (syn_buf->b_sst_len - Rows) + 1;
+-     prev = syn_stack_find_entry(current_lnum);
+      while (current_lnum < lnum)
+      {
+       syn_start_line();
+--- 558,563 ----
+***************
+*** 573,581 ****
+            * equal to the current state.  If so, then validate all saved
+            * states that depended on a change before the parsed line. */
+           if (prev == NULL)
+               sp = syn_buf->b_sst_first;
+           else
+!              sp = prev->sst_next;
+           if (sp != NULL
+                   && sp->sst_lnum == current_lnum
+                   && syn_stack_equal(sp))
+--- 572,584 ----
+            * equal to the current state.  If so, then validate all saved
+            * states that depended on a change before the parsed line. */
+           if (prev == NULL)
++              prev = syn_stack_find_entry(current_lnum - 1);
++          if (prev == NULL)
+               sp = syn_buf->b_sst_first;
+           else
+!              sp = prev;
+!          while (sp != NULL && sp->sst_lnum < current_lnum)
+!              sp = sp->sst_next;
+           if (sp != NULL
+                   && sp->sst_lnum == current_lnum
+                   && syn_stack_equal(sp))
+***************
+*** 601,607 ****
+           else if (prev == NULL
+                       || current_lnum == lnum
+                       || current_lnum >= prev->sst_lnum + dist)
+!              prev = store_current_state(prev);
+       }
+  
+       /* This can take a long time: break when CTRL-C pressed.  The current
+--- 604,610 ----
+           else if (prev == NULL
+                       || current_lnum == lnum
+                       || current_lnum >= prev->sst_lnum + dist)
+!              prev = store_current_state();
+       }
+  
+       /* This can take a long time: break when CTRL-C pressed.  The current
+***************
+*** 1353,1369 ****
+   * The current state must be valid for the start of the current_lnum line!
+   */
+      static synstate_T *
+! store_current_state(sp)
+!     synstate_T       *sp;    /* at or before where state is to be saved or
+!                                 NULL */
+  {
+      int              i;
+      synstate_T       *p;
+      bufstate_T       *bp;
+      stateitem_T      *cur_si;
+! 
+!     if (sp == NULL)
+!      sp = syn_stack_find_entry(current_lnum);
+  
+      /*
+       * If the current state contains a start or end pattern that continues
+--- 1356,1368 ----
+   * The current state must be valid for the start of the current_lnum line!
+   */
+      static synstate_T *
+! store_current_state()
+  {
+      int              i;
+      synstate_T       *p;
+      bufstate_T       *bp;
+      stateitem_T      *cur_si;
+!     synstate_T       *sp = syn_stack_find_entry(current_lnum);
+  
+      /*
+       * If the current state contains a start or end pattern that continues
+***************
+*** 1667,1673 ****
+            * Store the current state in b_sst_array[] for later use.
+            */
+           ++current_lnum;
+!          (void)store_current_state(NULL);
+       }
+      }
+  
+--- 1666,1672 ----
+            * Store the current state in b_sst_array[] for later use.
+            */
+           ++current_lnum;
+!          (void)store_current_state();
+       }
+      }
+  
+*** ../vim-7.1.226/src/version.c       Sun Jan 13 17:11:25 2008
+--- src/version.c      Sun Jan 13 17:37:10 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     227,
+  /**/
+
+-- 
+Dreams are free, but there's a small charge for alterations.
+
+ /// 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    ///
diff --git a/7.1.228 b/7.1.228
new file mode 100644 (file)
index 0000000..bab4dff
--- /dev/null
+++ b/7.1.228
@@ -0,0 +1,51 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.228
+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.1.228
+Problem:    When 'foldmethod' is "indent" and a fold is created with ">>" it
+           can't be closed with "zc".  (Daniel Shahaf)
+Solution:   Reset the "small" flag of a fold when adding a line to it.
+Files:     src/fold.c
+
+
+*** ../vim-7.1.227/src/fold.c  Sun Oct 14 15:32:10 2007
+--- src/fold.c Sun Jan 13 21:26:48 2008
+***************
+*** 2676,2681 ****
+--- 2676,2682 ----
+      if (fp->fd_len < flp->lnum - fp->fd_top)
+      {
+       fp->fd_len = flp->lnum - fp->fd_top;
++      fp->fd_small = MAYBE;
+       fold_changed = TRUE;
+      }
+  
+*** ../vim-7.1.227/src/version.c       Sun Jan 13 17:39:29 2008
+--- src/version.c      Sun Jan 13 21:56:53 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     228,
+  /**/
+
+-- 
+VOICE OVER: As the horrendous Black Beast lunged forward, escape for Arthur
+            and his knights seemed hopeless,  when, suddenly ... the animator
+            suffered a fatal heart attack.
+ANIMATOR:   Aaaaagh!
+VOICE OVER: The cartoon peril was no more ... The Quest for Holy Grail could
+            continue.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.229 b/7.1.229
new file mode 100644 (file)
index 0000000..c07e8e2
--- /dev/null
+++ b/7.1.229
@@ -0,0 +1,55 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.229
+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.1.229
+Problem:    A fold is closed when it shouldn't when 'foldmethod' is "indent"
+           and backspacing a non-white character so that the indent increases.
+Solution:   Keep the fold open after backspacing a character.
+Files:     src/edit.c
+
+
+*** ../vim-7.1.228/src/edit.c  Sat Jan 12 18:13:05 2008
+--- src/edit.c Mon Jan 14 20:06:43 2008
+***************
+*** 8618,8623 ****
+--- 8619,8632 ----
+      if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == 0)
+       dollar_vcol = curwin->w_virtcol;
+  
++ #ifdef FEAT_FOLDING
++     /* When deleting a char the cursor line must never be in a closed fold.
++      * E.g., when 'foldmethod' is indent and deleting the first non-white
++      * char before a Tab. */
++     if (did_backspace)
++      foldOpenCursor();
++ #endif
++ 
+      return did_backspace;
+  }
+  
+*** ../vim-7.1.228/src/version.c       Sun Jan 13 21:57:25 2008
+--- src/version.c      Mon Jan 14 20:08:35 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     229,
+  /**/
+
+-- 
+ROBIN:  (warily) And if you get a question wrong?
+ARTHUR: You are cast into the Gorge of Eternal Peril.
+ROBIN:  Oh ... wacho!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.230 b/7.1.230
new file mode 100644 (file)
index 0000000..3cd7270
--- /dev/null
+++ b/7.1.230
@@ -0,0 +1,64 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.230
+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.1.230
+Problem:    Memory leak when executing SourceCmd autocommands.
+Solution:   Free the memory. (Dominique Pelle)
+Files:     src/ex_cmds2.c
+
+
+*** ../vim-7.1.229/src/ex_cmds2.c      Sun Jan  6 20:05:36 2008
+--- src/ex_cmds2.c     Tue Jan 15 20:41:28 2008
+***************
+*** 2889,2899 ****
+      if (has_autocmd(EVENT_SOURCECMD, fname_exp, NULL)
+           && apply_autocmds(EVENT_SOURCECMD, fname_exp, fname_exp,
+                                                              FALSE, curbuf))
+  # ifdef FEAT_EVAL
+!      return aborting() ? FAIL : OK;
+  # else
+!      return OK;
+  # endif
+  
+      /* Apply SourcePre autocommands, they may get the file. */
+      apply_autocmds(EVENT_SOURCEPRE, fname_exp, fname_exp, FALSE, curbuf);
+--- 2889,2902 ----
+      if (has_autocmd(EVENT_SOURCECMD, fname_exp, NULL)
+           && apply_autocmds(EVENT_SOURCECMD, fname_exp, fname_exp,
+                                                              FALSE, curbuf))
++     {
+  # ifdef FEAT_EVAL
+!      retval = aborting() ? FAIL : OK;
+  # else
+!      retval = OK;
+  # endif
++      goto theend;
++     }
+  
+      /* Apply SourcePre autocommands, they may get the file. */
+      apply_autocmds(EVENT_SOURCEPRE, fname_exp, fname_exp, FALSE, curbuf);
+*** ../vim-7.1.229/src/version.c       Mon Jan 14 20:11:37 2008
+--- src/version.c      Tue Jan 15 22:15:03 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     230,
+  /**/
+
+-- 
+Citizens are not allowed to attend a movie house or theater nor ride in a
+public streetcar within at least four hours after eating garlic.
+               [real standing law in Indiana, United States of America]
+
+ /// 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    ///
diff --git a/7.1.231 b/7.1.231
new file mode 100644 (file)
index 0000000..e9c7885
--- /dev/null
+++ b/7.1.231
@@ -0,0 +1,291 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.231
+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.1.231
+Problem:    When shifting lines the change is acted upon multiple times.
+Solution:   Don't have shift_line() call changed_bytes.
+Files:     src/edit.c, src/ops.c, src/proto/edit.pro, src/proto/ops.pro
+
+
+*** ../vim-7.1.230/src/edit.c  Mon Jan 14 20:11:37 2008
+--- src/edit.c Mon Jan 14 20:06:43 2008
+***************
+*** 1662,1672 ****
+   * if round is TRUE, round the indent to 'shiftwidth' (only with _INC and _Dec).
+   */
+      void
+! change_indent(type, amount, round, replaced)
+      int              type;
+      int              amount;
+      int              round;
+      int              replaced;       /* replaced character, put on replace stack */
+  {
+      int              vcol;
+      int              last_vcol;
+--- 1662,1673 ----
+   * if round is TRUE, round the indent to 'shiftwidth' (only with _INC and _Dec).
+   */
+      void
+! change_indent(type, amount, round, replaced, call_changed_bytes)
+      int              type;
+      int              amount;
+      int              round;
+      int              replaced;       /* replaced character, put on replace stack */
++     int              call_changed_bytes;     /* call changed_bytes() */
+  {
+      int              vcol;
+      int              last_vcol;
+***************
+*** 1723,1729 ****
+       * Set the new indent.  The cursor will be put on the first non-blank.
+       */
+      if (type == INDENT_SET)
+!      (void)set_indent(amount, SIN_CHANGED);
+      else
+      {
+  #ifdef FEAT_VREPLACE
+--- 1724,1730 ----
+       * Set the new indent.  The cursor will be put on the first non-blank.
+       */
+      if (type == INDENT_SET)
+!      (void)set_indent(amount, call_changed_bytes ? SIN_CHANGED : 0);
+      else
+      {
+  #ifdef FEAT_VREPLACE
+***************
+*** 1733,1739 ****
+       if (State & VREPLACE_FLAG)
+           State = INSERT;
+  #endif
+!      shift_line(type == INDENT_DEC, round, 1);
+  #ifdef FEAT_VREPLACE
+       State = save_State;
+  #endif
+--- 1734,1740 ----
+       if (State & VREPLACE_FLAG)
+           State = INSERT;
+  #endif
+!      shift_line(type == INDENT_DEC, round, 1, call_changed_bytes);
+  #ifdef FEAT_VREPLACE
+       State = save_State;
+  #endif
+***************
+*** 5921,5927 ****
+           {
+  #ifdef FEAT_VREPLACE
+               if (State & VREPLACE_FLAG)
+!                  change_indent(INDENT_SET, second_indent, FALSE, NUL);
+               else
+  #endif
+                   (void)set_indent(second_indent, SIN_CHANGED);
+--- 5922,5928 ----
+           {
+  #ifdef FEAT_VREPLACE
+               if (State & VREPLACE_FLAG)
+!                  change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE);
+               else
+  #endif
+                   (void)set_indent(second_indent, SIN_CHANGED);
+***************
+*** 7227,7233 ****
+  fixthisline(get_the_indent)
+      int (*get_the_indent) __ARGS((void));
+  {
+!     change_indent(INDENT_SET, get_the_indent(), FALSE, 0);
+      if (linewhite(curwin->w_cursor.lnum))
+       did_ai = TRUE;      /* delete the indent if the line stays empty */
+  }
+--- 7228,7234 ----
+  fixthisline(get_the_indent)
+      int (*get_the_indent) __ARGS((void));
+  {
+!     change_indent(INDENT_SET, get_the_indent(), FALSE, 0, TRUE);
+      if (linewhite(curwin->w_cursor.lnum))
+       did_ai = TRUE;      /* delete the indent if the line stays empty */
+  }
+***************
+*** 8170,8179 ****
+           replace_pop_ins();
+       if (lastc == '^')
+           old_indent = get_indent();  /* remember curr. indent */
+!      change_indent(INDENT_SET, 0, TRUE, 0);
+      }
+      else
+!      change_indent(c == Ctrl_D ? INDENT_DEC : INDENT_INC, 0, TRUE, 0);
+  
+      if (did_ai && *skipwhite(ml_get_curline()) != NUL)
+       did_ai = FALSE;
+--- 8171,8180 ----
+           replace_pop_ins();
+       if (lastc == '^')
+           old_indent = get_indent();  /* remember curr. indent */
+!      change_indent(INDENT_SET, 0, TRUE, 0, TRUE);
+      }
+      else
+!      change_indent(c == Ctrl_D ? INDENT_DEC : INDENT_INC, 0, TRUE, 0, TRUE);
+  
+      if (did_ai && *skipwhite(ml_get_curline()) != NUL)
+       did_ai = FALSE;
+***************
+*** 9633,9639 ****
+           curwin->w_cursor = old_pos;
+  #ifdef FEAT_VREPLACE
+           if (State & VREPLACE_FLAG)
+!              change_indent(INDENT_SET, i, FALSE, NUL);
+           else
+  #endif
+               (void)set_indent(i, SIN_CHANGED);
+--- 9634,9640 ----
+           curwin->w_cursor = old_pos;
+  #ifdef FEAT_VREPLACE
+           if (State & VREPLACE_FLAG)
+!              change_indent(INDENT_SET, i, FALSE, NUL, TRUE);
+           else
+  #endif
+               (void)set_indent(i, SIN_CHANGED);
+***************
+*** 9662,9668 ****
+               curwin->w_cursor = old_pos;
+           }
+           if (temp)
+!              shift_line(TRUE, FALSE, 1);
+       }
+      }
+  
+--- 9663,9669 ----
+               curwin->w_cursor = old_pos;
+           }
+           if (temp)
+!              shift_line(TRUE, FALSE, 1, TRUE);
+       }
+      }
+  
+*** ../vim-7.1.230/src/ops.c   Thu Jan  3 16:31:17 2008
+--- src/ops.c  Sun Jan 13 21:52:18 2008
+***************
+*** 258,264 ****
+           if (first_char != '#' || !preprocs_left())
+  #endif
+       {
+!          shift_line(oap->op_type == OP_LSHIFT, p_sr, amount);
+       }
+       ++curwin->w_cursor.lnum;
+      }
+--- 258,264 ----
+           if (first_char != '#' || !preprocs_left())
+  #endif
+       {
+!          shift_line(oap->op_type == OP_LSHIFT, p_sr, amount, FALSE);
+       }
+       ++curwin->w_cursor.lnum;
+      }
+***************
+*** 321,330 ****
+   * leaves cursor on first blank in the line
+   */
+      void
+! shift_line(left, round, amount)
+      int      left;
+      int      round;
+      int      amount;
+  {
+      int              count;
+      int              i, j;
+--- 321,331 ----
+   * leaves cursor on first blank in the line
+   */
+      void
+! shift_line(left, round, amount, call_changed_bytes)
+      int      left;
+      int      round;
+      int      amount;
++     int call_changed_bytes;  /* call changed_bytes() */
+  {
+      int              count;
+      int              i, j;
+***************
+*** 363,372 ****
+      /* Set new indent */
+  #ifdef FEAT_VREPLACE
+      if (State & VREPLACE_FLAG)
+!      change_indent(INDENT_SET, count, FALSE, NUL);
+      else
+  #endif
+!      (void)set_indent(count, SIN_CHANGED);
+  }
+  
+  #if defined(FEAT_VISUALEXTRA) || defined(PROTO)
+--- 364,373 ----
+      /* Set new indent */
+  #ifdef FEAT_VREPLACE
+      if (State & VREPLACE_FLAG)
+!      change_indent(INDENT_SET, count, FALSE, NUL, call_changed_bytes);
+      else
+  #endif
+!      (void)set_indent(count, call_changed_bytes ? SIN_CHANGED : 0);
+  }
+  
+  #if defined(FEAT_VISUALEXTRA) || defined(PROTO)
+*** ../vim-7.1.230/src/proto/edit.pro  Wed Jan  2 17:48:24 2008
+--- src/proto/edit.pro Sun Jan 13 21:52:27 2008
+***************
+*** 3,9 ****
+  void edit_putchar __ARGS((int c, int highlight));
+  void edit_unputchar __ARGS((void));
+  void display_dollar __ARGS((colnr_T col));
+! void change_indent __ARGS((int type, int amount, int round, int replaced));
+  void truncate_spaces __ARGS((char_u *line));
+  void backspace_until_column __ARGS((int col));
+  int vim_is_ctrl_x_key __ARGS((int c));
+--- 3,9 ----
+  void edit_putchar __ARGS((int c, int highlight));
+  void edit_unputchar __ARGS((void));
+  void display_dollar __ARGS((colnr_T col));
+! void change_indent __ARGS((int type, int amount, int round, int replaced, int call_changed_bytes));
+  void truncate_spaces __ARGS((char_u *line));
+  void backspace_until_column __ARGS((int col));
+  int vim_is_ctrl_x_key __ARGS((int c));
+*** ../vim-7.1.230/src/proto/ops.pro   Sun May  6 13:56:32 2007
+--- src/proto/ops.pro  Sun Jan 13 21:52:30 2008
+***************
+*** 4,10 ****
+  int get_op_char __ARGS((int optype));
+  int get_extra_op_char __ARGS((int optype));
+  void op_shift __ARGS((oparg_T *oap, int curs_top, int amount));
+! void shift_line __ARGS((int left, int round, int amount));
+  void op_reindent __ARGS((oparg_T *oap, int (*how)(void)));
+  int get_expr_register __ARGS((void));
+  void set_expr_line __ARGS((char_u *new_line));
+--- 4,10 ----
+  int get_op_char __ARGS((int optype));
+  int get_extra_op_char __ARGS((int optype));
+  void op_shift __ARGS((oparg_T *oap, int curs_top, int amount));
+! void shift_line __ARGS((int left, int round, int amount, int call_changed_bytes));
+  void op_reindent __ARGS((oparg_T *oap, int (*how)(void)));
+  int get_expr_register __ARGS((void));
+  void set_expr_line __ARGS((char_u *new_line));
+*** ../vim-7.1.230/src/version.c       Tue Jan 15 22:16:36 2008
+--- src/version.c      Wed Jan 16 19:58:25 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     231,
+  /**/
+
+-- 
+Snoring is prohibited unless all bedroom windows are closed and securely
+locked.
+               [real standing law in Massachusetts, United States of America]
+
+ /// 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    ///
diff --git a/7.1.232 b/7.1.232
new file mode 100644 (file)
index 0000000..092d6fa
--- /dev/null
+++ b/7.1.232
@@ -0,0 +1,70 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.232
+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.1.232 (after 7.1.207 and 7.1.211)
+Problem:    Compiler warnings with MSVC.
+Solution:   Add type casts. (Mike Williams)
+Files:     src/ex_cmds2.c, src/netbeans.c
+
+
+*** ../vim-7.1.231/src/ex_cmds2.c      Tue Jan 15 22:16:36 2008
+--- src/ex_cmds2.c     Tue Jan 15 20:41:28 2008
+***************
+*** 916,922 ****
+  
+       QueryPerformanceCounter(tm);
+       QueryPerformanceFrequency(&fr);
+!      tm->QuadPart +=  (double)msec / 1000.0 * (double)fr.QuadPart;
+  # else
+       long        usec;
+  
+--- 916,922 ----
+  
+       QueryPerformanceCounter(tm);
+       QueryPerformanceFrequency(&fr);
+!      tm->QuadPart += (LONGLONG)((double)msec / 1000.0 * (double)fr.QuadPart);
+  # else
+       long        usec;
+  
+*** ../vim-7.1.231/src/netbeans.c      Sat Jan  5 18:06:33 2008
+--- src/netbeans.c     Mon Jan 14 21:11:02 2008
+***************
+*** 1217,1223 ****
+  
+      oldtext = ml_get(lnum);
+      oldlen = STRLEN(oldtext);
+!     if (first >= oldlen || oldlen == 0)  /* just in case */
+       return;
+      if (lastbyte >= oldlen)
+       lastbyte = oldlen - 1;
+--- 1217,1223 ----
+  
+      oldtext = ml_get(lnum);
+      oldlen = STRLEN(oldtext);
+!     if (first >= (colnr_T)oldlen || oldlen == 0)  /* just in case */
+       return;
+      if (lastbyte >= oldlen)
+       lastbyte = oldlen - 1;
+*** ../vim-7.1.231/src/version.c       Wed Jan 16 20:01:14 2008
+--- src/version.c      Fri Jan 18 11:38:39 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     232,
+  /**/
+
+-- 
+Why is "abbreviation" such a long word?
+
+ /// 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    ///
diff --git a/7.1.233 b/7.1.233
new file mode 100644 (file)
index 0000000..b2f07e3
--- /dev/null
+++ b/7.1.233
@@ -0,0 +1,109 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.233
+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.1.233
+Problem:    Crash when doing Insert mode completion for a user defined
+           command.  (Yegappan Lakshmanan)
+Solution:   Don't use the non-existing command line.
+Files:     src/ex_getln.c
+
+
+*** ../vim-7.1.232/src/ex_getln.c      Fri Jan  4 15:16:57 2008
+--- src/ex_getln.c     Fri Jan 18 13:07:11 2008
+***************
+*** 4655,4661 ****
+  static void * call_user_expand_func __ARGS((void *(*user_expand_func) __ARGS((char_u *, int, char_u **, int)), expand_T      *xp, int *num_file, char_u ***file));
+  
+  /*
+!  * call "user_expand_func()" to invoke a user defined VimL function and return
+   * the result (either a string or a List).
+   */
+      static void *
+--- 4655,4661 ----
+  static void * call_user_expand_func __ARGS((void *(*user_expand_func) __ARGS((char_u *, int, char_u **, int)), expand_T      *xp, int *num_file, char_u ***file));
+  
+  /*
+!  * Call "user_expand_func()" to invoke a user defined VimL function and return
+   * the result (either a string or a List).
+   */
+      static void *
+***************
+*** 4677,4687 ****
+      *num_file = 0;
+      *file = NULL;
+  
+!     keep = ccline.cmdbuff[ccline.cmdlen];
+!     ccline.cmdbuff[ccline.cmdlen] = 0;
+!     sprintf((char *)num, "%d", ccline.cmdpos);
+      args[0] = xp->xp_pattern;
+-     args[1] = ccline.cmdbuff;
+      args[2] = num;
+  
+      /* Save the cmdline, we don't know what the function may do. */
+--- 4677,4698 ----
+      *num_file = 0;
+      *file = NULL;
+  
+!     if (ccline.cmdbuff == NULL)
+!     {
+!      /* Completion from Insert mode, pass fake arguments. */
+!      keep = 0;
+!      sprintf((char *)num, "%d", STRLEN(xp->xp_pattern));
+!      args[1] = xp->xp_pattern;
+!     }
+!     else
+!     {
+!      /* Completion on the command line, pass real arguments. */
+!      keep = ccline.cmdbuff[ccline.cmdlen];
+!      ccline.cmdbuff[ccline.cmdlen] = 0;
+!      sprintf((char *)num, "%d", ccline.cmdpos);
+!      args[1] = ccline.cmdbuff;
+!     }
+      args[0] = xp->xp_pattern;
+      args[2] = num;
+  
+      /* Save the cmdline, we don't know what the function may do. */
+***************
+*** 4694,4701 ****
+  
+      ccline = save_ccline;
+      current_SID = save_current_SID;
+! 
+!     ccline.cmdbuff[ccline.cmdlen] = keep;
+  
+      return ret;
+  }
+--- 4705,4712 ----
+  
+      ccline = save_ccline;
+      current_SID = save_current_SID;
+!     if (ccline.cmdbuff != NULL)
+!      ccline.cmdbuff[ccline.cmdlen] = keep;
+  
+      return ret;
+  }
+*** ../vim-7.1.232/src/version.c       Fri Jan 18 11:40:02 2008
+--- src/version.c      Fri Jan 18 13:01:05 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     233,
+  /**/
+
+-- 
+"I love deadlines.  I especially like the whooshing sound they
+make as they go flying by."
+                         -- Douglas Adams
+
+ /// 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    ///
diff --git a/7.1.234 b/7.1.234
new file mode 100644 (file)
index 0000000..03fa34d
--- /dev/null
+++ b/7.1.234
@@ -0,0 +1,210 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.234
+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.1.234
+Problem:    When diff'ing three files the third one isn't displayed correctly.
+           (Gary Johnson)
+Solution:   Compute the size of diff blocks correctly when merging blocks.
+           Compute filler lines correctly when scrolling.
+Files:     src/diff.c
+
+
+*** ../vim-7.1.233/src/diff.c  Fri Oct 19 18:57:33 2007
+--- src/diff.c Fri Jan 18 17:32:31 2008
+***************
+*** 1299,1305 ****
+           }
+           else
+               /* second overlap of new block with existing block */
+!              dp->df_count[idx_new] += count_new - count_orig;
+  
+           /* Adjust the size of the block to include all the lines to the
+            * end of the existing block or the new diff, whatever ends last. */
+--- 1299,1307 ----
+           }
+           else
+               /* second overlap of new block with existing block */
+!              dp->df_count[idx_new] += count_new - count_orig
+!                  + dpl->df_lnum[idx_orig] + dpl->df_count[idx_orig]
+!                  - (dp->df_lnum[idx_orig] + dp->df_count[idx_orig]);
+  
+           /* Adjust the size of the block to include all the lines to the
+            * end of the existing block or the new diff, whatever ends last. */
+***************
+*** 1628,1641 ****
+      win_T    *fromwin;
+      win_T    *towin;
+  {
+!     buf_T    *buf = fromwin->w_buffer;
+      linenr_T lnum = fromwin->w_topline;
+!     int              idx;
+      diff_T   *dp;
+      int              i;
+  
+!     idx = diff_buf_idx(buf);
+!     if (idx == DB_COUNT)
+       return;         /* safety check */
+  
+      if (curtab->tp_diff_invalid)
+--- 1630,1645 ----
+      win_T    *fromwin;
+      win_T    *towin;
+  {
+!     buf_T    *frombuf = fromwin->w_buffer;
+      linenr_T lnum = fromwin->w_topline;
+!     int              fromidx;
+!     int              toidx;
+      diff_T   *dp;
++     int              max_count;
+      int              i;
+  
+!     fromidx = diff_buf_idx(frombuf);
+!     if (fromidx == DB_COUNT)
+       return;         /* safety check */
+  
+      if (curtab->tp_diff_invalid)
+***************
+*** 1645,1686 ****
+  
+      /* search for a change that includes "lnum" in the list of diffblocks. */
+      for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next)
+!      if (lnum <= dp->df_lnum[idx] + dp->df_count[idx])
+           break;
+      if (dp == NULL)
+      {
+       /* After last change, compute topline relative to end of file; no
+        * filler lines. */
+       towin->w_topline = towin->w_buffer->b_ml.ml_line_count
+!                                         - (buf->b_ml.ml_line_count - lnum);
+      }
+      else
+      {
+       /* Find index for "towin". */
+!      i = diff_buf_idx(towin->w_buffer);
+!      if (i == DB_COUNT)
+           return;             /* safety check */
+  
+!      towin->w_topline = lnum + (dp->df_lnum[i] - dp->df_lnum[idx]);
+!      if (lnum >= dp->df_lnum[idx])
+       {
+!          /* Inside a change: compute filler lines. */
+!          if (dp->df_count[i] == dp->df_count[idx])
+               towin->w_topfill = fromwin->w_topfill;
+!          else if (dp->df_count[i] > dp->df_count[idx])
+           {
+!              if (lnum == dp->df_lnum[idx] + dp->df_count[idx])
+!                  towin->w_topline = dp->df_lnum[i] + dp->df_count[i]
+!                                                       - fromwin->w_topfill;
+           }
+!          else
+           {
+!              if (towin->w_topline >= dp->df_lnum[i] + dp->df_count[i])
+               {
+!                  if (diff_flags & DIFF_FILLER)
+!                      towin->w_topfill = dp->df_lnum[idx]
+!                                                 + dp->df_count[idx] - lnum;
+!                  towin->w_topline = dp->df_lnum[i] + dp->df_count[i];
+               }
+           }
+       }
+--- 1649,1720 ----
+  
+      /* search for a change that includes "lnum" in the list of diffblocks. */
+      for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next)
+!      if (lnum <= dp->df_lnum[fromidx] + dp->df_count[fromidx])
+           break;
+      if (dp == NULL)
+      {
+       /* After last change, compute topline relative to end of file; no
+        * filler lines. */
+       towin->w_topline = towin->w_buffer->b_ml.ml_line_count
+!                                     - (frombuf->b_ml.ml_line_count - lnum);
+      }
+      else
+      {
+       /* Find index for "towin". */
+!      toidx = diff_buf_idx(towin->w_buffer);
+!      if (toidx == DB_COUNT)
+           return;             /* safety check */
+  
+!      towin->w_topline = lnum + (dp->df_lnum[toidx] - dp->df_lnum[fromidx]);
+!      if (lnum >= dp->df_lnum[fromidx])
+       {
+!          /* Inside a change: compute filler lines. With three or more
+!           * buffers we need to know the largest count. */
+!          max_count = 0;
+!          for (i = 0; i < DB_COUNT; ++i)
+!              if (curtab->tp_diffbuf[i] != NULL
+!                                             && max_count < dp->df_count[i])
+!                  max_count = dp->df_count[i];
+! 
+!          if (dp->df_count[toidx] == dp->df_count[fromidx])
+!          {
+!              /* same number of lines: use same filler count */
+               towin->w_topfill = fromwin->w_topfill;
+!          }
+!          else if (dp->df_count[toidx] > dp->df_count[fromidx])
+           {
+!              if (lnum == dp->df_lnum[fromidx] + dp->df_count[fromidx])
+!              {
+!                  /* more lines in towin and fromwin doesn't show diff
+!                   * lines, only filler lines */
+!                  if (max_count - fromwin->w_topfill >= dp->df_count[toidx])
+!                  {
+!                      /* towin also only shows filler lines */
+!                      towin->w_topline = dp->df_lnum[toidx]
+!                                                     + dp->df_count[toidx];
+!                      towin->w_topfill = fromwin->w_topfill;
+!                  }
+!                  else
+!                      /* towin still has some diff lines to show */
+!                      towin->w_topline = dp->df_lnum[toidx]
+!                                           + max_count - fromwin->w_topfill;
+!              }
+           }
+!          else if (towin->w_topline >= dp->df_lnum[toidx]
+!                                                      + dp->df_count[toidx])
+           {
+!              /* less lines in towin and no diff lines to show: compute
+!               * filler lines */
+!              towin->w_topline = dp->df_lnum[toidx] + dp->df_count[toidx];
+!              if (diff_flags & DIFF_FILLER)
+               {
+!                  if (lnum == dp->df_lnum[fromidx] + dp->df_count[fromidx])
+!                      /* fromwin is also out of diff lines */
+!                      towin->w_topfill = fromwin->w_topfill;
+!                  else
+!                      /* fromwin has some diff lines */
+!                      towin->w_topfill = dp->df_lnum[fromidx]
+!                                                         + max_count - lnum;
+               }
+           }
+       }
+*** ../vim-7.1.233/src/version.c       Fri Jan 18 13:15:32 2008
+--- src/version.c      Fri Jan 18 17:37:32 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     234,
+  /**/
+
+-- 
+ERIC IDLE PLAYED: THE DEAD COLLECTOR, MR BINT (A VILLAGE NE'ER-DO -WELL VERY
+                  KEEN ON BURNING WITCHES), SIR ROBIN, THE GUARD WHO DOESN'T
+                  HICOUGH BUT TRIES TO GET THINGS STRAIGHT, CONCORDE (SIR
+                  LAUNCELOT'S TRUSTY STEED), ROGER THE SHRUBBER (A SHRUBBER),
+                  BROTHER MAYNARD
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.235 b/7.1.235
new file mode 100644 (file)
index 0000000..4ea2e39
--- /dev/null
+++ b/7.1.235
@@ -0,0 +1,199 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.235
+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.1.235
+Problem:    Pattern matching is slow when using a lot of simple patterns.
+Solution:   Avoid allocating memory by not freeing it when it's not so much.
+           (Alexei Alexandrov)
+Files:     src/regexp.c
+
+
+*** ../vim-7.1.234/src/regexp.c        Wed Jan  2 15:34:48 2008
+--- src/regexp.c       Fri Jan 18 20:35:21 2008
+***************
+*** 378,391 ****
+  
+  static char_u                *reg_prev_sub = NULL;
+  
+- #if defined(EXITFREE) || defined(PROTO)
+-     void
+- free_regexp_stuff()
+- {
+-     vim_free(reg_prev_sub);
+- }
+- #endif
+- 
+  /*
+   * REGEXP_INRANGE contains all characters which are always special in a []
+   * range after '\'.
+--- 378,383 ----
+***************
+*** 3206,3217 ****
+  } backpos_T;
+  
+  /*
+!  * regstack and backpos are used by regmatch().  They are kept over calls to
+!  * avoid invoking malloc() and free() often.
+   */
+! static garray_T      regstack;       /* stack with regitem_T items, sometimes
+!                                 preceded by regstar_T or regbehind_T. */
+! static garray_T      backpos;        /* table with backpos_T for BACK */
+  
+  /*
+   * Get pointer to the line "lnum", which is relative to "reg_firstlnum".
+--- 3198,3236 ----
+  } backpos_T;
+  
+  /*
+!  * "regstack" and "backpos" are used by regmatch().  They are kept over calls
+!  * to avoid invoking malloc() and free() often.
+!  * "regstack" is a stack with regitem_T items, sometimes preceded by regstar_T
+!  * or regbehind_T.
+!  * "backpos_T" is a table with backpos_T for BACK
+!  */
+! static garray_T      regstack = {0, 0, 0, 0, NULL};
+! static garray_T      backpos = {0, 0, 0, 0, NULL};
+! 
+! /*
+!  * Both for regstack and backpos tables we use the following strategy of
+!  * allocation (to reduce malloc/free calls):
+!  * - Initial size is fairly small.
+!  * - When needed, the tables are grown bigger (8 times at first, double after
+!  *   that).
+!  * - After executing the match we free the memory only if the array has grown.
+!  *   Thus the memory is kept allocated when it's at the initial size.
+!  * This makes it fast while not keeping a lot of memory allocated.
+!  * A three times speed increase was observed when using many simple patterns.
+   */
+! #define REGSTACK_INITIAL     2048
+! #define BACKPOS_INITIAL              64
+! 
+! #if defined(EXITFREE) || defined(PROTO)
+!     void
+! free_regexp_stuff()
+! {
+!     ga_clear(&regstack);
+!     ga_clear(&backpos);
+!     vim_free(reg_tofree);
+!     vim_free(reg_prev_sub);
+! }
+! #endif
+  
+  /*
+   * Get pointer to the line "lnum", which is relative to "reg_firstlnum".
+***************
+*** 3346,3360 ****
+      char_u   *s;
+      long     retval = 0L;
+  
+!     reg_tofree = NULL;
+! 
+!     /* Init the regstack empty.  Use an item size of 1 byte, since we push
+!      * different things onto it.  Use a large grow size to avoid reallocating
+!      * it too often. */
+!     ga_init2(&regstack, 1, 10000);
+! 
+!     /* Init the backpos table empty. */
+!     ga_init2(&backpos, sizeof(backpos_T), 10);
+  
+      if (REG_MULTI)
+      {
+--- 3365,3389 ----
+      char_u   *s;
+      long     retval = 0L;
+  
+!     /* Create "regstack" and "backpos" if they are not allocated yet.
+!      * We allocate *_INITIAL amount of bytes first and then set the grow size
+!      * to much bigger value to avoid many malloc calls in case of deep regular
+!      * expressions.  */
+!     if (regstack.ga_data == NULL)
+!     {
+!      /* Use an item size of 1 byte, since we push different things
+!       * onto the regstack. */
+!      ga_init2(&regstack, 1, REGSTACK_INITIAL);
+!      ga_grow(&regstack, REGSTACK_INITIAL);
+!      regstack.ga_growsize = REGSTACK_INITIAL * 8;
+!     }
+! 
+!     if (backpos.ga_data == NULL)
+!     {
+!      ga_init2(&backpos, sizeof(backpos_T), BACKPOS_INITIAL);
+!      ga_grow(&backpos, BACKPOS_INITIAL);
+!      backpos.ga_growsize = BACKPOS_INITIAL * 8;
+!     }
+  
+      if (REG_MULTI)
+      {
+***************
+*** 3525,3533 ****
+      }
+  
+  theend:
+!     vim_free(reg_tofree);
+!     ga_clear(&regstack);
+!     ga_clear(&backpos);
+  
+      return retval;
+  }
+--- 3554,3570 ----
+      }
+  
+  theend:
+!     /* Free "reg_tofree" when it's a bit big.
+!      * Free regstack and backpos if they are bigger than their initial size. */
+!     if (reg_tofreelen > 400)
+!     {
+!      vim_free(reg_tofree);
+!      reg_tofree = NULL;
+!     }
+!     if (regstack.ga_maxlen > REGSTACK_INITIAL)
+!      ga_clear(&regstack);
+!     if (backpos.ga_maxlen > BACKPOS_INITIAL)
+!      ga_clear(&backpos);
+  
+      return retval;
+  }
+***************
+*** 3717,3724 ****
+  #define RA_MATCH     4       /* successful match */
+  #define RA_NOMATCH   5       /* didn't match */
+  
+!   /* Init the regstack and backpos table empty.  They are initialized and
+!    * freed in vim_regexec_both() to reduce malloc()/free() calls. */
+    regstack.ga_len = 0;
+    backpos.ga_len = 0;
+  
+--- 3754,3761 ----
+  #define RA_MATCH     4       /* successful match */
+  #define RA_NOMATCH   5       /* didn't match */
+  
+!   /* Make "regstack" and "backpos" empty.  They are allocated and freed in
+!    * vim_regexec_both() to reduce malloc()/free() calls. */
+    regstack.ga_len = 0;
+    backpos.ga_len = 0;
+  
+*** ../vim-7.1.234/src/version.c       Fri Jan 18 17:39:10 2008
+--- src/version.c      Fri Jan 18 20:33:26 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     235,
+  /**/
+
+-- 
+NEIL INNES PLAYED: THE FIRST SELF-DESTRUCTIVE MONK, ROBIN'S LEAST FAVORITE
+                   MINSTREL, THE PAGE CRUSHED BY A RABBIT, THE OWNER OF A DUCK
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// 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    ///
diff --git a/7.1.236 b/7.1.236
new file mode 100644 (file)
index 0000000..32944c7
--- /dev/null
+++ b/7.1.236
@@ -0,0 +1,920 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.236
+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.1.236
+Problem:    When using 'incsearch' and 'hlsearch' a complicated pattern may
+           make Vim hang until CTRL-C is pressed.
+Solution:   Add the 'redrawtime' option.
+Files:     runtime/doc/options.txt, src/ex_cmds.c, src/ex_docmd.c,
+           src/ex_getln.c, src/gui.c, src/misc1.c, src/normal.c,
+           src/option.c, src/quickfix.c, src/regexp.c, src/proto/regexp.pro,
+           src/proto/search.pro, src/search.c, src/screen.c,
+           src/option.h, src/spell.c, src/structs.h, src/syntax.c, src/tag.c,
+           src/vim.h
+
+
+*** ../vim-7.1.235/runtime/doc/options.txt     Sun Aug 12 16:55:01 2007
+--- runtime/doc/options.txt    Sat Jan 19 14:01:22 2008
+***************
+*** 3618,3623 ****
+--- 3636,3642 ----
+       When you get bored looking at the highlighted matches, you can turn it
+       off with |:nohlsearch|.  As soon as you use a search command, the
+       highlighting comes back.
++      'redrawtime' specifies the maximum time spend on finding matches.
+       When the search pattern can match an end-of-line, Vim will try to
+       highlight all of the matched text.  However, this depends on where the
+       search starts.  This will be the first line in the window or the first
+***************
+*** 3851,3856 ****
+--- 3870,3879 ----
+       original position when no match is found and when pressing <Esc>.  You
+       still need to finish the search command with <Enter> to move the
+       cursor to the match.
++      When compiled with the |+reltime| feature Vim only searches for about
++      half a second.  With a complicated pattern and/or a lot of text the
++      match may not be found.  This is to avoid that Vim hangs while you
++      are typing the pattern.
+       The highlighting can be set with the 'i' flag in 'highlight'.
+       See also: 'hlsearch'.
+       CTRL-L can be used to add one character from after the current match
+***************
+*** 5185,5190 ****
+--- 5210,5227 ----
+       {not in Vi:}  When using the ":view" command the 'readonly' option is
+       set for the newly edited buffer.
+  
++                                              *'redrawtime'* *'rdt'*
++ 'redrawtime' 'rdt'   number  (default 2000)
++                      global
++                      {not in Vi}
++                      {only available when compiled with the |+reltime|
++                      feature}
++      The time in milliseconds for redrawing the display.  This applies to
++      searching for patterns for 'hlsearch' and |:match| highlighting.
++      When redrawing takes more than this many milliseconds no further
++      matches will be highlighted.  This is used to avoid that Vim hangs
++      when using a very complicated pattern.
++ 
+                                               *'remap'* *'noremap'*
+  'remap'                      boolean (default on)
+                       global
+*** ../vim-7.1.235/src/ex_cmds.c       Sun Jan 13 13:30:34 2008
+--- src/ex_cmds.c      Sat Jan 19 13:04:28 2008
+***************
+*** 4446,4452 ****
+  #endif
+               ); ++lnum)
+      {
+!      nmatch = vim_regexec_multi(&regmatch, curwin, curbuf, lnum, (colnr_T)0);
+       if (nmatch)
+       {
+           colnr_T     copycol;
+--- 4446,4453 ----
+  #endif
+               ); ++lnum)
+      {
+!      nmatch = vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
+!                                                          (colnr_T)0, NULL);
+       if (nmatch)
+       {
+           colnr_T     copycol;
+***************
+*** 4957,4963 ****
+                       || (do_ask && !re_lookbehind(regmatch.regprog))
+                       || nmatch_tl > 0
+                       || (nmatch = vim_regexec_multi(&regmatch, curwin,
+!                                     curbuf, sub_firstlnum, matchcol)) == 0
+                       || regmatch.startpos[0].lnum > 0)
+               {
+                   if (new_start != NULL)
+--- 4958,4965 ----
+                       || (do_ask && !re_lookbehind(regmatch.regprog))
+                       || nmatch_tl > 0
+                       || (nmatch = vim_regexec_multi(&regmatch, curwin,
+!                                                      curbuf, sub_firstlnum,
+!                                                       matchcol, NULL)) == 0
+                       || regmatch.startpos[0].lnum > 0)
+               {
+                   if (new_start != NULL)
+***************
+*** 5022,5028 ****
+                   }
+                   if (nmatch == -1 && !lastone)
+                       nmatch = vim_regexec_multi(&regmatch, curwin, curbuf,
+!                                                   sub_firstlnum, matchcol);
+  
+                   /*
+                    * 5. break if there isn't another match in this line
+--- 5024,5030 ----
+                   }
+                   if (nmatch == -1 && !lastone)
+                       nmatch = vim_regexec_multi(&regmatch, curwin, curbuf,
+!                                             sub_firstlnum, matchcol, NULL);
+  
+                   /*
+                    * 5. break if there isn't another match in this line
+***************
+*** 5252,5258 ****
+      for (lnum = eap->line1; lnum <= eap->line2 && !got_int; ++lnum)
+      {
+       /* a match on this line? */
+!      match = vim_regexec_multi(&regmatch, curwin, curbuf, lnum, (colnr_T)0);
+       if ((type == 'g' && match) || (type == 'v' && !match))
+       {
+           ml_setmarked(lnum);
+--- 5254,5261 ----
+      for (lnum = eap->line1; lnum <= eap->line2 && !got_int; ++lnum)
+      {
+       /* a match on this line? */
+!      match = vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
+!                                                          (colnr_T)0, NULL);
+       if ((type == 'g' && match) || (type == 'v' && !match))
+       {
+           ml_setmarked(lnum);
+*** ../vim-7.1.235/src/ex_docmd.c      Sun Jan 13 17:11:25 2008
+--- src/ex_docmd.c     Fri Jan 18 21:01:16 2008
+***************
+*** 3931,3937 ****
+                               curwin->w_cursor.col = 0;
+                           searchcmdlen = 0;
+                           if (!do_search(NULL, c, cmd, 1L,
+!                                    SEARCH_HIS + SEARCH_MSG + SEARCH_START))
+                           {
+                               curwin->w_cursor = pos;
+                               cmd = NULL;
+--- 3931,3938 ----
+                               curwin->w_cursor.col = 0;
+                           searchcmdlen = 0;
+                           if (!do_search(NULL, c, cmd, 1L,
+!                                      SEARCH_HIS + SEARCH_MSG + SEARCH_START,
+!                                      NULL))
+                           {
+                               curwin->w_cursor = pos;
+                               cmd = NULL;
+*** ../vim-7.1.235/src/ex_getln.c      Fri Jan 18 13:15:32 2008
+--- src/ex_getln.c     Fri Jan 18 21:34:42 2008
+***************
+*** 1709,1714 ****
+--- 1709,1717 ----
+       if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
+       {
+           pos_T       end_pos;
++ #ifdef FEAT_RELTIME
++          proftime_T  tm;
++ #endif
+  
+           /* if there is a character waiting, search and redraw later */
+           if (char_avail())
+***************
+*** 1727,1734 ****
+               cursor_off();           /* so the user knows we're busy */
+               out_flush();
+               ++emsg_off;    /* So it doesn't beep if bad expr */
+               i = do_search(NULL, firstc, ccline.cmdbuff, count,
+!                      SEARCH_KEEP + SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK);
+               --emsg_off;
+               /* if interrupted while searching, behave like it failed */
+               if (got_int)
+--- 1730,1747 ----
+               cursor_off();           /* so the user knows we're busy */
+               out_flush();
+               ++emsg_off;    /* So it doesn't beep if bad expr */
++ #ifdef FEAT_RELTIME
++              /* Set the time limit to half a second. */
++              profile_setlimit(500L, &tm);
++ #endif
+               i = do_search(NULL, firstc, ccline.cmdbuff, count,
+!                      SEARCH_KEEP + SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK,
+! #ifdef FEAT_RELTIME
+!                      &tm
+! #else
+!                      NULL
+! #endif
+!                      );
+               --emsg_off;
+               /* if interrupted while searching, behave like it failed */
+               if (got_int)
+*** ../vim-7.1.235/src/gui.c   Thu Jan  3 16:14:25 2008
+--- src/gui.c  Fri Jan 18 21:01:36 2008
+***************
+*** 5052,5058 ****
+       /* Search for the next match. */
+       i = msg_scroll;
+       do_search(NULL, down ? '/' : '?', ga.ga_data, 1L,
+!                                                  SEARCH_MSG + SEARCH_MARK);
+       msg_scroll = i;     /* don't let an error message set msg_scroll */
+      }
+  
+--- 5052,5058 ----
+       /* Search for the next match. */
+       i = msg_scroll;
+       do_search(NULL, down ? '/' : '?', ga.ga_data, 1L,
+!                                            SEARCH_MSG + SEARCH_MARK, NULL);
+       msg_scroll = i;     /* don't let an error message set msg_scroll */
+      }
+  
+*** ../vim-7.1.235/src/misc1.c Thu Jan  3 12:42:38 2008
+--- src/misc1.c        Sat Jan 19 13:04:39 2008
+***************
+*** 437,443 ****
+      {
+       regmatch.rmm_ic = FALSE;
+       regmatch.rmm_maxcol = 0;
+!      if (vim_regexec_multi(&regmatch, curwin, curbuf, lnum, (colnr_T)0))
+       {
+           pos.lnum = regmatch.endpos[0].lnum + lnum;
+           pos.col = regmatch.endpos[0].col;
+--- 437,444 ----
+      {
+       regmatch.rmm_ic = FALSE;
+       regmatch.rmm_maxcol = 0;
+!      if (vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
+!                                                          (colnr_T)0, NULL))
+       {
+           pos.lnum = regmatch.endpos[0].lnum + lnum;
+           pos.col = regmatch.endpos[0].col;
+*** ../vim-7.1.235/src/normal.c        Sat Jan 12 17:11:25 2008
+--- src/normal.c       Fri Jan 18 21:01:47 2008
+***************
+*** 6093,6099 ****
+      curwin->w_set_curswant = TRUE;
+  
+      i = do_search(cap->oap, dir, pat, cap->count1,
+!                               opt | SEARCH_OPT | SEARCH_ECHO | SEARCH_MSG);
+      if (i == 0)
+       clearop(cap->oap);
+      else
+--- 6093,6099 ----
+      curwin->w_set_curswant = TRUE;
+  
+      i = do_search(cap->oap, dir, pat, cap->count1,
+!                         opt | SEARCH_OPT | SEARCH_ECHO | SEARCH_MSG, NULL);
+      if (i == 0)
+       clearop(cap->oap);
+      else
+*** ../vim-7.1.235/src/option.c        Tue Oct  2 20:40:01 2007
+--- src/option.c       Sat Jan 19 13:44:33 2008
+***************
+*** 1991,1996 ****
+--- 1991,2003 ----
+      {"redraw",           NULL,   P_BOOL|P_VI_DEF,
+                           (char_u *)NULL, PV_NONE,
+                           {(char_u *)FALSE, (char_u *)0L}},
++     {"redrawtime",  "rdt",  P_NUM|P_VI_DEF,
++ #ifdef FEAT_RELTIME
++                          (char_u *)&p_rdt, PV_NONE,
++ #else
++                          (char_u *)NULL, PV_NONE,
++ #endif
++                          {(char_u *)2000L, (char_u *)0L}},
+      {"remap",            NULL,   P_BOOL|P_VI_DEF,
+                           (char_u *)&p_remap, PV_NONE,
+                           {(char_u *)TRUE, (char_u *)0L}},
+*** ../vim-7.1.235/src/quickfix.c      Sun Sep 30 14:00:41 2007
+--- src/quickfix.c     Sat Jan 19 13:04:53 2008
+***************
+*** 1803,1809 ****
+           /* Move the cursor to the first line in the buffer */
+           save_cursor = curwin->w_cursor;
+           curwin->w_cursor.lnum = 0;
+!          if (!do_search(NULL, '/', qf_ptr->qf_pattern, (long)1, SEARCH_KEEP))
+               curwin->w_cursor = save_cursor;
+       }
+  
+--- 1803,1810 ----
+           /* Move the cursor to the first line in the buffer */
+           save_cursor = curwin->w_cursor;
+           curwin->w_cursor.lnum = 0;
+!          if (!do_search(NULL, '/', qf_ptr->qf_pattern, (long)1,
+!                                                         SEARCH_KEEP, NULL))
+               curwin->w_cursor = save_cursor;
+       }
+  
+***************
+*** 3159,3165 ****
+           {
+               col = 0;
+               while (vim_regexec_multi(&regmatch, curwin, buf, lnum,
+!                                                                   col) > 0)
+               {
+                   ;
+                   if (qf_add_entry(qi, &prevp,
+--- 3160,3166 ----
+           {
+               col = 0;
+               while (vim_regexec_multi(&regmatch, curwin, buf, lnum,
+!                                                             col, NULL) > 0)
+               {
+                   ;
+                   if (qf_add_entry(qi, &prevp,
+*** ../vim-7.1.235/src/regexp.c        Fri Jan 18 20:36:40 2008
+--- src/regexp.c       Sat Jan 19 15:18:12 2008
+***************
+*** 3040,3046 ****
+  } save_se_T;
+  
+  static char_u        *reg_getline __ARGS((linenr_T lnum));
+! static long  vim_regexec_both __ARGS((char_u *line, colnr_T col));
+  static long  regtry __ARGS((regprog_T *prog, colnr_T col));
+  static void  cleanup_subexpr __ARGS((void));
+  #ifdef FEAT_SYN_HL
+--- 3040,3046 ----
+  } save_se_T;
+  
+  static char_u        *reg_getline __ARGS((linenr_T lnum));
+! static long  vim_regexec_both __ARGS((char_u *line, colnr_T col, proftime_T *tm));
+  static long  regtry __ARGS((regprog_T *prog, colnr_T col));
+  static void  cleanup_subexpr __ARGS((void));
+  #ifdef FEAT_SYN_HL
+***************
+*** 3284,3290 ****
+      ireg_icombine = FALSE;
+  #endif
+      ireg_maxcol = 0;
+!     return (vim_regexec_both(line, col) != 0);
+  }
+  
+  #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+--- 3284,3290 ----
+      ireg_icombine = FALSE;
+  #endif
+      ireg_maxcol = 0;
+!     return (vim_regexec_both(line, col, NULL) != 0);
+  }
+  
+  #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+***************
+*** 3308,3314 ****
+      ireg_icombine = FALSE;
+  #endif
+      ireg_maxcol = 0;
+!     return (vim_regexec_both(line, col) != 0);
+  }
+  #endif
+  
+--- 3308,3314 ----
+      ireg_icombine = FALSE;
+  #endif
+      ireg_maxcol = 0;
+!     return (vim_regexec_both(line, col, NULL) != 0);
+  }
+  #endif
+  
+***************
+*** 3321,3332 ****
+   * match otherwise.
+   */
+      long
+! vim_regexec_multi(rmp, win, buf, lnum, col)
+      regmmatch_T      *rmp;
+      win_T    *win;           /* window in which to search or NULL */
+      buf_T    *buf;           /* buffer in which to search */
+      linenr_T lnum;           /* nr of line to start looking for match */
+      colnr_T  col;            /* column to start looking for match */
+  {
+      long     r;
+      buf_T    *save_curbuf = curbuf;
+--- 3321,3333 ----
+   * match otherwise.
+   */
+      long
+! vim_regexec_multi(rmp, win, buf, lnum, col, tm)
+      regmmatch_T      *rmp;
+      win_T    *win;           /* window in which to search or NULL */
+      buf_T    *buf;           /* buffer in which to search */
+      linenr_T lnum;           /* nr of line to start looking for match */
+      colnr_T  col;            /* column to start looking for match */
++     proftime_T       *tm;            /* timeout limit or NULL */
+  {
+      long     r;
+      buf_T    *save_curbuf = curbuf;
+***************
+*** 3346,3352 ****
+  
+      /* Need to switch to buffer "buf" to make vim_iswordc() work. */
+      curbuf = buf;
+!     r = vim_regexec_both(NULL, col);
+      curbuf = save_curbuf;
+  
+      return r;
+--- 3347,3353 ----
+  
+      /* Need to switch to buffer "buf" to make vim_iswordc() work. */
+      curbuf = buf;
+!     r = vim_regexec_both(NULL, col, tm);
+      curbuf = save_curbuf;
+  
+      return r;
+***************
+*** 3356,3365 ****
+   * Match a regexp against a string ("line" points to the string) or multiple
+   * lines ("line" is NULL, use reg_getline()).
+   */
+      static long
+! vim_regexec_both(line, col)
+      char_u   *line;
+      colnr_T  col;            /* column to start looking for match */
+  {
+      regprog_T        *prog;
+      char_u   *s;
+--- 3357,3368 ----
+   * Match a regexp against a string ("line" points to the string) or multiple
+   * lines ("line" is NULL, use reg_getline()).
+   */
++ /*ARGSUSED*/
+      static long
+! vim_regexec_both(line, col, tm)
+      char_u   *line;
+      colnr_T  col;            /* column to start looking for match */
++     proftime_T       *tm;            /* timeout limit or NULL */
+  {
+      regprog_T        *prog;
+      char_u   *s;
+***************
+*** 3502,3507 ****
+--- 3505,3513 ----
+      }
+      else
+      {
++ #ifdef FEAT_RELTIME
++      int tm_count = 0;
++ #endif
+       /* Messy cases:  unanchored match. */
+       while (!got_int)
+       {
+***************
+*** 3550,3555 ****
+--- 3556,3570 ----
+           else
+  #endif
+               ++col;
++ #ifdef FEAT_RELTIME
++          /* Check for timeout once in a twenty times to avoid overhead. */
++          if (tm != NULL && ++tm_count == 20)
++          {
++              tm_count = 0;
++              if (profile_passed_limit(tm))
++                  break;
++          }
++ #endif
+       }
+      }
+  
+*** ../vim-7.1.235/src/proto/regexp.pro        Sat May  5 19:42:08 2007
+--- src/proto/regexp.pro       Sat Jan 19 13:14:09 2008
+***************
+*** 1,13 ****
+  /* regexp.c */
+- void free_regexp_stuff __ARGS((void));
+  int re_multiline __ARGS((regprog_T *prog));
+  int re_lookbehind __ARGS((regprog_T *prog));
+  char_u *skip_regexp __ARGS((char_u *startp, int dirc, int magic, char_u **newp));
+  regprog_T *vim_regcomp __ARGS((char_u *expr, int re_flags));
+  int vim_regcomp_had_eol __ARGS((void));
+  int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+  int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+! long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col));
+  reg_extmatch_T *ref_extmatch __ARGS((reg_extmatch_T *em));
+  void unref_extmatch __ARGS((reg_extmatch_T *em));
+  char_u *regtilde __ARGS((char_u *source, int magic));
+--- 1,13 ----
+  /* regexp.c */
+  int re_multiline __ARGS((regprog_T *prog));
+  int re_lookbehind __ARGS((regprog_T *prog));
+  char_u *skip_regexp __ARGS((char_u *startp, int dirc, int magic, char_u **newp));
+  regprog_T *vim_regcomp __ARGS((char_u *expr, int re_flags));
+  int vim_regcomp_had_eol __ARGS((void));
++ void free_regexp_stuff __ARGS((void));
+  int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+  int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+! long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
+  reg_extmatch_T *ref_extmatch __ARGS((reg_extmatch_T *em));
+  void unref_extmatch __ARGS((reg_extmatch_T *em));
+  char_u *regtilde __ARGS((char_u *source, int magic));
+*** ../vim-7.1.235/src/proto/search.pro        Sun Jan  6 20:05:36 2008
+--- src/proto/search.pro       Fri Jan 18 21:03:49 2008
+***************
+*** 11,17 ****
+  void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
+  void last_pat_prog __ARGS((regmmatch_T *regmatch));
+  int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum, proftime_T *tm));
+! int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options));
+  int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
+  int searchc __ARGS((cmdarg_T *cap, int t_cmd));
+  pos_T *findmatch __ARGS((oparg_T *oap, int initc));
+--- 11,17 ----
+  void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
+  void last_pat_prog __ARGS((regmmatch_T *regmatch));
+  int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum, proftime_T *tm));
+! int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options, proftime_T *tm));
+  int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
+  int searchc __ARGS((cmdarg_T *cap, int t_cmd));
+  pos_T *findmatch __ARGS((oparg_T *oap, int initc));
+*** ../vim-7.1.235/src/search.c        Sun Jan  6 20:05:36 2008
+--- src/search.c       Sat Jan 19 13:13:25 2008
+***************
+*** 606,612 ****
+                * Look for a match somewhere in line "lnum".
+                */
+               nmatched = vim_regexec_multi(&regmatch, win, buf,
+!                                                          lnum, (colnr_T)0);
+               /* Abort searching on an error (e.g., out of stack). */
+               if (called_emsg)
+                   break;
+--- 606,618 ----
+                * Look for a match somewhere in line "lnum".
+                */
+               nmatched = vim_regexec_multi(&regmatch, win, buf,
+!                                                    lnum, (colnr_T)0,
+! #ifdef FEAT_RELTIME
+!                                                    tm
+! #else
+!                                                    NULL
+! #endif
+!                                                    );
+               /* Abort searching on an error (e.g., out of stack). */
+               if (called_emsg)
+                   break;
+***************
+*** 615,623 ****
+                   /* match may actually be in another line when using \zs */
+                   matchpos = regmatch.startpos[0];
+                   endpos = regmatch.endpos[0];
+! # ifdef FEAT_EVAL
+                   submatch = first_submatch(&regmatch);
+! # endif
+                   /* Line me be past end of buffer for "\n\zs". */
+                   if (lnum + matchpos.lnum > buf->b_ml.ml_line_count)
+                       ptr = (char_u *)"";
+--- 621,629 ----
+                   /* match may actually be in another line when using \zs */
+                   matchpos = regmatch.startpos[0];
+                   endpos = regmatch.endpos[0];
+! #ifdef FEAT_EVAL
+                   submatch = first_submatch(&regmatch);
+! #endif
+                   /* Line me be past end of buffer for "\n\zs". */
+                   if (lnum + matchpos.lnum > buf->b_ml.ml_line_count)
+                       ptr = (char_u *)"";
+***************
+*** 693,699 ****
+                           if (ptr[matchcol] == NUL
+                                   || (nmatched = vim_regexec_multi(&regmatch,
+                                             win, buf, lnum + matchpos.lnum,
+!                                            matchcol)) == 0)
+                           {
+                               match_ok = FALSE;
+                               break;
+--- 699,711 ----
+                           if (ptr[matchcol] == NUL
+                                   || (nmatched = vim_regexec_multi(&regmatch,
+                                             win, buf, lnum + matchpos.lnum,
+!                                            matchcol,
+! #ifdef FEAT_RELTIME
+!                                            tm
+! #else
+!                                            NULL
+! #endif
+!                                            )) == 0)
+                           {
+                               match_ok = FALSE;
+                               break;
+***************
+*** 799,805 ****
+                           if (ptr[matchcol] == NUL
+                                   || (nmatched = vim_regexec_multi(&regmatch,
+                                             win, buf, lnum + matchpos.lnum,
+!                                                            matchcol)) == 0)
+                               break;
+  
+                           /* Need to get the line pointer again, a
+--- 811,823 ----
+                           if (ptr[matchcol] == NUL
+                                   || (nmatched = vim_regexec_multi(&regmatch,
+                                             win, buf, lnum + matchpos.lnum,
+!                                            matchcol,
+! #ifdef FEAT_RELTIME
+!                                            tm
+! #else
+!                                            NULL
+! #endif
+!                                          )) == 0)
+                               break;
+  
+                           /* Need to get the line pointer again, a
+***************
+*** 977,988 ****
+   * return 0 for failure, 1 for found, 2 for found and line offset added
+   */
+      int
+! do_search(oap, dirc, pat, count, options)
+      oparg_T      *oap;       /* can be NULL */
+      int                  dirc;       /* '/' or '?' */
+      char_u      *pat;
+      long         count;
+      int                  options;
+  {
+      pos_T        pos;        /* position of the last match */
+      char_u       *searchstr;
+--- 995,1007 ----
+   * return 0 for failure, 1 for found, 2 for found and line offset added
+   */
+      int
+! do_search(oap, dirc, pat, count, options, tm)
+      oparg_T      *oap;       /* can be NULL */
+      int                  dirc;       /* '/' or '?' */
+      char_u      *pat;
+      long         count;
+      int                  options;
++     proftime_T           *tm;        /* timeout limit or NULL */
+  {
+      pos_T        pos;        /* position of the last match */
+      char_u       *searchstr;
+***************
+*** 1256,1262 ****
+                      (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS
+                       + SEARCH_MSG + SEARCH_START
+                       + ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))),
+!              RE_LAST, (linenr_T)0, NULL);
+  
+       if (dircp != NULL)
+           *dircp = dirc;      /* restore second '/' or '?' for normal_cmd() */
+--- 1275,1281 ----
+                      (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS
+                       + SEARCH_MSG + SEARCH_START
+                       + ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))),
+!              RE_LAST, (linenr_T)0, tm);
+  
+       if (dircp != NULL)
+           *dircp = dirc;      /* restore second '/' or '?' for normal_cmd() */
+*** ../vim-7.1.235/src/screen.c        Sat Jan 12 16:45:25 2008
+--- src/screen.c       Sat Jan 19 13:52:29 2008
+***************
+*** 848,858 ****
+--- 848,863 ----
+       cur->hl.buf = buf;
+       cur->hl.lnum = 0;
+       cur->hl.first_lnum = 0;
++ # ifdef FEAT_RELTIME
++      /* Set the time limit to 'redrawtime'. */
++      profile_setlimit(p_rdt, &(cur->hl.tm));
++ # endif
+       cur = cur->next;
+      }
+      search_hl.buf = buf;
+      search_hl.lnum = 0;
+      search_hl.first_lnum = 0;
++     /* time limit is set at the toplevel, for all windows */
+  #endif
+  
+  #ifdef FEAT_LINEBREAK
+***************
+*** 6462,6467 ****
+--- 6467,6476 ----
+      {
+       last_pat_prog(&search_hl.rm);
+       search_hl.attr = hl_attr(HLF_L);
++ # ifdef FEAT_RELTIME
++      /* Set the time limit to 'redrawtime'. */
++      profile_setlimit(p_rdt, &search_hl.tm);
++ # endif
+      }
+  }
+  
+***************
+*** 6587,6592 ****
+--- 6596,6609 ----
+      called_emsg = FALSE;
+      for (;;)
+      {
++ #ifdef FEAT_RELTIME
++      /* Stop searching after passing the time limit. */
++      if (profile_passed_limit(&(shl->tm)))
++      {
++          shl->lnum = 0;              /* no match found in time */
++          break;
++      }
++ #endif
+       /* Three situations:
+        * 1. No useful previous match: search from start of line.
+        * 2. Not Vi compatible or empty match: continue at next character.
+***************
+*** 6620,6626 ****
+           matchcol = shl->rm.endpos[0].col;
+  
+       shl->lnum = lnum;
+!      nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum, matchcol);
+       if (called_emsg)
+       {
+           /* Error while handling regexp: stop using this regexp. */
+--- 6637,6649 ----
+           matchcol = shl->rm.endpos[0].col;
+  
+       shl->lnum = lnum;
+!      nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum, matchcol,
+! #ifdef FEAT_RELTIME
+!              &(shl->tm)
+! #else
+!              NULL
+! #endif
+!              );
+       if (called_emsg)
+       {
+           /* Error while handling regexp: stop using this regexp. */
+*** ../vim-7.1.235/src/option.h        Thu May 10 20:34:47 2007
+--- src/option.h       Sat Jan 19 13:45:51 2008
+***************
+*** 633,638 ****
+--- 633,641 ----
+  #ifdef FEAT_SEARCHPATH
+  EXTERN char_u        *p_cdpath;      /* 'cdpath' */
+  #endif
++ #ifdef FEAT_RELTIME
++ EXTERN long  p_rdt;          /* 'redrawtime' */
++ #endif
+  EXTERN int   p_remap;        /* 'remap' */
+  EXTERN long  p_report;       /* 'report' */
+  #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+*** ../vim-7.1.235/src/spell.c Sat Jan 12 16:45:25 2008
+--- src/spell.c        Fri Jan 18 21:02:47 2008
+***************
+*** 10343,10349 ****
+      curwin->w_cursor.lnum = 0;
+      while (!got_int)
+      {
+!      if (do_search(NULL, '/', frompat, 1L, SEARCH_KEEP) == 0
+                                                  || u_save_cursor() == FAIL)
+           break;
+  
+--- 10343,10349 ----
+      curwin->w_cursor.lnum = 0;
+      while (!got_int)
+      {
+!      if (do_search(NULL, '/', frompat, 1L, SEARCH_KEEP, NULL) == 0
+                                                  || u_save_cursor() == FAIL)
+           break;
+  
+*** ../vim-7.1.235/src/structs.h       Mon Oct  1 22:53:27 2007
+--- src/structs.h      Fri Jan 18 21:18:53 2008
+***************
+*** 1717,1722 ****
+--- 1717,1725 ----
+      linenr_T first_lnum;     /* first lnum to search for multi-line pat */
+      colnr_T  startcol; /* in win_line() points to char where HL starts */
+      colnr_T  endcol;  /* in win_line() points to char where HL ends */
++ #ifdef FEAT_RELTIME
++     proftime_T       tm;     /* for a time limit */
++ #endif
+  } match_T;
+  
+  /*
+*** ../vim-7.1.235/src/syntax.c        Sun Jan 13 17:39:29 2008
+--- src/syntax.c       Sat Jan 19 13:13:49 2008
+***************
+*** 3097,3103 ****
+      colnr_T  col;
+  {
+      rmp->rmm_maxcol = syn_buf->b_p_smc;
+!     if (vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col) > 0)
+      {
+       rmp->startpos[0].lnum += lnum;
+       rmp->endpos[0].lnum += lnum;
+--- 3097,3103 ----
+      colnr_T  col;
+  {
+      rmp->rmm_maxcol = syn_buf->b_p_smc;
+!     if (vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col, NULL) > 0)
+      {
+       rmp->startpos[0].lnum += lnum;
+       rmp->endpos[0].lnum += lnum;
+*** ../vim-7.1.235/src/tag.c   Thu May 10 19:44:07 2007
+--- src/tag.c  Fri Jan 18 21:03:41 2008
+***************
+*** 3191,3197 ****
+  #endif
+           save_lnum = curwin->w_cursor.lnum;
+           curwin->w_cursor.lnum = 0;  /* start search before first line */
+!          if (do_search(NULL, pbuf[0], pbuf + 1, (long)1, search_options))
+               retval = OK;
+           else
+           {
+--- 3191,3198 ----
+  #endif
+           save_lnum = curwin->w_cursor.lnum;
+           curwin->w_cursor.lnum = 0;  /* start search before first line */
+!          if (do_search(NULL, pbuf[0], pbuf + 1, (long)1,
+!                                                      search_options, NULL))
+               retval = OK;
+           else
+           {
+***************
+*** 3203,3209 ****
+                */
+               p_ic = TRUE;
+               if (!do_search(NULL, pbuf[0], pbuf + 1, (long)1,
+!                                                            search_options))
+               {
+                   /*
+                    * Failed to find pattern, take a guess: "^func  ("
+--- 3204,3210 ----
+                */
+               p_ic = TRUE;
+               if (!do_search(NULL, pbuf[0], pbuf + 1, (long)1,
+!                                                      search_options, NULL))
+               {
+                   /*
+                    * Failed to find pattern, take a guess: "^func  ("
+***************
+*** 3213,3225 ****
+                   cc = *tagp.tagname_end;
+                   *tagp.tagname_end = NUL;
+                   sprintf((char *)pbuf, "^%s\\s\\*(", tagp.tagname);
+!                  if (!do_search(NULL, '/', pbuf, (long)1, search_options))
+                   {
+                       /* Guess again: "^char * \<func  (" */
+                       sprintf((char *)pbuf, "^\\[#a-zA-Z_]\\.\\*\\<%s\\s\\*(",
+                                                               tagp.tagname);
+                       if (!do_search(NULL, '/', pbuf, (long)1,
+!                                                            search_options))
+                           found = 0;
+                   }
+                   *tagp.tagname_end = cc;
+--- 3214,3227 ----
+                   cc = *tagp.tagname_end;
+                   *tagp.tagname_end = NUL;
+                   sprintf((char *)pbuf, "^%s\\s\\*(", tagp.tagname);
+!                  if (!do_search(NULL, '/', pbuf, (long)1,
+!                                                      search_options, NULL))
+                   {
+                       /* Guess again: "^char * \<func  (" */
+                       sprintf((char *)pbuf, "^\\[#a-zA-Z_]\\.\\*\\<%s\\s\\*(",
+                                                               tagp.tagname);
+                       if (!do_search(NULL, '/', pbuf, (long)1,
+!                                                      search_options, NULL))
+                           found = 0;
+                   }
+                   *tagp.tagname_end = cc;
+*** ../vim-7.1.235/src/vim.h   Sat Jan  5 13:34:01 2008
+--- src/vim.h  Fri Jan 18 21:29:22 2008
+***************
+*** 1550,1555 ****
+--- 1550,1565 ----
+  # define MB_MAXBYTES 21
+  #endif
+  
++ #if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO)
++ # ifdef WIN3264
++ typedef LARGE_INTEGER proftime_T;
++ # else
++ typedef struct timeval proftime_T;
++ # endif
++ #else
++ typedef int proftime_T;          /* dummy for function prototypes */
++ #endif
++ 
+  /* Include option.h before structs.h, because the number of window-local and
+   * buffer-local options is used there. */
+  #include "option.h"      /* options and default values */
+***************
+*** 1760,1775 ****
+  # include <io.h>         /* for access() */
+  
+  # define stat(a,b) (access(a,0) ? -1 : stat(a,b))
+- #endif
+- 
+- #if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO)
+- # ifdef WIN3264
+- typedef LARGE_INTEGER proftime_T;
+- # else
+- typedef struct timeval proftime_T;
+- # endif
+- #else
+- typedef int proftime_T;          /* dummy for function prototypes */
+  #endif
+  
+  #include "ex_cmds.h"     /* Ex command defines */
+--- 1770,1775 ----
+*** ../vim-7.1.235/src/version.c       Fri Jan 18 20:36:40 2008
+--- src/version.c      Sat Jan 19 15:19:48 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     236,
+  /**/
+
+-- 
+Every time I lose weight, it finds me again!
+
+ /// 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    ///
This page took 0.241748 seconds and 4 git commands to generate.