From: glepnir Date: Wed, 2 Apr 2025 18:18:25 +0000 (+0200) Subject: patch 9.1.1269: completion: compl_shown_match is updated when starting keyword completion X-Git-Tag: v9.1.1269^0 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e4e4d1c381e9d0af55f6111e9bcaf98ad60461fc;p=thirdparty%2Fvim.git patch 9.1.1269: completion: compl_shown_match is updated when starting keyword completion Problem: compl_shown_match is updated when starting keyword completion and does not include fuzzy matching. Solution: Do not update compl_shown_match when starting keyword completion, since it is the one already selected by the keyword completion direction. (glepnir) closes: #17033 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- diff --git a/src/insexpand.c b/src/insexpand.c index 3c81749c6a..de3d519823 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -1352,10 +1352,10 @@ ins_compl_build_pum(void) int compl_no_select = (cur_cot_flags & COT_NOSELECT) != 0; int fuzzy_filter = (cur_cot_flags & COT_FUZZY) != 0; int fuzzy_sort = fuzzy_filter && !(cur_cot_flags & COT_NOSORT); - compl_T *match_head = NULL; compl_T *match_tail = NULL; compl_T *match_next = NULL; + int update_shown_match = fuzzy_filter; // Need to build the popup menu list. compl_match_arraysize = 0; @@ -1366,6 +1366,10 @@ ins_compl_build_pum(void) if (match_at_original_text(compl_shown_match)) shown_match_ok = TRUE; + if (fuzzy_filter && ctrl_x_mode_normal() && compl_leader.string == NULL + && compl_shown_match->cp_score > 0) + update_shown_match = FALSE; + if (compl_leader.string != NULL && STRCMP(compl_leader.string, compl_orig_text.string) == 0 && shown_match_ok == FALSE) @@ -1415,7 +1419,8 @@ ins_compl_build_pum(void) shown_compl = compl; // Update the maximum fuzzy score and the shown match // if the current item's score is higher - if (fuzzy_sort && compl->cp_score > max_fuzzy_score) + if (fuzzy_sort && compl->cp_score > max_fuzzy_score + && update_shown_match) { did_find_shown_match = TRUE; max_fuzzy_score = compl->cp_score; diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 50b1834691..f60aba8d7a 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -2829,6 +2829,12 @@ func Test_complete_opt_fuzzy() call feedkeys("i\=CompAnother()\\\", 'tx') call assert_equal("for", g:abbr) + set cot=menu,fuzzy + call feedkeys("Sblue\bar\b\\\\", 'tx') + call assert_equal('bar', getline('.')) + call feedkeys("Sb\\\\", 'tx') + call assert_equal('blue', getline('.')) + " clean up set omnifunc= bw! diff --git a/src/version.c b/src/version.c index 192fd0f156..7882f5eb76 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 */ +/**/ + 1269, /**/ 1268, /**/