changeset 32208:73c5881c1793 v9.0.1435

patch 9.0.1435: scrolling too many lines when 'wrap' and 'diff' are set Commit: https://github.com/vim/vim/commit/38d867f041349e1400c2cce9cac06f59ae6ccbb1 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Apr 1 19:54:40 2023 +0100 patch 9.0.1435: scrolling too many lines when 'wrap' and 'diff' are set Problem: Scrolling too many lines when 'wrap' and 'diff' are set. Solution: Only scroll by screenlines for 'diff' when 'wrap' is not set. (closes #12211)
author Bram Moolenaar <Bram@vim.org>
date Sat, 01 Apr 2023 21:00:04 +0200
parents d0e05f0e20b1
children ce69b374b64f
files src/move.c src/testdir/test_diffmode.vim src/version.c
diffstat 3 files changed, 18 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/move.c
+++ b/src/move.c
@@ -1763,7 +1763,7 @@ scrolling_screenlines(int byfold UNUSED)
 	|| (byfold && hasAnyFolding(curwin))
 # endif
 # ifdef FEAT_DIFF
-	|| curwin->w_p_diff
+	|| (curwin->w_p_diff && !curwin->w_p_wrap)
 # endif
 	;
 }
--- a/src/testdir/test_diffmode.vim
+++ b/src/testdir/test_diffmode.vim
@@ -1588,6 +1588,21 @@ func Test_diff_scroll()
   call StopVimInTerminal(buf)
 endfunc
 
+" This was scrolling too many lines.
+func Test_diff_scroll_wrap_on()
+  20new
+  40vsplit
+  call setline(1, map(range(1, 9), 'repeat(v:val, 200)'))
+  setlocal number diff so=0
+  redraw
+  normal! jj
+  call assert_equal(1, winsaveview().topline)
+  normal! j
+  call assert_equal(2, winsaveview().topline)
+  bwipe!
+  bwipe!
+endfunc
+
 " This was trying to update diffs for a buffer being closed
 func Test_diff_only()
   silent! lfile
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1435,
+/**/
     1434,
 /**/
     1433,