diff options
author | vimboss <devnull@localhost> | 2008-08-08 10:59:17 +0000 |
---|---|---|
committer | vimboss <devnull@localhost> | 2008-08-08 10:59:17 +0000 |
commit | 34633e8c75919f4230e0905370e8eb74c80d8d6a (patch) | |
tree | 4bab71d94c65884f78990dceaa26e773ac36176a | |
parent | 3d2a8ea9aedd94323d1264b2317822dc2fbf3feb (diff) | |
download | vim-34633e8c75919f4230e0905370e8eb74c80d8d6a.tar.gz |
-rw-r--r-- | runtime/doc/eval.txt | 6 | ||||
-rw-r--r-- | src/ex_getln.c | 10 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 14 insertions, 4 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 8bb990a0..3e24133c 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -2832,11 +2832,13 @@ fnameescape({string}) *fnameescape()* For most systems the characters escaped are " \t\n*?[{`$\\%#'\"|!<". For systems where a backslash appears in a filename, it depends on the value of 'isfname'. + A leading '+' and '>' is also escaped (special after |:edit| + and |:write|). And a "-" by itself (special after |:cd|). Example: > - :let fname = 'some str%nge|name' + :let fname = '+some str%nge|name' :exe "edit " . fnameescape(fname) < results in executing: > - edit some\ str\%nge\|name + edit \+some\ str\%nge\|name fnamemodify({fname}, {mods}) *fnamemodify()* Modify file name {fname} according to {mods}. {mods} is a diff --git a/src/ex_getln.c b/src/ex_getln.c index c9760d1d..994fe2aa 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -3717,7 +3717,7 @@ vim_strsave_fnameescape(fname, shell) if ((*p != '[' && *p != '{') || !vim_isfilec(*p)) buf[j++] = *p; buf[j] = NUL; - return vim_strsave_escaped(fname, buf); + p = vim_strsave_escaped(fname, buf); #else p = vim_strsave_escaped(fname, shell ? SHELL_ESC_CHARS : PATH_ESC_CHARS); if (shell && csh_like_shell() && p != NULL) @@ -3730,8 +3730,14 @@ vim_strsave_fnameescape(fname, shell) vim_free(p); p = s; } - return p; #endif + + /* '>' and '+' are special at the start of some commands, e.g. ":edit" and + * ":write". "cd -" has a special meaning. */ + if (*p == '>' || *p == '+' || (*p == '-' && p[1] == NUL)) + escape_fname(&p); + + return p; } /* diff --git a/src/version.c b/src/version.c index c8565c44..6730cc0f 100644 --- a/src/version.c +++ b/src/version.c @@ -677,6 +677,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2, +/**/ 1, /**/ 0 |