patch 9.1.0010: Keymap completion is not available

Commit: 
https://github.com/vim/vim/commit/81642d9d6ff5cd6a90a012b1b98632ce51eeb1a8
Author: Doug Kearns <[email protected]>
Date:   Thu Jan 4 22:37:44 2024 +0100

    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 <[email protected]>
    Signed-off-by: Christian Brabandt <[email protected]>

diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index 8f79d2001..94fcdf70c 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 d458aa661..7d4d53048 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 8bccaa3bb..1008bf97e 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 7cac89e5c..2372c1aa9 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 33ff60642..455471267 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 8c336abf7..37dc20187 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 04b341933..e2c0114ca 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 2e7f2871e..c31fbf635 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 3aa04f554..e41dfef01 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

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1rLVWS-00D5jz-Jh%40256bit.org.

Raspunde prin e-mail lui