patch 9.1.1769: completion: "preinsert" insert wrong word with 'smartcase' and 'autocomplete'

Problem:  completion: "preinsert" insert wrong word with 'smartcase' and
          'autocomplete'
Solution: Add compare completed item with the leader (Girish Palya)

closes: #18313

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Girish Palya
2025-09-18 19:33:26 +00:00
committed by Christian Brabandt
parent 57d243e27d
commit a8f7957d0b
3 changed files with 17 additions and 3 deletions

View File

@ -5861,12 +5861,13 @@ find_common_prefix(size_t *prefix_len, int curbuf_only)
if (!match_limit_exceeded && (!curbuf_only
|| cpt_sources_array[cur_source].cs_flag == '.'))
{
if (first == NULL)
if (first == NULL && STRNCMP(ins_compl_leader(),
compl->cp_str.string, ins_compl_leader_len()) == 0)
{
first = compl->cp_str.string;
len = (int)STRLEN(first);
}
else
else if (first != NULL)
{
int j = 0; // count in bytes
char_u *s1 = first;
@ -5894,7 +5895,7 @@ find_common_prefix(size_t *prefix_len, int curbuf_only)
vim_free(match_count);
if (len > get_compl_len())
if (len > (int)ins_compl_leader_len())
{
*prefix_len = (size_t)len;
return first;

View File

@ -5651,7 +5651,18 @@ func Test_autocomplete_completeopt_preinsert()
call DoTest("f", 'f', 2)
set cot-=fuzzy
" leader should match prefix of inserted word
%delete
set smartcase ignorecase
call setline(1, ["FOO"])
call feedkeys($"Gof\<F5>\<Esc>", 'tx')
call assert_equal('f', g:line)
call feedkeys($"SF\<F5>\<Esc>", 'tx')
call assert_equal('FOO', g:line)
set smartcase& ignorecase&
" Verify that redo (dot) works
%delete
call setline(1, ["foobar", "foozbar", "foobaz", "changed", "change"])
call feedkeys($"/foo\<CR>", 'tx')
call feedkeys($"cwch\<C-N>\<Esc>n.n.", 'tx')

View File

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