From 9c6cacd338c90180bc377cae923c716c1dc3d14c Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 20 Jul 2017 16:25:11 +0300 Subject: [PATCH] Fix hscrolling calculations when display-line-numbers is set * src/xdisp.c (move_it_in_display_line_to): Account for line numbers in hscrolled lines. (Bug#27756) --- src/xdisp.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index c415bf2131f..3e5657ffe6f 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -8631,6 +8631,7 @@ move_it_in_display_line_to (struct it *it, ptrdiff_t closest_pos UNINIT; ptrdiff_t prev_pos = IT_CHARPOS (*it); bool saw_smaller_pos = prev_pos < to_charpos; + bool line_number_pending = false; /* Don't produce glyphs in produce_glyphs. */ saved_glyph_row = it->glyph_row; @@ -8682,9 +8683,13 @@ move_it_in_display_line_to (struct it *it, if (it->hpos == 0) { /* If line numbers are being displayed, produce a line number. */ - if (should_produce_line_number (it) - && it->current_x == it->first_visible_x) - maybe_produce_line_number (it); + if (should_produce_line_number (it)) + { + if (it->current_x == it->first_visible_x) + maybe_produce_line_number (it); + else + line_number_pending = true; + } /* If there's a line-/wrap-prefix, handle it. */ if (it->method == GET_FROM_BUFFER) handle_line_prefix (it); @@ -9055,6 +9060,15 @@ move_it_in_display_line_to (struct it *it, if (new_x > it->first_visible_x) { + /* If we have reached the visible portion of the + screen line, produce the line number if needed. */ + if (line_number_pending) + { + line_number_pending = false; + it->current_x = it->first_visible_x; + maybe_produce_line_number (it); + it->current_x += new_x - it->first_visible_x; + } /* Glyph is visible. Increment number of glyphs that would be displayed. */ ++it->hpos; -- 2.39.2