feat(mappings): allow special keys and modifiers in <Cmd> mapping

This commit is contained in:
zeertzjq
2022-04-29 20:50:14 +08:00
parent 8c548c9e54
commit 98f62a2cfa
3 changed files with 44 additions and 23 deletions

View File

@@ -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, "<SNR>");
} else {
semsg(e_cmdmap_key, get_special_key_name(c1, cmod));
aborted = true;
}
} else if (c1 == K_SNR) {
ga_concat(&line_ga, "<SNR>");
} else {
ga_append(&line_ga, (char)c1);
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 {
ga_append(&line_ga, (char)c1);
}
}
cmod = 0;

View File

@@ -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: <Cmd> mapping must end with <CR>"));
EXTERN char e_cmdmap_repeated[] INIT(= N_("E5521: <Cmd> mapping must end with <CR> before second <Cmd>"));
EXTERN char e_cmdmap_key[] INIT(= N_("E5522: <Cmd> mapping must not include %s key"));
EXTERN char e_cmdmap_repeated[]
INIT(= N_("E5521: <Cmd> mapping must end with <CR> before second <Cmd>"));
EXTERN char e_api_error[] INIT(= N_("E5555: API call: %s"));