Skip to content

Commit

Permalink
patch 8.2.3864: cannot disable requesting key codes from xterm
Browse files Browse the repository at this point in the history
Problem:    Cannot disable requesting key codes from xterm.
Solution:   Add the 'xtermcodes' option, default on.
  • Loading branch information
brammool committed Dec 21, 2021
1 parent 8d95d70 commit 6f79e61
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 6 deletions.
12 changes: 12 additions & 0 deletions runtime/doc/options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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

This comment has been minimized.

Copy link
@lacygoill

lacygoill Dec 21, 2021

Typo in runtime/doc/options.txt, line 9213:

mechanism and this option is set, Vim will request the actual termimal

"termimal" should be replaced with "terminal".

diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 3e71ba14e..b931cc67e 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -9210,7 +9210,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 '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
+	mechanism and this option is set, Vim will request the actual terminal
 	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|.

This comment has been minimized.

Copy link
@brammool

brammool Dec 21, 2021

Author Contributor

Thanks for noticing

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:
11 changes: 9 additions & 2 deletions runtime/doc/term.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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|
Expand Down
8 changes: 8 additions & 0 deletions runtime/optwin.vim
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
Expand Down
3 changes: 2 additions & 1 deletion src/option.h
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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.
Expand Down
3 changes: 3 additions & 0 deletions src/optiondefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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, \
Expand Down
5 changes: 2 additions & 3 deletions src/term.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
{
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -749,6 +749,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
3864,
/**/
3863,
/**/
Expand Down

0 comments on commit 6f79e61

Please sign in to comment.