From bc876ca729e9ba93ec2ae4ca1757d736eb1878b2 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Tue, 28 Mar 2017 10:23:27 +0200 Subject: [PATCH] moving: /do/ redraw the prior line when the viewport hasn't changed The complementary test on current_y should only be done when doing a scroll-only, because only then the prior line can be offscreen. This fixes https://savannah.gnu.org/bugs/?50658. Reported-by: David Lawrence Ramsey --- src/move.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/move.c b/src/move.c index de3b533f..4414ee6a 100644 --- a/src/move.c +++ b/src/move.c @@ -489,11 +489,12 @@ void do_up(bool scroll_only) 1 : editwinrows / 2 + 1); /* If the lines weren't already redrawn, see if they need to be. */ - if (openfile->current_y > 0 && openfile->current_y < editwinrows - 1) { + if (openfile->current_y > 0) { /* Redraw the prior line if it's not actually the same line as the * current one (which it might be in softwrap mode, if we moved just * one chunk) and the line was horizontally scrolled. */ if (openfile->current != was_current + && (!scroll_only || openfile->current_y < editwinrows - 1) && line_needs_update(was_column, 0)) update_line(openfile->current->next, 0); /* Redraw the current line if it needs to be horizontally scrolled. */ @@ -545,11 +546,12 @@ void do_down(bool scroll_only) 1 : editwinrows / 2 + 1); /* If the lines weren't already redrawn, see if they need to be. */ - if (openfile->current_y > 0 && openfile->current_y < editwinrows - 1) { + if (openfile->current_y < editwinrows - 1) { /* Redraw the prior line if it's not actually the same line as the * current one (which it might be in softwrap mode, if we moved just * one chunk) and the line was horizontally scrolled. */ if (openfile->current != was_current && + (!scroll_only || openfile->current_y > 0) && line_needs_update(was_column, 0)) update_line(openfile->current->prev, 0); /* Redraw the current line if it needs to be horizontally scrolled. */