Patch 7.2.051
Problem:    Can't avoid 'wildignore' and 'suffixes' for glob() and globpath().
Solution:   Add an extra argument to these functions. (Ingo Karkat)
Files:      src/eval.c, src/ex_getln.c, src/proto/ex_getln.pro,
            runtime/doc/eval.txt, runtime/doc/options.txt


*** ../vim-7.2.050/src/eval.c   Thu Nov 20 16:11:03 2008
--- src/eval.c  Thu Nov 27 22:15:40 2008
***************
*** 7564,7571 ****
      {"getwinposx",    0, 0, f_getwinposx},
      {"getwinposy",    0, 0, f_getwinposy},
      {"getwinvar",     2, 2, f_getwinvar},
!     {"glob",          1, 1, f_glob},
!     {"globpath",      2, 2, f_globpath},
      {"has",           1, 1, f_has},
      {"has_key",               2, 2, f_has_key},
      {"haslocaldir",   0, 0, f_haslocaldir},
--- 7564,7571 ----
      {"getwinposx",    0, 0, f_getwinposx},
      {"getwinposy",    0, 0, f_getwinposy},
      {"getwinvar",     2, 2, f_getwinvar},
!     {"glob",          1, 2, f_glob},
!     {"globpath",      2, 3, f_globpath},
      {"has",           1, 1, f_has},
      {"has_key",               2, 2, f_has_key},
      {"haslocaldir",   0, 0, f_haslocaldir},
***************
*** 9557,9563 ****
      else
      {
        /* When the optional second argument is non-zero, don't remove matches
!        * for 'suffixes' and 'wildignore' */
        if (argvars[1].v_type != VAR_UNKNOWN
                                    && get_tv_number_chk(&argvars[1], &error))
            flags |= WILD_KEEP_ALL;
--- 9557,9563 ----
      else
      {
        /* When the optional second argument is non-zero, don't remove matches
!        * for 'wildignore' and don't put matches for 'suffixes' at the end. */
        if (argvars[1].v_type != VAR_UNKNOWN
                                    && get_tv_number_chk(&argvars[1], &error))
            flags |= WILD_KEEP_ALL;
***************
*** 11323,11335 ****
      typval_T  *argvars;
      typval_T  *rettv;
  {
      expand_T  xpc;
  
!     ExpandInit(&xpc);
!     xpc.xp_context = EXPAND_FILES;
!     rettv->v_type = VAR_STRING;
!     rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
!                                    NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL);
  }
  
  /*
--- 11323,11347 ----
      typval_T  *argvars;
      typval_T  *rettv;
  {
+     int               flags = WILD_SILENT|WILD_USE_NL;
      expand_T  xpc;
+     int               error = FALSE;
  
!     /* When the optional second argument is non-zero, don't remove matches
!     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
!     if (argvars[1].v_type != VAR_UNKNOWN
!                               && get_tv_number_chk(&argvars[1], &error))
!       flags |= WILD_KEEP_ALL;
!     rettv->v_type = VAR_STRING;
!     if (!error)
!     {
!       ExpandInit(&xpc);
!       xpc.xp_context = EXPAND_FILES;
!       rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
!                                                      NULL, flags, WILD_ALL);
!     }
!     else
!       rettv->vval.v_string = NULL;
  }
  
  /*
***************
*** 11340,11353 ****
      typval_T  *argvars;
      typval_T  *rettv;
  {
      char_u    buf1[NUMBUFLEN];
      char_u    *file = get_tv_string_buf_chk(&argvars[1], buf1);
  
      rettv->v_type = VAR_STRING;
!     if (file == NULL)
        rettv->vval.v_string = NULL;
      else
!       rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file);
  }
  
  /*
--- 11352,11373 ----
      typval_T  *argvars;
      typval_T  *rettv;
  {
+     int               flags = 0;
      char_u    buf1[NUMBUFLEN];
      char_u    *file = get_tv_string_buf_chk(&argvars[1], buf1);
+     int               error = FALSE;
  
+     /* When the optional second argument is non-zero, don't remove matches
+     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+     if (argvars[2].v_type != VAR_UNKNOWN
+                               && get_tv_number_chk(&argvars[2], &error))
+       flags |= WILD_KEEP_ALL;
      rettv->v_type = VAR_STRING;
!     if (file == NULL || error)
        rettv->vval.v_string = NULL;
      else
!       rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file,
!                                                                      flags);
  }
  
  /*
*** ../vim-7.2.050/src/ex_getln.c       Sat Nov 15 14:10:23 2008
--- src/ex_getln.c      Thu Nov 20 18:37:20 2008
***************
*** 2524,2530 ****
            && ccline.xpc->xp_context != EXPAND_NOTHING
            && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
      {
!       int i = ccline.xpc->xp_pattern - p;
  
        /* If xp_pattern points inside the old cmdbuff it needs to be adjusted
         * to point into the newly allocated memory. */
--- 2524,2530 ----
            && ccline.xpc->xp_context != EXPAND_NOTHING
            && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
      {
!       int i = (int)(ccline.xpc->xp_pattern - p);
  
        /* If xp_pattern points inside the old cmdbuff it needs to be adjusted
         * to point into the newly allocated memory. */
***************
*** 4897,4903 ****
      if (s == NULL)
        return FAIL;
      sprintf((char *)s, "%s/%s*.vim", dirname, pat);
!     all = globpath(p_rtp, s);
      vim_free(s);
      if (all == NULL)
        return FAIL;
--- 4897,4903 ----
      if (s == NULL)
        return FAIL;
      sprintf((char *)s, "%s/%s*.vim", dirname, pat);
!     all = globpath(p_rtp, s, 0);
      vim_free(s);
      if (all == NULL)
        return FAIL;
***************
*** 4938,4946 ****
   * newlines.  Returns NULL for an error or no matches.
   */
      char_u *
! globpath(path, file)
      char_u    *path;
      char_u    *file;
  {
      expand_T  xpc;
      char_u    *buf;
--- 4938,4947 ----
   * newlines.  Returns NULL for an error or no matches.
   */
      char_u *
! globpath(path, file, expand_options)
      char_u    *path;
      char_u    *file;
+     int               expand_options;
  {
      expand_T  xpc;
      char_u    *buf;
***************
*** 4969,4978 ****
        {
            add_pathsep(buf);
            STRCAT(buf, file);
!           if (ExpandFromContext(&xpc, buf, &num_p, &p, WILD_SILENT) != FAIL
!                                                                && num_p > 0)
            {
!               ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT);
                for (len = 0, i = 0; i < num_p; ++i)
                    len += (int)STRLEN(p[i]) + 1;
  
--- 4970,4979 ----
        {
            add_pathsep(buf);
            STRCAT(buf, file);
!           if (ExpandFromContext(&xpc, buf, &num_p, &p,
!                            WILD_SILENT|expand_options) != FAIL && num_p > 0)
            {
!               ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT|expand_options);
                for (len = 0, i = 0; i < num_p; ++i)
                    len += (int)STRLEN(p[i]) + 1;
  
*** ../vim-7.2.050/src/proto/ex_getln.pro       Wed May 28 16:49:01 2008
--- src/proto/ex_getln.pro      Thu Nov 20 18:27:57 2008
***************
*** 31,37 ****
  void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
  int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int 
*matchcount, char_u ***matches));
  int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, 
char_u ***file, char_u *((*func)(expand_T *, int))));
! char_u *globpath __ARGS((char_u *path, char_u *file));
  void init_history __ARGS((void));
  int get_histtype __ARGS((char_u *name));
  void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int 
sep));
--- 31,37 ----
  void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
  int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int 
