summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/builtin.txt3
-rw-r--r--runtime/doc/map.txt3
-rw-r--r--src/cmdexpand.c9
-rw-r--r--src/option.c7
-rw-r--r--src/testdir/test_cmdline.vim7
-rw-r--r--src/testdir/test_options.vim8
-rw-r--r--src/usercmd.c3
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h1
9 files changed, 41 insertions, 2 deletions
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\<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal('"set syntax=' .. getcompletion('a*', 'syntax')->join(), @:)
+
+ if has('keymap')
+ " Expand values for 'keymap'
+ call feedkeys(":set keymap=acc\<Tab>\<C-B>\"\<CR>", 'xt')
+ call assert_equal('"set keymap=accents', @:)
+ call feedkeys(":set keymap=a\<C-A>\<C-B>\"\<CR>", '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
@@ -705,6 +705,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 10,
+/**/
9,
/**/
8,
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