neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 64aa0f7d0b7034a5158401cf6b987cb82cc60031
parent 2c5fd3f966193a5a44e0661160c2c7ddf0a96097
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Sat, 13 Apr 2024 06:18:45 +0800

fix(move): check for filler lines properly (#28307)

vim-patch:9.1.0310: Filler lines not checked properly in get_scroll_overlap()
Diffstat:
Msrc/nvim/move.c | 2+-
Mtest/functional/ui/decorations_spec.lua | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 83 insertions(+), 1 deletion(-)

diff --git a/src/nvim/move.c b/src/nvim/move.c @@ -2362,7 +2362,7 @@ static int get_scroll_overlap(Direction dir) } loff.lnum = dir == FORWARD ? curwin->w_botline : curwin->w_topline - 1; - loff.fill = win_get_fill(curwin, loff.lnum + dir == BACKWARD) + loff.fill = win_get_fill(curwin, loff.lnum + (dir == BACKWARD)) - (dir == FORWARD ? curwin->w_filler_rows : curwin->w_topfill); loff.height = loff.fill > 0 ? 1 : plines_win_nofill(curwin, loff.lnum, true); diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua @@ -4894,6 +4894,88 @@ if (h->n_buckets < new_n_buckets) { // expand | ]]) end) + + it('works with full page scrolling #28390', function() + screen:try_resize(20, 8) + command('call setline(1, range(20))') + api.nvim_buf_set_extmark(0, ns, 10, 0, { virt_lines = {{{'VIRT1'}}, {{'VIRT2'}}} }) + screen:expect([[ + ^0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + | + ]]) + feed('<C-F>') + screen:expect([[ + ^5 | + 6 | + 7 | + 8 | + 9 | + 10 | + VIRT1 | + | + ]]) + feed('<C-F>') + screen:expect([[ + ^10 | + VIRT1 | + VIRT2 | + 11 | + 12 | + 13 | + 14 | + | + ]]) + feed('<C-F>') + screen:expect([[ + ^13 | + 14 | + 15 | + 16 | + 17 | + 18 | + 19 | + | + ]]) + feed('<C-B>') + screen:expect([[ + 10 | + VIRT1 | + VIRT2 | + 11 | + 12 | + ^13 | + 14 | + | + ]]) + feed('<C-B>') + screen:expect([[ + 5 | + 6 | + 7 | + 8 | + 9 | + ^10 | + VIRT1 | + | + ]]) + feed('<C-B>') + screen:expect([[ + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + ^6 | + | + ]]) + end) end) describe('decorations: signs', function()