diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-05-07 08:12:42 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2023-05-08 01:12:08 +0800 |
commit | a2b9117ca8f8abe8d4c9e2d1bacb73b1902a4e1f (patch) | |
tree | 5fdf29ad66a7f8db692024bc401acd6fa02f1e3b /src/nvim/getchar.c | |
parent | 1cbfed03c249e7f9e67d59566fbabe46f7f7f1f9 (diff) | |
download | rneovim-a2b9117ca8f8abe8d4c9e2d1bacb73b1902a4e1f.tar.gz rneovim-a2b9117ca8f8abe8d4c9e2d1bacb73b1902a4e1f.tar.bz2 rneovim-a2b9117ca8f8abe8d4c9e2d1bacb73b1902a4e1f.zip |
vim-patch:8.2.1978: making a mapping work in all modes is complicated
Problem: Making a mapping work in all modes is complicated.
Solution: Add the <Cmd> special key. (Yegappan Lakshmanan, closes vim/vim#7282,
closes 4784, based on patch by Bjorn Linse)
https://github.com/vim/vim/commit/957cf67d50516ba98716f59c9e1cb6412ec1535d
Change docs to match Vim if it's wording is better.
Change error numbers to match Vim.
Co-authored-by: Bram Moolenaar <Bram@vim.org>
Diffstat (limited to 'src/nvim/getchar.c')
-rw-r--r-- | src/nvim/getchar.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index a0e8350287..31817676e1 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -134,6 +134,10 @@ static size_t last_recorded_len = 0; // number of last recorded chars #endif static const char e_recursive_mapping[] = N_("E223: Recursive mapping"); +static const char e_cmd_mapping_must_end_with_cr[] + = N_("E1135: <Cmd> mapping must end with <CR>"); +static const char e_cmd_mapping_must_end_with_cr_before_second_cmd[] + = N_("E1136: <Cmd> mapping must end with <CR> before second <Cmd>"); // Free and clear a buffer. void free_buff(buffheader_T *buf) @@ -2884,7 +2888,8 @@ int fix_input_buffer(uint8_t *buf, int len) return len; } -/// Get command argument for <Cmd> key +/// Function passed to do_cmdline() to get the command after a <Cmd> key from +/// typeahead. char *getcmdkeycmd(int promptc, void *cookie, int indent, bool do_concat) { garray_T line_ga; @@ -2894,6 +2899,7 @@ char *getcmdkeycmd(int promptc, void *cookie, int indent, bool do_concat) ga_init(&line_ga, 1, 32); + // no mapping for these characters no_mapping++; got_int = false; @@ -2903,16 +2909,17 @@ char *getcmdkeycmd(int promptc, void *cookie, int indent, bool do_concat) if (vgetorpeek(false) == NUL) { // incomplete <Cmd> is an error, because there is not much the user // could do in this state. - emsg(e_cmdmap_err); + emsg(_(e_cmd_mapping_must_end_with_cr)); aborted = true; break; } // Get one character at a time. c1 = vgetorpeek(true); + // Get two extra bytes for special keys if (c1 == K_SPECIAL) { - c1 = vgetorpeek(true); // no mapping for these chars + c1 = vgetorpeek(true); c2 = vgetorpeek(true); if (c1 == KS_MODIFIER) { cmod = c2; @@ -2928,8 +2935,8 @@ char *getcmdkeycmd(int promptc, void *cookie, int indent, bool do_concat) } else if (c1 == ESC) { aborted = true; } else if (c1 == K_COMMAND) { - // special case to give nicer error message - emsg(e_cmdmap_repeated); + // give a nicer error message for this special case + emsg(_(e_cmd_mapping_must_end_with_cr_before_second_cmd)); aborted = true; } else if (c1 == K_SNR) { ga_concat(&line_ga, "<SNR>"); |