vim-patch:9.1.0211: page-wise scrolling does not support smooth-scrolling

Problem:  Page-wise scrolling with Ctrl-F/Ctrl-B implements
          it's own logic to change the topline and cursor.
          In doing so, skipcol is not handled properly for
          'smoothscroll', and virtual lines.
Solution: Re-use the logic from Ctrl-E/Ctrl-Y while staying
          backward compatible as much as possible.

b9f5b95b7b
This commit is contained in:
Luuk van Baal
2024-03-26 19:06:39 +01:00
parent 19b443251f
commit 4147302f4b
9 changed files with 123 additions and 325 deletions

View File

@@ -1632,34 +1632,38 @@ endfunc
func Test_diff_scroll_many_filler()
20new
vnew
call setline(1, ['^^^', '^^^', '$$$', '$$$'])
call setline(1, range(1, 40))
diffthis
setlocal scrolloff=0
wincmd p
call setline(1, ['^^^', '^^^'] + repeat(['###'], 41) + ['$$$', '$$$'])
call setline(1, range(1, 20)->reverse() + ['###']->repeat(41) + range(21, 40)->reverse())
diffthis
setlocal scrolloff=0
wincmd p
redraw
" Note: need a redraw after each scroll, otherwise the test always passes.
normal! G
redraw
call assert_equal(3, winsaveview().topline)
call assert_equal(18, winsaveview().topfill)
exe "normal! \<C-B>"
redraw
call assert_equal(3, winsaveview().topline)
call assert_equal(19, winsaveview().topfill)
exe "normal! \<C-B>"
redraw
call assert_equal(2, winsaveview().topline)
call assert_equal(0, winsaveview().topfill)
exe "normal! \<C-B>"
redraw
call assert_equal(1, winsaveview().topline)
call assert_equal(0, winsaveview().topfill)
for _ in range(2)
normal! G
redraw
call assert_equal(40, winsaveview().topline)
call assert_equal(19, winsaveview().topfill)
exe "normal! \<C-B>"
redraw
call assert_equal(22, winsaveview().topline)
call assert_equal(0, winsaveview().topfill)
exe "normal! \<C-B>"
redraw
call assert_equal(4, winsaveview().topline)
call assert_equal(0, winsaveview().topfill)
exe "normal! \<C-B>"
redraw
call assert_equal(1, winsaveview().topline)
call assert_equal(0, winsaveview().topfill)
set smoothscroll
endfor
set smoothscroll&
bwipe!
bwipe!
endfunc