0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

patch 8.1.2214: too much is redrawn when 'cursorline' is set

Problem:    Too much is redrawn when 'cursorline' is set.
Solution:   Don't do a complete redraw. (closes #5079)
This commit is contained in:
Bram Moolenaar
2019-10-24 22:32:31 +02:00
parent aa1f04d092
commit 11a58af66f
10 changed files with 36 additions and 31 deletions

View File

@@ -1380,27 +1380,20 @@ main_loop(
validate_cursor();
#ifdef FEAT_SYN_HL
if (curwin->w_p_cul && curwin->w_p_wrap
&& (curwin->w_p_culopt_flags & CULOPT_SCRLINE))
must_redraw = NOT_VALID;
// Might need to update for 'cursorline'.
// When 'cursorlineopt' is "screenline" need to redraw always.
if (curwin->w_p_cul
&& (curwin->w_last_cursorline != curwin->w_cursor.lnum
|| (curwin->w_p_culopt_flags & CULOPT_SCRLINE))
&& !char_avail())
redraw_later(VALID);
#endif
if (VIsual_active)
update_curbuf(INVERTED); // update inverted part
else if (must_redraw)
{
mch_disable_flush(); // Stop issuing gui_mch_flush().
#ifdef FEAT_SYN_HL
// Might need some more update for the cursorscreen line.
// TODO: can we optimize this?
if (curwin->w_p_cul
&& curwin->w_p_wrap
&& (curwin->w_p_culopt_flags & CULOPT_SCRLINE)
&& !char_avail())
update_screen(VALID);
else
#endif
update_screen(0);
update_screen(0);
mch_enable_flush();
}
else if (redraw_cmdline || clear_cmdline)