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.