Patch 8.2.4614

7 views
Skip to first unread message

Bram Moolenaar

unread,
Mar 23, 2022, 10:56:34 AM3/23/22
to vim...@googlegroups.com

Patch 8.2.4614
Problem: Redrawing too much when 'cursorline' is set and jumping around.
Solution: Rely on win_update() to redraw the current and previous cursor
line, do not mark lines as modified. (closes #9996)
Files: src/drawline.c, src/drawscreen.c, src/move.c, src/proto/move.pro,
src/option.c


*** ../vim-8.2.4613/src/drawline.c 2022-03-22 20:42:09.174172862 +0000
--- src/drawline.c 2022-03-23 14:38:42.624419902 +0000
***************
*** 945,952 ****
if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
{
// Do not show the cursor line in the text when Visual mode is active,
! // because it's not clear what is selected then. Do update
! // w_last_cursorline.
if (!(wp == curwin && VIsual_active)
&& wp->w_p_culopt_flags != CULOPT_NBR)
{
--- 945,951 ----
if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
{
// Do not show the cursor line in the text when Visual mode is active,
! // because it's not clear what is selected then.
if (!(wp == curwin && VIsual_active)
&& wp->w_p_culopt_flags != CULOPT_NBR)
{
***************
*** 971,988 ****
else
# endif
line_attr = cul_attr;
- wp->w_last_cursorline = wp->w_cursor.lnum;
}
else
{
line_attr_save = line_attr;
- wp->w_last_cursorline = 0;
margin_columns_win(wp, &left_curline_col, &right_curline_col);
}
area_highlighting = TRUE;
}
- else
- wp->w_last_cursorline = wp->w_cursor.lnum;
}
#endif

--- 970,983 ----
*** ../vim-8.2.4613/src/drawscreen.c 2022-03-22 20:42:09.174172862 +0000
--- src/drawscreen.c 2022-03-23 14:47:29.294942829 +0000
***************
*** 1468,1476 ****
# define DID_FOLD 3 // updated a folded line
int did_update = DID_NONE;
linenr_T syntax_last_parsed = 0; // last parsed text line
- // remember the current w_last_cursorline, it changes when drawing the new
- // cursor line
- linenr_T last_cursorline = wp->w_last_cursorline;
#endif
linenr_T mod_top = 0;
linenr_T mod_bot = 0;
--- 1468,1473 ----
***************
*** 2245,2252 ****
#endif
))))
#ifdef FEAT_SYN_HL
! || (wp->w_p_cul && (lnum == wp->w_cursor.lnum
! || lnum == last_cursorline))
#endif
)
{
--- 2242,2249 ----
#endif
))))
#ifdef FEAT_SYN_HL
! || (wp->w_p_cul && lnum == wp->w_cursor.lnum)
! || lnum == wp->w_last_cursorline
#endif
)
{
***************
*** 2551,2556 ****
--- 2548,2559 ----

// End of loop over all window lines.

+ #ifdef FEAT_SYN_HL
+ // Now that the window has been redrawn with the old and new cursor line,
+ // update w_last_cursorline.
+ wp->w_last_cursorline = wp->w_p_cul ? wp->w_cursor.lnum : 0;
+ #endif
+
#ifdef FEAT_VTP
// Rewrite the character at the end of the screen line.
// See the version that was fixed.
*** ../vim-8.2.4613/src/move.c 2022-02-15 13:40:13.508939677 +0000
--- src/move.c 2022-03-23 14:38:42.624419902 +0000
***************
*** 115,128 ****
set_empty_rows(wp, done);
}

- #ifdef FEAT_SYN_HL
- void
- reset_cursorline(void)
- {
- curwin->w_last_cursorline = 0;
- }
- #endif
-
/*
* Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is
* set.
--- 115,120 ----
***************
*** 138,161 ****
&& (wp->w_valid & VALID_CROW) == 0
&& !pum_visible())
{
! if (wp->w_p_rnu)
! // win_line() will redraw the number column only.
! redraw_win_later(wp, VALID);
! #ifdef FEAT_SYN_HL
! if (wp->w_p_cul)
! {
! if (wp->w_redr_type <= VALID && wp->w_last_cursorline != 0)
! {
! // "w_last_cursorline" may be outdated, worst case we redraw
! // too much. This is optimized for moving the cursor around in
! // the current window.
! redrawWinline(wp, wp->w_last_cursorline);
! redrawWinline(wp, wp->w_cursor.lnum);
! }
! else
! redraw_win_later(wp, SOME_VALID);
! }
! #endif
}
}

--- 130,137 ----
&& (wp->w_valid & VALID_CROW) == 0
&& !pum_visible())
{
! // win_line() will redraw the number column and cursorline only.
! redraw_win_later(wp, VALID);
}
}

*** ../vim-8.2.4613/src/proto/move.pro 2020-12-23 13:35:56.963016983 +0000
--- src/proto/move.pro 2022-03-23 14:38:42.624419902 +0000
***************
*** 1,5 ****
/* move.c */
- void reset_cursorline(void);
void redraw_for_cursorline(win_T *wp);
void update_topline_redraw(void);
void update_topline(void);
--- 1,4 ----
*** ../vim-8.2.4613/src/option.c 2022-02-24 13:28:36.570222354 +0000
--- src/option.c 2022-03-23 14:38:42.624419902 +0000
***************
*** 2782,2792 ****
p_lrm = !p_lnr;
#endif

- #ifdef FEAT_SYN_HL
- else if ((int *)varp == &curwin->w_p_cul && !value && old_value)
- reset_cursorline();
- #endif
-
#ifdef FEAT_PERSISTENT_UNDO
// 'undofile'
else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf)
--- 2782,2787 ----
*** ../vim-8.2.4613/src/version.c 2022-03-23 13:54:47.968796508 +0000
--- src/version.c 2022-03-23 14:45:56.115189681 +0000
***************
*** 752,753 ****
--- 752,755 ----
{ /* Add new patch number below this line */
+ /**/
+ 4614,
/**/

--
GUARD #1: What -- a swallow carrying a coconut?
ARTHUR: It could grip it by the husk!
GUARD #1: It's not a question of where he grips it! It's a simple question
of weight ratios! A five ounce bird could not carry a 1 pound
coconut.
The Quest for the Holy Grail (Monty Python)

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
Reply all
Reply to author
Forward
0 new messages