0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.0773: switching to raw mode every time ":" is used

Problem:    Switching to raw mode every time ":" is used.
Solution:   When executing a shell set cur_tmode to TMODE_UNKNOWN, so that the
            next time TMODE_RAW is used it is set, but not every time.
This commit is contained in:
Bram Moolenaar 2020-05-16 23:15:08 +02:00
parent df671b4629
commit 3b1f18f785
6 changed files with 26 additions and 8 deletions

View File

@ -1387,7 +1387,11 @@ mch_call_shell(
if ((mydir = CurrentDir(mydir)) != 0) // make sure we stay in the same directory if ((mydir = CurrentDir(mydir)) != 0) // make sure we stay in the same directory
UnLock(mydir); UnLock(mydir);
if (tmode == TMODE_RAW) if (tmode == TMODE_RAW)
{
// The shell may have messed with the mode, always set it.
cur_tmode = TMODE_UNKNOWN;
settmode(TMODE_RAW); // set to raw mode settmode(TMODE_RAW); // set to raw mode
}
#ifdef FEAT_TITLE #ifdef FEAT_TITLE
resettitle(); resettitle();
#endif #endif

View File

@ -4521,7 +4521,11 @@ mch_call_shell_system(
} }
if (tmode == TMODE_RAW) if (tmode == TMODE_RAW)
{
// The shell may have messed with the mode, always set it.
cur_tmode = TMODE_UNKNOWN;
settmode(TMODE_RAW); // set to raw mode settmode(TMODE_RAW); // set to raw mode
}
# ifdef FEAT_TITLE # ifdef FEAT_TITLE
resettitle(); resettitle();
# endif # endif
@ -4571,6 +4575,9 @@ mch_call_shell_fork(
out_flush(); out_flush();
if (options & SHELL_COOKED) if (options & SHELL_COOKED)
settmode(TMODE_COOK); // set to normal mode settmode(TMODE_COOK); // set to normal mode
if (tmode == TMODE_RAW)
// The shell may have messed with the mode, always set it later.
cur_tmode = TMODE_UNKNOWN;
if (unix_build_argv(cmd, &argv, &tofree1, &tofree2) == FAIL) if (unix_build_argv(cmd, &argv, &tofree1, &tofree2) == FAIL)
goto error; goto error;

View File

@ -4899,7 +4899,11 @@ mch_call_shell(
} }
if (tmode == TMODE_RAW) if (tmode == TMODE_RAW)
{
// The shell may have messed with the mode, always set it.
cur_tmode = TMODE_UNKNOWN;
settmode(TMODE_RAW); // set to raw mode settmode(TMODE_RAW); // set to raw mode
}
// Print the return value, unless "vimrun" was used. // Print the return value, unless "vimrun" was used.
if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent

View File

@ -2862,7 +2862,7 @@ term_color(char_u *s, int n)
#if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS) #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS)
|| (s[0] == ESC && s[1] == '|') || (s[0] == ESC && s[1] == '|')
#endif #endif
|| (s[0] == CSI && (i = 1) == 1)) || (s[0] == CSI && (i = 1) == 1))
&& s[i] != NUL && s[i] != NUL
&& (STRCMP(s + i + 1, "%p1%dm") == 0 && (STRCMP(s + i + 1, "%p1%dm") == 0
|| STRCMP(s + i + 1, "%dm") == 0) || STRCMP(s + i + 1, "%dm") == 0)
@ -3447,14 +3447,14 @@ settmode(int tmode)
if (full_screen) if (full_screen)
{ {
/* /*
* When returning after calling a shell we want to really set the * When returning after calling a shell cur_tmode is TMODE_UNKNOWN,
* terminal to raw mode, even though we think it already is, because * set the terminal to raw mode, even though we think it already is,
* the shell program may have reset the terminal mode. * because the shell program may have reset the terminal mode.
* When we think the terminal is normal, don't try to set it to * When we think the terminal is normal, don't try to set it to
* normal again, because that causes problems (logout!) on some * normal again, because that causes problems (logout!) on some
* machines. * machines.
*/ */
if (tmode != TMODE_COOK || cur_tmode != TMODE_COOK) if (tmode != cur_tmode)
{ {
#ifdef FEAT_TERMRESPONSE #ifdef FEAT_TERMRESPONSE
# ifdef FEAT_GUI # ifdef FEAT_GUI

View File

@ -209,6 +209,7 @@ extern char_u *(term_strings[]); // current terminal strings
#define T_SSI (TERM_STR(KS_SSI)) // save icon text #define T_SSI (TERM_STR(KS_SSI)) // save icon text
#define T_SRI (TERM_STR(KS_SRI)) // restore icon text #define T_SRI (TERM_STR(KS_SRI)) // restore icon text
#define TMODE_COOK 0 // terminal mode for external cmds and Ex mode #define TMODE_COOK 0 // terminal mode for external cmds and Ex mode
#define TMODE_SLEEP 1 // terminal mode for sleeping (cooked but no echo) #define TMODE_SLEEP 1 // terminal mode for sleeping (cooked but no echo)
#define TMODE_RAW 2 // terminal mode for Normal and Insert mode #define TMODE_RAW 2 // terminal mode for Normal and Insert mode
#define TMODE_UNKNOWN 9 // after executing a shell

View File

@ -746,6 +746,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 */
/**/
773,
/**/ /**/
772, 772,
/**/ /**/