]> granicus.if.org Git - vim/commitdiff
updated for version 7.0-224 v7.0.224
authorBram Moolenaar <Bram@vim.org>
Tue, 27 Mar 2007 14:57:09 +0000 (14:57 +0000)
committerBram Moolenaar <Bram@vim.org>
Tue, 27 Mar 2007 14:57:09 +0000 (14:57 +0000)
src/eval.c
src/ex_docmd.c
src/proto/ex_docmd.pro
src/version.c

index ea8361524cd6f4713fcd10e9b8dc4ff7f75d4269..e895b997b9a579a568d097cbf604c96f4bf8695e 100644 (file)
@@ -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
index 71a7fa1801a4796d48e30df3ef623cd12d5a4f20..3cb064e9c289e459b361971cf29fe737d638f734 100644 (file)
@@ -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)
index 992409b2b46c9a118ce41e00c6c86862c0cd4e7c..50d0643c3b1a4a3bc86e8d2881de84bb1e83b24c 100644 (file)
@@ -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));
index 81b8f49930d80aca30a0e1ea83e9929547f96aec..3c8b1733e48293e7fcf92d1fcadc54915c0121ef 100644 (file)
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    224,
 /**/
     223,
 /**/