changeset 17141:3c0efdd95f8d v8.1.1570

patch 8.1.1570: icon signs not displayed properly in the number column commit https://github.com/vim/vim/commit/4dff4aed09d2b0d570ca0d19de9cb08bdf03e695 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Jun 19 16:31:28 2019 +0200 patch 8.1.1570: icon signs not displayed properly in the number column Problem: Icon signs not displayed properly in the number column. Solution: Display them properly. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/4559)
author Bram Moolenaar <Bram@vim.org>
date Wed, 19 Jun 2019 16:45:05 +0200
parents 79404044c9e3
children c74374576448
files src/gui.c src/screen.c src/testdir/test_signs.vim src/version.c
diffstat 4 files changed, 34 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/gui.c
+++ b/src/gui.c
@@ -2253,6 +2253,7 @@ gui_outstr_nowrap(
     int		col = gui.col;
 #ifdef FEAT_SIGN_ICONS
     int		draw_sign = FALSE;
+    char_u	extra[18];
 # ifdef FEAT_NETBEANS_INTG
     int		multi_sign = FALSE;
 # endif
@@ -2275,10 +2276,17 @@ gui_outstr_nowrap(
 	    multi_sign = TRUE;
 # endif
 	/* draw spaces instead */
-	s = (char_u *)"  ";
+	if (*curwin->w_p_scl == 'n' && *(curwin->w_p_scl + 1) == 'u' &&
+		(curwin->w_p_nu || curwin->w_p_rnu))
+	{
+	    sprintf((char *)extra, "%*c ", number_width(curwin), ' ');
+	    s = extra;
+	}
+	else
+	    s = (char_u *)"  ";
 	if (len == 1 && col > 0)
 	    --col;
-	len = 2;
+	len = (int)STRLEN(s);
 	draw_sign = TRUE;
 	highlight_mask = 0;
     }
--- a/src/screen.c
+++ b/src/screen.c
@@ -3088,15 +3088,31 @@ get_sign_display_info(
 	if (gui.in_use && icon_sign != 0)
 	{
 	    // Use the image in this position.
-	    *c_extrap = SIGN_BYTE;
-	    *c_finalp = NUL;
+	    if (nrcol)
+	    {
+		*c_extrap = NUL;
+		sprintf((char *)extra, "%-*c ", number_width(wp), SIGN_BYTE);
+		*pp_extra = extra;
+		*n_extrap = (int)STRLEN(*pp_extra);
+	    }
+	    else
+		*c_extrap = SIGN_BYTE;
 #  ifdef FEAT_NETBEANS_INTG
 	    if (buf_signcount(wp->w_buffer, lnum) > 1)
 	    {
-		*c_extrap = MULTISIGN_BYTE;
-		*c_finalp = NUL;
+		if (nrcol)
+		{
+		    *c_extrap = NUL;
+		    sprintf((char *)extra, "%-*c ", number_width(wp),
+							MULTISIGN_BYTE);
+		    *pp_extra = extra;
+		    *n_extrap = (int)STRLEN(*pp_extra);
+		}
+		else
+		    *c_extrap = MULTISIGN_BYTE;
 	    }
 #  endif
+	    *c_finalp = NUL;
 	    *char_attrp = icon_sign;
 	}
 	else
@@ -3108,7 +3124,7 @@ get_sign_display_info(
 		{
 		    if (nrcol)
 		    {
-			sprintf((char *)extra, "%-*s ", number_width(wp),
+			sprintf((char *)extra, "%*s ", number_width(wp),
 								*pp_extra);
 			*pp_extra = extra;
 		    }
--- a/src/testdir/test_signs.vim
+++ b/src/testdir/test_signs.vim
@@ -1776,7 +1776,7 @@ func Test_sign_numcol()
   " Enable number column. Check whether sign is displayed in the number column
   set number
   redraw!
-  call assert_equal("=>  01234", s:ScreenLine(1, 1, 9))
+  call assert_equal(" => 01234", s:ScreenLine(1, 1, 9))
 
   " Disable sign column. Make sure line number is displayed
   set signcolumn=no
--- a/src/version.c
+++ b/src/version.c
@@ -778,6 +778,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1570,
+/**/
     1569,
 /**/
     1568,