summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2007-03-08 17:12:08 +0000
committerBram Moolenaar <Bram@vim.org>2007-03-08 17:12:08 +0000
commit552f8a1140a69491259cd8e4b7f1273be176c48f (patch)
tree25f5910530465fe538d6918d4b01256ae037ff9b
parent6417da604d684e4af5622dae3f295f36cd815f81 (diff)
updated for version 7.0-214v7.0.214
-rw-r--r--runtime/doc/map.txt20
-rw-r--r--src/ex_docmd.c20
-rw-r--r--src/version.c2
3 files changed, 37 insertions, 5 deletions
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 62515cc615..d81bc3f010 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt* For Vim version 7.0. Last change: 2006 May 03
+*map.txt* For Vim version 7.0. Last change: 2007 Mar 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1303,12 +1303,28 @@ If the first two characters of an escape sequence are "q-" (for example,
<q-args>) then the value is quoted in such a way as to make it a valid value
for use in an expression. This uses the argument as one single value.
When there is no argument <q-args> is an empty string.
-
+ *<f-args>*
To allow commands to pass their arguments on to a user-defined function, there
is a special form <f-args> ("function args"). This splits the command
arguments at spaces and Tabs, quotes each argument individually, and the
<f-args> sequence is replaced by the comma-separated list of quoted arguments.
See the Mycmd example below. If no arguments are given <f-args> is removed.
+ To embed whitespace into an argument of <f-args>, prepend a backslash.
+<f-args> replaces every pair of backslashes (\\) with one backslash. A
+backslash followed by a character other than white space or a backslash
+remains unmodified. Overview:
+
+ command <f-args> ~
+ XX ab 'ab'
+ XX a\b 'a\b'
+ XX a\ b 'a b'
+ XX a\ b 'a ', 'b'
+ XX a\\b 'a\b'
+ XX a\\ b 'a\', 'b'
+ XX a\\\b 'a\\b'
+ XX a\\\ b 'a\ b'
+ XX a\\\\b 'a\\b'
+ XX a\\\\ b 'a\\', 'b'
Examples >
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 7f136f19a7..1152a18a73 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -5551,6 +5551,9 @@ ex_delcommand(eap)
mch_memmove(cmd, cmd + 1, (gap->ga_len - i) * sizeof(ucmd_T));
}
+/*
+ * split and quote args for <f-args>
+ */
static char_u *
uc_split_args(arg, lenp)
char_u *arg;
@@ -5567,7 +5570,12 @@ uc_split_args(arg, lenp)
while (*p)
{
- if (p[0] == '\\' && vim_iswhite(p[1]))
+ if (p[0] == '\\' && p[1] == '\\')
+ {
+ len += 2;
+ p += 2;
+ }
+ else if (p[0] == '\\' && vim_iswhite(p[1]))
{
len += 1;
p += 2;
@@ -5603,7 +5611,13 @@ uc_split_args(arg, lenp)
*q++ = '"';
while (*p)
{
- if (p[0] == '\\' && vim_iswhite(p[1]))
+ if (p[0] == '\\' && p[1] == '\\')
+ {
+ *q++ = '\\';
+ *q++ = '\\';
+ p += 2;
+ }
+ else if (p[0] == '\\' && vim_iswhite(p[1]))
{
*q++ = p[1];
p += 2;
@@ -5735,7 +5749,7 @@ uc_check_code(code, len, buf, cmd, eap, split_buf, split_len)
}
break;
- case 2: /* Quote and split */
+ case 2: /* Quote and split (<f-args>) */
/* This is hard, so only do it once, and cache the result */
if (*split_buf == NULL)
*split_buf = uc_split_args(eap->arg, split_len);
diff --git a/src/version.c b/src/version.c
index f8593316f6..6c4c641f10 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 */
/**/
+ 214,
+/**/
213,
/**/
212,