summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-21 09:12:23 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-21 09:12:23 +0000
commit6f79e614b25caebd35cf0d82b6f3b7e0733849ec (patch)
tree445fedcce235de72ac9f4e195eddbb060b58a296
parent8d95d7091da08d0a236be4a16616e3dda388e58d (diff)
downloadvim-git-6f79e614b25caebd35cf0d82b6f3b7e0733849ec.tar.gz
patch 8.2.3864: cannot disable requesting key codes from xtermv8.2.3864
Problem: Cannot disable requesting key codes from xterm. Solution: Add the 'xtermcodes' option, default on.
-rw-r--r--runtime/doc/options.txt12
-rw-r--r--runtime/doc/term.txt11
-rw-r--r--runtime/optwin.vim8
-rw-r--r--src/option.h3
-rw-r--r--src/optiondefs.h3
-rw-r--r--src/term.c5
-rw-r--r--src/version.c2
7 files changed, 38 insertions, 6 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index a5ff937e0..3e71ba14e 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -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:
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index 8862d0a40..3e90cc047 100644
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -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|
diff --git a/runtime/optwin.vim b/runtime/optwin.vim
index 17fe27637..9aa2db26f 100644
--- a/runtime/optwin.vim
+++ b/runtime/optwin.vim
@@ -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"))
diff --git a/src/option.h b/src/option.h
index 49d869bfc..a82258e3a 100644
--- a/src/option.h
+++ b/src/option.h
@@ -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.
diff --git a/src/optiondefs.h b/src/optiondefs.h
index c39244288..cc4ad9e57 100644
--- a/src/optiondefs.h
+++ b/src/optiondefs.h
@@ -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, \
diff --git a/src/term.c b/src/term.c
index f74b18add..e97ec2c4d 100644
--- a/src/term.c
+++ b/src/term.c
@@ -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
{
diff --git a/src/version.c b/src/version.c
index 586d2ec63..bbb21576e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3864,
+/**/
3863,
/**/
3862,