patch 9.1.1201: 'completefuzzycollect' does not handle dictionary correctly

Commit: 
https://github.com/vim/vim/commit/587601671cd06ddc4d78f907d98578cdab96003f
Author: glepnir <glephun...@gmail.com>
Date:   Thu Mar 13 21:39:51 2025 +0100

    patch 9.1.1201: 'completefuzzycollect' does not handle dictionary correctly
    
    Problem:  'completefuzzycollect' does not handle dictionary correctly
    Solution: check for ctrl_x_mode_dictionary (glepnir)
    
    closes: #16867
    
    Signed-off-by: glepnir <glephun...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 75fa1cb9e..525a3a58b 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -2113,17 +2113,18 @@ A jump table for the options with a short description 
can be found at |Q_op|.
        find completion candidates instead of the standard prefix-based
        matching.  This option can contain the following values:
 
-       keyword         keywords in the current file |i_CTRL-X_CTRL-N|
-                       keywords with the ".", "w", "b", "u", "U" and
-                       "k{dict}" flags in 'complete'. |i_CTRL-N| |i_CTRL-P|
+       keyword         keywords in the current file    |i_CTRL-X_CTRL-N|
+                       keywords with flags ".", "w",   |i_CTRL-N| |i_CTRL-P|
+                       "b", "u", "U" and "k{dict}" in 'complete'
+                       keywords in 'dictionary'        |i_CTRL-X_CTRL-K|
 
-       files           file names  |i_CTRL-X_CTRL-F|
+       files           file names                      |i_CTRL-X_CTRL-F|
 
-       whole_line      whole lines |i_CTRL-X_CTRL-L|
+       whole_line      whole lines                     |i_CTRL-X_CTRL-L|
 
-       When used with 'completeopt' "longest" option, fuzzy collection can
-       identify the longest common string among the best fuzzy matches and
-       automatically insert it.
+       When used the 'completeopt' "longest" option value, fuzzy collection
+       can identify the longest common string among the best fuzzy matches
+       and insert it automatically.
 
                                                *'completeitemalign'* *'cia'*
 'completeitemalign' 'cia' string (default: "abbr,kind,menu")
diff --git a/src/insexpand.c b/src/insexpand.c
index 35d20d01d..49c7ee27f 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -764,17 +764,14 @@ ins_compl_add_infercase(
     static int
 cfc_has_mode(void)
 {
-    switch (ctrl_x_mode)
-    {
-       case CTRL_X_NORMAL:
-           return (cfc_flags & CFC_KEYWORD) != 0;
-       case CTRL_X_FILES:
-           return (cfc_flags & CFC_FILES) != 0;
-       case CTRL_X_WHOLE_LINE:
-           return (cfc_flags & CFC_WHOLELINE) != 0;
-       default:
-           return FALSE;
-    }
+    if (ctrl_x_mode_normal() || ctrl_x_mode_dictionary())
+       return (cfc_flags & CFC_KEYWORD) != 0;
+    else if (ctrl_x_mode_files())
+       return (cfc_flags & CFC_FILES) != 0;
+    else if (ctrl_x_mode_whole_line())
+       return (cfc_flags & CFC_WHOLELINE) != 0;
+    else
+       return FALSE;
 }
 
 /*
@@ -1792,7 +1789,7 @@ ins_compl_files(
     int                add_r;
     char_u     *leader = NULL;
     int                leader_len = 0;
-    int                in_fuzzy_collect = cfc_has_mode() && 
ctrl_x_mode_normal();
+    int                in_fuzzy_collect = cfc_has_mode();
     int                score = 0;
     int                len = 0;
     char_u     *line_end = NULL;
diff --git a/src/testdir/test_ins_complete.vim 
b/src/testdir/test_ins_complete.vim
index e2a69f383..5d0e54038 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -2955,8 +2955,17 @@ func Test_complete_fuzzy_collect()
   call feedkeys("Gofuzzy\<C-X>\<C-N>\<C-N>\<C-N>\<C-N>\<CR>\<Esc>0", 'tx!')
   call assert_equal('completefuzzycollect', getline(line('.') - 1))
 
+  " keywords in 'dictonary'
+  call writefile(['hello', 'think'], 'test_dict.txt', 'D')
+  set dict=test_dict.txt
+  call feedkeys("Sh\<C-X>\<C-K>\<C-N>\<CR>\<Esc>0", 'tx!')
+  call assert_equal('hello', getline(line('.') - 1))
+  call feedkeys("Sh\<C-X>\<C-K>\<C-N>\<C-N>\<CR>\<Esc>0", 'tx!')
+  call assert_equal('think', getline(line('.') - 1))
+
   bw!
   bw!
+  set dict&
   set completeopt& cfc& cpt&
 endfunc
 
diff --git a/src/version.c b/src/version.c
index f65999a61..b9fcedc01 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 */
+/**/
+    1201,
 /**/
     1200,
 /**/

-- 
-- 
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 vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1tspQO-008i90-JQ%40256bit.org.

Raspunde prin e-mail lui