To: vim-dev@vim.org Subject: Patch 7.2.051 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit ------------ 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 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 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 -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ download, build and distribute -- http://www.A-A-P.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///