summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2007-03-27 14:57:09 +0000
committerBram Moolenaar <Bram@vim.org>2007-03-27 14:57:09 +0000
commit63b9254b8e38329d98f5400339ec563abd953444 (patch)
tree06ce258249530d13de528d3e8da67fa1c48d96cc
parent7cc36e9402bd8e34bca88df499b2d94fdb4cc4fb (diff)
downloadvim-git-63b9254b8e38329d98f5400339ec563abd953444.tar.gz
updated for version 7.0-224v7.0.224
-rw-r--r--src/eval.c2
-rw-r--r--src/ex_docmd.c28
-rw-r--r--src/proto/ex_docmd.pro2
-rw-r--r--src/version.c2
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,