]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.615 v7.3.615
authorBram Moolenaar <Bram@vim.org>
Wed, 25 Jul 2012 15:22:23 +0000 (17:22 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 25 Jul 2012 15:22:23 +0000 (17:22 +0200)
Problem:    Completion for a user command does not recognize backslash before
            a space.
Solution:   Recognize escaped characters. (Yasuhiro Matsumoto)

src/ex_docmd.c
src/version.c

index 7be802c9d23a9ccfb20520937f570690d74e0bcc..e975d84ae934eb180430087042c09b5f1c5115f4 100644 (file)
@@ -3390,12 +3390,23 @@ set_one_cmd_context(xp, buff)
        return NULL;
 
     /* Find start of last argument (argument just before cursor): */
-    p = buff + STRLEN(buff);
-    while (p != arg && *p != ' ' && *p != TAB)
-       p--;
-    if (*p == ' ' || *p == TAB)
-       p++;
+    p = buff;
     xp->xp_pattern = p;
+    len = STRLEN(buff);
+    while (*p && p < buff + len)
+    {
+       if (*p == ' ' || *p == TAB)
+       {
+           /* argument starts after a space */
+           xp->xp_pattern = ++p;
+       }
+       else
+       {
+           if (*p == '\\' && *(p + 1) != NUL)
+               ++p; /* skip over escaped character */
+           mb_ptr_adv(p);
+       }
+    }
 
     if (ea.argt & XFILE)
     {
@@ -3821,8 +3832,22 @@ set_one_cmd_context(xp, buff)
                    if (compl == EXPAND_MAPPINGS)
                        return set_context_in_map_cmd(xp, (char_u *)"map",
                                         arg, forceit, FALSE, FALSE, CMD_map);
-                   while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
-                       arg = xp->xp_pattern + 1;
+                   /* Find start of last argument. */
+                   p = arg;
+                   while (*p)
+                   {
+                       if (*p == ' ')
+                       {
+                           /* argument starts after a space */
+                           arg = p + 1;
+                       }
+                       else
+                       {
+                           if (*p == '\\' && *(p + 1) != NUL)
+                               ++p; /* skip over escaped character */
+                           mb_ptr_adv(p);
+                       }
+                   }
                    xp->xp_pattern = arg;
                }
                xp->xp_context = compl;
index 3a662a2a83fdb48379584321da5af432c1eead7f..eecc4d8517dda48ba165440a175cb104fe58942a 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    615,
 /**/
     614,
 /**/