fix(ui2): don't scroll beyond eob in dialog window #36116

Problem:  Forward page scrolling reveals eob lines in the dialog window.
Solution: Check if the end of the buffer is visible before scrolling down.
This commit is contained in:
luukvbaal
2025-10-10 16:05:40 +02:00
committed by GitHub
parent 56713ef872
commit d8cea8d45d
2 changed files with 20 additions and 4 deletions

View File

@@ -544,11 +544,11 @@ function M.set_pos(type)
f = [[\<C-F>]], f = [[\<C-F>]],
b = [[\<C-B>]], b = [[\<C-B>]],
} }
if page_keys[key] then local info = page_keys[key] and fn.getwininfo(ext.wins.dialog)[1]
local topline = fn.getwininfo(ext.wins.dialog)[1].topline if info and (key ~= 'f' or info.botline < api.nvim_buf_line_count(ext.bufs.dialog)) then
fn.win_execute(ext.wins.dialog, ('exe "norm! %s"'):format(page_keys[key])) fn.win_execute(ext.wins.dialog, ('exe "norm! %s"'):format(page_keys[key]))
set_top_bot_spill() set_top_bot_spill()
return fn.getwininfo(ext.wins.dialog)[1].topline ~= topline and '' or nil return fn.getwininfo(ext.wins.dialog)[1].topline ~= info.topline and '' or nil
end end
end) end)
elseif type == 'msg' then elseif type == 'msg' then

View File

@@ -344,7 +344,23 @@ describe('messages2', function()
99 | 99 |
Type number and <Enter> or click with the mouse (q or empty cancels): ^ | Type number and <Enter> or click with the mouse (q or empty cancels): ^ |
]]) ]])
feed('g') -- No scrolling beyond end of buffer #36114
feed('f')
screen:expect([[
|
{1:~ }|*3
{3:───────────────────────────────────────────────────────────────────────}|
93 [+93] |
94 |
95 |
96 |
97 |
98 |
99 |
Type number and <Enter> or click with the mouse (q or empty cancels): f|
^ |
]])
feed('<Backspace>g')
screen:expect(top) screen:expect(top)
end) end)