From 861d81edbad9fbdaafa8b900d0cd4192606baf33 Mon Sep 17 00:00:00 2001
From: Benno Schulenberg <bensberg@justemail.net>
Date: Mon, 24 Apr 2017 19:44:51 +0200
Subject: [PATCH] scrolling: don't bother to limit the number of lines to step
 back

The go_back_chunks() function will do this clipping.

This fixes https://savannah.gnu.org/bugs/?50866.
---
 src/winio.c | 34 ++++++++++------------------------
 1 file changed, 10 insertions(+), 24 deletions(-)

diff --git a/src/winio.c b/src/winio.c
index 21f7c70f..42aaae6c 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -3093,37 +3093,23 @@ void edit_refresh(void)
     refresh_needed = FALSE;
 }
 
-/* Move edittop so that current is on the screen.  manner says how it
- * should be moved: CENTERING means that current should end up in the
- * middle of the screen, STATIONARY means that it should stay at the
- * same vertical position, and FLOWING means that it should scroll no
- * more than needed to bring current into view. */
+/* Move edittop so that current is on the screen.  manner says how:
+ * STATIONARY means that the cursor should stay on the same screen row,
+ * CENTERING means that current should end up in the middle of the screen,
+ * and FLOWING means that it should scroll no more than needed to bring
+ * current into view. */
 void adjust_viewport(update_type manner)
 {
     int goal = 0;
 
-    /* If manner is CENTERING, move edittop half the number of window rows
-     * back from current.  If manner is FLOWING, move edittop back 0 rows
-     * or (editwinrows - 1) rows, depending on where current has moved.
-     * This puts the cursor on the first or the last row.  If manner is
-     * STATIONARY, move edittop back current_y rows if current_y is in range
-     * of the screen, 0 rows if current_y is below zero, or (editwinrows - 1)
-     * rows if current_y is too big.  This puts current at the same place on
-     * the screen as before, or... at some undefined place. */
-    if (manner == CENTERING)
-	goal = editwinrows / 2;
-    else if (manner == FLOWING) {
-	if (!current_is_above_screen())
-	    goal = editwinrows - 1;
-    } else {
+    if (manner == STATIONARY)
 	goal = openfile->current_y;
-
-	if (goal > editwinrows - 1)
-	    statusline(ALERT, "Row is out of range -- please report a bug");
-    }
+    else if (manner == CENTERING)
+	goal = editwinrows / 2;
+    else if (!current_is_above_screen())
+	goal = editwinrows - 1;
 
     openfile->edittop = openfile->current;
-
 #ifndef NANO_TINY
     if (ISSET(SOFTWRAP))
 	openfile->firstcolumn = (xplustabs() / editwincols) * editwincols;
-- 
GitLab