From 6fe2d24cef095bda797c2b33c1dadd4fac082945 Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Fri, 16 Aug 2019 12:03:33 +0200 Subject: keymap: allow modifiers to multibyte chars, like MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- runtime/doc/intro.txt | 3 +++ src/nvim/keymap.c | 2 +- test/functional/ui/input_spec.lua | 5 +++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt index 1fb06e169c..c240f08a75 100644 --- a/runtime/doc/intro.txt +++ b/runtime/doc/intro.txt @@ -404,6 +404,9 @@ Mapping will not work then. Note: If numlock is on, the |TUI| receives plain ASCII values, so mappings to - and will not work. +Note: Nvim supports mapping multibyte chars with modifiers such as ``. +Which combinations actually are usable depends on the terminal emulator or GUI. + *<>* Examples are often given in the <> notation. Sometimes this is just to make clear what you need to type, but often it can be typed literally, e.g., with diff --git a/src/nvim/keymap.c b/src/nvim/keymap.c index 9145813525..27052da9d8 100644 --- a/src/nvim/keymap.c +++ b/src/nvim/keymap.c @@ -604,7 +604,7 @@ int find_special_key(const char_u **srcp, const size_t src_len, int *const modp, // Anything accepted, like . // or are not special in strings as " is // the string delimiter. With a backslash it works: - if (end - bp > l && !(in_string && bp[1] == '"') && bp[2] == '>') { + if (end - bp > l && !(in_string && bp[1] == '"') && bp[l+1] == '>') { bp += l; } else if (end - bp > 2 && in_string && bp[1] == '\\' && bp[2] == '"' && bp[3] == '>') { diff --git a/test/functional/ui/input_spec.lua b/test/functional/ui/input_spec.lua index 121cbe47d6..0009f2c31b 100644 --- a/test/functional/ui/input_spec.lua +++ b/test/functional/ui/input_spec.lua @@ -103,6 +103,11 @@ describe('mappings', function() check_mapping('','') check_mapping('','') end) + + it('support meta + multibyte char mapping', function() + add_mapping('', '') + check_mapping('', '') + end) end) describe('feeding large chunks of input with ', function() -- cgit