]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1389: completion: still some issue when 'isexpand' contains a space v9.1.1389
authorglepnir <glephunter@gmail.com>
Wed, 14 May 2025 18:26:19 +0000 (20:26 +0200)
committerChristian Brabandt <cb@256bit.org>
Wed, 14 May 2025 18:26:19 +0000 (20:26 +0200)
Problem:  Cannot get completion startcol when space is not the first
          trigger character (after v9.1.1383)
Solution: Detect the next comma followed by a space in the option string
          and use in next compare loop (glepnir)

closes: #17311

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/insexpand.c
src/testdir/test_ins_complete.vim
src/version.c

index 5f5a5b90579c6b9972adcafc66521e5df3c003df..76fb8f3506c91b284809443ecd91a6eab973b05f 100644 (file)
@@ -3660,20 +3660,28 @@ f_complete_match(typval_T *argvars, typval_T *rettv)
     }
     else
     {
-       char_u  *p = ise;
+       char_u      *p = ise;
+       char_u      *p_space = NULL;
+
        cur_end = before_cursor + (int)STRLEN(before_cursor);
 
        while (*p != NUL)
        {
            int     len = 0;
-           if (*p == ',' && *(p+1) == ' ' && (*(p+2) == ',' || *(p+2) == NUL))
+           if (p_space)
            {
-               part[0] = ' ';
-               len = 1;
-               p++;
+               len = p - p_space - 1;
+               memcpy(part, p_space + 1, len);
+               p_space = NULL;
            }
            else
+           {
+               char_u *next_comma = vim_strchr((*p == ',') ? p + 1 : p, ',');
+               if (next_comma && *(next_comma + 1) == ' ')
+                   p_space = next_comma;
+
                len = copy_option_part(&p, part, MAXPATHL, ",");
+           }
 
            if (len > 0 && len <= col)
            {
index 741cc9d9c97eacb12f29cb1bc133bb619d1ea209..8bce0e45732838ed82843a611414806623ada514 100644 (file)
@@ -4507,6 +4507,13 @@ func Test_complete_match()
   set ise=\ ,=
   call feedkeys("Sif true  \<ESC>:let g:result=complete_match()\<CR>", 'tx')
   call assert_equal([[8, ' ']], g:result)
+  call feedkeys("Slet a = \<ESC>:let g:result=complete_match()\<CR>", 'tx')
+  call assert_equal([[7, '=']], g:result)
+  set ise={,\ ,=
+  call feedkeys("Sif true  \<ESC>:let g:result=complete_match()\<CR>", 'tx')
+  call assert_equal([[8, ' ']], g:result)
+  call feedkeys("S{ \<ESC>:let g:result=complete_match()\<CR>", 'tx')
+  call assert_equal([[1, '{']], g:result)
 
   bw!
   unlet g:result
index 89c9fb0f3f69f0a66ef896de1e741717962acc00..98663991c4268d0f89d3c0c302e50293c86881b4 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1389,
 /**/
     1388,
 /**/