fix(terminal): add various missing redraws

Problem: missing redraws when restoring saved cursorline/column, plus missing
statusline and mode redraws when not updating the screen in terminal mode.

Solution: schedule the redraws in a similar manner to other modes and remove
some now unnecessary redrawing logic. Redraw if cursorline-related options
change from entering terminal mode. This fixes test failures in later commits.

WTF: TextChangedT triggers based on must_redraw, which is... fun...? Try to
preserve its behaviour as much as we can for now.
This commit is contained in:
Sean Dewar
2025-02-27 12:46:56 +00:00
committed by zeertzjq
parent 8c5bc4920a
commit 7f5427b857
3 changed files with 177 additions and 14 deletions

View File

@@ -79,18 +79,27 @@ describe('title', function()
it('is updated in Terminal mode', function()
api.nvim_set_option_value('title', true, {})
api.nvim_set_option_value('titlestring', '(%{mode(1)}) | nvim', {})
api.nvim_set_option_value('titlestring', '%t (%{mode(1)}) | nvim', {})
fn.jobstart({ n.testprg('shell-test'), 'INTERACT' }, { term = true })
api.nvim_buf_set_name(0, 'shell-test')
screen:expect(function()
eq('(nt) | nvim', screen.title)
eq('shell-test (nt) | nvim', screen.title)
end)
feed('i')
screen:expect(function()
eq('(t) | nvim', screen.title)
eq('shell-test (t) | nvim', screen.title)
end)
api.nvim_set_option_value('titlelen', 1, {})
screen:expect(function()
eq('<t) | nvim', screen.title)
end)
command('set titlelen&')
screen:expect(function()
eq('shell-test (t) | nvim', screen.title)
end)
feed([[<C-\><C-N>]])
screen:expect(function()
eq('(nt) | nvim', screen.title)
eq('shell-test (nt) | nvim', screen.title)
end)
end)