diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index 8f79d2001d..94fcdf70c6 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -1,4 +1,4 @@ -*builtin.txt* For Vim version 9.1. Last change: 2023 Dec 24 +*builtin.txt* For Vim version 9.1. Last change: 2024 Jan 04 VIM REFERENCE MANUAL by Bram Moolenaar @@ -3570,6 +3570,7 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()* help help subjects highlight highlight groups history |:history| suboptions + keymap keyboard mappings locale locale names (as output of locale -a) mapclear buffer argument mapping mapping name diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt index d458aa661a..7d4d53048d 100644 --- a/runtime/doc/map.txt +++ b/runtime/doc/map.txt @@ -1,4 +1,4 @@ -*map.txt* For Vim version 9.1. Last change: 2023 December 31 +*map.txt* For Vim version 9.1. Last change: 2024 Jan 04 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1631,6 +1631,7 @@ completion can be enabled: -complete=help help subjects -complete=highlight highlight groups -complete=history :history suboptions + -complete=keymap keyboard mappings -complete=locale locale names (as output of locale -a) -complete=mapclear buffer argument -complete=mapping mapping name diff --git a/src/cmdexpand.c b/src/cmdexpand.c index 8bccaa3bb0..1008bf97e5 100644 --- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -50,6 +50,7 @@ cmdline_fuzzy_completion_supported(expand_T *xp) && xp->xp_context != EXPAND_FILES_IN_PATH && xp->xp_context != EXPAND_FILETYPE && xp->xp_context != EXPAND_HELP + && xp->xp_context != EXPAND_KEYMAP && xp->xp_context != EXPAND_OLD_SETTING && xp->xp_context != EXPAND_STRING_SETTING && xp->xp_context != EXPAND_SETTING_SUBTRACT @@ -1394,6 +1395,7 @@ addstar( || context == EXPAND_COMPILER || context == EXPAND_OWNSYNTAX || context == EXPAND_FILETYPE + || context == EXPAND_KEYMAP || context == EXPAND_PACKADD || context == EXPAND_RUNTIME || ((context == EXPAND_TAGS_LISTFILES @@ -3131,6 +3133,13 @@ ExpandFromContext( char *directories[] = {"syntax", "indent", "ftplugin", NULL}; return ExpandRTDir(pat, 0, numMatches, matches, directories); } +#ifdef FEAT_KEYMAP + if (xp->xp_context == EXPAND_KEYMAP) + { + char *directories[] = {"keymap", NULL}; + return ExpandRTDir(pat, 0, numMatches, matches, directories); + } +#endif #if defined(FEAT_EVAL) if (xp->xp_context == EXPAND_USER_LIST) return ExpandUserList(xp, matches, numMatches); diff --git a/src/option.c b/src/option.c index 7cac89e5cf..2372c1aa9b 100644 --- a/src/option.c +++ b/src/option.c @@ -7412,6 +7412,13 @@ set_context_in_set_cmd( xp->xp_context = EXPAND_FILETYPE; return; } +#ifdef FEAT_KEYMAP + if (options[opt_idx].var == (char_u *)&p_keymap) + { + xp->xp_context = EXPAND_KEYMAP; + return; + } +#endif // Now pick. If the option has a custom expander, use that. Otherwise, just // fill with the existing option value. diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index 33ff606424..4554712670 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -545,6 +545,13 @@ func Test_getcompletion() let l = getcompletion('horse', 'filetype') call assert_equal([], l) + if has('keymap') + let l = getcompletion('acc', 'keymap') + call assert_true(index(l, 'accents') >= 0) + let l = getcompletion('nullkeymap', 'keymap') + call assert_equal([], l) + endif + let l = getcompletion('z', 'syntax') call assert_true(index(l, 'zimbu') >= 0) let l = getcompletion('emacs', 'syntax') diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim index 8c336abf7d..37dc20187e 100644 --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -435,6 +435,14 @@ func Test_set_completion() call assert_equal('"set syntax=sshdconfig', @:) call feedkeys(":set syntax=a\\\"\", 'xt') call assert_equal('"set syntax=' .. getcompletion('a*', 'syntax')->join(), @:) + + if has('keymap') + " Expand values for 'keymap' + call feedkeys(":set keymap=acc\\\"\", 'xt') + call assert_equal('"set keymap=accents', @:) + call feedkeys(":set keymap=a\\\"\", 'xt') + call assert_equal('"set keymap=' .. getcompletion('a*', 'keymap')->join(), @:) + endif endfunc " Test handling of expanding individual string option values diff --git a/src/usercmd.c b/src/usercmd.c index 04b341933a..e2c0114ca3 100644 --- a/src/usercmd.c +++ b/src/usercmd.c @@ -73,6 +73,9 @@ static struct {EXPAND_HELP, "help"}, {EXPAND_HIGHLIGHT, "highlight"}, {EXPAND_HISTORY, "history"}, +#if defined(FEAT_KEYMAP) + {EXPAND_KEYMAP, "keymap"}, +#endif #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) {EXPAND_LOCALES, "locale"}, #endif diff --git a/src/version.c b/src/version.c index 2e7f2871ea..c31fbf6358 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 10, /**/ 9, /**/ diff --git a/src/vim.h b/src/vim.h index 3aa04f5548..e41dfef01b 100644 --- a/src/vim.h +++ b/src/vim.h @@ -841,6 +841,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring); #define EXPAND_SETTING_SUBTRACT 55 #define EXPAND_ARGOPT 56 #define EXPAND_TERMINALOPT 57 +#define EXPAND_KEYMAP 58 // Values for exmode_active (0 is no exmode) #define EXMODE_NORMAL 1