patch 9.1.1197: process_next_cpt_value() uses wrong condition

Commit: 
https://github.com/vim/vim/commit/53b14578e03f93a53fd6eb21c00caf96484742ed
Author: glepnir <glephun...@gmail.com>
Date:   Wed Mar 12 21:28:39 2025 +0100

    patch 9.1.1197: process_next_cpt_value() uses wrong condition
    
    Problem:  process_next_cpt_value() uses wrong condition
    Solution: use cfc_has_mode() instead and remove redundant else if branch
              (glepnir)
    
    closes: #16833
    
    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 588daf643..c2ad86e0e 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*  For Vim version 9.1.  Last change: 2025 Mar 07
+*options.txt*  For Vim version 9.1.  Last change: 2025 Mar 12
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -2107,14 +2107,23 @@ A jump table for the options with a short description 
can be found at |Q_op|.
                                                *'completefuzzycollect'* *'cfc'*
 'completefuzzycollect' 'cfc'   string  (default: empty)
                                global
-       This option enables fuzzy collection for (only some) specific
-       |ins-completion| modes, adjusting how items are gathered for fuzzy
-       matching based on input.
-       The option can contain the following values (separated by commas),
-       each enabling fuzzy collection for a specific completion mode:
-       files           file names
-       keyword         keyword completion in 'complete' and current file
-       whole_line      whole lines
+       A comma-separated list of option enables fuzzy collection for specific
+       |ins-completion| modes, affecting how items are gathered during
+       completion. When set, fuzzy matching is used to find completion
+       candidates instead of the standard prefix-based matching. This option
+       can contain the following values are:
+
+       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|
+
+       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.
 
                                                *'completeitemalign'* *'cia'*
 'completeitemalign' 'cia' string (default: "abbr,kind,menu")
diff --git a/src/insexpand.c b/src/insexpand.c
index d8bb0814d..35d20d01d 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -3671,7 +3671,7 @@ process_next_cpt_value(
        ins_compl_next_state_T *st,
        int             *compl_type_arg,
        pos_T           *start_match_pos,
-       int             in_fuzzy)
+       int             fuzzy_collect)
 {
     int            compl_type = -1;
     int            status = INS_COMPL_CPT_OK;
@@ -3687,7 +3687,7 @@ process_next_cpt_value(
        st->first_match_pos = *start_match_pos;
        // Move the cursor back one character so that ^N can match the
        // word immediately after the cursor.
-       if (ctrl_x_mode_normal() && (!in_fuzzy && dec(&st->first_match_pos) < 
0))
+       if (ctrl_x_mode_normal() && (!fuzzy_collect && 
dec(&st->first_match_pos) < 0))
        {
            // Move the cursor to after the last character in the
            // buffer, so that word at start of buffer is found
@@ -4487,7 +4487,6 @@ ins_compl_get_exp(pos_T *ini)
     int                i;
     int                found_new_match;
     int                type = ctrl_x_mode;
-    int                in_fuzzy = (get_cot_flags() & COT_FUZZY) != 0;
 
     if (!compl_started)
     {
@@ -4528,7 +4527,7 @@ ins_compl_get_exp(pos_T *ini)
        if ((ctrl_x_mode_normal() || ctrl_x_mode_line_or_eval())
                                        && (!compl_started || st.found_all))
        {
-           int status = process_next_cpt_value(&st, &type, ini, in_fuzzy);
+           int status = process_next_cpt_value(&st, &type, ini, 
cfc_has_mode());
 
            if (status == INS_COMPL_CPT_END)
                break;
diff --git a/src/search.c b/src/search.c
index 654b8968b..064ed3e1e 100644
--- a/src/search.c
+++ b/src/search.c
@@ -5229,7 +5229,7 @@ fuzzy_match_str_with_pos(char_u *str UNUSED, char_u *pat 
UNUSED)
  * - `*len` is set to the length of the matched word.
  * - `*score` contains the match score.
  *
- * If no match is found, `*ptr` is updated to to the end of the line.
+ * If no match is found, `*ptr` is updated to the end of the line.
  */
     int
 fuzzy_match_str_in_line(
@@ -5313,10 +5313,7 @@ search_for_fuzzy_match(
     pos_T      circly_end;
     int                found_new_match = FALSE;
     int                looped_around = FALSE;
-
-    int whole_line = ctrl_x_mode_whole_line();
-    if (whole_line)
-       current_pos.lnum += dir;
+    int                whole_line = ctrl_x_mode_whole_line();
 
     if (buf == curbuf)
         circly_end = *start_pos;
@@ -5327,6 +5324,9 @@ search_for_fuzzy_match(
         circly_end.coladd = 0;
     }
 
+    if (whole_line && start_pos->lnum != pos->lnum)
+       current_pos.lnum += dir;
+
     do {
 
        // Check if looped around and back to start position
@@ -5338,13 +5338,15 @@ search_for_fuzzy_match(
        {
            // Get the current line buffer
            *ptr = ml_get_buf(buf, current_pos.lnum, FALSE);
+           if (!whole_line)
+               *ptr += current_pos.col;
+
            // If ptr is end of line is reached, move to next line
            // or previous line based on direction
            if (*ptr != NULL && **ptr != NUL)
            {
                if (!whole_line)
                {
-                   *ptr += current_pos.col;
                    // Try to find a fuzzy match in the current line starting
                    // from current position
                    found_new_match = fuzzy_match_str_in_line(ptr, pattern,
@@ -5371,8 +5373,6 @@ search_for_fuzzy_match(
                                    else
                                       next_word_end = 
find_word_end(next_word_end);
                                }
-                               else if (looped_around)
-                                   found_new_match = FALSE;
 
                                *len = next_word_end - *ptr;
                                current_pos.col = *len;
diff --git a/src/testdir/test_ins_complete.vim 
b/src/testdir/test_ins_complete.vim
index e63b13334..e2a69f383 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -2949,6 +2949,12 @@ func Test_complete_fuzzy_collect()
   call feedkeys("STe\<C-X>\<C-N>x\<CR>\<Esc>0", 'tx!')
   call assert_equal('Tex', getline(line('.') - 1))
 
+  call setline(1, ['fuzzy', 'fuzzycollect', 'completefuzzycollect'])
+  call feedkeys("Gofuzzy\<C-X>\<C-N>\<C-N>\<C-N>\<CR>\<Esc>0", 'tx!')
+  call assert_equal('fuzzycollect', getline(line('.') - 1))
+  call feedkeys("Gofuzzy\<C-X>\<C-N>\<C-N>\<C-N>\<C-N>\<CR>\<Esc>0", 'tx!')
+  call assert_equal('completefuzzycollect', getline(line('.') - 1))
+
   bw!
   bw!
   set completeopt& cfc& cpt&
diff --git a/src/version.c b/src/version.c
index 474d2c7e1..65332f5e9 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 */
+/**/
+    1197,
 /**/
     1196,
 /**/

-- 
-- 
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/E1tsSwp-006hvB-09%40256bit.org.

Raspunde prin e-mail lui