changeset 17827:6de5558c5242 v8.1.1910

patch 8.1.1910: redrawing too much when toggling 'relativenumber' Commit: https://github.com/vim/vim/commit/448262176b382c63bd2faa9a1354670a4eede36b Author: Bram Moolenaar <Bram@vim.org> Date: Thu Aug 22 21:23:20 2019 +0200 patch 8.1.1910: redrawing too much when toggling 'relativenumber' Problem: Redrawing too much when toggling 'relativenumber'. Solution: Only clear when 'signcolumn' is set to "number". (Yegappan Lakshmanan, closes #4852)
author Bram Moolenaar <Bram@vim.org>
date Thu, 22 Aug 2019 21:30:03 +0200
parents f2a1c7de4d14
children 35e158a08c97
files src/option.c src/version.c
diffstat 2 files changed, 22 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/option.c
+++ b/src/option.c
@@ -1986,7 +1986,7 @@ static struct vimoption options[] =
 			    (char_u *)&p_nf, PV_NF,
 			    {(char_u *)"bin,octal,hex", (char_u *)0L}
 			    SCTX_INIT},
-    {"number",	    "nu",   P_BOOL|P_VI_DEF|P_RCLR,
+    {"number",	    "nu",   P_BOOL|P_VI_DEF|P_RWIN,
 			    (char_u *)VAR_WIN, PV_NU,
 			    {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
     {"numberwidth", "nuw",  P_NUM|P_RWIN|P_VIM,
@@ -2254,7 +2254,7 @@ static struct vimoption options[] =
     {"regexpengine", "re",  P_NUM|P_VI_DEF,
 			    (char_u *)&p_re, PV_NONE,
 			    {(char_u *)0L, (char_u *)0L} SCTX_INIT},
-    {"relativenumber", "rnu", P_BOOL|P_VI_DEF|P_RCLR,
+    {"relativenumber", "rnu", P_BOOL|P_VI_DEF|P_RWIN,
 			    (char_u *)VAR_WIN, PV_RNU,
 			    {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
     {"remap",	    NULL,   P_BOOL|P_VI_DEF,
@@ -9005,6 +9005,24 @@ set_bool_option(
 
 #endif
 
+#if defined(FEAT_SIGNS) && defined(FEAT_GUI)
+    else if (((int *)varp == &curwin->w_p_nu
+		|| (int *)varp == &curwin->w_p_rnu)
+	    && gui.in_use
+	    && (*curwin->w_p_scl == 'n' && *(curwin->w_p_scl + 1) == 'u')
+	    && curbuf->b_signlist != NULL)
+    {
+	// If the 'number' or 'relativenumber' options are modified and
+	// 'signcolumn' is set to 'number', then clear the screen for a full
+	// refresh. Otherwise the sign icons are not displayed properly in the
+	// number column.  If the 'number' option is set and only the
+	// 'relativenumber' option is toggled, then don't refresh the screen
+	// (optimization).
+	if (!(curwin->w_p_nu && ((int *)varp == &curwin->w_p_rnu)))
+	    redraw_all_later(CLEAR);
+    }
+#endif
+
 #ifdef FEAT_TERMGUICOLORS
     /* 'termguicolors' */
     else if ((int *)varp == &p_tgc)
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1910,
+/**/
     1909,
 /**/
     1908,