0
0
mirror of https://github.com/vim/vim.git synced 2025-10-18 07:54:29 -04:00

patch 9.1.1657: Autocompletion adds delay

Problem:  Autocompletion adds delay
          (gcanat, char101, after v9.1.1638)
Solution: Temporarily disable autocomplation (Girish Palya).

related: #17960
fixes: #18022
closes: #18048

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Girish Palya
2025-08-20 21:15:06 +02:00
committed by Christian Brabandt
parent 84a343a6ed
commit 196c376682
8 changed files with 66 additions and 14 deletions

View File

@@ -664,6 +664,9 @@ edit(
continue;
}
if (p_ac)
ins_compl_set_autocomplete(TRUE);
// A non-white character that fits in with the current
// completion: Add to "compl_leader".
if (ins_compl_accept_char(c))
@@ -685,6 +688,9 @@ edit(
continue;
}
if (p_ac)
ins_compl_set_autocomplete(FALSE);
// Pressing CTRL-Y selects the current match. When
// ins_compl_enter_selects() is set the Enter key does the
// same.
@@ -987,10 +993,11 @@ doESCkey:
&& curwin->w_cursor.col > 0)
{
c = char_before_cursor();
if (ins_compl_setup_autocompl(c))
if (vim_isprintc(c))
{
update_screen(UPD_VALID); // Show char deletion immediately
out_flush();
ins_compl_set_autocomplete(TRUE);
goto docomplete; // Trigger autocompletion
}
}
@@ -1413,10 +1420,11 @@ normalchar:
foldOpenCursor();
#endif
// Trigger autocompletion
if (p_ac && !char_avail() && ins_compl_setup_autocompl(c))
if (p_ac && !char_avail() && vim_isprintc(c))
{
update_screen(UPD_VALID); // Show character immediately
out_flush();
ins_compl_set_autocomplete(TRUE);
goto docomplete;
}

View File

@@ -7088,8 +7088,11 @@ ins_complete(int c, int enable_pum)
if (!compl_started)
{
if (ins_compl_start() == FAIL)
{
compl_autocomplete = FALSE;
return FAIL;
}
}
else if (insert_match && stop_arrow() == FAIL)
return FAIL;
@@ -7175,25 +7178,20 @@ ins_complete(int c, int enable_pum)
compl_was_interrupted = compl_interrupted;
compl_interrupted = FALSE;
compl_autocomplete = FALSE;
return OK;
}
/*
* Returns TRUE if the given character 'c' can be used to trigger
* autocompletion.
* Enable/disable autocompletion
*/
int
ins_compl_setup_autocompl(int c)
void
ins_compl_set_autocomplete(int value)
{
#ifdef ELAPSED_FUNC
if (vim_isprintc(c))
{
compl_autocomplete = TRUE;
return TRUE;
}
compl_autocomplete = value;
#endif
return FALSE;
}
/*

View File

@@ -72,6 +72,6 @@ void ins_compl_delete(void);
void ins_compl_insert(int move_cursor);
void ins_compl_check_keys(int frequency, int in_compl_func);
int ins_complete(int c, int enable_pum);
int ins_compl_setup_autocompl(int c);
void ins_compl_set_autocomplete(int val);
void free_insexpand_stuff(void);
/* vim: set ft=c : */

View File

@@ -0,0 +1,10 @@
|f+0&#ffffff0|o@1| @71
|f|o@1|b|a|r| @68
|f|o@1|b|a|r|b|a|z| @65
|f> @73
|~+0#4040ff13&| @73
|~| @73
|~| @73
|~| @73
|~| @73
|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@62

View File

@@ -0,0 +1,10 @@
|f+0&#ffffff0|o@1| @71
|f|o@1|b|a|r| @68
|f|o@1|b|a|r|b|a|z| @65
|f|o@1|b|a|r|b|a|z> @65
|f+0#0000001#e0e0e08|o@1|b|a|r|b|a|z| @5| +0#4040ff13#ffffff0@59
|f+0#0000001#ffd7ff255|o@1|b|a|r| @8| +0#4040ff13#ffffff0@59
|f+0#0000001#ffd7ff255|o@1| @11| +0#4040ff13#ffffff0@59
|~| @73
|~| @73
|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@62

View File

@@ -0,0 +1,10 @@
|f+0&#ffffff0|o@1| @71
|f|o@1|b|a|r| @68
|f|o@1|b|a|r|b|a|z| @65
|f|o@1|b|a|r|b|a|z> @65
|f+0#0000001#ffd7ff255|o@1|b|a|r|b|a|z| @5| +0#4040ff13#ffffff0@59
|f+0#0000001#e0e0e08|o@1|b|a|r| @8| +0#4040ff13#ffffff0@59
|f+0#0000001#ffd7ff255|o@1| @11| +0#4040ff13#ffffff0@59
|~| @73
|~| @73
|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@62

View File

@@ -5358,7 +5358,7 @@ func Test_autocomplete_timer()
call assert_equal(['abc', 'ab'], b:matches->mapnew('v:val.word'))
call assert_equal(0, b:selected)
call assert_equal(1, g:CallCount)
call assert_equal('abc', getline(4))
call assert_equal('ab', getline(4))
set completeopt&
" Test 8: {func} completes after space, but not '.'
@@ -5490,6 +5490,20 @@ func Test_autocompletedelay()
call term_sendkeys(buf, "Sf\<C-N>")
call VerifyScreenDump(buf, 'Test_autocompletedelay_7', {})
" After the menu is open, ^N/^P and Up/Down should not delay
call term_sendkeys(buf, "\<Esc>:set completeopt=menu noruler\<CR>")
call term_sendkeys(buf, "\<Esc>Sf")
sleep 500ms
call term_sendkeys(buf, "\<C-N>")
call VerifyScreenDump(buf, 'Test_autocompletedelay_8', {})
call term_sendkeys(buf, "\<Down>")
call VerifyScreenDump(buf, 'Test_autocompletedelay_9', {})
" When menu is not open Up/Down moves cursor to different line
call term_sendkeys(buf, "\<Esc>Sf")
call term_sendkeys(buf, "\<Down>")
call VerifyScreenDump(buf, 'Test_autocompletedelay_10', {})
call term_sendkeys(buf, "\<esc>")
call StopVimInTerminal(buf)
endfunc

View File

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