aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/keymap.c')
-rw-r--r--src/nvim/keymap.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/nvim/keymap.c b/src/nvim/keymap.c
index 32f2158d7b..f0536cbf15 100644
--- a/src/nvim/keymap.c
+++ b/src/nvim/keymap.c
@@ -13,6 +13,7 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/mouse.h"
+#include "nvim/option_defs.h"
#include "nvim/strings.h"
#include "nvim/vim.h"
@@ -744,12 +745,15 @@ static int extract_modifiers(int key, int *modp)
modifiers &= ~MOD_MASK_SHIFT;
}
}
- if ((modifiers & MOD_MASK_CTRL)
- && ((key >= '?' && key <= '_') || ASCII_ISALPHA(key))) {
- key = Ctrl_chr(key);
- modifiers &= ~MOD_MASK_CTRL;
- if (key == 0) { // <C-@> is <Nul>
- key = K_ZERO;
+ if ((modifiers & MOD_MASK_CTRL) && ((key >= '?' && key <= '_') || ASCII_ISALPHA(key))) {
+ key = TOUPPER_ASC(key);
+ int new_key = Ctrl_chr(key);
+ if (!p_clbg || (new_key != TAB && new_key != CAR && new_key != ESC)) {
+ key = new_key;
+ modifiers &= ~MOD_MASK_CTRL;
+ if (key == 0) { // <C-@> is <Nul>
+ key = K_ZERO;
+ }
}
}