{
int cur_cot_flags = get_cot_flags();
- // set the fuzzy score in cp_score
+ // Set the fuzzy score in cp_score and sort
set_fuzzy_score();
- // Sort the matches linked list based on fuzzy score
if (!(cur_cot_flags & COT_NOSORT))
{
sort_compl_match_list(cp_compare_fuzzy);
- if ((cur_cot_flags & (COT_NOINSERT | COT_NOSELECT)) == COT_NOINSERT
- && compl_first_match)
- {
- compl_shown_match = compl_first_match;
- if (compl_shows_dir_forward() && !compl_autocomplete)
- compl_shown_match = compl_first_match->cp_next;
+ // Reset the shown item since sorting reorders items
+ if ((cur_cot_flags & (COT_NOINSERT | COT_NOSELECT)) == COT_NOINSERT)
+ {
+ int none_selected = compl_shown_match == (compl_shows_dir_forward()
+ ? compl_first_match : compl_first_match->cp_prev);
+ if (!none_selected)
+ compl_shown_match
+ = (!compl_autocomplete && compl_shows_dir_forward())
+ ? compl_first_match->cp_next : compl_first_match;
}
}
}
call feedkeys("Gof\<C-N>\<C-R>=PrintMenuWords()\<CR>\<Esc>0", 'tx')
call assert_equal('f{''items'': [''func1'', ''func2'', ''xfunc'']}', getline('.'))
+ " Issue #18802: Reset selected item after fuzzy sort
+ %d
+ call setline(1, ['aa', 'aaa', 'aaaa'])
+ set completeopt=menuone,noinsert,fuzzy
+ call feedkeys("Goa\<C-N>\<C-Y>\<Esc>", 'tx')
+ call assert_equal('aa', getline('.'))
+ call feedkeys("Goa\<C-P>\<C-Y>\<Esc>", 'tx')
+ call assert_equal('aaaa', getline('.'))
+
" clean up
set omnifunc=
bw!