summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/eval.txt29
-rw-r--r--runtime/doc/options.txt6
-rw-r--r--src/eval.c38
-rw-r--r--src/ex_getln.c13
-rw-r--r--src/proto/ex_getln.pro2
-rw-r--r--src/version.c2
6 files changed, 60 insertions, 30 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 81afadcaa..3ea7d7f4d 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 7.2. Last change: 2008 Nov 02
+*eval.txt* For Vim version 7.2. Last change: 2008 Nov 27
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1706,7 +1706,7 @@ executable( {expr}) Number 1 if executable {expr} exists
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}
+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,8 +1758,9 @@ gettabwinvar( {tabnr}, {winnr}, {name})
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}
+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,14 +3287,16 @@ getwinvar({winnr}, {varname}) *getwinvar()*
: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
+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.
- The 'wildignore' option applies: Names matching one of the
- patterns in 'wildignore' will be skipped.
+ 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,20 +3310,22 @@ glob({expr}) Expand the file wildcards in {expr}. See |wildcards| for the
See |expand()| for expanding special Vim variables. See
|system()| for getting the raw output of an external command.
-globpath({path}, {expr}) *globpath()*
+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.
+ |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.
+ 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
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 10a5bcd1a..786e83c72 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt* For Vim version 7.2. Last change: 2008 Aug 06
+*options.txt* For Vim version 7.2. Last change: 2008 Nov 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -7472,7 +7472,9 @@ A jump table for the options with a short description can be found at |Q_op|.
{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.
+ 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: >
diff --git a/src/eval.c b/src/eval.c
index 00190b09e..e118f042e 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -7564,8 +7564,8 @@ static struct fst
{"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},
+ {"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,7 +9557,7 @@ f_expand(argvars, rettv)
else
{
/* When the optional second argument is non-zero, don't remove matches
- * for 'suffixes' and 'wildignore' */
+ * 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,13 +11323,25 @@ f_glob(argvars, rettv)
typval_T *argvars;
typval_T *rettv;
{
+ int flags = WILD_SILENT|WILD_USE_NL;
expand_T xpc;
+ int error = FALSE;
- ExpandInit(&xpc);
- xpc.xp_context = EXPAND_FILES;
+ /* 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;
- rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
- NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL);
+ 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,14 +11352,22 @@ f_globpath(argvars, rettv)
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)
+ if (file == NULL || error)
rettv->vval.v_string = NULL;
else
- rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file);
+ rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file,
+ flags);
}
/*
diff --git a/src/ex_getln.c b/src/ex_getln.c
index ac801eb8b..e324e7eab 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -2524,7 +2524,7 @@ realloc_cmdbuff(len)
&& ccline.xpc->xp_context != EXPAND_NOTHING
&& ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
{
- int i = ccline.xpc->xp_pattern - p;
+ 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,7 +4897,7 @@ ExpandRTDir(pat, num_file, file, dirname)
if (s == NULL)
return FAIL;
sprintf((char *)s, "%s/%s*.vim", dirname, pat);
- all = globpath(p_rtp, s);
+ all = globpath(p_rtp, s, 0);
vim_free(s);
if (all == NULL)
return FAIL;
@@ -4938,9 +4938,10 @@ ExpandRTDir(pat, num_file, file, dirname)
* newlines. Returns NULL for an error or no matches.
*/
char_u *
-globpath(path, file)
+globpath(path, file, expand_options)
char_u *path;
char_u *file;
+ int expand_options;
{
expand_T xpc;
char_u *buf;
@@ -4969,10 +4970,10 @@ globpath(path, file)
{
add_pathsep(buf);
STRCAT(buf, file);
- if (ExpandFromContext(&xpc, buf, &num_p, &p, WILD_SILENT) != FAIL
- && num_p > 0)
+ if (ExpandFromContext(&xpc, buf, &num_p, &p,
+ WILD_SILENT|expand_options) != FAIL && num_p > 0)
{
- ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT);
+ 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;
diff --git a/src/proto/ex_getln.pro b/src/proto/ex_getln.pro
index b4a501814..afbf66469 100644
--- a/src/proto/ex_getln.pro
+++ b/src/proto/ex_getln.pro
@@ -31,7 +31,7 @@ char_u *addstar __ARGS((char_u *fname, int len, int context));
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));
+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));
diff --git a/src/version.c b/src/version.c
index e2e492acc..e45bd1203 100644
--- a/src/version.c
+++ b/src/version.c
@@ -677,6 +677,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 51,
+/**/
50,
/**/
49,