From 68f0670dfca1dd4308815792cc09f0112d288b6d Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sat, 31 Jul 2021 17:59:33 +0800 Subject: vim-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 vim/vim#5079) https://github.com/vim/vim/commit/11a58af66fa5c442f0a22c5d59beabf187ed4e89 --- src/nvim/normal.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) (limited to 'src/nvim/normal.c') diff --git a/src/nvim/normal.c b/src/nvim/normal.c index 1471c16a9f..54ca216a53 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -1275,25 +1275,19 @@ static void normal_redraw(NormalState *s) redrawWinline(curwin, curwin->w_cursor.lnum); } - 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(curwin, VALID); } if (VIsual_active) { update_curbuf(INVERTED); // update inverted part } else if (must_redraw) { - // Might need some more update for the cursorscreen line. - // TODO(vim): can we optimized this? - if (curwin->w_p_cul - && curwin->w_p_wrap - && (curwin->w_p_culopt_flags & CULOPT_SCRLINE) - && !char_avail()) { - update_screen(VALID); - } - else { - update_screen(0); - } + update_screen(0); } else if (redraw_cmdline || clear_cmdline) { showmode(); } -- cgit