Skip to content

Commit

Permalink
updated for version 7.3.443
Browse files Browse the repository at this point in the history
Problem:    MS-Windows: 'shcf' and 'shellxquote' defaults are not very good.
Solution:   Make a better guess when 'shell' is set to "cmd.exe". (Ben Fritz)
  • Loading branch information
brammool committed Feb 12, 2012
1 parent c7cc164 commit 1da2153
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 8 deletions.
15 changes: 8 additions & 7 deletions runtime/doc/options.txt
Expand Up @@ -6041,20 +6041,21 @@ A jump table for the options with a short description can be found at |Q_op|.

*'shellxquote'* *'sxq'*
'shellxquote' 'sxq' string (default: "";
for Win32, when 'shell' contains "sh"
somewhere: "\""
for Win32, when 'shell' is cmd.exe or
contains "sh" somewhere: "\""
for Unix, when using system(): "\"")
global
{not in Vi}
Quoting character(s), put around the command passed to the shell, for
the "!" and ":!" commands. Includes the redirection. See
'shellquote' to exclude the redirection. It's probably not useful
to set both options.
This is an empty string by default. Known to be useful for
third-party shells when using the Win32 version, such as the MKS Korn
Shell or bash, where it should be "\"". The default is adjusted
according the value of 'shell', to reduce the need to set this option
by the user. See |dos-shell|.
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
such as the MKS Korn Shell or bash, where it should be "\"". The
default is adjusted according the value of 'shell', to reduce the need
to set this option by the user. See |dos-shell|.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.

Expand Down
39 changes: 38 additions & 1 deletion src/option.c
Expand Up @@ -3883,7 +3883,8 @@ set_init_3()

#if defined(MSDOS) || defined(WIN3264) || defined(OS2)
/*
* Set 'shellcmdflag and 'shellquote' depending on the 'shell' option.
* Set 'shellcmdflag', 'shellxquote', and 'shellquote' depending on the
* 'shell' option.
* This is done after other initializations, where 'shell' might have been
* set, but only if they have not been set before. Default for p_shcf is
* "/c", for p_shq is "". For "sh" like shells it is changed here to
Expand Down Expand Up @@ -3920,6 +3921,42 @@ set_init_3()
# endif
# endif
}
else if (strstr((char *)gettail(p_sh), "cmd.exe") != NULL)
{
int idx3;

/*
* cmd.exe on Windows will strip the first and last double quote given
* on the command line, e.g. most of the time things like:
* cmd /c "my path/to/echo" "my args to echo"
* become:
* my path/to/echo" "my args to echo
* when executed.
*
* To avoid this, use the /s argument in addition to /c to force the
* stripping behavior, and also set shellxquote to automatically
* surround the entire command in quotes (which get stripped as
* noted).
*/

/* Set shellxquote default to add the quotes to be stripped. */
idx3 = findoption((char_u *)"sxq");
if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
{
p_sxq = (char_u *)"\"";
options[idx3].def_val[VI_DEFAULT] = p_sxq;
}

/* Set shellcmdflag default to always strip the quotes, note the order
* between /s and /c is important or cmd.exe will treat the /s as part
* of the command to be executed. */
idx3 = findoption((char_u *)"shcf");
if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
{
p_shcf = (char_u *)"/s /c";
options[idx3].def_val[VI_DEFAULT] = p_shcf;
}
}
#endif

#ifdef FEAT_TITLE
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -714,6 +714,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
443,
/**/
442,
/**/
Expand Down

0 comments on commit 1da2153

Please sign in to comment.