From 98f62a2cfa98363217fdfcf96b6c636e91dba84d Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 29 Apr 2022 20:50:14 +0800 Subject: feat(mappings): allow special keys and modifiers in mapping --- src/nvim/getchar.c | 20 +++++++++++++------- src/nvim/globals.h | 4 ++-- 2 files changed, 15 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index eb78317ee7..0ce8f6e715 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -4861,15 +4861,21 @@ char_u *getcmdkeycmd(int promptc, void *cookie, int indent, bool do_concat) // special case to give nicer error message emsg(e_cmdmap_repeated); aborted = true; - } else if (IS_SPECIAL(c1)) { - if (c1 == K_SNR) { - ga_concat(&line_ga, ""); + } else if (c1 == K_SNR) { + ga_concat(&line_ga, ""); + } else { + if (cmod != 0) { + ga_append(&line_ga, (char)K_SPECIAL); + ga_append(&line_ga, (char)KS_MODIFIER); + ga_append(&line_ga, (char)cmod); + } + if (IS_SPECIAL(c1)) { + ga_append(&line_ga, (char)K_SPECIAL); + ga_append(&line_ga, (char)K_SECOND(c1)); + ga_append(&line_ga, (char)K_THIRD(c1)); } else { - semsg(e_cmdmap_key, get_special_key_name(c1, cmod)); - aborted = true; + ga_append(&line_ga, (char)c1); } - } else { - ga_append(&line_ga, (char)c1); } cmod = 0; diff --git a/src/nvim/globals.h b/src/nvim/globals.h index 5983f18bb5..070d96ebb3 100644 --- a/src/nvim/globals.h +++ b/src/nvim/globals.h @@ -997,8 +997,8 @@ EXTERN char e_float_as_string[] INIT(= N_("E806: using Float as a String")); EXTERN char e_autocmd_err[] INIT(= N_("E5500: autocmd has thrown an exception: %s")); EXTERN char e_cmdmap_err[] INIT(= N_("E5520: mapping must end with ")); -EXTERN char e_cmdmap_repeated[] INIT(= N_("E5521: mapping must end with before second ")); -EXTERN char e_cmdmap_key[] INIT(= N_("E5522: mapping must not include %s key")); +EXTERN char e_cmdmap_repeated[] +INIT(= N_("E5521: mapping must end with before second ")); EXTERN char e_api_error[] INIT(= N_("E5555: API call: %s")); -- cgit