Loading ...
Sorry, an error occurred while loading the content.

Patch 6.2.063

Expand Messages
  • Bram Moolenaar
    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
    Message 1 of 1 , Aug 10, 2003
    View Source
    • 0 Attachment
      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.c,
      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@... -- 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 ///
    Your message has been successfully submitted and would be delivered to recipients shortly.