diff options
Diffstat (limited to 'src/nvim/edit.c')
| -rw-r--r-- | src/nvim/edit.c | 24 | 
1 files changed, 15 insertions, 9 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 2e7b84828d..a0f6ce152b 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -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++;  } @@ -5057,13 +5065,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;    }  | 