*matchcount, char_u ***matches));
  int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, 
char_u ***file, char_u *((*func)(expand_T *, int))));
! char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
  void init_history __ARGS((void));
  int get_histtype __ARGS((char_u *name));
  void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int 
sep));
*** ../vim-7.2.050/runtime/doc/eval.txt Sun Nov  9 13:43:25 2008
--- runtime/doc/eval.txt        Thu Nov 27 22:17:13 2008
***************
*** 1,4 ****
! *eval.txt*    For Vim version 7.2.  Last change: 2008 Nov 02
  
  
                  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *eval.txt*    For Vim version 7.2.  Last change: 2008 Nov 27
  
  
                  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 1706,1712 ****
  exists( {expr})                       Number  TRUE if {expr} exists
  extend({expr1}, {expr2} [, {expr3}])
                                List/Dict insert items of {expr2} into {expr1}
! expand( {expr})                       String  expand special keywords in 
{expr}
  feedkeys( {string} [, {mode}])        Number  add key sequence to typeahead 
buffer
  filereadable( {file})         Number  TRUE if {file} is a readable file
  filewritable( {file})         Number  TRUE if {file} is a writable file
--- 1709,1715 ----
  exists( {expr})                       Number  TRUE if {expr} exists
  extend({expr1}, {expr2} [, {expr3}])
                                List/Dict insert items of {expr2} into {expr1}
! expand( {expr} [, {flag}])    String  expand special keywords in {expr}
  feedkeys( {string} [, {mode}])        Number  add key sequence to typeahead 
buffer
  filereadable( {file})         Number  TRUE if {file} is a readable file
  filewritable( {file})         Number  TRUE if {file} is a writable file
***************
*** 1758,1765 ****
  getwinposx()                  Number  X coord in pixels of GUI Vim window
  getwinposy()                  Number  Y coord in pixels of GUI Vim window
  getwinvar( {nr}, {varname})   any     variable {varname} in window {nr}
! glob( {expr})                 String  expand file wildcards in {expr}
! globpath( {path}, {expr})     String  do glob({expr}) for all dirs in {path}
  has( {feature})                       Number  TRUE if feature {feature} 
supported
  has_key( {dict}, {key})               Number  TRUE if {dict} has entry {key}
  haslocaldir()                 Number  TRUE if current window executed |:lcd|
--- 1761,1769 ----
  getwinposx()                  Number  X coord in pixels of GUI Vim window
  getwinposy()                  Number  Y coord in pixels of GUI Vim window
  getwinvar( {nr}, {varname})   any     variable {varname} in window {nr}
