aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-05-18 07:00:29 +0800
committerGitHub <noreply@github.com>2024-05-18 07:00:29 +0800
commit5947f249f838eb56f8d186e69f4f58e9dee009ed (patch)
treeac90955ff4ea4a664e287666543971ab87723236
parent5f9e7edae6b8d56dd44b41dee02b8e9411572b58 (diff)
downloadrneovim-5947f249f838eb56f8d186e69f4f58e9dee009ed.tar.gz
rneovim-5947f249f838eb56f8d186e69f4f58e9dee009ed.tar.bz2
rneovim-5947f249f838eb56f8d186e69f4f58e9dee009ed.zip
fix(move): half-page scrolling with resized grid at eob (#28821)
-rw-r--r--src/nvim/move.c2
-rw-r--r--test/functional/ui/multigrid_spec.lua69
2 files changed, 70 insertions, 1 deletions
diff --git a/src/nvim/move.c b/src/nvim/move.c
index 074eb0354c..418ece09ed 100644
--- a/src/nvim/move.c
+++ b/src/nvim/move.c
@@ -2488,7 +2488,7 @@ int pagescroll(Direction dir, int count, bool half)
int curscount = count;
// Adjust count so as to not reveal end of buffer lines.
if (dir == FORWARD
- && (curwin->w_topline + curwin->w_height + count > buflen || hasAnyFolding(curwin))) {
+ && (curwin->w_topline + curwin->w_height_inner + count > buflen || hasAnyFolding(curwin))) {
int n = plines_correct_topline(curwin, curwin->w_topline, NULL, false, NULL);
if (n - count < curwin->w_height_inner && curwin->w_topline < buflen) {
n += plines_m_win(curwin, curwin->w_topline + 1, buflen, curwin->w_height_inner + count);
diff --git a/test/functional/ui/multigrid_spec.lua b/test/functional/ui/multigrid_spec.lua
index b30d29fa55..dc48061a6c 100644
--- a/test/functional/ui/multigrid_spec.lua
+++ b/test/functional/ui/multigrid_spec.lua
@@ -741,6 +741,75 @@ describe('ext_multigrid', function()
[4] = {-1, "SW", 1, 13, 5, false, 250};
}}
end)
+
+ it('half-page scrolling stops at end of buffer', function()
+ command('set number')
+ insert(('foobar\n'):rep(100))
+ feed('7<C-Y>')
+ screen:expect({
+ grid = [[
+ ## grid 1
+ [2:-----------------------------------------------------]|*12
+ {11:[No Name] [+] }|
+ [3:-----------------------------------------------------]|
+ ## grid 2
+ {19: 75 }foobar |
+ {19: 76 }foobar |
+ {19: 77 }foobar |
+ {19: 78 }foobar |
+ {19: 79 }foobar |
+ {19: 80 }foobar |
+ {19: 81 }foobar |
+ {19: 82 }foobar |
+ {19: 83 }foobar |
+ {19: 84 }foobar |
+ {19: 85 }foobar |
+ {19: 86 }foobar |
+ {19: 87 }foobar |
+ {19: 88 }foobar |
+ {19: 89 }foobar |
+ {19: 90 }foobar |
+ {19: 91 }foobar |
+ {19: 92 }foobar |
+ {19: 93 }foobar |
+ {19: 94 }^foobar |
+ ## grid 3
+ |
+ ]],
+ })
+ feed('<C-D>')
+ screen:expect({
+ grid = [[
+ ## grid 1
+ [2:-----------------------------------------------------]|*12
+ {11:[No Name] [+] }|
+ [3:-----------------------------------------------------]|
+ ## grid 2
+ {19: 82 }foobar |
+ {19: 83 }foobar |
+ {19: 84 }foobar |
+ {19: 85 }foobar |
+ {19: 86 }foobar |
+ {19: 87 }foobar |
+ {19: 88 }foobar |
+ {19: 89 }foobar |
+ {19: 90 }foobar |
+ {19: 91 }foobar |
+ {19: 92 }foobar |
+ {19: 93 }foobar |
+ {19: 94 }foobar |
+ {19: 95 }foobar |
+ {19: 96 }foobar |
+ {19: 97 }foobar |
+ {19: 98 }foobar |
+ {19: 99 }foobar |
+ {19:100 }foobar |
+ {19:101 }^ |
+ ## grid 3
+ |
+ ]],
+ })
+ end)
end)
it('multiline messages scroll over windows', function()