insert-mode: interpret unmapped META as ESC

closes #2454
closes #8213
ref #7972
This commit is contained in:
Justin M. Keyes
2018-04-04 01:08:07 +02:00
parent 98e7112390
commit 224ebc0078
8 changed files with 73 additions and 52 deletions

View File

@@ -847,7 +847,7 @@ static int insert_handle_key(InsertState *s)
case ' ':
if (mod_mask != 4) {
if (mod_mask != MOD_MASK_CTRL) {
goto normalchar;
}
// FALLTHROUGH
@@ -1180,6 +1180,14 @@ static int insert_handle_key(InsertState *s)
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);
break;
}
if (!p_paste) {
// Trigger InsertCharPre.
char_u *str = do_insert_char_pre(s->c);
@@ -1432,7 +1440,7 @@ static void ins_ctrl_v(void)
* line and will not removed by the redraw */
edit_unputchar();
clear_showcmd();
insert_special(c, FALSE, TRUE);
insert_special(c, true, true);
revins_chars++;
revins_legal++;
}
@@ -5054,13 +5062,11 @@ static void insert_special(int c, int allow_modmask, int ctrlv)
char_u *p;
int len;
/*
* Special function key, translate into "<Key>". Up to the last '>' is
* inserted with ins_str(), so as not to replace characters in replace
* mode.
* Only use mod_mask for special keys, to avoid things like <S-Space>,
* unless 'allow_modmask' is TRUE.
*/
// Special function key, translate into "<Key>". Up to the last '>' is
// inserted with ins_str(), so as not to replace characters in replace
// mode.
// Only use mod_mask for special keys, to avoid things like <S-Space>,
// unless 'allow_modmask' is TRUE.
if (mod_mask & MOD_MASK_CMD) { // Command-key never produces a normal key.
allow_modmask = true;
}