changeset 28236:3f6c0a5c99bb v8.2.4644

patch 8.2.4644: redrawing too often when 'relativenumber' is set Commit: https://github.com/vim/vim/commit/1624639ec8a6c3c99e417a2990f2f02f0d0b6e10 Author: Lewis Russell <lewis6991@gmail.com> Date: Tue Mar 29 11:38:17 2022 +0100 patch 8.2.4644: redrawing too often when 'relativenumber' is set Problem: Redrawing too often when 'relativenumber' is set. Solution: Only redraw when the cursor line changed. (Lewis Russell, closes #10040)
author Bram Moolenaar <Bram@vim.org>
date Tue, 29 Mar 2022 12:45:03 +0200
parents 3ea4c66b4988
children e79d262b9bb8
files src/change.c src/drawscreen.c src/structs.h src/version.c
diffstat 4 files changed, 10 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/change.c
+++ b/src/change.c
@@ -641,7 +641,7 @@ changed_common(
 		set_topline(wp, wp->w_topline);
 #endif
 	    // Relative numbering may require updating more.
-	    if (wp->w_p_rnu)
+	    if (wp->w_p_rnu && xtra != 0)
 		redraw_win_later(wp, SOME_VALID);
 #ifdef FEAT_SYN_HL
 	    // Cursor line highlighting probably need to be updated with
--- a/src/drawscreen.c
+++ b/src/drawscreen.c
@@ -2507,11 +2507,11 @@ win_update(win_T *wp)
 	}
 	else
 	{
-	    if (wp->w_p_rnu)
+	    if (wp->w_p_rnu && wp->w_last_cursor_lnum_rnu != wp->w_cursor.lnum)
 	    {
 #ifdef FEAT_FOLDING
-		// 'relativenumber' set: The text doesn't need to be drawn, but
-		// the number column nearly always does.
+		// 'relativenumber' set and the cursor moved vertically: The
+		// text doesn't need to be drawn, but the number column does.
 		fold_count = foldedCount(wp, lnum, &win_foldinfo);
 		if (fold_count != 0)
 		    fold_line(wp, fold_count, &win_foldinfo, lnum, row);
@@ -2553,6 +2553,7 @@ win_update(win_T *wp)
     // update w_last_cursorline.
     wp->w_last_cursorline = wp->w_p_cul ? wp->w_cursor.lnum : 0;
 #endif
+    wp->w_last_cursor_lnum_rnu = wp->w_p_rnu ? wp->w_cursor.lnum : 0;
 
 #ifdef FEAT_VTP
     // Rewrite the character at the end of the screen line.
--- a/src/structs.h
+++ b/src/structs.h
@@ -3465,6 +3465,9 @@ struct window_S
     colnr_T	w_old_visual_col;   // last known start of visual part
     colnr_T	w_old_curswant;	    // last known value of Curswant
 
+    linenr_T    w_last_cursor_lnum_rnu;  // cursor lnum when 'rnu' was last
+					 // redrawn
+
     lcs_chars_T	w_lcs_chars;	    // 'listchars' characters
 
     /*
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4644,
+/**/
     4643,
 /**/
     4642,