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

View File

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

View File

@@ -72,6 +72,6 @@ void ins_compl_delete(void);
void ins_compl_insert(int move_cursor); void ins_compl_insert(int move_cursor);
void ins_compl_check_keys(int frequency, int in_compl_func); void ins_compl_check_keys(int frequency, int in_compl_func);
int ins_complete(int c, int enable_pum); 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); void free_insexpand_stuff(void);
/* vim: set ft=c : */ /* 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(['abc', 'ab'], b:matches->mapnew('v:val.word'))
call assert_equal(0, b:selected) call assert_equal(0, b:selected)
call assert_equal(1, g:CallCount) call assert_equal(1, g:CallCount)
call assert_equal('abc', getline(4)) call assert_equal('ab', getline(4))
set completeopt& set completeopt&
" Test 8: {func} completes after space, but not '.' " Test 8: {func} completes after space, but not '.'
@@ -5490,6 +5490,20 @@ func Test_autocompletedelay()
call term_sendkeys(buf, "Sf\<C-N>") call term_sendkeys(buf, "Sf\<C-N>")
call VerifyScreenDump(buf, 'Test_autocompletedelay_7', {}) 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 term_sendkeys(buf, "\<esc>")
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc

View File

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