diff src/move.c @ 14317:1bc96dbb5498 v8.1.0174

patch 8.1.0174: after paging up and down fold line is wrong commit https://github.com/vim/vim/commit/907dad72ef9d29422352fb74ba156e7085a3fc71 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jul 10 15:07:15 2018 +0200 patch 8.1.0174: after paging up and down fold line is wrong Problem: After paging up and down fold line is wrong. Solution: Correct the computation of w_topline and w_botline. (Hirohito Higashi)
author Christian Brabandt <cb@256bit.org>
date Tue, 10 Jul 2018 15:15:07 +0200
parents 6740c499de13
children a9665096074b
line wrap: on
line diff
--- a/src/move.c
+++ b/src/move.c
@@ -2457,22 +2457,27 @@ onepage(int dir, long count)
 	beginline(BL_SOL | BL_FIX);
     curwin->w_valid &= ~(VALID_WCOL|VALID_WROW|VALID_VIRTCOL);
 
-    /*
-     * Avoid the screen jumping up and down when 'scrolloff' is non-zero.
-     * But make sure we scroll at least one line (happens with mix of long
-     * wrapping lines and non-wrapping line).
-     */
-    if (retval == OK && dir == FORWARD && check_top_offset())
+    if (retval == OK && dir == FORWARD)
     {
-	scroll_cursor_top(1, FALSE);
-	if (curwin->w_topline <= old_topline
+	// Avoid the screen jumping up and down when 'scrolloff' is non-zero.
+	// But make sure we scroll at least one line (happens with mix of long
+	// wrapping lines and non-wrapping line).
+	if (check_top_offset())
+	{
+	    scroll_cursor_top(1, FALSE);
+	    if (curwin->w_topline <= old_topline
 				  && old_topline < curbuf->b_ml.ml_line_count)
-	{
-	    curwin->w_topline = old_topline + 1;
+	    {
+		curwin->w_topline = old_topline + 1;
 #ifdef FEAT_FOLDING
+		(void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL);
+#endif
+	    }
+	}
+#ifdef FEAT_FOLDING
+	else if (curwin->w_botline > curbuf->b_ml.ml_line_count)
 	    (void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL);
 #endif
-	}
     }
 
     redraw_later(VALID);