# HG changeset patch # User Bram Moolenaar # Date 1571594403 -7200 # Node ID f66fee58e7e2e9ad4ab5db58d2aaae029582f946 # Parent abf655222da5211b4ce6153859805a7c0ffb34a7 patch 8.1.2194: modifyOtherKeys is not enabled by default Commit: https://github.com/vim/vim/commit/4b57018ee4e6d608e3a28e0ee4fdd2f057cc0e89 Author: Bram Moolenaar Date: Sun Oct 20 19:53:22 2019 +0200 patch 8.1.2194: modifyOtherKeys is not enabled by default Problem: ModifyOtherKeys is not enabled by default. Solution: Add t_TI and t_TE to the builtin xterm termcap. diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt --- a/runtime/doc/map.txt +++ b/runtime/doc/map.txt @@ -20,7 +20,8 @@ 1. Key mapping |key-mapping| 1.8 Examples |map-examples| 1.9 Using mappings |map-typing| 1.10 Mapping alt-keys |:map-alt-keys| - 1.11 Mapping an operator |:map-operator| + 1.11 Mapping in modifyOtherKeys mode |modifyOtherKeys| + 1.12 Mapping an operator |:map-operator| 2. Abbreviations |abbreviations| 3. Local mappings and functions |script-local| 4. User-defined commands |user-commands| @@ -777,6 +778,9 @@ In the GUI Vim handles the Alt key itsel always work. But in a terminal Vim gets a sequence of bytes and has to figure out whether ALT was pressed or not. +If the terminal supports the modifyOtherKeys mode and it has been enabled, +then Vim can recognize more key combinations, see |modifyOtherKeys| below. + By default Vim assumes that pressing the ALT key sets the 8th bit of a typed character. Most decent terminals can work that way, such as xterm, aterm and rxvt. If your mappings don't work it might be that the terminal is @@ -814,7 +818,31 @@ on the terminal; that's a good last reso using other applications but not when inside Vim. -1.11 MAPPING AN OPERATOR *:map-operator* +1.11 MAPPING IN modifyOtherKeys mode *modifyOtherKeys* + +Xterm and a few other terminals can be put in a mode where keys with modifiers +are sent with a special escape code. Vim recognizes these codes and can then +make a difference between CTRL-H and Backspace, even when Backspace sends the +character 8. And many more special keys. + +For xterm modifyOtherKeys is enabled in the builtin termcap entry. If this is +not used you can enable modifyOtherKeys with these lines in your vimrc: > + let &t_TI = "\[>4;2m" + let &t_TE = "\[>4;m" + +In case the modifyOtherKeys mode causes problems you can disable it: > + let &t_TI = "" + let &t_TE = "" +It does not take effect immediately. To have this work without restarting Vim +execute a shell command, e.g.: `!ls` + +A known side effect effect is that in Insert mode the raw escape sequence is +inserted after the CTRL-V key. This can be used to check whether +modifyOtherKeys is enabled: In Insert mode type CTRL-V CTRL-V, if you get +one byte then modifyOtherKeys is off, if you get <1b>27;5;118~ then it is on. + + +1.12 MAPPING AN OPERATOR *:map-operator* An operator is used before a {motion} command. To define your own operator you must create mapping that first sets the 'operatorfunc' option and then diff --git a/src/term.c b/src/term.c --- a/src/term.c +++ b/src/term.c @@ -912,6 +912,8 @@ static struct builtin_term builtin_termc {(int)KS_TE, IF_EB("\033[2J\033[?47l\0338", ESC_STR "[2J" ESC_STR_nc "[?47l" ESC_STR_nc "8")}, # endif + {(int)KS_CTI, IF_EB("\033[>4;2m", ESC_STR_nc "[>4;2m")}, + {(int)KS_CTE, IF_EB("\033[>4;m", ESC_STR_nc "[>4;m")}, {(int)KS_CIS, IF_EB("\033]1;", ESC_STR "]1;")}, {(int)KS_CIE, "\007"}, {(int)KS_TS, IF_EB("\033]2;", ESC_STR "]2;")}, diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2194, +/**/ 2193, /**/ 2192,