|
Karsten Hopp |
03d5e4 |
To: vim-dev@vim.org
|
|
Karsten Hopp |
03d5e4 |
Subject: Patch 7.2.010
|
|
Karsten Hopp |
03d5e4 |
Fcc: outbox
|
|
Karsten Hopp |
03d5e4 |
From: Bram Moolenaar <Bram@moolenaar.net>
|
|
Karsten Hopp |
03d5e4 |
Mime-Version: 1.0
|
|
Karsten Hopp |
03d5e4 |
Content-Type: text/plain; charset=ISO-8859-1
|
|
Karsten Hopp |
03d5e4 |
Content-Transfer-Encoding: 8bit
|
|
Karsten Hopp |
03d5e4 |
------------
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
Patch 7.2.010
|
|
Karsten Hopp |
03d5e4 |
Problem: When using "K" in Visual mode not all characters are properly
|
|
Karsten Hopp |
03d5e4 |
escaped. (Ben Schmidt)
|
|
Karsten Hopp |
03d5e4 |
Solution: Use a function with the functionality of shellescape(). (Jan
|
|
Karsten Hopp |
03d5e4 |
Minar)
|
|
Karsten Hopp |
03d5e4 |
Files: src/mbyte.c, src/misc2.c, src/normal.c
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
*** ../vim-7.2.009/src/mbyte.c Wed Aug 6 18:45:36 2008
|
|
Karsten Hopp |
03d5e4 |
--- src/mbyte.c Wed Sep 3 22:34:48 2008
|
|
Karsten Hopp |
03d5e4 |
***************
|
|
Karsten Hopp |
03d5e4 |
*** 2540,2546 ****
|
|
Karsten Hopp |
03d5e4 |
return (int)(p - q);
|
|
Karsten Hopp |
03d5e4 |
}
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
- #if defined(FEAT_EVAL) || defined(PROTO)
|
|
Karsten Hopp |
03d5e4 |
/*
|
|
Karsten Hopp |
03d5e4 |
* Copy a character from "*fp" to "*tp" and advance the pointers.
|
|
Karsten Hopp |
03d5e4 |
*/
|
|
Karsten Hopp |
03d5e4 |
--- 2540,2545 ----
|
|
Karsten Hopp |
03d5e4 |
***************
|
|
Karsten Hopp |
03d5e4 |
*** 2555,2561 ****
|
|
Karsten Hopp |
03d5e4 |
*tp += l;
|
|
Karsten Hopp |
03d5e4 |
*fp += l;
|
|
Karsten Hopp |
03d5e4 |
}
|
|
Karsten Hopp |
03d5e4 |
- #endif
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
/*
|
|
Karsten Hopp |
03d5e4 |
* Return the offset from "p" to the first byte of a character. When "p" is
|
|
Karsten Hopp |
03d5e4 |
--- 2554,2559 ----
|
|
Karsten Hopp |
03d5e4 |
*** ../vim-7.2.009/src/misc2.c Thu Jul 24 20:28:58 2008
|
|
Karsten Hopp |
03d5e4 |
--- src/misc2.c Wed Sep 3 22:05:21 2008
|
|
Karsten Hopp |
03d5e4 |
***************
|
|
Karsten Hopp |
03d5e4 |
*** 1257,1263 ****
|
|
Karsten Hopp |
03d5e4 |
return escaped_string;
|
|
Karsten Hopp |
03d5e4 |
}
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
- #if !defined(BACKSLASH_IN_FILENAME) || defined(FEAT_EVAL) || defined(PROTO)
|
|
Karsten Hopp |
03d5e4 |
/*
|
|
Karsten Hopp |
03d5e4 |
* Return TRUE when 'shell' has "csh" in the tail.
|
|
Karsten Hopp |
03d5e4 |
*/
|
|
Karsten Hopp |
03d5e4 |
--- 1257,1262 ----
|
|
Karsten Hopp |
03d5e4 |
***************
|
|
Karsten Hopp |
03d5e4 |
*** 1266,1274 ****
|
|
Karsten Hopp |
03d5e4 |
{
|
|
Karsten Hopp |
03d5e4 |
return (strstr((char *)gettail(p_sh), "csh") != NULL);
|
|
Karsten Hopp |
03d5e4 |
}
|
|
Karsten Hopp |
03d5e4 |
- #endif
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
- #if defined(FEAT_EVAL) || defined(PROTO)
|
|
Karsten Hopp |
03d5e4 |
/*
|
|
Karsten Hopp |
03d5e4 |
* Escape "string" for use as a shell argument with system().
|
|
Karsten Hopp |
03d5e4 |
* This uses single quotes, except when we know we need to use double qoutes
|
|
Karsten Hopp |
03d5e4 |
--- 1265,1271 ----
|
|
Karsten Hopp |
03d5e4 |
***************
|
|
Karsten Hopp |
03d5e4 |
*** 1391,1397 ****
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
return escaped_string;
|
|
Karsten Hopp |
03d5e4 |
}
|
|
Karsten Hopp |
03d5e4 |
- #endif
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
/*
|
|
Karsten Hopp |
03d5e4 |
* Like vim_strsave(), but make all characters uppercase.
|
|
Karsten Hopp |
03d5e4 |
--- 1388,1393 ----
|
|
Karsten Hopp |
03d5e4 |
*** ../vim-7.2.009/src/normal.c Thu Jul 31 22:03:54 2008
|
|
Karsten Hopp |
03d5e4 |
--- src/normal.c Sat Sep 6 15:06:07 2008
|
|
Karsten Hopp |
03d5e4 |
***************
|
|
Karsten Hopp |
03d5e4 |
*** 5469,5474 ****
|
|
Karsten Hopp |
03d5e4 |
--- 5469,5479 ----
|
|
Karsten Hopp |
03d5e4 |
STRCPY(buf, "he! ");
|
|
Karsten Hopp |
03d5e4 |
else
|
|
Karsten Hopp |
03d5e4 |
{
|
|
Karsten Hopp |
03d5e4 |
+ /* An external command will probably use an argument starting
|
|
Karsten Hopp |
03d5e4 |
+ * with "-" as an option. To avoid trouble we skip the "-". */
|
|
Karsten Hopp |
03d5e4 |
+ while (*ptr == '-')
|
|
Karsten Hopp |
03d5e4 |
+ ++ptr;
|
|
Karsten Hopp |
03d5e4 |
+
|
|
Karsten Hopp |
03d5e4 |
/* When a count is given, turn it into a range. Is this
|
|
Karsten Hopp |
03d5e4 |
* really what we want? */
|
|
Karsten Hopp |
03d5e4 |
isman = (STRCMP(kp, "man") == 0);
|
|
Karsten Hopp |
03d5e4 |
***************
|
|
Karsten Hopp |
03d5e4 |
*** 5511,5547 ****
|
|
Karsten Hopp |
03d5e4 |
/*
|
|
Karsten Hopp |
03d5e4 |
* Now grab the chars in the identifier
|
|
Karsten Hopp |
03d5e4 |
*/
|
|
Karsten Hopp |
03d5e4 |
! if (cmdchar == '*')
|
|
Karsten Hopp |
03d5e4 |
! aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\");
|
|
Karsten Hopp |
03d5e4 |
! else if (cmdchar == '#')
|
|
Karsten Hopp |
03d5e4 |
! aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
|
|
Karsten Hopp |
03d5e4 |
! else if (cmdchar == 'K' && !kp_help)
|
|
Karsten Hopp |
03d5e4 |
! aux_ptr = (char_u *)" \t\\\"|!";
|
|
Karsten Hopp |
03d5e4 |
! else
|
|
Karsten Hopp |
03d5e4 |
! /* Don't escape spaces and Tabs in a tag with a backslash */
|
|
Karsten Hopp |
03d5e4 |
! aux_ptr = (char_u *)"\\|\"";
|
|
Karsten Hopp |
03d5e4 |
!
|
|
Karsten Hopp |
03d5e4 |
! p = buf + STRLEN(buf);
|
|
Karsten Hopp |
03d5e4 |
! while (n-- > 0)
|
|
Karsten Hopp |
03d5e4 |
! {
|
|
Karsten Hopp |
03d5e4 |
! /* put a backslash before \ and some others */
|
|
Karsten Hopp |
03d5e4 |
! if (vim_strchr(aux_ptr, *ptr) != NULL)
|
|
Karsten Hopp |
03d5e4 |
! *p++ = '\\';
|
|
Karsten Hopp |
03d5e4 |
! #ifdef FEAT_MBYTE
|
|
Karsten Hopp |
03d5e4 |
! /* When current byte is a part of multibyte character, copy all bytes
|
|
Karsten Hopp |
03d5e4 |
! * of that character. */
|
|
Karsten Hopp |
03d5e4 |
! if (has_mbyte)
|
|
Karsten Hopp |
03d5e4 |
{
|
|
Karsten Hopp |
03d5e4 |
! int i;
|
|
Karsten Hopp |
03d5e4 |
! int len = (*mb_ptr2len)(ptr) - 1;
|
|
Karsten Hopp |
03d5e4 |
!
|
|
Karsten Hopp |
03d5e4 |
! for (i = 0; i < len && n >= 1; ++i, --n)
|
|
Karsten Hopp |
03d5e4 |
! *p++ = *ptr++;
|
|
Karsten Hopp |
03d5e4 |
}
|
|
Karsten Hopp |
03d5e4 |
#endif
|
|
Karsten Hopp |
03d5e4 |
! *p++ = *ptr++;
|
|
Karsten Hopp |
03d5e4 |
}
|
|
Karsten Hopp |
03d5e4 |
- *p = NUL;
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
/*
|
|
Karsten Hopp |
03d5e4 |
* Execute the command.
|
|
Karsten Hopp |
03d5e4 |
--- 5516,5572 ----
|
|
Karsten Hopp |
03d5e4 |
/*
|
|
Karsten Hopp |
03d5e4 |
* Now grab the chars in the identifier
|
|
Karsten Hopp |
03d5e4 |
*/
|
|
Karsten Hopp |
03d5e4 |
! if (cmdchar == 'K' && !kp_help)
|
|
Karsten Hopp |
03d5e4 |
! {
|
|
Karsten Hopp |
03d5e4 |
! /* Escape the argument properly for a shell command */
|
|
Karsten Hopp |
03d5e4 |
! p = vim_strsave_shellescape(ptr, TRUE);
|
|
Karsten Hopp |
03d5e4 |
! if (p == NULL)
|
|
Karsten Hopp |
03d5e4 |
{
|
|
Karsten Hopp |
03d5e4 |
! vim_free(buf);
|
|
Karsten Hopp |
03d5e4 |
! return;
|
|
Karsten Hopp |
03d5e4 |
}
|
|
Karsten Hopp |
03d5e4 |
+ buf = (char_u *)vim_realloc(buf, STRLEN(buf) + STRLEN(p) + 1);
|
|
Karsten Hopp |
03d5e4 |
+ if (buf == NULL)
|
|
Karsten Hopp |
03d5e4 |
+ {
|
|
Karsten Hopp |
03d5e4 |
+ vim_free(buf);
|
|
Karsten Hopp |
03d5e4 |
+ vim_free(p);
|
|
Karsten Hopp |
03d5e4 |
+ return;
|
|
Karsten Hopp |
03d5e4 |
+ }
|
|
Karsten Hopp |
03d5e4 |
+ STRCAT(buf, p);
|
|
Karsten Hopp |
03d5e4 |
+ vim_free(p);
|
|
Karsten Hopp |
03d5e4 |
+ }
|
|
Karsten Hopp |
03d5e4 |
+ else
|
|
Karsten Hopp |
03d5e4 |
+ {
|
|
Karsten Hopp |
03d5e4 |
+ if (cmdchar == '*')
|
|
Karsten Hopp |
03d5e4 |
+ aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\");
|
|
Karsten Hopp |
03d5e4 |
+ else if (cmdchar == '#')
|
|
Karsten Hopp |
03d5e4 |
+ aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
|
|
Karsten Hopp |
03d5e4 |
+ else
|
|
Karsten Hopp |
03d5e4 |
+ /* Don't escape spaces and Tabs in a tag with a backslash */
|
|
Karsten Hopp |
03d5e4 |
+ aux_ptr = (char_u *)"\\|\"\n*?[";
|
|
Karsten Hopp |
03d5e4 |
+
|
|
Karsten Hopp |
03d5e4 |
+ p = buf + STRLEN(buf);
|
|
Karsten Hopp |
03d5e4 |
+ while (n-- > 0)
|
|
Karsten Hopp |
03d5e4 |
+ {
|
|
Karsten Hopp |
03d5e4 |
+ /* put a backslash before \ and some others */
|
|
Karsten Hopp |
03d5e4 |
+ if (vim_strchr(aux_ptr, *ptr) != NULL)
|
|
Karsten Hopp |
03d5e4 |
+ *p++ = '\\';
|
|
Karsten Hopp |
03d5e4 |
+ #ifdef FEAT_MBYTE
|
|
Karsten Hopp |
03d5e4 |
+ /* When current byte is a part of multibyte character, copy all
|
|
Karsten Hopp |
03d5e4 |
+ * bytes of that character. */
|
|
Karsten Hopp |
03d5e4 |
+ if (has_mbyte)
|
|
Karsten Hopp |
03d5e4 |
+ {
|
|
Karsten Hopp |
03d5e4 |
+ int i;
|
|
Karsten Hopp |
03d5e4 |
+ int len = (*mb_ptr2len)(ptr) - 1;
|
|
Karsten Hopp |
03d5e4 |
+
|
|
Karsten Hopp |
03d5e4 |
+ for (i = 0; i < len && n >= 1; ++i, --n)
|
|
Karsten Hopp |
03d5e4 |
+ *p++ = *ptr++;
|
|
Karsten Hopp |
03d5e4 |
+ }
|
|
Karsten Hopp |
03d5e4 |
#endif
|
|
Karsten Hopp |
03d5e4 |
! *p++ = *ptr++;
|
|
Karsten Hopp |
03d5e4 |
! }
|
|
Karsten Hopp |
03d5e4 |
! *p = NUL;
|
|
Karsten Hopp |
03d5e4 |
}
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
/*
|
|
Karsten Hopp |
03d5e4 |
* Execute the command.
|
|
Karsten Hopp |
03d5e4 |
*** ../vim-7.2.009/src/version.c Mon Sep 1 17:56:05 2008
|
|
Karsten Hopp |
03d5e4 |
--- src/version.c Sat Sep 6 16:26:42 2008
|
|
Karsten Hopp |
03d5e4 |
***************
|
|
Karsten Hopp |
03d5e4 |
*** 678,679 ****
|
|
Karsten Hopp |
03d5e4 |
--- 678,681 ----
|
|
Karsten Hopp |
03d5e4 |
{ /* Add new patch number below this line */
|
|
Karsten Hopp |
03d5e4 |
+ /**/
|
|
Karsten Hopp |
03d5e4 |
+ 10,
|
|
Karsten Hopp |
03d5e4 |
/**/
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
--
|
|
Karsten Hopp |
03d5e4 |
Q. What happens to programmers when they die?
|
|
Karsten Hopp |
03d5e4 |
A: MS-Windows programmers are reinstalled. C++ programmers become undefined,
|
|
Karsten Hopp |
03d5e4 |
anyone who refers to them will die as well. Java programmers reincarnate
|
|
Karsten Hopp |
03d5e4 |
after being garbage collected.
|
|
Karsten Hopp |
03d5e4 |
|
|
Karsten Hopp |
03d5e4 |
/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
|
|
Karsten Hopp |
03d5e4 |
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
|
|
Karsten Hopp |
03d5e4 |
\\\ download, build and distribute -- http://www.A-A-P.org ///
|
|
Karsten Hopp |
03d5e4 |
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
|