feat(edit): insert an unsimplified key using CTRL-SHIFT-V

This marks the following Vim patches as ported:

vim-patch:8.1.2333: with modifyOtherKeys CTRL-^ doesn't work

Problem:    With modifyOtherKeys CTRL-^ doesn't work.
Solution:   Handle the exception.
828ffd5963

vim-patch:8.1.2350: other text for CTRL-V in Insert mode with modifyOtherKeys

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 vim/vim#5254)
fc4ea2a72d

vim-patch:8.2.2084: CTRL-V U doesn't work to enter a Unicode character

Problem:    CTRL-V U doesn't work to enter a Unicode character when
            modifyOtherKeys is effective. (Ken Takata)
Solution:   Add a flag to get_literal() for the shift key. (closes vim/vim#7413)
0684e36a7e

Omit getcmdkeycmd() change as it depends on Vim patch 8.2.2062, which
may introduce a potential breakage.
This commit is contained in:
zeertzjq
2022-04-27 13:02:55 +08:00
parent 44269c73a3
commit 212349c100
8 changed files with 123 additions and 81 deletions

View File

@@ -5154,7 +5154,7 @@ static void nv_replace(cmdarg_T *cap)
// get another character
if (cap->nchar == Ctrl_V) {
had_ctrl_v = Ctrl_V;
cap->nchar = get_literal();
cap->nchar = get_literal(false);
// Don't redo a multibyte character with CTRL-V.
if (cap->nchar > DEL) {
had_ctrl_v = NUL;
@@ -5369,7 +5369,7 @@ static void nv_vreplace(cmdarg_T *cap)
emsg(_(e_modifiable));
} else {
if (cap->extra_char == Ctrl_V) { // get another character
cap->extra_char = get_literal();
cap->extra_char = get_literal(false);
}
stuffcharReadbuff(cap->extra_char);
stuffcharReadbuff(ESC);