mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.0774: t_TI and t_TE are output when using 'visualbell'
Problem: t_TI and t_TE are output when using 'visualbell'. (Dominique Pelle) Solution: Do not change the terminal mode for a short sleep. Do not output t_TI and t_TE when switching to/from TMODE_SLEEP. Make tmode an enum.
This commit is contained in:
parent
3b1f18f785
commit
26e86445bf
@ -1171,7 +1171,7 @@ EXTERN volatile sig_atomic_t got_int INIT(= FALSE); // set to TRUE when interrup
|
|||||||
EXTERN int term_console INIT(= FALSE); // set to TRUE when console used
|
EXTERN int term_console INIT(= FALSE); // set to TRUE when console used
|
||||||
#endif
|
#endif
|
||||||
EXTERN int termcap_active INIT(= FALSE); // set by starttermcap()
|
EXTERN int termcap_active INIT(= FALSE); // set by starttermcap()
|
||||||
EXTERN int cur_tmode INIT(= TMODE_COOK); // input terminal mode
|
EXTERN tmode_T cur_tmode INIT(= TMODE_COOK); // input terminal mode
|
||||||
EXTERN int bangredo INIT(= FALSE); // set to TRUE with ! command
|
EXTERN int bangredo INIT(= FALSE); // set to TRUE with ! command
|
||||||
EXTERN int searchcmdlen; // length of previous search cmd
|
EXTERN int searchcmdlen; // length of previous search cmd
|
||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
|
@ -977,7 +977,7 @@ mch_exit(int r)
|
|||||||
* it sends a 0 to the console to make it back into a CON: from a RAW:
|
* it sends a 0 to the console to make it back into a CON: from a RAW:
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
mch_settmode(int tmode)
|
mch_settmode(tmode_T tmode)
|
||||||
{
|
{
|
||||||
#if defined(__AROS__) || defined(__amigaos4__)
|
#if defined(__AROS__) || defined(__amigaos4__)
|
||||||
if (!SetMode(raw_in, tmode == TMODE_RAW ? 1 : 0))
|
if (!SetMode(raw_in, tmode == TMODE_RAW ? 1 : 0))
|
||||||
|
@ -553,7 +553,7 @@ vim_stat(const char *name, stat_T *stp)
|
|||||||
|
|
||||||
#if (defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)) || defined(PROTO)
|
#if (defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)) || defined(PROTO)
|
||||||
void
|
void
|
||||||
mch_settmode(int tmode UNUSED)
|
mch_settmode(tmode_T tmode UNUSED)
|
||||||
{
|
{
|
||||||
// nothing to do
|
// nothing to do
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,8 @@ static volatile sig_atomic_t in_mch_delay = FALSE; // sleeping in mch_delay()
|
|||||||
static int dont_check_job_ended = 0;
|
static int dont_check_job_ended = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int curr_tmode = TMODE_COOK; // contains current terminal mode
|
// Current terminal mode from mch_settmode(). Can differ from cur_tmode.
|
||||||
|
static tmode_T mch_cur_tmode = TMODE_COOK;
|
||||||
|
|
||||||
#ifdef USE_XSMP
|
#ifdef USE_XSMP
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -581,7 +582,7 @@ mch_total_mem(int special UNUSED)
|
|||||||
void
|
void
|
||||||
mch_delay(long msec, int ignoreinput)
|
mch_delay(long msec, int ignoreinput)
|
||||||
{
|
{
|
||||||
int old_tmode;
|
tmode_T old_tmode;
|
||||||
#ifdef FEAT_MZSCHEME
|
#ifdef FEAT_MZSCHEME
|
||||||
long total = msec; // remember original value
|
long total = msec; // remember original value
|
||||||
#endif
|
#endif
|
||||||
@ -591,9 +592,10 @@ mch_delay(long msec, int ignoreinput)
|
|||||||
// Go to cooked mode without echo, to allow SIGINT interrupting us
|
// Go to cooked mode without echo, to allow SIGINT interrupting us
|
||||||
// here. But we don't want QUIT to kill us (CTRL-\ used in a
|
// here. But we don't want QUIT to kill us (CTRL-\ used in a
|
||||||
// shell may produce SIGQUIT).
|
// shell may produce SIGQUIT).
|
||||||
|
// Only do this if sleeping for more than half a second.
|
||||||
in_mch_delay = TRUE;
|
in_mch_delay = TRUE;
|
||||||
old_tmode = curr_tmode;
|
old_tmode = mch_cur_tmode;
|
||||||
if (curr_tmode == TMODE_RAW)
|
if (mch_cur_tmode == TMODE_RAW && msec > 500)
|
||||||
settmode(TMODE_SLEEP);
|
settmode(TMODE_SLEEP);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -650,7 +652,8 @@ mch_delay(long msec, int ignoreinput)
|
|||||||
while (total > 0);
|
while (total > 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
settmode(old_tmode);
|
if (msec > 500)
|
||||||
|
settmode(old_tmode);
|
||||||
in_mch_delay = FALSE;
|
in_mch_delay = FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -3461,7 +3464,7 @@ mch_tcgetattr(int fd, void *term)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
mch_settmode(int tmode)
|
mch_settmode(tmode_T tmode)
|
||||||
{
|
{
|
||||||
static int first = TRUE;
|
static int first = TRUE;
|
||||||
|
|
||||||
@ -3558,7 +3561,7 @@ mch_settmode(int tmode)
|
|||||||
ttybnew.sg_flags &= ~(ECHO);
|
ttybnew.sg_flags &= ~(ECHO);
|
||||||
ioctl(read_cmd_fd, TIOCSETN, &ttybnew);
|
ioctl(read_cmd_fd, TIOCSETN, &ttybnew);
|
||||||
#endif
|
#endif
|
||||||
curr_tmode = tmode;
|
mch_cur_tmode = tmode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -4455,7 +4458,7 @@ mch_call_shell_system(
|
|||||||
char *ifn = NULL;
|
char *ifn = NULL;
|
||||||
char *ofn = NULL;
|
char *ofn = NULL;
|
||||||
#endif
|
#endif
|
||||||
int tmode = cur_tmode;
|
tmode_T tmode = cur_tmode;
|
||||||
char_u *newcmd; // only needed for unix
|
char_u *newcmd; // only needed for unix
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
@ -4549,7 +4552,7 @@ mch_call_shell_fork(
|
|||||||
char_u *cmd,
|
char_u *cmd,
|
||||||
int options) // SHELL_*, see vim.h
|
int options) // SHELL_*, see vim.h
|
||||||
{
|
{
|
||||||
int tmode = cur_tmode;
|
tmode_T tmode = cur_tmode;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
pid_t wpid = 0;
|
pid_t wpid = 0;
|
||||||
pid_t wait_pid = 0;
|
pid_t wait_pid = 0;
|
||||||
@ -5939,7 +5942,7 @@ mch_create_pty_channel(job_T *job, jobopt_T *options)
|
|||||||
void
|
void
|
||||||
mch_breakcheck(int force)
|
mch_breakcheck(int force)
|
||||||
{
|
{
|
||||||
if ((curr_tmode == TMODE_RAW || force)
|
if ((mch_cur_tmode == TMODE_RAW || force)
|
||||||
&& RealWaitForChar(read_cmd_fd, 0L, NULL, NULL))
|
&& RealWaitForChar(read_cmd_fd, 0L, NULL, NULL))
|
||||||
fill_input_buf(FALSE);
|
fill_input_buf(FALSE);
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,7 @@ vul_item(ITEM *itm, short len, short cod, char *adr, int *ret)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
mch_settmode(int tmode)
|
mch_settmode(tmode_T tmode)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
@ -3600,7 +3600,7 @@ handler_routine(
|
|||||||
* set the tty in (raw) ? "raw" : "cooked" mode
|
* set the tty in (raw) ? "raw" : "cooked" mode
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
mch_settmode(int tmode)
|
mch_settmode(tmode_T tmode)
|
||||||
{
|
{
|
||||||
DWORD cmodein;
|
DWORD cmodein;
|
||||||
DWORD cmodeout;
|
DWORD cmodeout;
|
||||||
|
@ -31,7 +31,7 @@ int mch_can_exe(char_u *name, char_u **path, int use_path);
|
|||||||
int mch_nodetype(char_u *name);
|
int mch_nodetype(char_u *name);
|
||||||
void mch_early_init(void);
|
void mch_early_init(void);
|
||||||
void mch_exit(int r);
|
void mch_exit(int r);
|
||||||
void mch_settmode(int tmode);
|
void mch_settmode(tmode_T tmode);
|
||||||
int mch_get_shellsize(void);
|
int mch_get_shellsize(void);
|
||||||
void mch_set_shellsize(void);
|
void mch_set_shellsize(void);
|
||||||
void mch_new_shellsize(void);
|
void mch_new_shellsize(void);
|
||||||
|
@ -10,7 +10,7 @@ int mch_FullName(char_u *fname, char_u *buf, int len, int force);
|
|||||||
int mch_isFullName(char_u *fname);
|
int mch_isFullName(char_u *fname);
|
||||||
void slash_adjust(char_u *p);
|
void slash_adjust(char_u *p);
|
||||||
int vim_stat(const char *name, stat_T *stp);
|
int vim_stat(const char *name, stat_T *stp);
|
||||||
void mch_settmode(int tmode);
|
void mch_settmode(tmode_T tmode);
|
||||||
int mch_get_shellsize(void);
|
int mch_get_shellsize(void);
|
||||||
void mch_set_shellsize(void);
|
void mch_set_shellsize(void);
|
||||||
void mch_new_shellsize(void);
|
void mch_new_shellsize(void);
|
||||||
|
@ -48,7 +48,7 @@ int mch_nodetype(char_u *name);
|
|||||||
void mch_early_init(void);
|
void mch_early_init(void);
|
||||||
void mch_free_mem(void);
|
void mch_free_mem(void);
|
||||||
void mch_exit(int r);
|
void mch_exit(int r);
|
||||||
void mch_settmode(int tmode);
|
void mch_settmode(tmode_T tmode);
|
||||||
void get_stty(void);
|
void get_stty(void);
|
||||||
int get_tty_info(int fd, ttyinfo_T *info);
|
int get_tty_info(int fd, ttyinfo_T *info);
|
||||||
void mch_setmouse(int on);
|
void mch_setmouse(int on);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* os_vms.c */
|
/* os_vms.c */
|
||||||
void mch_settmode(int tmode);
|
void mch_settmode(tmode_T tmode);
|
||||||
int mch_get_shellsize(void);
|
int mch_get_shellsize(void);
|
||||||
void mch_set_shellsize(void);
|
void mch_set_shellsize(void);
|
||||||
char_u *mch_getenv(char_u *lognam);
|
char_u *mch_getenv(char_u *lognam);
|
||||||
|
@ -39,7 +39,7 @@ int mch_nodetype(char_u *name);
|
|||||||
vim_acl_T mch_get_acl(char_u *fname);
|
vim_acl_T mch_get_acl(char_u *fname);
|
||||||
void mch_set_acl(char_u *fname, vim_acl_T acl);
|
void mch_set_acl(char_u *fname, vim_acl_T acl);
|
||||||
void mch_free_acl(vim_acl_T acl);
|
void mch_free_acl(vim_acl_T acl);
|
||||||
void mch_settmode(int tmode);
|
void mch_settmode(tmode_T tmode);
|
||||||
int mch_get_shellsize(void);
|
int mch_get_shellsize(void);
|
||||||
void mch_set_shellsize(void);
|
void mch_set_shellsize(void);
|
||||||
void mch_new_shellsize(void);
|
void mch_new_shellsize(void);
|
||||||
|
@ -3471,7 +3471,12 @@ settmode(int tmode)
|
|||||||
#endif
|
#endif
|
||||||
if (tmode != TMODE_RAW)
|
if (tmode != TMODE_RAW)
|
||||||
mch_setmouse(FALSE); // switch mouse off
|
mch_setmouse(FALSE); // switch mouse off
|
||||||
if (termcap_active)
|
|
||||||
|
// Disable bracketed paste and modifyOtherKeys in cooked mode.
|
||||||
|
// Avoid doing this too often, on some terminals the codes are not
|
||||||
|
// handled properly.
|
||||||
|
if (termcap_active && tmode != TMODE_SLEEP
|
||||||
|
&& cur_tmode != TMODE_SLEEP)
|
||||||
{
|
{
|
||||||
if (tmode != TMODE_RAW)
|
if (tmode != TMODE_RAW)
|
||||||
{
|
{
|
||||||
|
10
src/term.h
10
src/term.h
@ -209,7 +209,9 @@ 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
|
typedef enum {
|
||||||
#define TMODE_SLEEP 1 // terminal mode for sleeping (cooked but no echo)
|
TMODE_COOK, // terminal mode for external cmds and Ex mode
|
||||||
#define TMODE_RAW 2 // terminal mode for Normal and Insert mode
|
TMODE_SLEEP, // terminal mode for sleeping (cooked but no echo)
|
||||||
#define TMODE_UNKNOWN 9 // after executing a shell
|
TMODE_RAW, // terminal mode for Normal and Insert mode
|
||||||
|
TMODE_UNKNOWN // after executing a shell
|
||||||
|
} tmode_T;
|
||||||
|
@ -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 */
|
||||||
|
/**/
|
||||||
|
774,
|
||||||
/**/
|
/**/
|
||||||
773,
|
773,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user