mirror of
https://github.com/neovim/neovim.git
synced 2026-07-17 14:41:33 +00:00
fix(ui2): fix ruler on repeated messages
Problem: a long message is cropped to keep the ruler visible. But when the message is repeated, it can be written over the ruler, while the repetition indicator "(1)" is still placed just before the ruler, which ends up somewhere inside the message. Solution: currently, long messages are only cropped when setting the 'last' virttext. Make sure this happens after a repeated long message.
This commit is contained in:
@@ -390,6 +390,13 @@ function M.show_msg(tgt, kind, content, replace_last, append, id)
|
||||
M.virt[tgt][M.virt.idx.dupe][1] = dupe > 0 and { 0, ('(%d)'):format(dupe) } or nil
|
||||
M.virt[tgt][M.virt.idx.spill][1] = tgt == 'cmd' and M.virt.cmd[M.virt.idx.spill][1] or nil
|
||||
set_virttext(tgt --[[@as 'cmd'|'msg']], tgt)
|
||||
if tgt == 'cmd' then
|
||||
-- make sure repeated long messages are cropped to keep the ruler intact
|
||||
-- (if this is not scheduled, it breaks messages during textlock)
|
||||
vim.schedule(function()
|
||||
set_virttext('last', 'cmd')
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
-- Reset message state the next event loop iteration.
|
||||
|
||||
@@ -1200,6 +1200,15 @@ describe('messages2', function()
|
||||
-----------------------------------0,0-1 All|
|
||||
]])
|
||||
feed('<C-L>')
|
||||
-- message with repetition indicator keeps ruler intact
|
||||
command('echo "-"->repeat(&columns)')
|
||||
command('echo "-"->repeat(&columns)')
|
||||
screen:expect([[
|
||||
^ |
|
||||
{1:~ }|*12
|
||||
--------------------------------(1)0,0-1 All|
|
||||
]])
|
||||
feed('<C-L>')
|
||||
-- when the ruler is configured smaller, there is more space for messages
|
||||
command('set rulerformat=%l | redraw | echo "-"->repeat(&columns)')
|
||||
screen:expect([[
|
||||
|
||||
Reference in New Issue
Block a user