Mercurial > vim
changeset 26670:a77b661439f9 v8.2.3864
patch 8.2.3864: cannot disable requesting key codes from xterm
Commit: https://github.com/vim/vim/commit/6f79e614b25caebd35cf0d82b6f3b7e0733849ec
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Dec 21 09:12:23 2021 +0000
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 21 Dec 2021 10:15:04 +0100 |
parents | 7e4f211e0133 |
children | 914e38eb405c |
files | runtime/doc/options.txt runtime/doc/term.txt runtime/optwin.vim src/option.h src/optiondefs.h src/term.c src/version.c |
diffstat | 7 files changed, 38 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -9206,4 +9206,16 @@ A jump table for the options with a shor 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:
--- a/runtime/doc/term.txt +++ b/runtime/doc/term.txt @@ -556,8 +556,15 @@ request the key codes directly from the 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|
--- 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"))
--- 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.
--- 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, \
--- a/src/term.c +++ b/src/term.c @@ -4694,7 +4694,7 @@ handle_version_response(int first, int * // 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 {