]> git.pld-linux.org Git - packages/vim.git/commitdiff
- added auto/ac/vim-6_2_071-1
authorArtur Frysiak <artur@frysiak.net>
Thu, 21 Aug 2003 11:17:58 +0000 (11:17 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    6.2.061 -> 1.1
    6.2.062 -> 1.1
    6.2.063 -> 1.1
    6.2.064 -> 1.1
    6.2.065 -> 1.1
    6.2.066 -> 1.1
    6.2.067 -> 1.1
    6.2.068 -> 1.1
    6.2.069 -> 1.1
    6.2.070 -> 1.1
    6.2.071 -> 1.1

6.2.061 [new file with mode: 0644]
6.2.062 [new file with mode: 0644]
6.2.063 [new file with mode: 0644]
6.2.064 [new file with mode: 0644]
6.2.065 [new file with mode: 0644]
6.2.066 [new file with mode: 0644]
6.2.067 [new file with mode: 0644]
6.2.068 [new file with mode: 0644]
6.2.069 [new file with mode: 0644]
6.2.070 [new file with mode: 0644]
6.2.071 [new file with mode: 0644]

diff --git a/6.2.061 b/6.2.061
new file mode 100644 (file)
index 0000000..ba82586
--- /dev/null
+++ b/6.2.061
@@ -0,0 +1,48 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.061
+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 6.2.061
+Problem:    GUI: Using the left mouse button with the shift key should work
+           like "*" but it scrolls instead. (Martin Beller)
+Solution:   Don't recognize an rxvt scroll wheel event when using the GUI.
+Files:     src/term.c
+
+
+*** ../vim-6.2.060/src/term.c  Fri Jul 25 22:25:04 2003
+--- src/term.c Sat Aug  9 15:43:24 2003
+***************
+*** 4053,4058 ****
+--- 4053,4061 ----
+               }
+  #   ifdef FEAT_MOUSE_XTERM
+               else if (held_button == MOUSE_RELEASE
++ #    ifdef FEAT_GUI
++                      && !gui.in_use
++ #    endif
+                       && (mouse_code == 0x23 || mouse_code == 0x24))
+               {
+                   /* Apparently used by rxvt scroll wheel. */
+*** ../vim-6.2.060/src/version.c       Mon Aug  4 22:04:43 2003
+--- src/version.c      Sat Aug  9 15:43:33 2003
+***************
+*** 632,633 ****
+--- 632,635 ----
+  {   /* Add new patch number below this line */
++ /**/
++     61,
+  /**/
+
+-- 
+From "know your smileys":
+ :~)   A man with a tape recorder up his nose
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///
diff --git a/6.2.062 b/6.2.062
new file mode 100644 (file)
index 0000000..b0e66d5
--- /dev/null
+++ b/6.2.062
@@ -0,0 +1,55 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.062
+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 6.2.062
+Problem:    When one buffer uses a syntax with "containedin" and another
+           buffer does not, redrawing depends on what the current buffer is.
+           (Brett Pershing Stahlman)
+Solution:   Use "syn_buf" instead of "curbuf" to get the b_syn_containedin
+           flag.
+Files:     src/syntax.c
+
+
+*** ../vim-6.2.061/src/syntax.c        Fri May  2 20:50:03 2003
+--- src/syntax.c       Sun Aug 10 14:46:54 2003
+***************
+*** 1790,1796 ****
+       else
+           cur_si = NULL;
+  
+!      if (curbuf->b_syn_containedin || cur_si == NULL
+                                             || cur_si->si_cont_list != NULL)
+       {
+           /*
+--- 1790,1796 ----
+       else
+           cur_si = NULL;
+  
+!      if (syn_buf->b_syn_containedin || cur_si == NULL
+                                             || cur_si->si_cont_list != NULL)
+       {
+           /*
+*** ../vim-6.2.061/src/version.c       Sat Aug  9 15:44:32 2003
+--- src/version.c      Sun Aug 10 14:51:43 2003
+***************
+*** 632,633 ****
+--- 632,635 ----
+  {   /* Add new patch number below this line */
++ /**/
++     62,
+  /**/
+
+-- 
+From "know your smileys":
+ :q    vi user saying, "How do I get out of this damn emacs editor?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///
diff --git a/6.2.063 b/6.2.063
new file mode 100644 (file)
index 0000000..35c34f6
--- /dev/null
+++ b/6.2.063
@@ -0,0 +1,848 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.063
+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 6.2.063
+Problem:    When using custom completion end up with no matches.
+Solution:   Make cmd_numfiles and cmd_files local to completion to avoid that
+           they are overwritten when ExpandOne() is called recursively by
+           f_glob().
+Files:     src/eval.c, src/ex_docmd.c, src/ex_getln.c, src/proto/ex_getln.pro,
+           src/misc1.c, src/structs.h, src/tag.c
+
+
+*** ../vim-6.2.062/src/eval.c  Sun Jul 27 15:01:56 2003
+--- src/eval.c Thu Jul 31 19:47:34 2003
+***************
+*** 3933,3941 ****
+        * for 'suffixes' and 'wildignore' */
+       if (argvars[1].var_type != VAR_UNKNOWN && get_var_number(&argvars[1]))
+           flags |= WILD_KEEP_ALL;
+       xpc.xp_context = EXPAND_FILES;
+-      xpc.xp_backslash = XP_BS_NONE;
+       retvar->var_val.var_string = ExpandOne(&xpc, s, NULL, flags, WILD_ALL);
+      }
+  }
+  
+--- 3935,3944 ----
+        * for 'suffixes' and 'wildignore' */
+       if (argvars[1].var_type != VAR_UNKNOWN && get_var_number(&argvars[1]))
+           flags |= WILD_KEEP_ALL;
++      ExpandInit(&xpc);
+       xpc.xp_context = EXPAND_FILES;
+       retvar->var_val.var_string = ExpandOne(&xpc, s, NULL, flags, WILD_ALL);
++      ExpandCleanup(&xpc);
+      }
+  }
+  
+***************
+*** 4543,4553 ****
+  {
+      expand_T xpc;
+  
+      xpc.xp_context = EXPAND_FILES;
+-     xpc.xp_backslash = XP_BS_NONE;
+      retvar->var_type = VAR_STRING;
+      retvar->var_val.var_string = ExpandOne(&xpc, get_var_string(&argvars[0]),
+                                    NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL);
+  }
+  
+  /*
+--- 4546,4557 ----
+  {
+      expand_T xpc;
+  
++     ExpandInit(&xpc);
+      xpc.xp_context = EXPAND_FILES;
+      retvar->var_type = VAR_STRING;
+      retvar->var_val.var_string = ExpandOne(&xpc, get_var_string(&argvars[0]),
+                                    NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL);
++     ExpandCleanup(&xpc);
+  }
+  
+  /*
+*** ../vim-6.2.062/src/ex_docmd.c      Sun Jul 27 14:35:27 2003
+--- src/ex_docmd.c     Sat Jul 26 18:36:31 2003
+***************
+*** 3694,3704 ****
+               {
+                   expand_T    xpc;
+  
+                   xpc.xp_context = EXPAND_FILES;
+!                  xpc.xp_backslash = XP_BS_NONE;
+!                  if ((p = ExpandOne(&xpc, eap->arg, NULL,
+                                           WILD_LIST_NOTFOUND|WILD_ADD_SLASH,
+!                                                 WILD_EXPAND_FREE)) == NULL)
+                       return FAIL;
+               }
+               if (p != NULL)
+--- 3694,3706 ----
+               {
+                   expand_T    xpc;
+  
++                  ExpandInit(&xpc);
+                   xpc.xp_context = EXPAND_FILES;
+!                  p = ExpandOne(&xpc, eap->arg, NULL,
+                                           WILD_LIST_NOTFOUND|WILD_ADD_SLASH,
+!                                                 WILD_EXPAND_FREE);
+!                  ExpandCleanup(&xpc);
+!                  if (p == NULL)
+                       return FAIL;
+               }
+               if (p != NULL)
+*** ../vim-6.2.062/src/ex_getln.c      Thu May 29 22:45:46 2003
+--- src/ex_getln.c     Sat Jul 26 18:57:18 2003
+***************
+*** 35,43 ****
+  
+  static struct cmdline_info ccline;   /* current cmdline_info */
+  
+- static int   cmd_numfiles = -1;      /* number of files found by
+-                                                  file name completion */
+- static char_u        **cmd_files = NULL;     /* list of files */
+  static int   cmd_showtail;           /* Only show path tail in lists ? */
+  
+  
+--- 35,40 ----
+***************
+*** 207,212 ****
+--- 204,211 ----
+      ccline.cmdlen = ccline.cmdpos = 0;
+      ccline.cmdbuff[0] = NUL;
+  
++     ExpandInit(&xpc);
++ 
+  #ifdef FEAT_RIGHTLEFT
+      if (curwin->w_p_rl && *curwin->w_p_rlc == 's'
+                                         && (firstc == '/' || firstc == '?'))
+***************
+*** 339,345 ****
+               && c != K_PAGEDOWN && c != K_PAGEUP
+               && c != K_KPAGEDOWN && c != K_KPAGEUP
+               && c != K_LEFT && c != K_RIGHT
+!              && (cmd_numfiles > 0 || (c != Ctrl_P && c != Ctrl_N)))
+       {
+           vim_free(lookfor);
+           lookfor = NULL;
+--- 338,344 ----
+               && c != K_PAGEDOWN && c != K_PAGEUP
+               && c != K_KPAGEDOWN && c != K_KPAGEUP
+               && c != K_LEFT && c != K_RIGHT
+!              && (xpc.xp_numfiles > 0 || (c != Ctrl_P && c != Ctrl_N)))
+       {
+           vim_free(lookfor);
+           lookfor = NULL;
+***************
+*** 349,355 ****
+       /*
+        * <S-Tab> works like CTRL-P (unless 'wc' is <S-Tab>).
+        */
+!      if (c != p_wc && c == K_S_TAB && cmd_numfiles != -1)
+           c = Ctrl_P;
+  
+  #ifdef FEAT_WILDMENU
+--- 348,354 ----
+       /*
+        * <S-Tab> works like CTRL-P (unless 'wc' is <S-Tab>).
+        */
+!      if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles != -1)
+           c = Ctrl_P;
+  
+  #ifdef FEAT_WILDMENU
+***************
+*** 371,377 ****
+  #endif
+  
+       /* free expanded names when finished walking through matches */
+!      if (cmd_numfiles != -1
+               && !(c == p_wc && KeyTyped) && c != p_wcm
+               && c != Ctrl_N && c != Ctrl_P && c != Ctrl_A
+               && c != Ctrl_L)
+--- 370,376 ----
+  #endif
+  
+       /* free expanded names when finished walking through matches */
+!      if (xpc.xp_numfiles != -1
+               && !(c == p_wc && KeyTyped) && c != p_wcm
+               && c != Ctrl_N && c != Ctrl_P && c != Ctrl_A
+               && c != Ctrl_L)
+***************
+*** 629,638 ****
+        */
+       if ((c == p_wc && !gotesc && KeyTyped) || c == p_wcm)
+       {
+!          if (cmd_numfiles > 0)   /* typed p_wc at least twice */
+           {
+               /* if 'wildmode' contains "list" may still need to list */
+!              if (cmd_numfiles > 1
+                       && !did_wild_list
+                       && (wim_flags[wim_index] & WIM_LIST))
+               {
+--- 628,637 ----
+        */
+       if ((c == p_wc && !gotesc && KeyTyped) || c == p_wcm)
+       {
+!          if (xpc.xp_numfiles > 0)   /* typed p_wc at least twice */
+           {
+               /* if 'wildmode' contains "list" may still need to list */
+!              if (xpc.xp_numfiles > 1
+                       && !did_wild_list
+                       && (wim_flags[wim_index] & WIM_LIST))
+               {
+***************
+*** 673,679 ****
+               /* when more than one match, and 'wildmode' first contains
+                * "list", or no change and 'wildmode' contains "longest,list",
+                * list all matches */
+!              if (res == OK && cmd_numfiles > 1)
+               {
+                   /* a "longest" that didn't do anything is skipped (but not
+                    * "list:longest") */
+--- 672,678 ----
+               /* when more than one match, and 'wildmode' first contains
+                * "list", or no change and 'wildmode' contains "longest,list",
+                * list all matches */
+!              if (res == OK && xpc.xp_numfiles > 1)
+               {
+                   /* a "longest" that didn't do anything is skipped (but not
+                    * "list:longest") */
+***************
+*** 713,719 ****
+                       vim_beep();
+               }
+  #ifdef FEAT_WILDMENU
+!              else if (cmd_numfiles == -1)
+                   xpc.xp_context = EXPAND_NOTHING;
+  #endif
+           }
+--- 712,718 ----
+                       vim_beep();
+               }
+  #ifdef FEAT_WILDMENU
+!              else if (xpc.xp_numfiles == -1)
+                   xpc.xp_context = EXPAND_NOTHING;
+  #endif
+           }
+***************
+*** 1207,1213 ****
+  
+       case Ctrl_N:        /* next match */
+       case Ctrl_P:        /* previous match */
+!              if (cmd_numfiles > 0)
+               {
+                   if (nextwild(&xpc, (c == Ctrl_P) ? WILD_PREV : WILD_NEXT, 0)
+                                                                     == FAIL)
+--- 1206,1212 ----
+  
+       case Ctrl_N:        /* next match */
+       case Ctrl_P:        /* previous match */
+!              if (xpc.xp_numfiles > 0)
+               {
+                   if (nextwild(&xpc, (c == Ctrl_P) ? WILD_PREV : WILD_NEXT, 0)
+                                                                     == FAIL)
+***************
+*** 1529,1534 ****
+--- 1528,1535 ----
+      cmd_fkmap = 0;
+  #endif
+  
++     ExpandCleanup(&xpc);
++ 
+  #ifdef FEAT_SEARCH_EXTRA
+      if (did_incsearch)
+      {
+***************
+*** 2590,2596 ****
+      int              difflen;
+      int              v;
+  
+!     if (cmd_numfiles == -1)
+      {
+       set_expand_context(xp);
+       cmd_showtail = !glob_in_path_prefix(xp);
+--- 2591,2597 ----
+      int              difflen;
+      int              v;
+  
+!     if (xp->xp_numfiles == -1)
+      {
+       set_expand_context(xp);
+       cmd_showtail = !glob_in_path_prefix(xp);
+***************
+*** 2678,2686 ****
+      if (xp->xp_context == EXPAND_MAPPINGS && p2 == NULL)
+       return FAIL;
+  
+!     if (cmd_numfiles <= 0 && p2 == NULL)
+       beep_flush();
+!     else if (cmd_numfiles == 1)
+       /* free expanded pattern */
+       (void)ExpandOne(xp, NULL, NULL, 0, WILD_FREE);
+  
+--- 2679,2687 ----
+      if (xp->xp_context == EXPAND_MAPPINGS && p2 == NULL)
+       return FAIL;
+  
+!     if (xp->xp_numfiles <= 0 && p2 == NULL)
+       beep_flush();
+!     else if (xp->xp_numfiles == 1)
+       /* free expanded pattern */
+       (void)ExpandOne(xp, NULL, NULL, 0, WILD_FREE);
+  
+***************
+*** 2693,2699 ****
+   * Return a pointer to alloced memory containing the new string.
+   * Return NULL for failure.
+   *
+!  * Results are cached in cmd_files and cmd_numfiles.
+   *
+   * mode = WILD_FREE:     just free previously expanded matches
+   * mode = WILD_EXPAND_FREE: normal expansion, do not keep matches
+--- 2694,2700 ----
+   * Return a pointer to alloced memory containing the new string.
+   * Return NULL for failure.
+   *
+!  * Results are cached in xp->xp_files and xp->xp_numfiles.
+   *
+   * mode = WILD_FREE:     just free previously expanded matches
+   * mode = WILD_EXPAND_FREE: normal expansion, do not keep matches
+***************
+*** 2734,2745 ****
+       */
+      if (mode == WILD_NEXT || mode == WILD_PREV)
+      {
+!      if (cmd_numfiles > 0)
+       {
+           if (mode == WILD_PREV)
+           {
+               if (findex == -1)
+!                  findex = cmd_numfiles;
+               --findex;
+           }
+           else    /* mode == WILD_NEXT */
+--- 2735,2746 ----
+       */
+      if (mode == WILD_NEXT || mode == WILD_PREV)
+      {
+!      if (xp->xp_numfiles > 0)
+       {
+           if (mode == WILD_PREV)
+           {
+               if (findex == -1)
+!                  findex = xp->xp_numfiles;
+               --findex;
+           }
+           else    /* mode == WILD_NEXT */
+***************
+*** 2752,2762 ****
+           if (findex < 0)
+           {
+               if (orig_save == NULL)
+!                  findex = cmd_numfiles - 1;
+               else
+                   findex = -1;
+           }
+!          if (findex >= cmd_numfiles)
+           {
+               if (orig_save == NULL)
+                   findex = 0;
+--- 2753,2763 ----
+           if (findex < 0)
+           {
+               if (orig_save == NULL)
+!                  findex = xp->xp_numfiles - 1;
+               else
+                   findex = -1;
+           }
+!          if (findex >= xp->xp_numfiles)
+           {
+               if (orig_save == NULL)
+                   findex = 0;
+***************
+*** 2765,2786 ****
+           }
+  #ifdef FEAT_WILDMENU
+           if (p_wmnu)
+!              win_redr_status_matches(xp, cmd_numfiles, cmd_files, findex,
+!                                      cmd_showtail);
+  #endif
+           if (findex == -1)
+               return vim_strsave(orig_save);
+!          return vim_strsave(cmd_files[findex]);
+       }
+       else
+           return NULL;
+      }
+  
+  /* free old names */
+!     if (cmd_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST)
+      {
+!      FreeWild(cmd_numfiles, cmd_files);
+!      cmd_numfiles = -1;
+       vim_free(orig_save);
+       orig_save = NULL;
+      }
+--- 2766,2787 ----
+           }
+  #ifdef FEAT_WILDMENU
+           if (p_wmnu)
+!              win_redr_status_matches(xp, xp->xp_numfiles, xp->xp_files,
+!                                                      findex, cmd_showtail);
+  #endif
+           if (findex == -1)
+               return vim_strsave(orig_save);
+!          return vim_strsave(xp->xp_files[findex]);
+       }
+       else
+           return NULL;
+      }
+  
+  /* free old names */
+!     if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST)
+      {
+!      FreeWild(xp->xp_numfiles, xp->xp_files);
+!      xp->xp_numfiles = -1;
+       vim_free(orig_save);
+       orig_save = NULL;
+      }
+***************
+*** 2789,2795 ****
+      if (mode == WILD_FREE)   /* only release file name */
+       return NULL;
+  
+!     if (cmd_numfiles == -1)
+      {
+       vim_free(orig_save);
+       orig_save = orig;
+--- 2790,2796 ----
+      if (mode == WILD_FREE)   /* only release file name */
+       return NULL;
+  
+!     if (xp->xp_numfiles == -1)
+      {
+       vim_free(orig_save);
+       orig_save = orig;
+***************
+*** 2797,2803 ****
+       /*
+        * Do the expansion.
+        */
+!      if (ExpandFromContext(xp, str, &cmd_numfiles, &cmd_files,
+                                                            options) == FAIL)
+       {
+  #ifdef FNAME_ILLEGAL
+--- 2798,2804 ----
+       /*
+        * Do the expansion.
+        */
+!      if (ExpandFromContext(xp, str, &xp->xp_numfiles, &xp->xp_files,
+                                                            options) == FAIL)
+       {
+  #ifdef FNAME_ILLEGAL
+***************
+*** 2809,2815 ****
+               EMSG2(_(e_nomatch2), str);
+  #endif
+       }
+!      else if (cmd_numfiles == 0)
+       {
+           if (!(options & WILD_SILENT))
+               EMSG2(_(e_nomatch2), str);
+--- 2810,2816 ----
+               EMSG2(_(e_nomatch2), str);
+  #endif
+       }
+!      else if (xp->xp_numfiles == 0)
+       {
+           if (!(options & WILD_SILENT))
+               EMSG2(_(e_nomatch2), str);
+***************
+*** 2817,2836 ****
+       else
+       {
+           /* Escape the matches for use on the command line. */
+!          ExpandEscape(xp, str, cmd_numfiles, cmd_files, options);
+  
+           /*
+            * Check for matching suffixes in file names.
+            */
+           if (mode != WILD_ALL && mode != WILD_LONGEST)
+           {
+!              if (cmd_numfiles)
+!                  non_suf_match = cmd_numfiles;
+               else
+                   non_suf_match = 1;
+               if ((xp->xp_context == EXPAND_FILES
+                           || xp->xp_context == EXPAND_DIRECTORIES)
+!                      && cmd_numfiles > 1)
+               {
+                   /*
+                    * More than one match; check suffix.
+--- 2818,2837 ----
+       else
+       {
+           /* Escape the matches for use on the command line. */
+!          ExpandEscape(xp, str, xp->xp_numfiles, xp->xp_files, options);
+  
+           /*
+            * Check for matching suffixes in file names.
+            */
+           if (mode != WILD_ALL && mode != WILD_LONGEST)
+           {
+!              if (xp->xp_numfiles)
+!                  non_suf_match = xp->xp_numfiles;
+               else
+                   non_suf_match = 1;
+               if ((xp->xp_context == EXPAND_FILES
+                           || xp->xp_context == EXPAND_DIRECTORIES)
+!                      && xp->xp_numfiles > 1)
+               {
+                   /*
+                    * More than one match; check suffix.
+***************
+*** 2839,2845 ****
+                    */
+                   non_suf_match = 0;
+                   for (i = 0; i < 2; ++i)
+!                      if (match_suffix(cmd_files[i]))
+                           ++non_suf_match;
+               }
+               if (non_suf_match != 1)
+--- 2840,2846 ----
+                    */
+                   non_suf_match = 0;
+                   for (i = 0; i < 2; ++i)
+!                      if (match_suffix(xp->xp_files[i]))
+                           ++non_suf_match;
+               }
+               if (non_suf_match != 1)
+***************
+*** 2855,2887 ****
+                       beep_flush();
+               }
+               if (!(non_suf_match != 1 && mode == WILD_EXPAND_FREE))
+!                  ss = vim_strsave(cmd_files[0]);
+           }
+       }
+      }
+  
+      /* Find longest common part */
+!     if (mode == WILD_LONGEST && cmd_numfiles > 0)
+      {
+!      for (len = 0; cmd_files[0][len]; ++len)
+       {
+!          for (i = 0; i < cmd_numfiles; ++i)
+           {
+  #ifdef CASE_INSENSITIVE_FILENAME
+               if (xp->xp_context == EXPAND_DIRECTORIES
+                       || xp->xp_context == EXPAND_FILES
+                       || xp->xp_context == EXPAND_BUFFERS)
+               {
+!                  if (TOLOWER_LOC(cmd_files[i][len]) !=
+!                                             TOLOWER_LOC(cmd_files[0][len]))
+                       break;
+               }
+               else
+  #endif
+!                   if (cmd_files[i][len] != cmd_files[0][len])
+                   break;
+           }
+!          if (i < cmd_numfiles)
+           {
+               if (!(options & WILD_NO_BEEP))
+                   vim_beep();
+--- 2856,2888 ----
+                       beep_flush();
+               }
+               if (!(non_suf_match != 1 && mode == WILD_EXPAND_FREE))
+!                  ss = vim_strsave(xp->xp_files[0]);
+           }
+       }
+      }
+  
+      /* Find longest common part */
+!     if (mode == WILD_LONGEST && xp->xp_numfiles > 0)
+      {
+!      for (len = 0; xp->xp_files[0][len]; ++len)
+       {
+!          for (i = 0; i < xp->xp_numfiles; ++i)
+           {
+  #ifdef CASE_INSENSITIVE_FILENAME
+               if (xp->xp_context == EXPAND_DIRECTORIES
+                       || xp->xp_context == EXPAND_FILES
+                       || xp->xp_context == EXPAND_BUFFERS)
+               {
+!                  if (TOLOWER_LOC(xp->xp_files[i][len]) !=
+!                                          TOLOWER_LOC(xp->xp_files[0][len]))
+                       break;
+               }
+               else
+  #endif
+!                   if (xp->xp_files[i][len] != xp->xp_files[0][len])
+                   break;
+           }
+!          if (i < xp->xp_numfiles)
+           {
+               if (!(options & WILD_NO_BEEP))
+                   vim_beep();
+***************
+*** 2891,2930 ****
+       ss = alloc((unsigned)len + 1);
+       if (ss)
+       {
+!          STRNCPY(ss, cmd_files[0], len);
+           ss[len] = NUL;
+       }
+       findex = -1;                        /* next p_wc gets first one */
+      }
+  
+      /* Concatenate all matching names */
+!     if (mode == WILD_ALL && cmd_numfiles > 0)
+      {
+       len = 0;
+!      for (i = 0; i < cmd_numfiles; ++i)
+!          len += (long_u)STRLEN(cmd_files[i]) + 1;
+       ss = lalloc(len, TRUE);
+       if (ss != NULL)
+       {
+           *ss = NUL;
+!          for (i = 0; i < cmd_numfiles; ++i)
+           {
+!              STRCAT(ss, cmd_files[i]);
+!              if (i != cmd_numfiles - 1)
+                   STRCAT(ss, (options & WILD_USE_NL) ? "\n" : " ");
+           }
+       }
+      }
+  
+      if (mode == WILD_EXPAND_FREE || mode == WILD_ALL)
+!     {
+!      FreeWild(cmd_numfiles, cmd_files);
+!      cmd_numfiles = -1;
+!     }
+  
+      return ss;
+  }
+  
+      void
+  ExpandEscape(xp, str, numfiles, files, options)
+      expand_T *xp;
+--- 2892,2954 ----
+       ss = alloc((unsigned)len + 1);
+       if (ss)
+       {
+!          STRNCPY(ss, xp->xp_files[0], len);
+           ss[len] = NUL;
+       }
+       findex = -1;                        /* next p_wc gets first one */
+      }
+  
+      /* Concatenate all matching names */
+!     if (mode == WILD_ALL && xp->xp_numfiles > 0)
+      {
+       len = 0;
+!      for (i = 0; i < xp->xp_numfiles; ++i)
+!          len += (long_u)STRLEN(xp->xp_files[i]) + 1;
+       ss = lalloc(len, TRUE);
+       if (ss != NULL)
+       {
+           *ss = NUL;
+!          for (i = 0; i < xp->xp_numfiles; ++i)
+           {
+!              STRCAT(ss, xp->xp_files[i]);
+!              if (i != xp->xp_numfiles - 1)
+                   STRCAT(ss, (options & WILD_USE_NL) ? "\n" : " ");
+           }
+       }
+      }
+  
+      if (mode == WILD_EXPAND_FREE || mode == WILD_ALL)
+!      ExpandCleanup(xp);
+  
+      return ss;
+  }
+  
++ /*
++  * Prepare an expand structure for use.
++  */
++     void
++ ExpandInit(xp)
++     expand_T *xp;
++ {
++     xp->xp_backslash = XP_BS_NONE;
++     xp->xp_numfiles = -1;
++     xp->xp_files = NULL;
++ }
++ 
++ /*
++  * Cleanup an expand structure after use.
++  */
++     void
++ ExpandCleanup(xp)
++     expand_T *xp;
++ {
++     if (xp->xp_numfiles >= 0)
++     {
++      FreeWild(xp->xp_numfiles, xp->xp_files);
++      xp->xp_numfiles = -1;
++     }
++ }
++ 
+      void
+  ExpandEscape(xp, str, numfiles, files, options)
+      expand_T *xp;
+***************
+*** 3078,3084 ****
+      int              attr;
+      int              showtail;
+  
+!     if (cmd_numfiles == -1)
+      {
+       set_expand_context(xp);
+       i = expand_cmdline(xp, ccline.cmdbuff, ccline.cmdpos,
+--- 3102,3108 ----
+      int              attr;
+      int              showtail;
+  
+!     if (xp->xp_numfiles == -1)
+      {
+       set_expand_context(xp);
+       i = expand_cmdline(xp, ccline.cmdbuff, ccline.cmdpos,
+***************
+*** 3090,3097 ****
+      }
+      else
+      {
+!      num_files = cmd_numfiles;
+!      files_found = cmd_files;
+       showtail = cmd_showtail;
+      }
+  
+--- 3114,3121 ----
+      }
+      else
+      {
+!      num_files = xp->xp_numfiles;
+!      files_found = xp->xp_files;
+       showtail = cmd_showtail;
+      }
+  
+***************
+*** 3215,3221 ****
+       cmdline_row = msg_row;  /* will put it back later */
+      }
+  
+!     if (cmd_numfiles == -1)
+       FreeWild(num_files, files_found);
+  
+      return EXPAND_OK;
+--- 3239,3245 ----
+       cmdline_row = msg_row;  /* will put it back later */
+      }
+  
+!     if (xp->xp_numfiles == -1)
+       FreeWild(num_files, files_found);
+  
+      return EXPAND_OK;
+*** ../vim-6.2.062/src/proto/ex_getln.pro      Sun Jun  1 12:26:09 2003
+--- src/proto/ex_getln.pro     Sat Jul 26 18:38:51 2003
+***************
+*** 14,19 ****
+--- 14,21 ----
+  void compute_cmdrow __ARGS((void));
+  void gotocmdline __ARGS((int clr));
+  char_u *ExpandOne __ARGS((expand_T *xp, char_u *str, char_u *orig, int options, int mode));
++ void ExpandInit __ARGS((expand_T *xp));
++ void ExpandCleanup __ARGS((expand_T *xp));
+  void ExpandEscape __ARGS((expand_T *xp, char_u *str, int numfiles, char_u **files, int options));
+  void tilde_replace __ARGS((char_u *orig_pat, int num_files, char_u **files));
+  char_u *sm_gettail __ARGS((char_u *s));
+*** ../vim-6.2.062/src/misc1.c Thu May 29 20:32:05 2003
+--- src/misc1.c        Sat Jul 26 18:37:24 2003
+***************
+*** 3212,3221 ****
+               {
+                   expand_T    xpc;
+  
+                   xpc.xp_context = EXPAND_FILES;
+-                  xpc.xp_backslash = XP_BS_NONE;
+                   var = ExpandOne(&xpc, dst, NULL,
+                               WILD_ADD_SLASH|WILD_SILENT, WILD_EXPAND_FREE);
+                   mustfree = TRUE;
+               }
+  
+--- 3212,3222 ----
+               {
+                   expand_T    xpc;
+  
++                  ExpandInit(&xpc);
+                   xpc.xp_context = EXPAND_FILES;
+                   var = ExpandOne(&xpc, dst, NULL,
+                               WILD_ADD_SLASH|WILD_SILENT, WILD_EXPAND_FREE);
++                  ExpandCleanup(&xpc);
+                   mustfree = TRUE;
+               }
+  
+*** ../vim-6.2.062/src/structs.h       Mon May 26 21:08:40 2003
+--- src/structs.h      Sat Jul 26 18:30:51 2003
+***************
+*** 376,381 ****
+--- 376,384 ----
+      char_u   *xp_pattern;            /* start of item to expand */
+      char_u   *xp_arg;                /* generic expansion argument */
+      int              xp_backslash;           /* one of the XP_BS_ values */
++     int              xp_numfiles;            /* number of files found by
++                                                  file name completion */
++     char_u   **xp_files;             /* list of files */
+  } expand_T;
+  
+  /* values for xp_backslash */
+*** ../vim-6.2.062/src/tag.c   Sun Jun  1 14:41:25 2003
+--- src/tag.c  Thu Jul 31 18:27:34 2003
+***************
+*** 2811,2820 ****
+       */
+      if (expand && mch_has_wildcard(fname))
+      {
+       xpc.xp_context = EXPAND_FILES;
+-      xpc.xp_backslash = XP_BS_NONE;
+       expanded_fname = ExpandOne(&xpc, (char_u *)fname, NULL,
+                           WILD_LIST_NOTFOUND|WILD_SILENT, WILD_EXPAND_FREE);
+       if (expanded_fname != NULL)
+           fname = expanded_fname;
+      }
+--- 2811,2821 ----
+       */
+      if (expand && mch_has_wildcard(fname))
+      {
++      ExpandInit(&xpc);
+       xpc.xp_context = EXPAND_FILES;
+       expanded_fname = ExpandOne(&xpc, (char_u *)fname, NULL,
+                           WILD_LIST_NOTFOUND|WILD_SILENT, WILD_EXPAND_FREE);
++      ExpandCleanup(&xpc);
+       if (expanded_fname != NULL)
+           fname = expanded_fname;
+      }
+*** ../vim-6.2.062/src/version.c       Sun Aug 10 14:52:30 2003
+--- src/version.c      Sun Aug 10 22:14:52 2003
+***************
+*** 632,633 ****
+--- 632,635 ----
+  {   /* Add new patch number below this line */
++ /**/
++     63,
+  /**/
+
+-- 
+From "know your smileys":
+ ...---...   SOS
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///
diff --git a/6.2.064 b/6.2.064
new file mode 100644 (file)
index 0000000..33f57ec
--- /dev/null
+++ b/6.2.064
@@ -0,0 +1,716 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.064
+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 6.2.064
+Problem:    resolve() only handles one symbolic link, need to repeat it to
+           resolve all of them.  Then need to simplify the file name.
+Solution:   Make resolve() resolve all symbolic links and simplify the result.
+           Add simplify() to just simplify a file name.  Fix that test49
+           doesn't work if /tmp is a symbolic link.  (Servatius Brandt)
+Files:     runtime/doc/eval.txt, src/eval.c, src/tag.c,
+           src/testdir/test49.vim
+
+
+*** ../vim-6.2.063/runtime/doc/eval.txt        Sun Jun  1 14:45:23 2003
+--- runtime/doc/eval.txt       Thu Aug  7 19:31:16 2003
+***************
+*** 1,4 ****
+! *eval.txt*      For Vim version 6.2.  Last change: 2003 Jun 01
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt*      For Vim version 6.2.  Last change: 2003 Aug 07
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 885,890 ****
+--- 887,893 ----
+  setline( {lnum}, {line})     Number  set line {lnum} to {line}
+  setreg( {n}, {v}[, {opt}])   Number  set register to value and type
+  setwinvar( {nr}, {varname}, {val})   set {varname} in window {nr} to {val}
++ simplify( {filename})                String  simplify filename as much as possible
+  strftime( {format}[, {time}])        String  time in specified format
+  stridx( {haystack}, {needle})        Number  first index of {needle} in {haystack}
+  strlen( {expr})                      Number  length of the String {expr}
+***************
+*** 2104,2116 ****
+               successfully, and non-zero when the renaming failed.
+               This function is not available in the |sandbox|.
+  
+! resolve({filename})                                  *resolve()*
+               On MS-Windows, when {filename} is a shortcut (a .lnk file),
+!              returns the path the shortcut points to.
+!              On Unix, when {filename} is a symbolic link, returns the path
+!              the symlink points to.  This only happens once, the returned
+!              path could be a symlink again.
+!              Otherwise {filename} is returned.
+  
+  search({pattern} [, {flags}])                                *search()*
+               Search for regexp pattern {pattern}.  The search starts at the
+--- 2112,2129 ----
+               successfully, and non-zero when the renaming failed.
+               This function is not available in the |sandbox|.
+  
+! resolve({filename})                                  *resolve()* *E655*
+               On MS-Windows, when {filename} is a shortcut (a .lnk file),
+!              returns the path the shortcut points to in a simplified form.
+!              On Unix, repeat resolving symbolic links in all path
+!              components of {filename} and return the simplified result.
+!              To cope with link cycles, resolving of symbolic links is
+!              stopped after 100 iterations.
+!              On other systems, return the simplified {filename}.
+!              The simplification step is done as by |simplify()|.
+!              resolve() keeps a leading path component specifying the
+!              current directory (provided the result is still a relative
+!              path name) and also keeps a trailing path separator.
+  
+  search({pattern} [, {flags}])                                *search()*
+               Search for regexp pattern {pattern}.  The search starts at the
+***************
+*** 2302,2307 ****
+--- 2315,2335 ----
+                       :call setwinvar(2, "myvar", "foobar")
+  <            This function is not available in the |sandbox|.
+  
++ simplify({filename})                                 *simplify()*
++              Simplify the file name as much as possible without changing
++              the meaning.  Shortcuts (on MS-Windows) or symbolic links (on
++              Unix) are not resolved.  If the first path component in
++              {filename} designates the current directory, this will be
++              valid for the result as well.  A trailing path separator is
++              not removed either.
++              Example: >
++                      simplify("./dir/.././/file/") == "./file/"
++ <            Note: The combination "dir/.." is only removed if "dir" is
++              a searchable directory or does not exist.  On Unix, it is also
++              removed when "dir" is a symbolic link within the same
++              directory.  In order to resolve all the involved symbolic
++              links before simplifying the path name, use |resolve()|.
++ 
+  strftime({format} [, {time}])                                *strftime()*
+               The result is a String, which is a formatted date and time, as
+               specified by the {format} string.  The given {time} is used,
+*** ../vim-6.2.063/src/eval.c  Sun Aug 10 22:24:37 2003
+--- src/eval.c Thu Jul 31 19:47:34 2003
+***************
+*** 318,323 ****
+--- 318,324 ----
+  static void f_serverlist __ARGS((VAR argvars, VAR retvar));
+  static void f_setline __ARGS((VAR argvars, VAR retvar));
+  static void f_setreg __ARGS((VAR argvars, VAR retvar));
++ static void f_simplify __ARGS((VAR argvars, VAR retvar));
+  static void find_some_match __ARGS((VAR argvars, VAR retvar, int start));
+  static void f_strftime __ARGS((VAR argvars, VAR retvar));
+  static void f_stridx __ARGS((VAR argvars, VAR retvar));
+***************
+*** 2812,2817 ****
+--- 2813,2819 ----
+      {"setline",              2, 2, f_setline},
+      {"setreg",               2, 3, f_setreg},
+      {"setwinvar",    3, 3, f_setwinvar},
++     {"simplify",     1, 1, f_simplify},
+  #ifdef HAVE_STRFTIME
+      {"strftime",     1, 2, f_strftime},
+  #endif
+***************
+*** 5808,5813 ****
+--- 5810,5816 ----
+      VAR              retvar;
+  {
+      char_u   *p;
++     int              limit = 100;
+  
+      p = get_var_string(&argvars[0]);
+  #ifdef FEAT_SHORTCUT
+***************
+*** 5826,5858 ****
+       char_u  buf[MAXPATHL + 1];
+       char_u  *cpy;
+       int     len;
+  
+!      len = readlink((char *)p, (char *)buf, MAXPATHL);
+!      if (len > 0)
+       {
+!          buf[len] = NUL;
+!          if (gettail(p) > p && !mch_isFullName(buf))
+           {
+!              /* symlink is relative to directory of argument */
+!              cpy = alloc((unsigned)(STRLEN(p) + STRLEN(buf) + 1));
+!              if (cpy != NULL)
+               {
+!                  STRCPY(cpy, p);
+!                  STRCPY(gettail(cpy), buf);
+!                  retvar->var_val.var_string = cpy;
+!                  p = NULL;
+               }
+           }
+           else
+!              p = buf;
+       }
+!      if (p != NULL)
+!          retvar->var_val.var_string = vim_strsave(p);
+      }
+  # else
+      retvar->var_val.var_string = vim_strsave(p);
+  # endif
+  #endif
+      retvar->var_type = VAR_STRING;
+  }
+  
+--- 5829,6020 ----
+       char_u  buf[MAXPATHL + 1];
+       char_u  *cpy;
+       int     len;
++      char_u  *remain = NULL;
++      char_u  *q;
++      int     is_relative_to_current = FALSE;
++      int     has_trailing_pathsep = FALSE;
+  
+!      p = vim_strsave(p);
+! 
+!      if (p[0] == '.' && (vim_ispathsep(p[1])
+!                                 || (p[1] == '.' && (vim_ispathsep(p[2])))))
+!          is_relative_to_current = TRUE;
+! 
+!      len = STRLEN(p);
+!      if (len > 0 && vim_ispathsep(p[len-1]))
+!          has_trailing_pathsep = TRUE;
+! 
+!      q = getnextcomp(p);
+!      if (*q != NUL)
+!      {
+!          /* Separate the first path component in "p", and keep the
+!           * remainder (beginning with the path separator). */
+!          remain = vim_strsave(q - 1);
+!          q[-1] = NUL;
+!      }
+! 
+!      for(;;)
+       {
+!          for (;;)
+           {
+!              len = readlink((char *)p, (char *)buf, MAXPATHL);
+!              if (len <= 0)
+!                  break;
+!              buf[len] = NUL;
+! 
+!              if (limit-- == 0)
+!              {
+!                  vim_free(p);
+!                  vim_free(remain);
+!                  EMSG(_("E655: Too much symbolic links (cycle?)"));
+!                  retvar->var_val.var_string = NULL;
+!                  goto fail;
+!              }
+! 
+!              /* Ensure that the result will have a trailing path separator
+!               * if the argument has one. */
+!              if (remain == NULL && has_trailing_pathsep)
+!                  add_pathsep(buf);
+! 
+!              /* Separate the first path component in the link value and
+!               * concatenate the remainders. */
+!              q = getnextcomp(vim_ispathsep(*buf) ? buf + 1 : buf);
+!              if (*q != NUL)
+!              {
+!                  if (remain == NULL)
+!                      remain = vim_strsave(q - 1);
+!                  else
+!                  {
+!                      cpy = vim_strnsave(q-1, STRLEN(q-1)+STRLEN(remain));
+!                      if (cpy != NULL)
+!                      {
+!                          STRCAT(cpy, remain);
+!                          vim_free(remain);
+!                          remain = cpy;
+!                      }
+!                  }
+!                  q[-1] = NUL;
+!              }
+! 
+!              q = gettail(p);
+!              if (q > p && *q == NUL)
+!              {
+!                  /* Ignore trailing path separator. */
+!                  q[-1] = NUL;
+!                  q = gettail(p);
+!              }
+!              if (q > p && !mch_isFullName(buf))
+!              {
+!                  /* symlink is relative to directory of argument */
+!                  cpy = alloc((unsigned)(STRLEN(p) + STRLEN(buf) + 1));
+!                  if (cpy != NULL)
+!                  {
+!                      STRCPY(cpy, p);
+!                      STRCPY(gettail(cpy), buf);
+!                      vim_free(p);
+!                      p = cpy;
+!                  }
+!              }
+!              else
+               {
+!                  vim_free(p);
+!                  p = vim_strsave(buf);
+               }
+           }
++ 
++          if (remain == NULL)
++              break;
++ 
++          /* Append the first path component of "remain" to "p". */
++          q = getnextcomp(remain + 1);
++          len = q - remain - (*q != NUL);
++          cpy = vim_strnsave(p, STRLEN(p) + len);
++          if (cpy != NULL)
++          {
++              STRNCAT(cpy, remain, len);
++              vim_free(p);
++              p = cpy;
++          }
++          /* Shorten "remain". */
++          if (*q != NUL)
++              STRCPY(remain, q - 1);
+           else
+!          {
+!              vim_free(remain);
+!              remain = NULL;
+!          }
+       }
+! 
+!      /* If the result is a relative path name, make it explicitly relative to
+!       * the current directory if and only if the argument had this form. */
+!      if (!vim_ispathsep(*p))
+!      {
+!          if (is_relative_to_current
+!                  && *p != NUL
+!                  && !(p[0] == '.'
+!                      && (p[1] == NUL
+!                          || vim_ispathsep(p[1])
+!                          || (p[1] == '.'
+!                              && (p[2] == NUL
+!                                  || vim_ispathsep(p[2]))))))
+!          {
+!              /* Prepend "./". */
+!              cpy = vim_strnsave((char_u *)"./", 2 + STRLEN(p));
+!              if (cpy != NULL)
+!              {
+!                  STRCAT(cpy, p);
+!                  vim_free(p);
+!                  p = cpy;
+!              }
+!          }
+!          else if (!is_relative_to_current)
+!          {
+!              /* Strip leading "./". */
+!              q = p;
+!              while (q[0] == '.' && vim_ispathsep(q[1]))
+!                  q += 2;
+!              if (q > p)
+!                  mch_memmove(p, p + 2, STRLEN(p + 2) + (size_t)1);
+!          }
+!      }
+! 
+!      /* Ensure that the result will have no trailing path separator
+!       * if the argument had none.  But keep "/" or "//". */
+!      if (!has_trailing_pathsep)
+!      {
+!          q = p + STRLEN(p);
+!          while ((q > p + 2 || (q == p + 2 && !vim_ispathsep(*p)))
+!                 && vim_ispathsep(q[-1]))
+!              --q;
+!          *q = NUL;
+!      }
+! 
+!      retvar->var_val.var_string = p;
+      }
+  # else
+      retvar->var_val.var_string = vim_strsave(p);
+  # endif
+  #endif
++ 
++     simplify_filename(retvar->var_val.var_string);
++ 
++ fail:
++     retvar->var_type = VAR_STRING;
++ }
++ 
++ /*
++  * "simplify()" function
++  */
++     static void
++ f_simplify(argvars, retvar)
++     VAR              argvars;
++     VAR              retvar;
++ {
++     char_u   *p;
++ 
++     p = get_var_string(&argvars[0]);
++     retvar->var_val.var_string = vim_strsave(p);
++     simplify_filename(retvar->var_val.var_string);   /* simplify in place */
+      retvar->var_type = VAR_STRING;
+  }
+  
+*** ../vim-6.2.063/src/tag.c   Sun Aug 10 22:24:37 2003
+--- src/tag.c  Thu Jul 31 18:27:34 2003
+***************
+*** 2864,2875 ****
+  #ifndef AMIGA            /* Amiga doesn't have "..", it uses "/" */
+      int              components = 0;
+      char_u   *p, *tail, *start;
+! #ifdef UNIX
+!     char_u   *orig = vim_strsave(filename);
+! 
+!     if (orig == NULL)
+!      return;
+! #endif
+  
+      p = filename;
+  #ifdef BACKSLASH_IN_FILENAME
+--- 2864,2871 ----
+  #ifndef AMIGA            /* Amiga doesn't have "..", it uses "/" */
+      int              components = 0;
+      char_u   *p, *tail, *start;
+!     int              stripping_disabled = FALSE;
+!     int              relative = TRUE;
+  
+      p = filename;
+  #ifdef BACKSLASH_IN_FILENAME
+***************
+*** 2877,2889 ****
+       p += 2;
+  #endif
+  
+!     while (vim_ispathsep(*p))
+!      ++p;
+!     start = p;           /* remember start after "c:/" or "/" or "//" */
+  
+      do
+      {
+!      /* At this point "p" is pointing to the char following a "/". */
+  #ifdef VMS
+       /* VMS allows device:[path] - don't strip the [ in directory  */
+       if ((*p == '[' || *p == '<') && p > filename && p[-1] == ':')
+--- 2873,2891 ----
+       p += 2;
+  #endif
+  
+!     if (vim_ispathsep(*p))
+!     {
+!      relative = FALSE;
+!      do
+!          ++p;
+!      while (vim_ispathsep(*p));
+!     }
+!     start = p;           /* remember start after "c:/" or "/" or "///" */
+  
+      do
+      {
+!      /* At this point "p" is pointing to the char following a single "/"
+!       * or "p" is at the "start" of the (absolute or relative) path name. */
+  #ifdef VMS
+       /* VMS allows device:[path] - don't strip the [ in directory  */
+       if ((*p == '[' || *p == '<') && p > filename && p[-1] == ':')
+***************
+*** 2898,2952 ****
+           /* ":: composition: vms host/passwd component */
+           ++components;
+           p = getnextcomp(p + 2);
+- 
+       }
+       else
+  #endif
+         if (vim_ispathsep(*p))
+           movetail(p, p + 1);         /* remove duplicate "/" */
+!      else if (p[0] == '.' && vim_ispathsep(p[1]))
+!          movetail(p, p + 2);         /* strip "./" */
+!      else if (p[0] == '.' && p[1] == '.' && vim_ispathsep(p[2]))
+       {
+           if (components > 0)         /* strip one preceding component */
+           {
+!              tail = p + 3;           /* skip to after "../" or "..///" */
+!              while (vim_ispathsep(*tail))
+!                  ++tail;
+!              --p;
+!              /* skip back to after previous '/' */
+!              while (p > start && !vim_ispathsep(p[-1]))
+!                  --p;
+!              /* skip back to after first '/' in a row */
+!              while (p - 1 > start && vim_ispathsep(p[-2]))
+                   --p;
+!              movetail(p, tail);      /* strip previous component */
+!              --components;
+           }
+-          else                        /* leading "../" */
+-              p += 3;                 /* skip to char after "/" */
+       }
+       else
+       {
+           ++components;               /* simple path component */
+           p = getnextcomp(p);
+       }
+!     } while (p != NULL && *p != NUL);
+! 
+! #ifdef UNIX
+!     /* Check that the new file name is really the same file.  This will not be
+!      * the case when using symbolic links: "dir/link/../name" != "dir/name". */
+!     {
+!      struct stat     orig_st, new_st;
+! 
+!      if (       mch_stat((char *)orig, &orig_st) < 0
+!              || mch_stat((char *)filename, &new_st) < 0
+!              || orig_st.st_ino != new_st.st_ino
+!              || orig_st.st_dev != new_st.st_dev)
+!          STRCPY(filename, orig);
+!      vim_free(orig);
+!     }
+! #endif
+  #endif /* !AMIGA */
+  }
+  
+--- 2900,3064 ----
+           /* ":: composition: vms host/passwd component */
+           ++components;
+           p = getnextcomp(p + 2);
+       }
+       else
+  #endif
+         if (vim_ispathsep(*p))
+           movetail(p, p + 1);         /* remove duplicate "/" */
+!      else if (p[0] == '.' && (vim_ispathsep(p[1]) || p[1] == NUL))
+!      {
+!          if (p == start && relative)
+!              p += 1 + (p[1] != NUL); /* keep single "." or leading "./" */
+!          else
+!          {
+!              /* Strip "./" or ".///".  If we are at the end of the file name
+!               * and there is no trailing path separator, either strip "/." if
+!               * we are after "start", or strip "." if we are at the beginning
+!               * of an absolute path name . */
+!              tail = p + 1;
+!              if (p[1] != NUL)
+!                  while (vim_ispathsep(*tail))
+!                      ++tail;
+!              else if (p > start)
+!                  --p;                /* strip preceding path separator */
+!              movetail(p, tail);
+!          }
+!      }
+!      else if (p[0] == '.' && p[1] == '.' &&
+!          (vim_ispathsep(p[2]) || p[2] == NUL))
+       {
++          /* Skip to after ".." or "../" or "..///". */
++          tail = p + 2;
++          while (vim_ispathsep(*tail))
++              ++tail;
++ 
+           if (components > 0)         /* strip one preceding component */
+           {
+!              int             do_strip = FALSE;
+!              char_u          saved_char;
+!              struct stat     st, new_st;
+! 
+!              /* Don't strip for an erroneous file name. */
+!              if (!stripping_disabled)
+!              {
+!                  /* If the preceding component does not exist in the file
+!                   * system, we strip it.  On Unix, we don't accept a symbolic
+!                   * link that refers to a non-existent file. */
+!                  saved_char = p[-1];
+!                  p[-1] = NUL;
+! #ifdef UNIX
+!                  if (mch_lstat((char *)filename, &st) < 0)
+! #else
+!                      if (mch_stat((char *)filename, &st) < 0)
+! #endif
+!                          do_strip = TRUE;
+!                  p[-1] = saved_char;
+! 
+                   --p;
+!                  /* Skip back to after previous '/'. */
+!                  while (p > start && !vim_ispathsep(p[-1]))
+!                      --p;
+! 
+!                  if (!do_strip)
+!                  {
+!                      /* If the component exists in the file system, check
+!                       * that stripping it won't change the meaning of the
+!                       * file name.  First get information about the
+!                       * unstripped file name.  This may fail if the component
+!                       * to strip is not a searchable directory (but a regular
+!                       * file, for instance), since the trailing "/.." cannot
+!                       * be applied then.  We don't strip it then since we
+!                       * don't want to replace an erroneous file name by
+!                       * a valid one, and we disable stripping of later
+!                       * components. */
+!                      saved_char = *tail;
+!                      *tail = NUL;
+!                      if (mch_stat((char *)filename, &st) >= 0)
+!                          do_strip = TRUE;
+!                      else
+!                          stripping_disabled = TRUE;
+!                      *tail = saved_char;
+! #ifdef UNIX
+!                      if (do_strip)
+!                      {
+!                          /* On Unix, the check for the unstripped file name
+!                           * above works also for a symbolic link pointing to
+!                           * a searchable directory.  But then the parent of
+!                           * the directory pointed to by the link must be the
+!                           * same as the stripped file name.  (The latter
+!                           * exists in the file system since it is the
+!                           * component's parent directory.) */
+!                          if (p == start && relative)
+!                              (void)mch_stat(".", &new_st);
+!                          else
+!                          {
+!                              saved_char = *p;
+!                              *p = NUL;
+!                              (void)mch_stat((char *)filename, &new_st);
+!                              *p = saved_char;
+!                          }
+! 
+!                          if (new_st.st_ino != st.st_ino ||
+!                              new_st.st_dev != st.st_dev)
+!                          {
+!                              do_strip = FALSE;
+!                              /* We don't disable stripping of later
+!                               * components since the unstripped path name is
+!                               * still valid. */
+!                          }
+!                      }
+! #endif
+!                  }
+!              }
+! 
+!              if (!do_strip)
+!              {
+!                  /* Skip the ".." or "../" and reset the counter for the
+!                   * components that might be stripped later on. */
+!                  p = tail;
+!                  components = 0;
+!              }
+!              else
+!              {
+!                  /* Strip previous component.  If the result would get empty
+!                   * and there is no trailing path separator, leave a single
+!                   * "." instead.  If we are at the end of the file name and
+!                   * there is no trailing path separator and a preceding
+!                   * component is left after stripping, strip its trailing
+!                   * path separator as well. */
+!                  if (p == start && relative && tail[-1] == '.')
+!                  {
+!                      *p++ = '.';
+!                      *p = NUL;
+!                  }
+!                  else
+!                  {
+!                      if (p > start && tail[-1] == '.')
+!                          --p;
+!                      movetail(p, tail);      /* strip previous component */
+!                  }
+! 
+!                  --components;
+!              }
+!          }
+!          else if (p == start && !relative)   /* leading "/.." or "/../" */
+!              movetail(p, tail);              /* strip ".." or "../" */
+!          else
+!          {
+!              if (p == start + 2 && p[-2] == '.')     /* leading "./../" */
+!              {
+!                  movetail(p - 2, p);                 /* strip leading "./" */
+!                  tail -= 2;
+!              }
+!              p = tail;               /* skip to char after ".." or "../" */
+           }
+       }
+       else
+       {
+           ++components;               /* simple path component */
+           p = getnextcomp(p);
+       }
+!     } while (*p != NUL);
+  #endif /* !AMIGA */
+  }
+  
+*** ../vim-6.2.063/src/testdir/test49.vim      Fri May 30 21:45:31 2003
+--- src/testdir/test49.vim     Thu Jul 31 18:25:02 2003
+***************
+*** 1,6 ****
+  " Vim script language tests
+  " Author:    Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com>
+! " Last Change:       2003 May 30
+  
+  "-------------------------------------------------------------------------------
+  " Test environment                                                       {{{1
+--- 1,6 ----
+  " Vim script language tests
+  " Author:    Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com>
+! " Last Change:       2003 Jul 30
+  
+  "-------------------------------------------------------------------------------
+  " Test environment                                                       {{{1
+***************
+*** 5076,5082 ****
+           Xpath 1048576                       " X: 1048576
+           let exception  = v:exception
+           let throwpoint = v:throwpoint
+!          call CHECK(7, "autsch", scriptT, '\<6\>')
+       finally
+           Xpath 2097152                       " X: 2097152
+           let exception  = v:exception
+--- 5076,5085 ----
+           Xpath 1048576                       " X: 1048576
+           let exception  = v:exception
+           let throwpoint = v:throwpoint
+!          " Symbolic links in tempname()s are not resolved, whereas resolving
+!          " is done for v:throwpoint.  Resolve the temporary file name for
+!          " scriptT, so that it can be matched against v:throwpoint.
+!          call CHECK(7, "autsch", resolve(scriptT), '\<6\>')
+       finally
+           Xpath 2097152                       " X: 2097152
+           let exception  = v:exception
+***************
+*** 5091,5097 ****
+               Xpath 8388608                   " X: 8388608
+               let exception  = v:exception
+               let throwpoint = v:throwpoint
+!              call CHECK(9, "brrrr", scriptT, '\<8\>')
+           finally
+               Xpath 16777216                  " X: 16777216
+               let exception  = v:exception
+--- 5094,5101 ----
+               Xpath 8388608                   " X: 8388608
+               let exception  = v:exception
+               let throwpoint = v:throwpoint
+!              " Resolve scriptT for matching it against v:throwpoint.
+!              call CHECK(9, "brrrr", resolve(scriptT), '\<8\>')
+           finally
+               Xpath 16777216                  " X: 16777216
+               let exception  = v:exception
+*** ../vim-6.2.063/src/version.c       Sun Aug 10 22:24:37 2003
+--- src/version.c      Sun Aug 10 22:26:34 2003
+***************
+*** 632,633 ****
+--- 632,635 ----
+  {   /* Add new patch number below this line */
++ /**/
++     64,
+  /**/
+
+-- 
+From "know your smileys":
+ :-{}  Too much lipstick
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///
diff --git a/6.2.065 b/6.2.065
new file mode 100644 (file)
index 0000000..be913e1
--- /dev/null
+++ b/6.2.065
@@ -0,0 +1,68 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.065
+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 6.2.065
+Problem:    ":windo 123" only updates other windows when entering them.
+           (Walter Briscoe)
+Solution:   Update the topline before going to the next window.
+Files:     src/ex_cmds2.c
+
+
+*** ../vim-6.2.064/src/ex_cmds2.c      Mon Jun 30 22:27:28 2003
+--- src/ex_cmds2.c     Sun Jul 27 12:54:45 2003
+***************
+*** 1687,1700 ****
+                   break;
+           }
+  
+! #ifdef FEAT_SCROLLBIND
+!          if (eap->cmdidx == CMD_windo && curwin->w_p_scb)
+           {
+               /* required when 'scrollbind' has been set */
+!              validate_cursor();      /* may need to update w_leftcol */
+!              do_check_scrollbind(TRUE);
+!          }
+  #endif
+       }
+       listcmd_busy = FALSE;
+      }
+--- 1687,1701 ----
+                   break;
+           }
+  
+!          if (eap->cmdidx == CMD_windo)
+           {
++              validate_cursor();      /* cursor may have moved */
++ #ifdef FEAT_SCROLLBIND
+               /* required when 'scrollbind' has been set */
+!              if (curwin->w_p_scb)
+!                  do_check_scrollbind(TRUE);
+  #endif
++          }
+       }
+       listcmd_busy = FALSE;
+      }
+*** ../vim-6.2.064/src/version.c       Sun Aug 10 22:31:29 2003
+--- src/version.c      Sun Aug 10 22:33:26 2003
+***************
+*** 632,633 ****
+--- 632,635 ----
+  {   /* Add new patch number below this line */
++ /**/
++     65,
+  /**/
+
+-- 
+From "know your smileys":
+ =):-) Uncle Sam
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///
diff --git a/6.2.066 b/6.2.066
new file mode 100644 (file)
index 0000000..dd8e57b
--- /dev/null
+++ b/6.2.066
@@ -0,0 +1,225 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.066 (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 6.2.066 (extra)
+Problem:    Ruby interface doesn't work with Ruby 1.8.0.
+Solution:   Change "defout" to "stdout". (Aron Grifis)
+           Change dynamic loading. (Taro Muraoka)
+Files:     src/if_ruby.c, src/Make_mvc.mak
+
+
+*** ../vim-6.2.065/src/if_ruby.c       Sat Apr 19 15:21:16 2003
+--- src/if_ruby.c      Fri Aug  8 20:43:45 2003
+***************
+*** 12,18 ****
+  #include <string.h>
+  
+  #ifdef _WIN32
+! # define NT
+  # ifndef DYNAMIC_RUBY
+  #  define IMPORT /* For static dll usage __declspec(dllimport) */
+  #  define RUBYEXTERN __declspec(dllimport)
+--- 12,20 ----
+  #include <string.h>
+  
+  #ifdef _WIN32
+! # if !defined(DYNAMIC_RUBY_VER) || (DYNAMIC_RUBY_VER < 18)
+! #   define NT
+! # endif
+  # ifndef DYNAMIC_RUBY
+  #  define IMPORT /* For static dll usage __declspec(dllimport) */
+  #  define RUBYEXTERN __declspec(dllimport)
+***************
+*** 33,38 ****
+--- 35,49 ----
+  # define rb_cNilClass                (*dll_rb_cNilClass)
+  # define rb_cSymbol          (*dll_rb_cSymbol)
+  # define rb_cTrueClass               (*dll_rb_cTrueClass)
++ # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++ /*
++  * On ver 1.8, all Ruby functions are exported with "__declspce(dllimport)"
++  * in ruby.h.  But it cause trouble for these variables, because it is
++  * defined in this file.  When defined this RUBY_EXPORT it modified to
++  * "extern" and be able to avoid this problem.
++  */
++ #  define RUBY_EXPORT
++ # endif
+  #endif
+  
+  #include <ruby.h>
+***************
+*** 83,89 ****
+  #define rb_define_module_function    dll_rb_define_module_function
+  #define rb_define_singleton_method   dll_rb_define_singleton_method
+  #define rb_define_virtual_variable   dll_rb_define_virtual_variable
+! #define rb_defout                    (*dll_rb_defout)
+  #define rb_eArgError                 (*dll_rb_eArgError)
+  #define rb_eIndexError                       (*dll_rb_eIndexError)
+  #define rb_eRuntimeError             (*dll_rb_eRuntimeError)
+--- 94,100 ----
+  #define rb_define_module_function    dll_rb_define_module_function
+  #define rb_define_singleton_method   dll_rb_define_singleton_method
+  #define rb_define_virtual_variable   dll_rb_define_virtual_variable
+! #define rb_stdout                    (*dll_rb_stdout)
+  #define rb_eArgError                 (*dll_rb_eArgError)
+  #define rb_eIndexError                       (*dll_rb_eIndexError)
+  #define rb_eRuntimeError             (*dll_rb_eRuntimeError)
+***************
+*** 111,116 ****
+--- 122,130 ----
+  #define ruby_errinfo                 (*dll_ruby_errinfo)
+  #define ruby_init                    dll_ruby_init
+  #define ruby_init_loadpath           dll_ruby_init_loadpath
++ #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++ # define rb_w32_snprintf             dll_rb_w32_snprintf
++ #endif
+  
+  /*
+   * Pointers for dynamic link
+***************
+*** 133,139 ****
+  static void (*dll_rb_define_module_function) (VALUE,const char*,VALUE(*)(),int);
+  static void (*dll_rb_define_singleton_method) (VALUE,const char*,VALUE(*)(),int);
+  static void (*dll_rb_define_virtual_variable) (const char*,VALUE(*)(),void(*)());
+! static VALUE *dll_rb_defout;
+  static VALUE *dll_rb_eArgError;
+  static VALUE *dll_rb_eIndexError;
+  static VALUE *dll_rb_eRuntimeError;
+--- 147,153 ----
+  static void (*dll_rb_define_module_function) (VALUE,const char*,VALUE(*)(),int);
+  static void (*dll_rb_define_singleton_method) (VALUE,const char*,VALUE(*)(),int);
+  static void (*dll_rb_define_virtual_variable) (const char*,VALUE(*)(),void(*)());
+! static VALUE *dll_rb_stdout;
+  static VALUE *dll_rb_eArgError;
+  static VALUE *dll_rb_eIndexError;
+  static VALUE *dll_rb_eRuntimeError;
+***************
+*** 162,167 ****
+--- 176,182 ----
+  static VALUE *dll_ruby_errinfo;
+  static void (*dll_ruby_init) (void);
+  static void (*dll_ruby_init_loadpath) (void);
++ static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
+  
+  static HINSTANCE hinstRuby = 0; /* Instance of ruby.dll */
+  
+***************
+*** 193,199 ****
+      {"rb_define_module_function", (RUBY_PROC*)&dll_rb_define_module_function},
+      {"rb_define_singleton_method", (RUBY_PROC*)&dll_rb_define_singleton_method},
+      {"rb_define_virtual_variable", (RUBY_PROC*)&dll_rb_define_virtual_variable},
+!     {"rb_defout", (RUBY_PROC*)&dll_rb_defout},
+      {"rb_eArgError", (RUBY_PROC*)&dll_rb_eArgError},
+      {"rb_eIndexError", (RUBY_PROC*)&dll_rb_eIndexError},
+      {"rb_eRuntimeError", (RUBY_PROC*)&dll_rb_eRuntimeError},
+--- 208,214 ----
+      {"rb_define_module_function", (RUBY_PROC*)&dll_rb_define_module_function},
+      {"rb_define_singleton_method", (RUBY_PROC*)&dll_rb_define_singleton_method},
+      {"rb_define_virtual_variable", (RUBY_PROC*)&dll_rb_define_virtual_variable},
+!     {"rb_stdout", (RUBY_PROC*)&dll_rb_stdout},
+      {"rb_eArgError", (RUBY_PROC*)&dll_rb_eArgError},
+      {"rb_eIndexError", (RUBY_PROC*)&dll_rb_eIndexError},
+      {"rb_eRuntimeError", (RUBY_PROC*)&dll_rb_eRuntimeError},
+***************
+*** 221,226 ****
+--- 236,242 ----
+      {"ruby_errinfo", (RUBY_PROC*)&dll_ruby_errinfo},
+      {"ruby_init", (RUBY_PROC*)&dll_ruby_init},
+      {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath},
++     {"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf},
+      {"", NULL},
+  };
+  
+***************
+*** 782,792 ****
+  static void ruby_io_init(void)
+  {
+  #ifndef DYNAMIC_RUBY
+!     RUBYEXTERN VALUE rb_defout;
+  #endif
+  
+!     rb_defout = rb_obj_alloc(rb_cObject);
+!     rb_define_singleton_method(rb_defout, "write", vim_message, 1);
+      rb_define_global_function("p", f_p, -1);
+  }
+  
+--- 798,808 ----
+  static void ruby_io_init(void)
+  {
+  #ifndef DYNAMIC_RUBY
+!     RUBYEXTERN VALUE rb_stdout;
+  #endif
+  
+!     rb_stdout = rb_obj_alloc(rb_cObject);
+!     rb_define_singleton_method(rb_stdout, "write", vim_message, 1);
+      rb_define_global_function("p", f_p, -1);
+  }
+  
+*** ../vim-6.2.065/src/Make_mvc.mak    Sun Jul 27 15:09:30 2003
+--- src/Make_mvc.mak   Fri Aug  8 20:43:46 2003
+***************
+*** 506,515 ****
+--- 506,527 ----
+  !ifndef RUBY_VER_LONG
+  RUBY_VER_LONG = 1.6
+  !endif
++ 
++ !if $(RUBY_VER) >= 18
++ !ifndef RUBY_PLATFORM
++ RUBY_PLATFORM = i386-mswin32
++ !endif
++ !ifndef RUBY_INSTALL_NAME
++ RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
++ !endif
++ !else
+  !ifndef RUBY_PLATFORM
+  RUBY_PLATFORM = i586-mswin32
+  !endif
++ !ifndef RUBY_INSTALL_NAME
+  RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
++ !endif
++ !endif # $(RUBY_VER) >= 18
+  
+  !message Ruby requested (version $(RUBY_VER)) - root dir is "$(RUBY)"
+  CFLAGS = $(CFLAGS) -DFEAT_RUBY
+***************
+*** 519,525 ****
+  # Do we want to load Ruby dynamically?
+  !if "$(DYNAMIC_RUBY)" == "yes"
+  !message Ruby DLL will be loaded dynamically
+! CFLAGS = $(CFLAGS) -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
+  !undef RUBY_LIB
+  !endif
+  !endif # RUBY
+--- 531,537 ----
+  # Do we want to load Ruby dynamically?
+  !if "$(DYNAMIC_RUBY)" == "yes"
+  !message Ruby DLL will be loaded dynamically
+! CFLAGS = $(CFLAGS) -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\" -DDYNAMIC_RUBY_VER=$(RUBY_VER)
+  !undef RUBY_LIB
+  !endif
+  !endif # RUBY
+*** ../vim-6.2.065/src/version.c       Sun Aug 10 22:34:58 2003
+--- src/version.c      Sun Aug 10 22:36:36 2003
+***************
+*** 632,633 ****
+--- 632,635 ----
+  {   /* Add new patch number below this line */
++ /**/
++     66,
+  /**/
+
+-- 
+From "know your smileys":
+ <<<:-{    Worf (Never smiles anyways, so he's a bad smiley)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///
diff --git a/6.2.067 b/6.2.067
new file mode 100644 (file)
index 0000000..9a34494
--- /dev/null
+++ b/6.2.067
@@ -0,0 +1,65 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.067
+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 6.2.067
+Problem:    When searching for a string that starts with a composing character
+           the command line isn't drawn properly.
+Solution:   Don't count the space to draw the composing character on and
+           adjust the cursor column after drawing the string.
+Files:     src/message.c
+
+
+*** ../vim-6.2.066/src/message.c       Thu Jul 24 21:48:47 2003
+--- src/message.c      Sun Aug  3 16:16:49 2003
+***************
+*** 1166,1175 ****
+      /* If the string starts with a composing character first draw a space on
+       * which the composing char can be drawn. */
+      if (enc_utf8 && utf_iscomposing(utf_ptr2char(msgstr)))
+-     {
+       msg_puts_attr((char_u *)" ", attr);
+-      retval += 1;
+-     }
+  #endif
+  
+      /*
+--- 1166,1172 ----
+***************
+*** 2080,2085 ****
+--- 2077,2088 ----
+      msg_didout = TRUE;               /* remember that line is not empty */
+      screen_puts_len(t_s, (int)(s - t_s), msg_row, msg_col, attr);
+      msg_col += t_col;
++ #ifdef FEAT_MBYTE
++     /* If the string starts with a composing character don't increment the
++      * column position for it. */
++     if (enc_utf8 && utf_iscomposing(utf_ptr2char(t_s)))
++      --msg_col;
++ #endif
+      if (msg_col >= Columns)
+      {
+       msg_col = 0;
+*** ../vim-6.2.066/src/version.c       Sun Aug 10 22:37:55 2003
+--- src/version.c      Sun Aug 10 22:39:21 2003
+***************
+*** 632,633 ****
+--- 632,635 ----
+  {   /* Add new patch number below this line */
++ /**/
++     67,
+  /**/
+
+-- 
+From "know your smileys":
+ (X0||)   Double hamburger with lettuce and tomato
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///
diff --git a/6.2.068 b/6.2.068
new file mode 100644 (file)
index 0000000..60600cc
--- /dev/null
+++ b/6.2.068
@@ -0,0 +1,82 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.068
+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 6.2.068
+Problem:    Events for the netbeans interface that include a file name with
+           special characters don't work properly.
+Solution:   Use nb_quote() on the file name. (Sergey Khorev)
+Files:     src/netbeans.c
+
+
+*** ../vim-6.2.067/src/netbeans.c      Sun Jul 27 14:16:53 2003
+--- src/netbeans.c     Sun Aug 10 22:08:26 2003
+***************
+*** 839,844 ****
+--- 832,838 ----
+  
+  /*
+   * Send a response with text.
++  * "result" must have been quoted already (using nb_quote()).
+   */
+      static void
+  nb_reply_text(int cmdno, char_u *result)
+***************
+*** 2136,2142 ****
+  
+      sprintf(buffer, "0:fileOpened=%d \"%s\" %s %s\n",
+           0,
+!          filename,
+           "F",  /* open in NetBeans */
+           "F"); /* modified */
+  
+--- 2160,2166 ----
+  
+      sprintf(buffer, "0:fileOpened=%d \"%s\" %s %s\n",
+           0,
+!          nb_quote((char_u *)filename),
+           "F",  /* open in NetBeans */
+           "F"); /* modified */
+  
+***************
+*** 2354,2360 ****
+      if (bufno == -1)
+      {
+       nbdebug(("got keycommand for non-NetBeans buffer, opening...\n"));
+!      sprintf(buf, "0:fileOpened=%d \"%s\" %s %s\n", 0, curbuf->b_ffname,
+               "T",  /* open in NetBeans */
+               "F"); /* modified */
+       nbdebug(("EVT: %s", buf));
+--- 2378,2386 ----
+      if (bufno == -1)
+      {
+       nbdebug(("got keycommand for non-NetBeans buffer, opening...\n"));
+!      sprintf(buf, "0:fileOpened=%d \"%s\" %s %s\n", 0,
+!              curbuf->b_ffname == NULL ? (char_u *)""
+!                                               : nb_quote(curbuf->b_ffname),
+               "T",  /* open in NetBeans */
+               "F"); /* modified */
+       nbdebug(("EVT: %s", buf));
+*** ../vim-6.2.067/src/version.c       Sun Aug 10 22:39:59 2003
+--- src/version.c      Sun Aug 10 22:42:14 2003
+***************
+*** 632,633 ****
+--- 632,635 ----
+  {   /* Add new patch number below this line */
++ /**/
++     68,
+  /**/
+
+-- 
+From "know your smileys":
+ :-X   My lips are sealed
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///
diff --git a/6.2.069 b/6.2.069
new file mode 100644 (file)
index 0000000..c003e73
--- /dev/null
+++ b/6.2.069
@@ -0,0 +1,116 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.069
+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 6.2.069 (after 6.2.064)
+Problem:    Unused variables "limit" and "new_st" and unused label "fail" in
+           some situation. (Bill McCarthy)
+Solution:   Put the declarations inside an #ifdef. (Servatius Brandt)
+Files:     src/eval.c, src/tag.c
+
+
+*** ../vim-6.2.068/src/eval.c  Sun Aug 10 22:31:29 2003
+--- src/eval.c Mon Aug 11 09:54:12 2003
+***************
+*** 5810,5816 ****
+      VAR              retvar;
+  {
+      char_u   *p;
+-     int              limit = 100;
+  
+      p = get_var_string(&argvars[0]);
+  #ifdef FEAT_SHORTCUT
+--- 5810,5815 ----
+***************
+*** 5833,5838 ****
+--- 5832,5838 ----
+       char_u  *q;
+       int     is_relative_to_current = FALSE;
+       int     has_trailing_pathsep = FALSE;
++      int     limit = 100;
+  
+       p = vim_strsave(p);
+  
+***************
+*** 5853,5859 ****
+           q[-1] = NUL;
+       }
+  
+!      for(;;)
+       {
+           for (;;)
+           {
+--- 5853,5859 ----
+           q[-1] = NUL;
+       }
+  
+!      for (;;)
+       {
+           for (;;)
+           {
+***************
+*** 5998,6004 ****
+--- 5998,6006 ----
+  
+      simplify_filename(retvar->var_val.var_string);
+  
++ #ifdef HAVE_READLINK
+  fail:
++ #endif
+      retvar->var_type = VAR_STRING;
+  }
+  
+*** ../vim-6.2.068/src/tag.c   Sun Aug 10 22:31:29 2003
+--- src/tag.c  Mon Aug 11 21:18:10 2003
+***************
+*** 2936,2942 ****
+           {
+               int             do_strip = FALSE;
+               char_u          saved_char;
+!              struct stat     st, new_st;
+  
+               /* Don't strip for an erroneous file name. */
+               if (!stripping_disabled)
+--- 2936,2942 ----
+           {
+               int             do_strip = FALSE;
+               char_u          saved_char;
+!              struct stat     st;
+  
+               /* Don't strip for an erroneous file name. */
+               if (!stripping_disabled)
+***************
+*** 2961,2966 ****
+--- 2961,2968 ----
+  
+                   if (!do_strip)
+                   {
++                      struct stat     new_st;
++ 
+                       /* If the component exists in the file system, check
+                        * that stripping it won't change the meaning of the
+                        * file name.  First get information about the
+*** ../vim-6.2.068/src/version.c       Sun Aug 10 22:43:27 2003
+--- src/version.c      Mon Aug 11 23:03:28 2003
+***************
+*** 632,633 ****
+--- 632,635 ----
+  {   /* Add new patch number below this line */
++ /**/
++     69,
+  /**/
+
+-- 
+I AM THANKFUL... 
+...for the clothes that fit a little too snug because it 
+means I have more than enough to eat. 
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///
diff --git a/6.2.070 b/6.2.070
new file mode 100644 (file)
index 0000000..eeedd0f
--- /dev/null
+++ b/6.2.070
@@ -0,0 +1,58 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.070
+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 6.2.070 (after 6.2.069)
+Problem:    Still unused variable "new_st". (Bill McCarthy)
+Solution:   Move the declaration to the right block this time.
+Files:     src/tag.c
+
+
+*** ../vim-6.2.069/src/tag.c   Mon Aug 11 23:03:53 2003
+--- src/tag.c  Tue Aug 12 10:08:43 2003
+***************
+*** 2961,2968 ****
+  
+                   if (!do_strip)
+                   {
+-                      struct stat     new_st;
+- 
+                       /* If the component exists in the file system, check
+                        * that stripping it won't change the meaning of the
+                        * file name.  First get information about the
+--- 2961,2966 ----
+***************
+*** 2983,2988 ****
+--- 2981,2988 ----
+  #ifdef UNIX
+                       if (do_strip)
+                       {
++                          struct stat new_st;
++ 
+                           /* On Unix, the check for the unstripped file name
+                            * above works also for a symbolic link pointing to
+                            * a searchable directory.  But then the parent of
+*** ../vim-6.2.069/src/version.c       Mon Aug 11 23:03:53 2003
+--- src/version.c      Tue Aug 12 19:57:51 2003
+***************
+*** 632,633 ****
+--- 632,635 ----
+  {   /* Add new patch number below this line */
++ /**/
++     70,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+97. Your mother tells you to remember something, and you look for
+    a File/Save command.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///
diff --git a/6.2.071 b/6.2.071
new file mode 100644 (file)
index 0000000..fa45b16
--- /dev/null
+++ b/6.2.071
@@ -0,0 +1,83 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.071
+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 6.2.071
+Problem:    'statusline' can only contain 50 % items. (Antony Scriven)
+Solution:   Allow 80 items and mention it in the docs.
+Files:     runtime/doc/options.txt, src/vim.h
+
+
+*** ../vim-6.2.070/runtime/doc/options.txt     Sun Jun  1 12:20:34 2003
+--- runtime/doc/options.txt    Tue Aug 12 11:03:40 2003
+***************
+*** 1,4 ****
+! *options.txt*        For Vim version 6.2.  Last change: 2003 May 29
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *options.txt*        For Vim version 6.2.  Last change: 2003 Aug 12
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 5379,5385 ****
+       normal text.  Each status line item is of the form:
+         %-0{minwid}.{maxwid}{item}
+       All fields except the {item} is optional.  A single percent sign can
+!      be given as "%%".
+  
+       Note that the only effect of 'ruler' when this option is set (and
+       'laststatus' is 2) is controlling the output of |CTRL-G|.
+--- 5383,5389 ----
+       normal text.  Each status line item is of the form:
+         %-0{minwid}.{maxwid}{item}
+       All fields except the {item} is optional.  A single percent sign can
+!      be given as "%%".  Up to 80 items can be specified.
+  
+       Note that the only effect of 'ruler' when this option is set (and
+       'laststatus' is 2) is controlling the output of |CTRL-G|.
+*** ../vim-6.2.070/src/vim.h   Mon Jul 28 14:38:38 2003
+--- src/vim.h  Tue Aug 12 11:06:05 2003
+***************
+*** 1258,1264 ****
+  #endif
+  
+  #define SHOWCMD_COLS 10                      /* columns needed by shown command */
+! #define STL_MAX_ITEM 50                      /* max count of %<flag> in statusline*/
+  
+  typedef void     *vim_acl_T;         /* dummy to pass an ACL to a function */
+  
+--- 1258,1264 ----
+  #endif
+  
+  #define SHOWCMD_COLS 10                      /* columns needed by shown command */
+! #define STL_MAX_ITEM 80                      /* max nr of %<flag> in statusline */
+  
+  typedef void     *vim_acl_T;         /* dummy to pass an ACL to a function */
+  
+*** ../vim-6.2.070/src/version.c       Tue Aug 12 19:58:43 2003
+--- src/version.c      Tue Aug 12 20:00:00 2003
+***************
+*** 632,633 ****
+--- 632,635 ----
+  {   /* Add new patch number below this line */
++ /**/
++     71,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+98. The Alta Vista administrators ask you what sites are missing
+    in their index files.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///
This page took 0.183011 seconds and 4 git commands to generate.