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:
@@ -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.
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user