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 <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
glepnir
2025-03-13 21:39:51 +01:00
committed by Christian Brabandt
parent 1dc731a49f
commit 587601671c
4 changed files with 29 additions and 20 deletions

View File

@ -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 find completion candidates instead of the standard prefix-based
matching. This option can contain the following values: matching. This option can contain the following values:
keyword keywords in the current file |i_CTRL-X_CTRL-N| keyword keywords in the current file |i_CTRL-X_CTRL-N|
keywords with the ".", "w", "b", "u", "U" and keywords with flags ".", "w", |i_CTRL-N| |i_CTRL-P|
"k{dict}" flags in 'complete'. |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 When used the 'completeopt' "longest" option value, fuzzy collection
identify the longest common string among the best fuzzy matches and can identify the longest common string among the best fuzzy matches
automatically insert it. and insert it automatically.
*'completeitemalign'* *'cia'* *'completeitemalign'* *'cia'*
'completeitemalign' 'cia' string (default: "abbr,kind,menu") 'completeitemalign' 'cia' string (default: "abbr,kind,menu")

View File

@ -764,17 +764,14 @@ ins_compl_add_infercase(
static int static int
cfc_has_mode(void) cfc_has_mode(void)
{ {
switch (ctrl_x_mode) if (ctrl_x_mode_normal() || ctrl_x_mode_dictionary())
{ return (cfc_flags & CFC_KEYWORD) != 0;
case CTRL_X_NORMAL: else if (ctrl_x_mode_files())
return (cfc_flags & CFC_KEYWORD) != 0; return (cfc_flags & CFC_FILES) != 0;
case CTRL_X_FILES: else if (ctrl_x_mode_whole_line())
return (cfc_flags & CFC_FILES) != 0; return (cfc_flags & CFC_WHOLELINE) != 0;
case CTRL_X_WHOLE_LINE: else
return (cfc_flags & CFC_WHOLELINE) != 0; return FALSE;
default:
return FALSE;
}
} }
/* /*
@ -1792,7 +1789,7 @@ ins_compl_files(
int add_r; int add_r;
char_u *leader = NULL; char_u *leader = NULL;
int leader_len = 0; 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 score = 0;
int len = 0; int len = 0;
char_u *line_end = NULL; char_u *line_end = NULL;

View File

@ -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 feedkeys("Gofuzzy\<C-X>\<C-N>\<C-N>\<C-N>\<C-N>\<CR>\<Esc>0", 'tx!')
call assert_equal('completefuzzycollect', getline(line('.') - 1)) 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!
bw! bw!
set dict&
set completeopt& cfc& cpt& set completeopt& cfc& cpt&
endfunc endfunc

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 */
/**/
1201,
/**/ /**/
1200, 1200,
/**/ /**/