0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 9.1.0010: Keymap completion is not available

Problem:  Keymap completion is not available
Solution: Add keymap completion (Doug Kearns)

Add keymap completion to the 'keymap' option, user commands and builtin
completion functions.

closes: #13692

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Doug Kearns
2024-01-04 22:37:44 +01:00
committed by Christian Brabandt
parent f93b1c881a
commit 81642d9d6f
9 changed files with 41 additions and 2 deletions

View File

@@ -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 VIM REFERENCE MANUAL by Bram Moolenaar
@@ -3570,6 +3570,7 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
help help subjects help help subjects
highlight highlight groups highlight highlight groups
history |:history| suboptions history |:history| suboptions
keymap keyboard mappings
locale locale names (as output of locale -a) locale locale names (as output of locale -a)
mapclear buffer argument mapclear buffer argument
mapping mapping name mapping mapping name

View File

@@ -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 VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1631,6 +1631,7 @@ completion can be enabled:
-complete=help help subjects -complete=help help subjects
-complete=highlight highlight groups -complete=highlight highlight groups
-complete=history :history suboptions -complete=history :history suboptions
-complete=keymap keyboard mappings
-complete=locale locale names (as output of locale -a) -complete=locale locale names (as output of locale -a)
-complete=mapclear buffer argument -complete=mapclear buffer argument
-complete=mapping mapping name -complete=mapping mapping name

View File

@@ -50,6 +50,7 @@ cmdline_fuzzy_completion_supported(expand_T *xp)
&& xp->xp_context != EXPAND_FILES_IN_PATH && xp->xp_context != EXPAND_FILES_IN_PATH
&& xp->xp_context != EXPAND_FILETYPE && xp->xp_context != EXPAND_FILETYPE
&& xp->xp_context != EXPAND_HELP && xp->xp_context != EXPAND_HELP
&& xp->xp_context != EXPAND_KEYMAP
&& xp->xp_context != EXPAND_OLD_SETTING && xp->xp_context != EXPAND_OLD_SETTING
&& xp->xp_context != EXPAND_STRING_SETTING && xp->xp_context != EXPAND_STRING_SETTING
&& xp->xp_context != EXPAND_SETTING_SUBTRACT && xp->xp_context != EXPAND_SETTING_SUBTRACT
@@ -1394,6 +1395,7 @@ addstar(
|| context == EXPAND_COMPILER || context == EXPAND_COMPILER
|| context == EXPAND_OWNSYNTAX || context == EXPAND_OWNSYNTAX
|| context == EXPAND_FILETYPE || context == EXPAND_FILETYPE
|| context == EXPAND_KEYMAP
|| context == EXPAND_PACKADD || context == EXPAND_PACKADD
|| context == EXPAND_RUNTIME || context == EXPAND_RUNTIME
|| ((context == EXPAND_TAGS_LISTFILES || ((context == EXPAND_TAGS_LISTFILES
@@ -3131,6 +3133,13 @@ ExpandFromContext(
char *directories[] = {"syntax", "indent", "ftplugin", NULL}; char *directories[] = {"syntax", "indent", "ftplugin", NULL};
return ExpandRTDir(pat, 0, numMatches, matches, directories); 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 defined(FEAT_EVAL)
if (xp->xp_context == EXPAND_USER_LIST) if (xp->xp_context == EXPAND_USER_LIST)
return ExpandUserList(xp, matches, numMatches); return ExpandUserList(xp, matches, numMatches);

View File

@@ -7412,6 +7412,13 @@ set_context_in_set_cmd(
xp->xp_context = EXPAND_FILETYPE; xp->xp_context = EXPAND_FILETYPE;
return; 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 // Now pick. If the option has a custom expander, use that. Otherwise, just
// fill with the existing option value. // fill with the existing option value.

View File

@@ -545,6 +545,13 @@ func Test_getcompletion()
let l = getcompletion('horse', 'filetype') let l = getcompletion('horse', 'filetype')
call assert_equal([], l) 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') let l = getcompletion('z', 'syntax')
call assert_true(index(l, 'zimbu') >= 0) call assert_true(index(l, 'zimbu') >= 0)
let l = getcompletion('emacs', 'syntax') let l = getcompletion('emacs', 'syntax')

View File

@@ -435,6 +435,14 @@ func Test_set_completion()
call assert_equal('"set syntax=sshdconfig', @:) call assert_equal('"set syntax=sshdconfig', @:)
call feedkeys(":set syntax=a\<C-A>\<C-B>\"\<CR>", 'xt') call feedkeys(":set syntax=a\<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal('"set syntax=' .. getcompletion('a*', 'syntax')->join(), @:) 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 endfunc
" Test handling of expanding individual string option values " Test handling of expanding individual string option values

View File

@@ -73,6 +73,9 @@ static struct
{EXPAND_HELP, "help"}, {EXPAND_HELP, "help"},
{EXPAND_HIGHLIGHT, "highlight"}, {EXPAND_HIGHLIGHT, "highlight"},
{EXPAND_HISTORY, "history"}, {EXPAND_HISTORY, "history"},
#if defined(FEAT_KEYMAP)
{EXPAND_KEYMAP, "keymap"},
#endif
#if defined(HAVE_LOCALE_H) || defined(X_LOCALE) #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
{EXPAND_LOCALES, "locale"}, {EXPAND_LOCALES, "locale"},
#endif #endif

View File

@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
10,
/**/ /**/
9, 9,
/**/ /**/

View File

@@ -841,6 +841,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
#define EXPAND_SETTING_SUBTRACT 55 #define EXPAND_SETTING_SUBTRACT 55
#define EXPAND_ARGOPT 56 #define EXPAND_ARGOPT 56
#define EXPAND_TERMINALOPT 57 #define EXPAND_TERMINALOPT 57
#define EXPAND_KEYMAP 58
// Values for exmode_active (0 is no exmode) // Values for exmode_active (0 is no exmode)
#define EXMODE_NORMAL 1 #define EXMODE_NORMAL 1