neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit fda9adab5d0688fbd94544dc7146d0957c728c69
parent 012c055804876346a3ef5c1d0cdb8e0a7ee58481
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Sat,  9 Apr 2022 13:31:42 +0800

vim-patch:partial:8.1.2333: with modifyOtherKeys CTRL-^ doesn't work (#18048)

Problem:    With modifyOtherKeys CTRL-^ doesn't work.
Solution:   Handle the exception.
https://github.com/vim/vim/commit/828ffd596394f714270a01a55fc3f949a8bd9b35
Diffstat:
Msrc/nvim/getchar.c | 18+++++++++++++-----
Mtest/functional/ui/input_spec.lua | 8++++++++
2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c @@ -1590,11 +1590,19 @@ int vgetc(void) c = utf_ptr2char(buf); } - if ((mod_mask & MOD_MASK_CTRL) && (c >= '?' && c <= '_')) { - c = Ctrl_chr(c); - mod_mask &= ~MOD_MASK_CTRL; - if (c == 0) { // <C-@> is <Nul> - c = K_ZERO; + // A modifier was not used for a mapping, apply it to ASCII + // keys. Shift would already have been applied. + if (mod_mask & MOD_MASK_CTRL) { + if ((c >= '`' && c <= 0x7f) || (c >= '@' && c <= '_')) { + c &= 0x1f; + mod_mask &= ~MOD_MASK_CTRL; + if (c == 0) { + c = K_ZERO; + } + } else if (c == '6') { + // CTRL-6 is equivalent to CTRL-^ + c = 0x1e; + mod_mask &= ~MOD_MASK_CTRL; } } diff --git a/test/functional/ui/input_spec.lua b/test/functional/ui/input_spec.lua @@ -7,6 +7,7 @@ local curbuf_contents = helpers.curbuf_contents local meths = helpers.meths local exec_lua = helpers.exec_lua local write_file = helpers.write_file +local funcs = helpers.funcs local Screen = require('test.functional.ui.screen') before_each(clear) @@ -204,6 +205,13 @@ describe('input pairs', function() end) end) +it('Ctrl-6 is Ctrl-^ vim-patch:8.1.2333', function() + command('split aaa') + command('edit bbb') + feed('<C-6>') + eq('aaa', funcs.bufname()) +end) + describe('input non-printable chars', function() after_each(function() os.remove('Xtest-overwrite')