! glob( {expr} [, {flag}])      String  expand file wildcards in {expr}
! globpath( {path}, {expr} [, {flag}])
!                               String  do glob({expr}) for all dirs in {path}
  has( {feature})                       Number  TRUE if feature {feature} 
supported
  has_key( {dict}, {key})               Number  TRUE if {dict} has entry {key}
  haslocaldir()                 Number  TRUE if current window executed |:lcd|
***************
*** 3286,3299 ****
                        :let list_is_on = getwinvar(2, '&list')
                        :echo "myvar = " . getwinvar(1, 'myvar')
  <
!                                                       *glob()*
! glob({expr})  Expand the file wildcards in {expr}.  See |wildcards| for the
                use of special characters.
                The result is a String.
                When there are several matches, they are separated by <NL>
                characters.
!               The 'wildignore' option applies: Names matching one of the
!               patterns in 'wildignore' will be skipped.
                If the expansion fails, the result is an empty string.
                A name for a non-existing file is not included.
  
--- 3290,3305 ----
                        :let list_is_on = getwinvar(2, '&list')
                        :echo "myvar = " . getwinvar(1, 'myvar')
  <
! glob({expr} [, {flag}])                                       *glob()*
!               Expand the file wildcards in {expr}.  See |wildcards| for the
                use of special characters.
                The result is a String.
                When there are several matches, they are separated by <NL>
                characters.
!               Unless the optional {flag} argument is given and is non-zero,
!               the 'suffixes' and 'wildignore' options apply: Names matching
!               one of the patterns in 'wildignore' will be skipped and
!               'suffixes' affect the ordering of matches.
                If the expansion fails, the result is an empty string.
                A name for a non-existing file is not included.
  
***************
*** 3307,3326 ****
                See |expand()| for expanding special Vim variables.  See
                |system()| for getting the raw output of an external command.
  
! globpath({path}, {expr})                              *globpath()*
                Perform glob() on all directories in {path} and concatenate
                the results.  Example: >
                        :echo globpath(&rtp, "syntax/c.vim")
  <             {path} is a comma-separated list of directory names.  Each
                directory name is prepended to {expr} and expanded like with
!               glob().  A path separator is inserted when needed.
                To add a comma inside a directory name escape it with a
                backslash.  Note that on MS-Windows a directory may have a
                trailing backslash, remove it if you put a comma after it.
                If the expansion fails for one of the directories, there is no
                error message.
!               The 'wildignore' option applies: Names matching one of the
!               patterns in 'wildignore' will be skipped.
  
                The "**" item can be used to search in a directory tree.
                For example, to find all "README.txt" files in the directories
--- 3313,3334 ----
                See |expand()| for expanding special Vim variables.  See
                |system()| for getting the raw output of an external command.
  
! globpath({path}, {expr} [, {flag}])                   *globpath()*
                Perform glob() on all directories in {path} and concatenate
                the results.  Example: >
                        :echo globpath(&rtp, "syntax/c.vim")
  <             {path} is a comma-separated list of directory names.  Each
                directory name is prepended to {expr} and expanded like with
!               |glob()|.  A path separator is inserted when needed.
                To add a comma inside a directory name escape it with a
                backslash.  Note that on MS-Windows a directory may have a
                trailing backslash, remove it if you put a comma after it.
                If the expansion fails for one of the directories, there is no
                error message.
!               Unless the optional {flag} argument is given and is non-zero,
!               the 'suffixes' and 'wildignore' options apply: Names matching
!               one of the patterns in 'wildignore' will be skipped and
!               'suffixes' affect the ordering of matches.
  
                The "**" item can be used to search in a directory tree.
                For example, to find all "README.txt" files in the directories
*** ../vim-7.2.050/runtime/doc/options.txt      Sat Aug  9 19:36:49 2008
--- runtime/doc/options.txt     Tue Nov 25 23:43:55 2008
***************
*** 1,4 ****
! *options.txt* For Vim version 7.2.  Last change: 2008 Aug 06
  
  
                  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *options.txt* For Vim version 7.2.  Last change: 2008 Nov 25
  
  
                  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 7472,7478 ****
                        {not available when compiled without the |+wildignore|
                        feature}
        A list of file patterns.  A file that matches with one of these
!       patterns is ignored when completing file or directory names.
        The pattern is used like with |:autocmd|, see |autocmd-patterns|.
        Also see 'suffixes'.
        Example: >
--- 7481,7489 ----
                        {not available when compiled without the |+wildignore|
                        feature}
        A list of file patterns.  A file that matches with one of these
!       patterns is ignored when completing file or directory names, and
!       influences the result of |expand()|, |glob()| and |globpath()| unless
!       a flag is passed to disable this.
        The pattern is used like with |:autocmd|, see |autocmd-patterns|.
        Also see 'suffixes'.
        Example: >
*** ../vim-7.2.050/src/version.c        Fri Nov 28 10:08:05 2008
--- src/version.c       Fri Nov 28 10:55:44 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     51,
  /**/

-- 
Not too long ago, unzipping in public was illegal...

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui