mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
edit.c: fix flicker in popup menu
This commit is contained in:
parent
4c960c3d78
commit
b55726b350
@ -2928,11 +2928,16 @@ static void ins_compl_new_leader(void)
|
|||||||
else {
|
else {
|
||||||
spell_bad_len = 0; /* need to redetect bad word */
|
spell_bad_len = 0; /* need to redetect bad word */
|
||||||
/*
|
/*
|
||||||
* Matches were cleared, need to search for them now. First display
|
* Matches were cleared, need to search for them now.
|
||||||
* the changed text before the cursor. Set "compl_restarting" to
|
* If it's user complete function and refresh_always,
|
||||||
* avoid that the first match is inserted.
|
* not use "compl_leader" as prefix filter.
|
||||||
|
* Set "compl_restarting" to avoid that the first match is inserted.
|
||||||
*/
|
*/
|
||||||
update_screen(0);
|
if ((ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
|
||||||
|
&& compl_opt_refresh_always){
|
||||||
|
xfree(compl_leader);
|
||||||
|
compl_leader = NULL;
|
||||||
|
}
|
||||||
compl_restarting = TRUE;
|
compl_restarting = TRUE;
|
||||||
if (ins_complete(Ctrl_N) == FAIL)
|
if (ins_complete(Ctrl_N) == FAIL)
|
||||||
compl_cont_status = 0;
|
compl_cont_status = 0;
|
||||||
@ -2976,11 +2981,13 @@ static void ins_compl_addleader(int c)
|
|||||||
(*mb_char2bytes)(c, buf);
|
(*mb_char2bytes)(c, buf);
|
||||||
buf[cc] = NUL;
|
buf[cc] = NUL;
|
||||||
ins_char_bytes(buf, cc);
|
ins_char_bytes(buf, cc);
|
||||||
if (compl_opt_refresh_always)
|
if ((ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
|
||||||
|
&& compl_opt_refresh_always)
|
||||||
AppendToRedobuff(buf);
|
AppendToRedobuff(buf);
|
||||||
} else {
|
} else {
|
||||||
ins_char(c);
|
ins_char(c);
|
||||||
if (compl_opt_refresh_always)
|
if ((ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
|
||||||
|
&& compl_opt_refresh_always)
|
||||||
AppendCharToRedobuff(c);
|
AppendCharToRedobuff(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2988,15 +2995,10 @@ static void ins_compl_addleader(int c)
|
|||||||
if (ins_compl_need_restart())
|
if (ins_compl_need_restart())
|
||||||
ins_compl_restart();
|
ins_compl_restart();
|
||||||
|
|
||||||
/* When 'always' is set, don't reset compl_leader. While completing,
|
xfree(compl_leader);
|
||||||
* cursor doesn't point original position, changing compl_leader would
|
compl_leader = vim_strnsave(get_cursor_line_ptr() + compl_col,
|
||||||
* break redo. */
|
(int)(curwin->w_cursor.col - compl_col));
|
||||||
if (!compl_opt_refresh_always) {
|
ins_compl_new_leader();
|
||||||
xfree(compl_leader);
|
|
||||||
compl_leader = vim_strnsave(get_cursor_line_ptr() + compl_col,
|
|
||||||
(int)(curwin->w_cursor.col - compl_col));
|
|
||||||
ins_compl_new_leader();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -3005,6 +3007,10 @@ static void ins_compl_addleader(int c)
|
|||||||
*/
|
*/
|
||||||
static void ins_compl_restart(void)
|
static void ins_compl_restart(void)
|
||||||
{
|
{
|
||||||
|
/* update screen before restart.
|
||||||
|
* so if complete is blocked,
|
||||||
|
* will stay to the last popup menu and reduce flick */
|
||||||
|
update_screen(0);
|
||||||
ins_compl_free();
|
ins_compl_free();
|
||||||
compl_started = FALSE;
|
compl_started = FALSE;
|
||||||
compl_matches = 0;
|
compl_matches = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user