]> granicus.if.org Git - vim/commitdiff
updated for version 7.2-010 v7.2.010
authorBram Moolenaar <Bram@vim.org>
Sat, 6 Sep 2008 14:44:59 +0000 (14:44 +0000)
committerBram Moolenaar <Bram@vim.org>
Sat, 6 Sep 2008 14:44:59 +0000 (14:44 +0000)
src/mbyte.c
src/misc2.c
src/normal.c
src/version.c

index bd4f0909620c1e2bc24ea1c9eaefd960efaa9bf0..923571406ade96e5d098c0b3470b0284ce9178ac 100644 (file)
@@ -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
index bc9091f089df73878dbc487a6f60d5dba283ef2f..10c77a7529e09bc00ec40386f489020f0fcb462d 100644 (file)
@@ -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.
index eb03a6a6de567cf942efe4eba34f47d258a163cc..462bd35f5c78bb0513813c161ad7adc2bbad5902 100644 (file)
@@ -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.
index cece550ecf1763e2f0811c8ed0bd145fd0a515d3..2ed32719205b26518d33c15d42fcdce57bb08ad0 100644 (file)
@@ -676,6 +676,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    10,
 /**/
     9,
 /**/