patch 9.0.1981: not being able to scroll up in diff mode

Problem:  Cannot scroll up in diff mode with many filler lines and zero
          'scrolloff'.
Solution: Invalidate w_cline_row before calling comp_botline().

closes: #13256

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
This commit is contained in:
zeertzjq
2023-10-04 20:12:37 +02:00
committed by Christian Brabandt
parent 119fdd9293
commit 0583491277
3 changed files with 39 additions and 0 deletions

View File

@ -3262,6 +3262,7 @@ onepage(int dir, long count)
#ifdef FEAT_DIFF #ifdef FEAT_DIFF
curwin->w_topfill = 0; curwin->w_topfill = 0;
#endif #endif
curwin->w_valid &= ~(VALID_WROW|VALID_CROW);
} }
comp_botline(curwin); comp_botline(curwin);
curwin->w_cursor.lnum = curwin->w_botline - 1; curwin->w_cursor.lnum = curwin->w_botline - 1;

View File

@ -1614,6 +1614,42 @@ func Test_diff_scroll_wrap_on()
call assert_equal(1, winsaveview().topline) call assert_equal(1, winsaveview().topline)
normal! j normal! j
call assert_equal(2, winsaveview().topline) call assert_equal(2, winsaveview().topline)
bwipe!
bwipe!
endfunc
func Test_diff_scroll_many_filler()
20new
vnew
call setline(1, ['^^^', '^^^', '$$$', '$$$'])
diffthis
setlocal scrolloff=0
wincmd p
call setline(1, ['^^^', '^^^'] + repeat(['###'], 41) + ['$$$', '$$$'])
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)
bwipe! bwipe!
bwipe! bwipe!
endfunc endfunc

View File

@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1981,
/**/ /**/
1980, 1980,
/**/ /**/