From 9148ba8a46baa3934c44164989cdcdec5d01d9e3 Mon Sep 17 00:00:00 2001 From: Luuk van Baal Date: Mon, 8 Apr 2024 22:27:41 +0200 Subject: patch 9.1.0280: several issues with 'smoothscroll' support Problem: Logic to make sure cursor is in visible part of the screen after scrolling the text with 'smoothscroll' is scattered, asymmetric and contains bugs. Solution: Adjust and create helper function for 'smoothscroll' cursor logic. (Luuk van Baal) closes: #14410 Signed-off-by: Luuk van Baal Signed-off-by: Christian Brabandt --- src/testdir/dumps/Test_smooth_long_6.dump | 2 +- src/testdir/dumps/Test_smooth_long_7.dump | 2 +- src/testdir/test_diffmode.vim | 15 ++++++++++++ src/testdir/test_scroll_opt.vim | 38 +++++++++++++++++++++---------- 4 files changed, 43 insertions(+), 14 deletions(-) (limited to 'src/testdir') diff --git a/src/testdir/dumps/Test_smooth_long_6.dump b/src/testdir/dumps/Test_smooth_long_6.dump index ba48c2825f..507aa460da 100644 --- a/src/testdir/dumps/Test_smooth_long_6.dump +++ b/src/testdir/dumps/Test_smooth_long_6.dump @@ -3,4 +3,4 @@ |t|s| |o|f| |t|e|x|t| |w|i|t|h| |l|o|t|s| |o|f| |t|e|x|t| |w|i|t|h| |l|o|t|s| |o |f| |t|e|x|t| |w|i|t|h| |l|o|t|s| |o|f| |t|e|x|t| |w|i|t|h| |l|o|t|s| |o|f| |t|e |x|t| |w|i|t|h| |l|o|t|s| |o|f| |t|e|x|t| |w|i|t|h| |l|o|t|s| |o|f| |t|e|x|t| |w -| @21|3|,|9|0| @9|6@1|%| +|:|s|e|t| |s|c|r|o|l@1|o| @9|3|,|9|0| @9|6@1|%| diff --git a/src/testdir/dumps/Test_smooth_long_7.dump b/src/testdir/dumps/Test_smooth_long_7.dump index 222e0019f5..225207ff6c 100644 --- a/src/testdir/dumps/Test_smooth_long_7.dump +++ b/src/testdir/dumps/Test_smooth_long_7.dump @@ -3,4 +3,4 @@ |t|s| |o|f| |t|e|x|t| |w|i|t|h| |l|o|t|s| |o|f| |t|e|x|t| |w|i|t|h| |l|o|t|s| |o |f| |t|e|x|t| |w|i>t|h| |l|o|t|s| |o|f| |t|e|x|t| |w|i|t|h| |l|o|t|s| |o|f| |t|e |x|t| |w|i|t|h| |l|o|t|s| |o|f| |t|e|x|t| |w|i|t|h| |l|o|t|s| |o|f| |t|e|x|t| |w -| @21|3|,|1|7|0| @8|6@1|%| +|:|s|e|t| |s|c|r|o|l@1|o| @9|3|,|1|7|0| @8|6@1|%| diff --git a/src/testdir/test_diffmode.vim b/src/testdir/test_diffmode.vim index b8d0057a13..9e973de213 100644 --- a/src/testdir/test_diffmode.vim +++ b/src/testdir/test_diffmode.vim @@ -2023,4 +2023,19 @@ func Test_diff_toggle_wrap_skipcol_leftcol() bwipe! endfunc +" Ctrl-D reveals filler lines below the last line in the buffer. +func Test_diff_eob_halfpage() + 5new + call setline(1, ['']->repeat(10) + ['a']) + diffthis + 5new + call setline(1, ['']->repeat(3) + ['a', 'b']) + diffthis + wincmd j + exe "norm! G\" + call assert_equal(6, line('w0')) + + %bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_scroll_opt.vim b/src/testdir/test_scroll_opt.vim index 294da0d877..e09c240a09 100644 --- a/src/testdir/test_scroll_opt.vim +++ b/src/testdir/test_scroll_opt.vim @@ -1020,30 +1020,36 @@ func Test_smoothscroll_page() " Half-page scrolling does not go beyond end of buffer and moves the cursor. " Even with 'nostartofline', the correct amount of lines is scrolled. setl nostartofline - exe "norm! 0\" + exe "norm! 15|\" call assert_equal(200, winsaveview().skipcol) - call assert_equal(204, col('.')) + call assert_equal(215, col('.')) exe "norm! \" call assert_equal(400, winsaveview().skipcol) - call assert_equal(404, col('.')) + call assert_equal(415, col('.')) exe "norm! \" call assert_equal(520, winsaveview().skipcol) - call assert_equal(601, col('.')) + call assert_equal(535, col('.')) exe "norm! \" call assert_equal(520, winsaveview().skipcol) - call assert_equal(801, col('.')) - exe "norm! \" + call assert_equal(735, col('.')) + exe "norm! \" call assert_equal(520, winsaveview().skipcol) - call assert_equal(601, col('.')) + call assert_equal(895, col('.')) exe "norm! \" - call assert_equal(400, winsaveview().skipcol) - call assert_equal(404, col('.')) + call assert_equal(320, winsaveview().skipcol) + call assert_equal(695, col('.')) exe "norm! \" - call assert_equal(200, winsaveview().skipcol) - call assert_equal(204, col('.')) + call assert_equal(120, winsaveview().skipcol) + call assert_equal(495, col('.')) + exe "norm! \" + call assert_equal(0, winsaveview().skipcol) + call assert_equal(375, col('.')) exe "norm! \" call assert_equal(0, winsaveview().skipcol) - call assert_equal(40, col('.')) + call assert_equal(175, col('.')) + exe "norm! \" + call assert_equal(0, winsaveview().skipcol) + call assert_equal(15, col('.')) bwipe! endfunc @@ -1071,6 +1077,14 @@ func Test_smoothscroll_next_topline() redraw call assert_equal(2, line('w0')) + " Cursor does not end up above topline, adjusting topline later. + setlocal nu cpo+=n + exe "norm! G$g013\" + redraw + call assert_equal(2, line('.')) + call assert_equal(0, winsaveview().skipcol) + + set cpo-=n bwipe! endfunc -- cgit v1.2.3