aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatt Wozniski <godlygeek@gmail.com>2020-10-04 02:37:45 -0400
committerMatt Wozniski <godlygeek@gmail.com>2020-10-05 15:27:04 -0400
commit2f06413dfb3624381f112b7d8661fde659c279e7 (patch)
tree59279a7d604e0eae8651dc140d1431e863a9d1a3 /src
parentf6ac375604238c94d3dc3eeb9b82e67417460806 (diff)
downloadrneovim-2f06413dfb3624381f112b7d8661fde659c279e7.tar.gz
rneovim-2f06413dfb3624381f112b7d8661fde659c279e7.tar.bz2
rneovim-2f06413dfb3624381f112b7d8661fde659c279e7.zip
Treat unmapped ALT/META as ESC+c in all modes
In #8226 <A-x> and <M-x> were changed to behave like <Esc>x in insert mode when no mapping exists. This commit backs out that change and replaces it with a more general one that makes unmapped ALT and META keypresses as <Esc>+char in all modes. This fixes an unnecessary and confusing inconsistency between modes.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/edit.c8
-rw-r--r--src/nvim/getchar.c11
2 files changed, 11 insertions, 8 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index 1e149da1dc..de2346a9d8 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -1254,14 +1254,6 @@ check_pum:
normalchar:
// Insert a normal character.
- if (mod_mask == MOD_MASK_ALT || mod_mask == MOD_MASK_META) {
- // Unmapped ALT/META chord behaves like ESC+c. #8213
- stuffcharReadbuff(ESC);
- stuffcharReadbuff(s->c);
- u_sync(false);
- break;
- }
-
if (!p_paste) {
// Trigger InsertCharPre.
char_u *str = do_insert_char_pre(s->c);
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index ecb3931b82..cbd9582f8b 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -1528,6 +1528,17 @@ int vgetc(void)
c = utf_ptr2char(buf);
}
+ // If mappings are enabled (i.e., not Ctrl-v) and the user directly typed
+ // something with a meta- or alt- modifier that was not mapped, interpret
+ // <M-x> as <Esc>x rather than as an unbound meta keypress. #8213
+ if (!no_mapping && KeyTyped
+ && (mod_mask == MOD_MASK_ALT || mod_mask == MOD_MASK_META)) {
+ mod_mask = 0;
+ stuffcharReadbuff(c);
+ u_sync(false);
+ c = ESC;
+ }
+
break;
}
}