diff options
author | Bram Moolenaar <Bram@vim.org> | 2007-03-27 14:57:09 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2007-03-27 14:57:09 +0000 |
commit | 63b9254b8e38329d98f5400339ec563abd953444 (patch) | |
tree | 06ce258249530d13de528d3e8da67fa1c48d96cc /src | |
parent | 7cc36e9402bd8e34bca88df499b2d94fdb4cc4fb (diff) | |
download | vim-git-63b9254b8e38329d98f5400339ec563abd953444.tar.gz |
updated for version 7.0-224v7.0.224
Diffstat (limited to 'src')
-rw-r--r-- | src/eval.c | 2 | ||||
-rw-r--r-- | src/ex_docmd.c | 28 | ||||
-rw-r--r-- | src/proto/ex_docmd.pro | 2 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 24 insertions, 10 deletions
diff --git a/src/eval.c b/src/eval.c index ea8361524..e895b997b 100644 --- a/src/eval.c +++ b/src/eval.c @@ -8924,7 +8924,7 @@ f_expand(argvars, rettv) if (*s == '%' || *s == '#' || *s == '<') { ++emsg_off; - rettv->vval.v_string = eval_vars(s, &len, NULL, &errormsg, s); + rettv->vval.v_string = eval_vars(s, s, &len, NULL, &errormsg, NULL); --emsg_off; } else diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 71a7fa180..3cb064e9c 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -4176,6 +4176,7 @@ expand_filename(eap, cmdlinep, errormsgp) int srclen; char_u *p; int n; + int escaped; #ifdef FEAT_QUICKFIX /* Skip a regexp pattern for ":vimgrep[add] pat file..." */ @@ -4216,7 +4217,8 @@ expand_filename(eap, cmdlinep, errormsgp) /* * Try to find a match at this position. */ - repl = eval_vars(p, &srclen, &(eap->do_ecmd_lnum), errormsgp, eap->arg); + repl = eval_vars(p, eap->arg, &srclen, &(eap->do_ecmd_lnum), + errormsgp, &escaped); if (*errormsgp != NULL) /* error detected */ return FAIL; if (repl == NULL) /* no match found */ @@ -4235,11 +4237,15 @@ expand_filename(eap, cmdlinep, errormsgp) vim_free(l); } - /* Need to escape white space et al. with a backslash. Don't do this - * for shell commands (may have to use quotes instead). Don't do this - * for non-unix systems when there is a single argument (spaces don't - * separate arguments then). */ + /* Need to escape white space et al. with a backslash. + * Don't do this for: + * - replacement that already has been escaped: "##" + * - shell commands (may have to use quotes instead). + * - non-unix systems when there is a single argument (spaces don't + * separate arguments then). + */ if (!eap->usefilter + && !escaped && eap->cmdidx != CMD_bang && eap->cmdidx != CMD_make && eap->cmdidx != CMD_lmake @@ -9280,12 +9286,14 @@ ex_tag_cmd(eap, name) * number of characters to skip. */ char_u * -eval_vars(src, usedlen, lnump, errormsg, srcstart) +eval_vars(src, srcstart, usedlen, lnump, errormsg, escaped) char_u *src; /* pointer into commandline */ + char_u *srcstart; /* beginning of valid memory for src */ int *usedlen; /* characters after src that are used */ linenr_T *lnump; /* line number for :e command, or NULL */ char_u **errormsg; /* pointer to error message */ - char_u *srcstart; /* beginning of valid memory for src */ + int *escaped; /* return value has escaped white space (can + * be NULL) */ { int i; char_u *s; @@ -9332,6 +9340,8 @@ eval_vars(src, usedlen, lnump, errormsg, srcstart) #endif *errormsg = NULL; + if (escaped != NULL) + *escaped = FALSE; /* * Check if there is something to do. @@ -9407,6 +9417,8 @@ eval_vars(src, usedlen, lnump, errormsg, srcstart) result = arg_all(); resultbuf = result; *usedlen = 2; + if (escaped != NULL) + *escaped = TRUE; #ifdef FEAT_MODIFY_FNAME skip_mod = TRUE; #endif @@ -9627,7 +9639,7 @@ expand_sfile(arg) else { /* replace "<sfile>" with the sourced file name, and do ":" stuff */ - repl = eval_vars(p, &srclen, NULL, &errormsg, result); + repl = eval_vars(p, result, &srclen, NULL, &errormsg, NULL); if (errormsg != NULL) { if (*errormsg) diff --git a/src/proto/ex_docmd.pro b/src/proto/ex_docmd.pro index 992409b2b..50d0643c3 100644 --- a/src/proto/ex_docmd.pro +++ b/src/proto/ex_docmd.pro @@ -44,7 +44,7 @@ extern int vim_mkdir_emsg __ARGS((char_u *name, int prot)); extern FILE *open_exfile __ARGS((char_u *fname, int forceit, char *mode)); extern void update_topline_cursor __ARGS((void)); extern void exec_normal_cmd __ARGS((char_u *cmd, int remap, int silent)); -extern char_u *eval_vars __ARGS((char_u *src, int *usedlen, linenr_T *lnump, char_u **errormsg, char_u *srcstart)); +extern char_u *eval_vars __ARGS((char_u *src, char_u *srcstart, int *usedlen, linenr_T *lnump, char_u **errormsg, int *escaped)); extern char_u *expand_sfile __ARGS((char_u *arg)); extern int put_eol __ARGS((FILE *fd)); extern int put_line __ARGS((FILE *fd, char *s)); diff --git a/src/version.c b/src/version.c index 81b8f4993..3c8b1733e 100644 --- a/src/version.c +++ b/src/version.c @@ -667,6 +667,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 224, +/**/ 223, /**/ 222, |