Mercurial > vim
changeset 2016:03c191181749 v7.2.313
updated for version 7.2-313
author | vimboss |
---|---|
date | Wed, 02 Dec 2009 16:14:36 +0000 |
parents | 89189f7aaad9 |
children | 9cbe94fd5c8f |
files | src/ex_getln.c src/misc1.c src/proto/misc1.pro src/version.c |
diffstat | 4 files changed, 45 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -4422,7 +4422,8 @@ ExpandFromContext(xp, pat, num_file, fil flags |= EW_FILE; else flags = (flags | EW_DIR) & ~EW_FILE; - ret = expand_wildcards(1, &pat, num_file, file, flags); + /* Expand wildcards, supporting %:h and the like. */ + ret = expand_wildcards_eval(&pat, num_file, file, flags); if (free_pat) vim_free(pat); return ret;
--- a/src/misc1.c +++ b/src/misc1.c @@ -8447,6 +8447,46 @@ fast_breakcheck() } /* + * Invoke expand_wildcards() for one pattern. + * Expand items like "%:h" before the expansion. + * Returns OK or FAIL. + */ + int +expand_wildcards_eval(pat, num_file, file, flags) + char_u **pat; /* pointer to input pattern */ + int *num_file; /* resulting number of files */ + char_u ***file; /* array of resulting files */ + int flags; /* EW_DIR, etc. */ +{ + int ret = FAIL; + char_u *eval_pat = NULL; + char_u *exp_pat = *pat; + char_u *ignored_msg; + int usedlen; + + if (*exp_pat == '%' || *exp_pat == '#' || *exp_pat == '<') + { + ++emsg_off; + eval_pat = eval_vars(exp_pat, exp_pat, &usedlen, + NULL, &ignored_msg, NULL); + --emsg_off; + if (eval_pat != NULL) + exp_pat = concat_str(eval_pat, exp_pat + usedlen); + } + + if (exp_pat != NULL) + ret = expand_wildcards(1, &exp_pat, num_file, file, flags); + + if (eval_pat != NULL) + { + vim_free(exp_pat); + vim_free(eval_pat); + } + + return ret; +} + +/* * Expand wildcards. Calls gen_expand_wildcards() and removes files matching * 'wildignore'. * Returns OK or FAIL.
--- a/src/proto/misc1.pro +++ b/src/proto/misc1.pro @@ -85,6 +85,7 @@ void preserve_exit __ARGS((void)); int vim_fexists __ARGS((char_u *fname)); void line_breakcheck __ARGS((void)); void fast_breakcheck __ARGS((void)); +int expand_wildcards_eval __ARGS((char_u **pat, int *num_file, char_u ***file, int flags)); int expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags)); int match_suffix __ARGS((char_u *fname)); int unix_expandpath __ARGS((garray_T *gap, char_u *path, int wildoff, int flags, int didstar));