# HG changeset patch # User Bram Moolenaar # Date 1566502203 -7200 # Node ID 6de5558c52423a69b27eaace53f50d503bd94207 # Parent f2a1c7de4d14d76877a6ab53e7bed2ac80b8e9ed patch 8.1.1910: redrawing too much when toggling 'relativenumber' Commit: https://github.com/vim/vim/commit/448262176b382c63bd2faa9a1354670a4eede36b Author: Bram Moolenaar 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) diff --git a/src/option.c b/src/option.c --- 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) diff --git a/src/version.c b/src/version.c --- 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,