diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-11-26 19:33:22 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-11-26 19:33:22 +0100 |
commit | fc4ea2a72d36de1196a3ce17352e72f8fe90f4bb (patch) | |
tree | d5d681840040dc4e36b94bb94cef2cb972c052b0 /src/ex_getln.c | |
parent | cc4423ae13d78367a3d0b5756783523d3b3a1d31 (diff) |
patch 8.1.2350: other text for CTRL-V in Insert mode with modifyOtherKeysv8.1.2350
Problem: Other text for CTRL-V in Insert mode with modifyOtherKeys.
Solution: Convert the Escape sequence back to key as if modifyOtherKeys is
not set, and use CTRL-SHIFT-V to get the Escape sequence itself.
(closes #5254)
Diffstat (limited to 'src/ex_getln.c')
-rw-r--r-- | src/ex_getln.c | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c index 6832158749..4a4d76ec9d 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -2208,18 +2208,31 @@ getcmdline_int( case Ctrl_V: case Ctrl_Q: - ignore_drag_release = TRUE; - putcmdline('^', TRUE); - c = get_literal(); /* get next (two) character(s) */ - do_abbr = FALSE; /* don't do abbreviation now */ - extra_char = NUL; - /* may need to remove ^ when composing char was typed */ - if (enc_utf8 && utf_iscomposing(c) && !cmd_silent) { - draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos); - msg_putchar(' '); - cursorcmd(); + int prev_mod_mask = mod_mask; + + ignore_drag_release = TRUE; + putcmdline('^', TRUE); + c = get_literal(); // get next (two) character(s) + do_abbr = FALSE; // don't do abbreviation now + extra_char = NUL; + // may need to remove ^ when composing char was typed + if (enc_utf8 && utf_iscomposing(c) && !cmd_silent) + { + draw_cmdline(ccline.cmdpos, + ccline.cmdlen - ccline.cmdpos); + msg_putchar(' '); + cursorcmd(); + } + + if ((c == ESC || c == CSI) + && !(prev_mod_mask & MOD_MASK_SHIFT)) + // Using CTRL-V: Change any modifyOtherKeys ESC + // sequence to a normal key. Don't do this for + // CTRL-SHIFT-V. + c = decodeModifyOtherKeys(c); } + break; #ifdef FEAT_DIGRAPHS |