0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.1.1016: MS-Windows: No color in shell when using "!" in 'guioptions

Problem:    MS-Windows: No color in shell when using "!" in 'guioptions.
Solution:   Don't stop termcap when using a terminal window for the shell.
            (vim-jp, closes #4117)
This commit is contained in:
Bram Moolenaar
2019-03-17 16:59:44 +01:00
parent 647e24ba3d
commit 049ca59236
2 changed files with 23 additions and 14 deletions

View File

@@ -1542,6 +1542,7 @@ do_shell(
#endif #endif
#ifdef MSWIN #ifdef MSWIN
int winstart = FALSE; int winstart = FALSE;
int keep_termcap = FALSE;
#endif #endif
/* /*
@@ -1557,48 +1558,54 @@ do_shell(
#ifdef MSWIN #ifdef MSWIN
/* /*
* Check if ":!start" is used. * Check if ":!start" is used. This implies not stopping termcap mode.
*/ */
if (cmd != NULL) if (cmd != NULL)
winstart = (STRNICMP(cmd, "start ", 6) == 0); keep_termcap = winstart = (STRNICMP(cmd, "start ", 6) == 0);
# if defined(FEAT_GUI) && defined(FEAT_TERMINAL)
// Don't stop termcap mode when using a terminal window for the shell.
if (gui.in_use && vim_strchr(p_go, GO_TERMINAL) != NULL)
keep_termcap = TRUE;
# endif
#endif #endif
/* /*
* For autocommands we want to get the output on the current screen, to * For autocommands we want to get the output on the current screen, to
* avoid having to type return below. * avoid having to type return below.
*/ */
msg_putchar('\r'); /* put cursor at start of line */ msg_putchar('\r'); // put cursor at start of line
if (!autocmd_busy) if (!autocmd_busy)
{ {
#ifdef MSWIN #ifdef MSWIN
if (!winstart) if (!keep_termcap)
#endif #endif
stoptermcap(); stoptermcap();
} }
#ifdef MSWIN #ifdef MSWIN
if (!winstart) if (!winstart)
#endif #endif
msg_putchar('\n'); /* may shift screen one line up */ msg_putchar('\n'); // may shift screen one line up
/* warning message before calling the shell */ // warning message before calling the shell
if (p_warn && !autocmd_busy && msg_silent == 0) if (p_warn && !autocmd_busy && msg_silent == 0)
FOR_ALL_BUFFERS(buf) FOR_ALL_BUFFERS(buf)
if (bufIsChangedNotTerm(buf)) if (bufIsChangedNotTerm(buf))
{ {
#ifdef FEAT_GUI_MSWIN #ifdef FEAT_GUI_MSWIN
if (!winstart) if (!keep_termcap)
starttermcap(); /* don't want a message box here */ starttermcap(); // don't want a message box here
#endif #endif
msg_puts(_("[No write since last change]\n")); msg_puts(_("[No write since last change]\n"));
#ifdef FEAT_GUI_MSWIN #ifdef FEAT_GUI_MSWIN
if (!winstart) if (!keep_termcap)
stoptermcap(); stoptermcap();
#endif #endif
break; break;
} }
/* This windgoto is required for when the '\n' resulted in a "delete line // This windgoto is required for when the '\n' resulted in a "delete line
* 1" command to the terminal. */ // 1" command to the terminal.
if (!swapping_screen()) if (!swapping_screen())
windgoto(msg_row, msg_col); windgoto(msg_row, msg_col);
cursor_on(); cursor_on();
@@ -1632,7 +1639,7 @@ do_shell(
#ifndef FEAT_GUI_MSWIN #ifndef FEAT_GUI_MSWIN
if (cmd == NULL if (cmd == NULL
# ifdef MSWIN # ifdef MSWIN
|| (winstart && !need_wait_return) || (keep_termcap && !need_wait_return)
# endif # endif
) )
{ {
@@ -1659,9 +1666,9 @@ do_shell(
#endif /* FEAT_GUI_MSWIN */ #endif /* FEAT_GUI_MSWIN */
#ifdef MSWIN #ifdef MSWIN
if (!winstart) /* if winstart==TRUE, never stopped termcap! */ if (!keep_termcap) // if keep_termcap is TRUE didn't stop termcap
#endif #endif
starttermcap(); /* start termcap if not done by wait_return() */ starttermcap(); // start termcap if not done by wait_return()
/* /*
* In an Amiga window redrawing is caused by asking the window size. * In an Amiga window redrawing is caused by asking the window size.

View File

@@ -779,6 +779,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1016,
/**/ /**/
1015, 1015,
/**/ /**/