From: Eli Zaretskii <eliz@gnu.org>
Date: Sat, 1 Jul 2017 13:00:18 +0000 (+0300)
Subject: Improve display of tabs with line numbers
X-Git-Tag: emacs-26.0.90~518^2~156^2~6
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b5ce3100a8549df519d6f2b577fe7c3acf90cb40;p=emacs.git

Improve display of tabs with line numbers

* src/xdisp.c (x_produce_glyphs): Improve calculation of next tab
stop in hscrolled lines.  Prevent aborts in compute_line_metrics.
---

diff --git a/src/xdisp.c b/src/xdisp.c
index 7bbe9d9ca3e..47b81414630 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -28028,18 +28028,19 @@ x_produce_glyphs (struct it *it)
 	      int x = it->current_x + it->continuation_lines_width;
 	      int x0 = x;
 	      /* Adjust for line numbers, if needed.   */
-	      if (!NILP (Vdisplay_line_numbers))
+	      if (!NILP (Vdisplay_line_numbers) && x0 >= it->lnum_pixel_width)
 		x -= it->lnum_pixel_width;
 	      int next_tab_x = ((1 + x + tab_width - 1) / tab_width) * tab_width;
-	      if (!NILP (Vdisplay_line_numbers))
-		next_tab_x += (it->lnum_pixel_width
-			       - it->w->hscroll * font->space_width);
 
 	      /* If the distance from the current position to the next tab
 		 stop is less than a space character width, use the
 		 tab stop after that.  */
 	      if (next_tab_x - x0 < font->space_width)
 		next_tab_x += tab_width;
+	      if (!NILP (Vdisplay_line_numbers) && x0 >= it->lnum_pixel_width)
+		next_tab_x += (it->lnum_pixel_width
+			       - ((it->w->hscroll * font->space_width)
+				  % tab_width));
 
 	      it->pixel_width = next_tab_x - x0;
 	      it->nglyphs = 1;