summaryrefslogtreecommitdiff
path: root/src/os_win32.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-06-08 12:05:22 +0200
committerBram Moolenaar <Bram@vim.org>2019-06-08 12:05:22 +0200
commit7c348bb5ad106cfa35dd45560c5ac5d3c8496c96 (patch)
tree3e785e6ea8495522d39fa893a819f341029721e8 /src/os_win32.c
parent606407384144df73a6154aca1d77e071fe1b7651 (diff)
downloadvim-git-7c348bb5ad106cfa35dd45560c5ac5d3c8496c96.tar.gz
patch 8.1.1492: MS-Windows: when "!" is in 'guioptions' ":!start" failsv8.1.1492
Problem: MS-Windows: when "!" is in 'guioptions' ":!start" fails. Solution: Do not use a terminal window when the shell command begins with "!start". (Yasuhiro Matsumoto, closes #4504)
Diffstat (limited to 'src/os_win32.c')
-rw-r--r--src/os_win32.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/os_win32.c b/src/os_win32.c
index 60bf34131..1b961b22c 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -4640,20 +4640,30 @@ mch_call_shell(
}
#endif
#if defined(FEAT_GUI) && defined(FEAT_TERMINAL)
- /* TODO: make the terminal window work with input or output redirected. */
+ // TODO: make the terminal window work with input or output redirected.
if (
# ifdef VIMDLL
- gui.in_use &&
+ gui.in_use &&
# endif
- vim_strchr(p_go, GO_TERMINAL) != NULL
+ vim_strchr(p_go, GO_TERMINAL) != NULL
&& (options & (SHELL_FILTER|SHELL_DOOUT|SHELL_WRITE|SHELL_READ)) == 0)
{
- /* Use a terminal window to run the command in. */
- x = mch_call_shell_terminal(cmd, options);
+ char_u *cmdbase = cmd;
+
+ // Skip a leading quote and (.
+ while (*cmdbase == '"' || *cmdbase == '(')
+ ++cmdbase;
+
+ // Check the command does not begin with "start "
+ if (STRNICMP(cmdbase, "start", 5) != 0 || !VIM_ISWHITE(cmdbase[5]))
+ {
+ // Use a terminal window to run the command in.
+ x = mch_call_shell_terminal(cmd, options);
# ifdef FEAT_TITLE
- resettitle();
+ resettitle();
# endif
- return x;
+ return x;
+ }
}
#endif