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:
parent
df671b4629
commit
3b1f18f785
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
10
src/term.c
10
src/term.c
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user