forked from aniani/vim
patch 9.0.1276: some mappings with Meta and Shift do not work
Problem: Some mappings with Meta and Shift do not work. Solution: Apply the Shift modifier to the key. (issue #11913)
This commit is contained in:
@@ -20,9 +20,10 @@ manual.
|
|||||||
1.8 Examples |map-examples|
|
1.8 Examples |map-examples|
|
||||||
1.9 Using mappings |map-typing|
|
1.9 Using mappings |map-typing|
|
||||||
1.10 Mapping alt-keys |:map-alt-keys|
|
1.10 Mapping alt-keys |:map-alt-keys|
|
||||||
1.11 Mapping in modifyOtherKeys mode |modifyOtherKeys|
|
1.11 Mapping meta-keys |:map-meta-keys|
|
||||||
1.12 Mapping with Kitty keyboard protocol |kitty-keyboard-protocol|
|
1.12 Mapping in modifyOtherKeys mode |modifyOtherKeys|
|
||||||
1.13 Mapping an operator |:map-operator|
|
1.13 Mapping with Kitty keyboard protocol |kitty-keyboard-protocol|
|
||||||
|
1.14 Mapping an operator |:map-operator|
|
||||||
2. Abbreviations |abbreviations|
|
2. Abbreviations |abbreviations|
|
||||||
3. Local mappings and functions |script-local|
|
3. Local mappings and functions |script-local|
|
||||||
4. User-defined commands |user-commands|
|
4. User-defined commands |user-commands|
|
||||||
@@ -794,8 +795,8 @@ otherwise you would not be able to use those commands anymore. Here are a few
|
|||||||
suggestions:
|
suggestions:
|
||||||
- Function keys <F2>, <F3>, etc.. Also the shifted function keys <S-F1>,
|
- Function keys <F2>, <F3>, etc.. Also the shifted function keys <S-F1>,
|
||||||
<S-F2>, etc. Note that <F1> is already used for the help command.
|
<S-F2>, etc. Note that <F1> is already used for the help command.
|
||||||
- Meta-keys (with the ALT key pressed). Depending on your keyboard accented
|
- Any key with the Alt or Meta key pressed. Depending on your keyboard
|
||||||
characters may be used as well. |:map-alt-keys|
|
accented characters may be used as well. |:map-alt-keys|
|
||||||
- Use the '_' or ',' character and then any other character. The "_" and ","
|
- Use the '_' or ',' character and then any other character. The "_" and ","
|
||||||
commands do exist in Vim (see |_| and |,|), but you probably never use them.
|
commands do exist in Vim (see |_| and |,|), but you probably never use them.
|
||||||
- Use a key that is a synonym for another command. For example: CTRL-P and
|
- Use a key that is a synonym for another command. For example: CTRL-P and
|
||||||
@@ -928,6 +929,8 @@ out whether ALT was pressed or not.
|
|||||||
|
|
||||||
If the terminal supports the modifyOtherKeys mode and it has been enabled,
|
If the terminal supports the modifyOtherKeys mode and it has been enabled,
|
||||||
then Vim can recognize more key combinations, see |modifyOtherKeys| below.
|
then Vim can recognize more key combinations, see |modifyOtherKeys| below.
|
||||||
|
The Kitty keyboard protocol works in a similar way, see
|
||||||
|
|kitty-keyboard-protocol|.
|
||||||
|
|
||||||
By default Vim assumes that pressing the ALT key sets the 8th bit of a typed
|
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
|
character. Most decent terminals can work that way, such as xterm, aterm and
|
||||||
@@ -966,7 +969,21 @@ on the terminal; that's a good last resource in case you want to send ESC when
|
|||||||
using other applications but not when inside Vim.
|
using other applications but not when inside Vim.
|
||||||
|
|
||||||
|
|
||||||
1.11 MAPPING IN modifyOtherKeys mode *modifyOtherKeys*
|
1.11 MAPPING META-KEYS *:map-meta-keys*
|
||||||
|
|
||||||
|
Mapping keys with the Meta modifier works very similar to using the Alt key.
|
||||||
|
What key on your keyboard produces the Meta modifier depends on your keyboard
|
||||||
|
and configuration.
|
||||||
|
|
||||||
|
Note that mapping <M-a> actually is for using the Alt key. That can be
|
||||||
|
confusing! It cannot be changed, it would not be backwards compatible.
|
||||||
|
|
||||||
|
For the Meta modifier the "T" character is used. For example, to map Meta-b
|
||||||
|
in Insert mode: >
|
||||||
|
:imap <T-b> terrible
|
||||||
|
|
||||||
|
|
||||||
|
1.12 MAPPING IN modifyOtherKeys mode *modifyOtherKeys*
|
||||||
|
|
||||||
Xterm and a few other terminals can be put in a mode where keys with modifiers
|
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
|
are sent with a special escape code. Vim recognizes these codes and can then
|
||||||
@@ -1028,7 +1045,7 @@ When the 'esckeys' option is off, then modifyOtherKeys will be disabled in
|
|||||||
Insert mode to avoid every key with a modifier causing Insert mode to end.
|
Insert mode to avoid every key with a modifier causing Insert mode to end.
|
||||||
|
|
||||||
|
|
||||||
1.12 MAPPING WITH KITTY KEYBOARD PROTOCOL *kitty-keyboard-protocol*
|
1.13 MAPPING WITH KITTY KEYBOARD PROTOCOL *kitty-keyboard-protocol*
|
||||||
|
|
||||||
If the value of 'term' contains "kitty" then Vim will send out an escape
|
If the value of 'term' contains "kitty" then Vim will send out an escape
|
||||||
sequence to enable the Kitty keyboard protocol. This can be changed with the
|
sequence to enable the Kitty keyboard protocol. This can be changed with the
|
||||||
@@ -1055,7 +1072,7 @@ translated). The meaning of {value}:
|
|||||||
previous state is unknown
|
previous state is unknown
|
||||||
|
|
||||||
|
|
||||||
1.13 MAPPING AN OPERATOR *:map-operator*
|
1.14 MAPPING AN OPERATOR *:map-operator*
|
||||||
|
|
||||||
An operator is used before a {motion} command. To define your own operator
|
An operator is used before a {motion} command. To define your own operator
|
||||||
you must create a mapping that first sets the 'operatorfunc' option and then
|
you must create a mapping that first sets the 'operatorfunc' option and then
|
||||||
|
@@ -5343,6 +5343,12 @@ handle_key_with_modifier(
|
|||||||
|
|
||||||
int key = trail == 'u' ? arg[0] : arg[2];
|
int key = trail == 'u' ? arg[0] : arg[2];
|
||||||
int modifiers = decode_modifiers(arg[1]);
|
int modifiers = decode_modifiers(arg[1]);
|
||||||
|
|
||||||
|
// Some terminals do not apply the Shift modifier to the key. To make
|
||||||
|
// mappings consistent we do it here. TODO: support more keys.
|
||||||
|
if ((modifiers & MOD_MASK_SHIFT) && key >= 'a' && key <= 'z')
|
||||||
|
key += 'A' - 'a';
|
||||||
|
|
||||||
return put_key_modifiers_in_typebuf(key, modifiers,
|
return put_key_modifiers_in_typebuf(key, modifiers,
|
||||||
csi_len, offset, buf, bufsize, buflen);
|
csi_len, offset, buf, bufsize, buflen);
|
||||||
}
|
}
|
||||||
|
@@ -695,6 +695,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1276,
|
||||||
/**/
|
/**/
|
||||||
1275,
|
1275,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user