diff options
author | Bram Moolenaar <Bram@vim.org> | 2008-09-06 14:44:59 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2008-09-06 14:44:59 +0000 |
commit | 3094a9e1a7f6b6923aec469046cfdf84c7686374 (patch) | |
tree | 53f89c9e33ada06073ce415b35ae5bc18b8b998e | |
parent | ccf22171f175977528bd9d3a68595a826359db0d (diff) |
updated for version 7.2-010v7.2.010
-rw-r--r-- | src/mbyte.c | 2 | ||||
-rw-r--r-- | src/misc2.c | 4 | ||||
-rw-r--r-- | src/normal.c | 75 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 52 insertions, 31 deletions
diff --git a/src/mbyte.c b/src/mbyte.c index bd4f090962..923571406a 100644 --- a/src/mbyte.c +++ b/src/mbyte.c @@ -2540,7 +2540,6 @@ utf_head_off(base, p) return (int)(p - q); } -#if defined(FEAT_EVAL) || defined(PROTO) /* * Copy a character from "*fp" to "*tp" and advance the pointers. */ @@ -2555,7 +2554,6 @@ mb_copy_char(fp, tp) *tp += l; *fp += l; } -#endif /* * Return the offset from "p" to the first byte of a character. When "p" is diff --git a/src/misc2.c b/src/misc2.c index bc9091f089..10c77a7529 100644 --- a/src/misc2.c +++ b/src/misc2.c @@ -1257,7 +1257,6 @@ vim_strsave_escaped_ext(string, esc_chars, cc, bsl) return escaped_string; } -#if !defined(BACKSLASH_IN_FILENAME) || defined(FEAT_EVAL) || defined(PROTO) /* * Return TRUE when 'shell' has "csh" in the tail. */ @@ -1266,9 +1265,7 @@ csh_like_shell() { return (strstr((char *)gettail(p_sh), "csh") != NULL); } -#endif -#if defined(FEAT_EVAL) || defined(PROTO) /* * Escape "string" for use as a shell argument with system(). * This uses single quotes, except when we know we need to use double qoutes @@ -1391,7 +1388,6 @@ vim_strsave_shellescape(string, do_special) return escaped_string; } -#endif /* * Like vim_strsave(), but make all characters uppercase. diff --git a/src/normal.c b/src/normal.c index eb03a6a6de..462bd35f5c 100644 --- a/src/normal.c +++ b/src/normal.c @@ -5469,6 +5469,11 @@ nv_ident(cap) STRCPY(buf, "he! "); else { + /* An external command will probably use an argument starting + * with "-" as an option. To avoid trouble we skip the "-". */ + while (*ptr == '-') + ++ptr; + /* When a count is given, turn it into a range. Is this * really what we want? */ isman = (STRCMP(kp, "man") == 0); @@ -5511,37 +5516,57 @@ nv_ident(cap) /* * Now grab the chars in the identifier */ - if (cmdchar == '*') - aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\"); - else if (cmdchar == '#') - aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\"); - else if (cmdchar == 'K' && !kp_help) - aux_ptr = (char_u *)" \t\\\"|!"; + if (cmdchar == 'K' && !kp_help) + { + /* Escape the argument properly for a shell command */ + p = vim_strsave_shellescape(ptr, TRUE); + if (p == NULL) + { + vim_free(buf); + return; + } + buf = (char_u *)vim_realloc(buf, STRLEN(buf) + STRLEN(p) + 1); + if (buf == NULL) + { + vim_free(buf); + vim_free(p); + return; + } + STRCAT(buf, p); + vim_free(p); + } else - /* Don't escape spaces and Tabs in a tag with a backslash */ - aux_ptr = (char_u *)"\\|\""; - - p = buf + STRLEN(buf); - while (n-- > 0) { - /* put a backslash before \ and some others */ - if (vim_strchr(aux_ptr, *ptr) != NULL) - *p++ = '\\'; -#ifdef FEAT_MBYTE - /* When current byte is a part of multibyte character, copy all bytes - * of that character. */ - if (has_mbyte) + if (cmdchar == '*') + aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\"); + else if (cmdchar == '#') + aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\"); + else + /* Don't escape spaces and Tabs in a tag with a backslash */ + aux_ptr = (char_u *)"\\|\"\n*?["; + + p = buf + STRLEN(buf); + while (n-- > 0) { - int i; - int len = (*mb_ptr2len)(ptr) - 1; + /* put a backslash before \ and some others */ + if (vim_strchr(aux_ptr, *ptr) != NULL) + *p++ = '\\'; +#ifdef FEAT_MBYTE + /* When current byte is a part of multibyte character, copy all + * bytes of that character. */ + if (has_mbyte) + { + int i; + int len = (*mb_ptr2len)(ptr) - 1; - for (i = 0; i < len && n >= 1; ++i, --n) - *p++ = *ptr++; - } + for (i = 0; i < len && n >= 1; ++i, --n) + *p++ = *ptr++; + } #endif - *p++ = *ptr++; + *p++ = *ptr++; + } + *p = NUL; } - *p = NUL; /* * Execute the command. diff --git a/src/version.c b/src/version.c index cece550ecf..2ed3271920 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 */ /**/ + 10, +/**/ 9, /**/ 8, |