aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/getchar.c18
-rw-r--r--test/functional/ui/input_spec.lua8
2 files changed, 21 insertions, 5 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index 299385cb17..d615255828 100644
--- 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
index 9df7531016..b581e147e3 100644
--- 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')