# HG changeset patch # User Bram Moolenaar # Date 1343229743 -7200 # Node ID 169ccc471a8a947c046b7ff41023b9045beb3496 # Parent 40b720ad5b7e6fe39aa219aa76782cf4747d58c5 updated for version 7.3.615 Problem: Completion for a user command does not recognize backslash before a space. Solution: Recognize escaped characters. (Yasuhiro Matsumoto) diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -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; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 615, +/**/ 614, /**/ 613,