mirror of
https://github.com/neovim/neovim.git
synced 2025-10-06 09:56:31 +00:00
vim-patch:9.0.2105: skipcol not reset when topline changed (#26042)
Problem: Skipcol is not reset when topline changed scrolling cursor to top
Solution: reset skipcol
closes: vim/vim#13528
bb800a7907
This commit is contained in:
@@ -1816,7 +1816,9 @@ void scroll_cursor_top(int min_scroll, int always)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
check_topfill(curwin, false);
|
check_topfill(curwin, false);
|
||||||
if (curwin->w_topline == curwin->w_cursor.lnum) {
|
if (curwin->w_topline != old_topline) {
|
||||||
|
reset_skipcol(curwin);
|
||||||
|
} else if (curwin->w_topline == curwin->w_cursor.lnum) {
|
||||||
validate_virtcol();
|
validate_virtcol();
|
||||||
if (curwin->w_skipcol >= curwin->w_virtcol) {
|
if (curwin->w_skipcol >= curwin->w_virtcol) {
|
||||||
// TODO(vim): if the line doesn't fit may optimize w_skipcol instead
|
// TODO(vim): if the line doesn't fit may optimize w_skipcol instead
|
||||||
|
@@ -982,6 +982,31 @@ describe('smoothscroll', function()
|
|||||||
]])
|
]])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
-- oldtest: Test_smoothscroll_cursor_top()
|
||||||
|
it('resets skipcol when scrolling cursor to top', function()
|
||||||
|
screen:try_resize(40, 12)
|
||||||
|
exec([[
|
||||||
|
set smoothscroll scrolloff=2
|
||||||
|
new | 11resize | wincmd j
|
||||||
|
call setline(1, ['line1', 'line2', 'line3'->repeat(20), 'line4'])
|
||||||
|
exe "norm G3\<C-E>k"
|
||||||
|
]])
|
||||||
|
screen:expect([[
|
||||||
|
|
|
||||||
|
[No Name] |
|
||||||
|
line1 |
|
||||||
|
line2 |
|
||||||
|
^line3line3line3line3line3line3line3line3|
|
||||||
|
line3line3line3line3line3line3line3line3|
|
||||||
|
line3line3line3line3 |
|
||||||
|
line4 |
|
||||||
|
~ |
|
||||||
|
~ |
|
||||||
|
[No Name] [+] |
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
end)
|
||||||
|
|
||||||
it("works with virt_lines above and below", function()
|
it("works with virt_lines above and below", function()
|
||||||
screen:try_resize(55, 7)
|
screen:try_resize(55, 7)
|
||||||
exec([=[
|
exec([=[
|
||||||
|
@@ -912,4 +912,21 @@ func Test_smoothscroll_zero_width_scroll_cursor_bot()
|
|||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" scroll_cursor_top() should reset skipcol when it changes topline
|
||||||
|
func Test_smoothscroll_cursor_top()
|
||||||
|
CheckScreendump
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
set smoothscroll scrolloff=2
|
||||||
|
new | 11resize | wincmd j
|
||||||
|
call setline(1, ['line1', 'line2', 'line3'->repeat(20), 'line4'])
|
||||||
|
exe "norm G3\<C-E>k"
|
||||||
|
END
|
||||||
|
call writefile(lines, 'XSmoothScrollCursorTop', 'D')
|
||||||
|
let buf = RunVimInTerminal('-u NONE -S XSmoothScrollCursorTop', #{rows: 12, cols:40})
|
||||||
|
call VerifyScreenDump(buf, 'Test_smoothscroll_cursor_top', {})
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Reference in New Issue
Block a user