Mercurial > vim
changeset 18400:f66fee58e7e2 v8.1.2194
patch 8.1.2194: modifyOtherKeys is not enabled by default
Commit: https://github.com/vim/vim/commit/4b57018ee4e6d608e3a28e0ee4fdd2f057cc0e89
Author: Bram Moolenaar <Bram@vim.org>
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 20 Oct 2019 20:00:03 +0200 |
parents | abf655222da5 |
children | d1bb50cdb9ad |
files | runtime/doc/map.txt src/term.c src/version.c |
diffstat | 3 files changed, 34 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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 <A-k> 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 = "\<Esc>[>4;2m" + let &t_TE = "\<Esc>[>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
--- 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;")},