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

@ -2114,16 +2114,17 @@ A jump table for the options with a short description can be found at |Q_op|.
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|
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|
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")

View File

@ -764,18 +764,15 @@ ins_compl_add_infercase(
static int
cfc_has_mode(void)
{
switch (ctrl_x_mode)
{
case CTRL_X_NORMAL:
if (ctrl_x_mode_normal() || ctrl_x_mode_dictionary())
return (cfc_flags & CFC_KEYWORD) != 0;
case CTRL_X_FILES:
else if (ctrl_x_mode_files())
return (cfc_flags & CFC_FILES) != 0;
case CTRL_X_WHOLE_LINE:
else if (ctrl_x_mode_whole_line())
return (cfc_flags & CFC_WHOLELINE) != 0;
default:
else
return FALSE;
}
}
/*
* Add a match to the list of matches. The arguments are:
@ -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;

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 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

View File

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