0
0
mirror of https://github.com/vim/vim.git synced 2025-09-01 21:03:39 -04:00

patch 8.2.3864: cannot disable requesting key codes from xterm

Problem:    Cannot disable requesting key codes from xterm.
Solution:   Add the 'xtermcodes' option, default on.
This commit is contained in:
Bram Moolenaar 2021-12-21 09:12:23 +00:00
parent 8d95d7091d
commit 6f79e614b2
7 changed files with 38 additions and 6 deletions

View File

@ -9206,4 +9206,16 @@ A jump table for the options with a short description can be found at |Q_op|.
screen. When non-zero, characters are sent to the terminal one by
one. For debugging purposes.
*'xtermcodes'* *'noxtermcodes'*
'xtermcodes' boolean (default on)
global
When detecting xterm patchlevel 141 or higher with the termresponse
mechanism and this option is set, Vim will request the actual termimal
key codes and number of colors from the terminal. This takes care of
various configuration options of the terminal that cannot be obtained
from the termlib/terminfo entry, see |xterm-codes|.
A side effect may be that t_Co changes and Vim will redraw the
display.
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@ -556,8 +556,15 @@ request the key codes directly from the xterm. The responses are used to
adjust the various t_ codes. This avoids the problem that the xterm can
produce different codes, depending on the mode it is in (8-bit, VT102,
VT220, etc.). The result is that codes like <xF1> are no longer needed.
Note: This is only done on startup. If the xterm options are changed after
Vim has started, the escape sequences may not be recognized anymore.
One of the codes that can change is 't_Co', the number of colors. This will
trigger a redraw. If this is a problem, reset the 'xtermcodes' option as
early as possible: >
set noxtermcodes
Note: Requesting the key codes is only done on startup. If the xterm options
are changed after Vim has started, the escape sequences may not be recognized
anymore.
*xterm-true-color*
Vim supports using true colors in the terminal (taken from |highlight-guifg|

View File

@ -562,14 +562,22 @@ endif
call <SID>Header(gettext("terminal"))
call <SID>AddOption("term", gettext("name of the used terminal"))
call <SID>OptionG("term", &term)
call <SID>AddOption("ttytype", gettext("alias for 'term'"))
call <SID>OptionG("tty", &tty)
call <SID>AddOption("ttybuiltin", gettext("check built-in termcaps first"))
call <SID>BinOptionG("tbi", &tbi)
call <SID>AddOption("ttyfast", gettext("terminal connection is fast"))
call <SID>BinOptionG("tf", &tf)
call <SID>AddOption("xtermcodes", gettext("request terminal key codes when an xterm is detected"))
call <SID>BinOptionG("xtermcodes", &xtermcodes)
call <SID>AddOption("weirdinvert", gettext("terminal that requires extra redrawing"))
call <SID>BinOptionG("wiv", &wiv)
call <SID>AddOption("esckeys", gettext("recognize keys that start with <Esc> in Insert mode"))
call <SID>BinOptionG("ek", &ek)
call <SID>AddOption("scrolljump", gettext("minimal number of lines to scroll at a time"))

View File

@ -485,6 +485,7 @@ EXTERN int p_deco; // 'delcombine'
#ifdef FEAT_EVAL
EXTERN char_u *p_ccv; // 'charconvert'
#endif
EXTERN int p_cdh; // 'cdhome'
EXTERN char_u *p_cino; // 'cinoptions'
#ifdef FEAT_CMDWIN
EXTERN char_u *p_cedit; // 'cedit'
@ -1094,7 +1095,7 @@ EXTERN int p_write; // 'write'
EXTERN int p_wa; // 'writeany'
EXTERN int p_wb; // 'writebackup'
EXTERN long p_wd; // 'writedelay'
EXTERN int p_cdh; // 'cdhome'
EXTERN int p_xtermcodes; // 'xtermcodes'
/*
* "indir" values for buffer-local options.

View File

@ -2941,6 +2941,9 @@ static struct vimoption options[] =
{"writedelay", "wd", P_NUM|P_VI_DEF,
(char_u *)&p_wd, PV_NONE,
{(char_u *)0L, (char_u *)0L} SCTX_INIT},
{"xtermcodes", NULL, P_BOOL|P_VI_DEF,
(char_u *)&p_xtermcodes, PV_NONE,
{(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
// terminal output codes
#define p_term(sss, vvv) {sss, NULL, P_STRING|P_VI_DEF|P_RALL|P_SECURE, \

View File

@ -4694,7 +4694,7 @@ handle_version_response(int first, int *arg, int argc, char_u *tp)
// If xterm version >= 141 try to get termcap codes. For other
// terminals the request should be ignored.
if (version >= 141)
if (version >= 141 && p_xtermcodes)
{
LOG_TR(("Enable checking for XT codes"));
check_for_codes = TRUE;
@ -6446,8 +6446,7 @@ got_code_from_term(char_u *code, int len)
if (name[0] == 'C' && name[1] == 'o')
{
// Color count is not a key code.
i = atoi((char *)str);
may_adjust_color_count(i);
may_adjust_color_count(atoi((char *)str));
}
else
{

View File

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