diff options
-rw-r--r-- | runtime/doc/options.txt | 12 | ||||
-rw-r--r-- | runtime/doc/term.txt | 11 | ||||
-rw-r--r-- | runtime/optwin.vim | 8 | ||||
-rw-r--r-- | src/option.h | 3 | ||||
-rw-r--r-- | src/optiondefs.h | 3 | ||||
-rw-r--r-- | src/term.c | 5 | ||||
-rw-r--r-- | src/version.c | 2 |
7 files changed, 38 insertions, 6 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index a5ff937e08..3e71ba14e5 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 8862d0a400..3e90cc0476 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 17fe276376..9aa2db26f4 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 49d869bfc7..a82258e3ab 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 c39244288b..cc4ad9e57e 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 f74b18add9..e97ec2c4d5 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 586d2ec635..bbb21576e5 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, |