fix(terminal): scrollback delete lines immediately #18832

* on_scrollback_option_changed renamed to adjust_scrollback. The
  function name did not correspond to what it was doing. It is
  called unconditionally in every refresh of the terminal
  unrelated if the scrollback option was changed.
* new on_scrollback_option_changed function, which calls
  refresh_terminal, which then calls adjust_scrollback
* terminal_check_size is not the appropriate function to call when the
  option is changed since it only conditionally adjusts the scrollback.
  Use the new on_scrollback_option_changed

fixes #15477
fixes #11811
This commit is contained in:
Javier Lopez
2022-06-08 19:46:57 -05:00
committed by GitHub
parent 10291bb854
commit 916d848049
3 changed files with 44 additions and 6 deletions

View File

@@ -465,6 +465,34 @@ describe("'scrollback' option", function()
matches((iswin() and '^27: line[ ]*$' or '^26: line[ ]*$'), eval("getline(line('w0') - 10)"))
end)
it('deletes extra lines immediately', function()
-- Scrollback is 10 on screen_setup
local screen = thelpers.screen_setup(nil, nil, 30)
local lines = {}
for i = 1, 30 do
table.insert(lines, 'line'..tostring(i))
end
table.insert(lines, '')
feed_data(lines)
screen:expect([[
line26 |
line27 |
line28 |
line29 |
line30 |
{1: } |
{3:-- TERMINAL --} |
]])
local term_height = 6 -- Actual terminal screen height, not the scrollback
-- Initial
local scrollback = curbufmeths.get_option('scrollback')
eq(scrollback + term_height, eval('line("$")'))
-- Reduction
scrollback = scrollback - 2
curbufmeths.set_option('scrollback', scrollback)
eq(scrollback + term_height, eval('line("$")'))
end)
it('defaults to 10000 in :terminal buffers', function()
set_fake_shell()
command('terminal')