| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.446 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.446 (after 7.3.445) |
| Problem: Win32: External commands with special characters don't work. |
| Solution: Add the 'shellxescape' option. |
| Files: src/misc2.c, src/option.c, src/option.h, runtime/doc/options.txt |
| |
| |
| |
| |
| |
| *** 3225,3235 **** |
| retval = mch_call_shell(cmd, opt); |
| else |
| { |
| ! ncmd = alloc((unsigned)(STRLEN(cmd) + STRLEN(p_sxq) * 2 + 1)); |
| if (ncmd != NULL) |
| { |
| STRCPY(ncmd, p_sxq); |
| ! STRCAT(ncmd, cmd); |
| /* When 'shellxquote' is ( append ). |
| * When 'shellxquote' is "( append )". */ |
| STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")" |
| --- 3225,3243 ---- |
| retval = mch_call_shell(cmd, opt); |
| else |
| { |
| ! char_u *ecmd = cmd; |
| ! |
| ! if (*p_sxe != NUL && STRCMP(p_sxq, "(") == 0) |
| ! { |
| ! ecmd = vim_strsave_escaped_ext(cmd, p_sxe, '^', FALSE); |
| ! if (ecmd == NULL) |
| ! ecmd = cmd; |
| ! } |
| ! ncmd = alloc((unsigned)(STRLEN(ecmd) + STRLEN(p_sxq) * 2 + 1)); |
| if (ncmd != NULL) |
| { |
| STRCPY(ncmd, p_sxq); |
| ! STRCAT(ncmd, ecmd); |
| /* When 'shellxquote' is ( append ). |
| * When 'shellxquote' is "( append )". */ |
| STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")" |
| |
| *** 3240,3245 **** |
| --- 3248,3255 ---- |
| } |
| else |
| retval = -1; |
| + if (ecmd != cmd) |
| + vim_free(ecmd); |
| } |
| #ifdef FEAT_GUI |
| --hold_gui_events; |
| |
| |
| |
| *** 2273,2278 **** |
| --- 2273,2287 ---- |
| (char_u *)"", |
| #endif |
| (char_u *)0L} SCRIPTID_INIT}, |
| + {"shellxescape", "sxe", P_STRING|P_VI_DEF|P_SECURE, |
| + (char_u *)&p_sxe, PV_NONE, |
| + { |
| + #if defined(MSDOS) || defined(WIN16) || defined(WIN3264) |
| + (char_u *)"\"&|<>()@^", |
| + #else |
| + (char_u *)"", |
| + #endif |
| + (char_u *)0L} SCRIPTID_INIT}, |
| {"shiftround", "sr", P_BOOL|P_VI_DEF|P_VIM, |
| (char_u *)&p_sr, PV_NONE, |
| {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, |
| |
| |
| |
| *** 712,717 **** |
| --- 712,718 ---- |
| #endif |
| EXTERN char_u *p_shq; /* 'shellquote' */ |
| EXTERN char_u *p_sxq; /* 'shellxquote' */ |
| + EXTERN char_u *p_sxe; /* 'shellxescape' */ |
| EXTERN char_u *p_srr; /* 'shellredir' */ |
| #ifdef AMIGA |
| EXTERN long p_st; /* 'shelltype' */ |
| |
| |
| |
| *** 6023,6030 **** |
| |
| *'shellxquote'* *'sxq'* |
| 'shellxquote' 'sxq' string (default: ""; |
| ! for Win32, when 'shell' is cmd.exe or |
| ! contains "sh" somewhere: "\"" |
| for Unix, when using system(): "\"") |
| global |
| {not in Vi} |
| --- 6042,6050 ---- |
| |
| *'shellxquote'* *'sxq'* |
| 'shellxquote' 'sxq' string (default: ""; |
| ! for Win32, when 'shell' is cmd.exe: "(" |
| ! for Win32, when 'shell' contains "sh" |
| ! somewhere: "\"" |
| for Unix, when using system(): "\"") |
| global |
| {not in Vi} |
| |
| *** 6032,6037 **** |
| --- 6052,6060 ---- |
| the "!" and ":!" commands. Includes the redirection. See |
| 'shellquote' to exclude the redirection. It's probably not useful |
| to set both options. |
| + When the value is '(' then ')' is appended. When the value is '"(' |
| + then ')"' is appended. |
| + When the value is '(' then also see 'shellxescape'. |
| This is an empty string by default on most systems, but is known to be |
| useful for on Win32 version, either for cmd.exe which automatically |
| strips off the first and last quote on a command, or 3rd-party shells |
| |
| *** 6041,6046 **** |
| --- 6064,6079 ---- |
| This option cannot be set from a |modeline| or in the |sandbox|, for |
| security reasons. |
| |
| + *'shellxescape'* *'sxe'* |
| + 'shellxescape' 'sxe' string (default: ""; |
| + for MS-DOS and MS-Windows: "\"&|<>()@^") |
| + global |
| + {not in Vi} |
| + When 'shellxquote' is set to "(" then the characters listed in this |
| + option will be escaped with a '^' character. This makes it possible |
| + to execute most external commands with cmd.exe. |
| + |
| + |
| *'shiftround'* *'sr'* *'noshiftround'* *'nosr'* |
| 'shiftround' 'sr' boolean (default off) |
| global |
| |
| |
| |
| *** 716,717 **** |
| --- 716,719 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 446, |
| /**/ |
| |
| -- |
| hundred-and-one symptoms of being an internet addict: |
| 86. E-mail Deficiency Depression (EDD) forces you to e-mail yourself. |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |