From 916d848049979e7b3974fbf4b6fdf2cf58ae98c3 Mon Sep 17 00:00:00 2001 From: Javier Lopez Date: Wed, 8 Jun 2022 19:46:57 -0500 Subject: 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 --- test/functional/terminal/scrollback_spec.lua | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'test/functional/terminal/scrollback_spec.lua') diff --git a/test/functional/terminal/scrollback_spec.lua b/test/functional/terminal/scrollback_spec.lua index 34fcb6cab9..b1d3b502b2 100644 --- a/test/functional/terminal/scrollback_spec.lua +++ b/test/functional/terminal/scrollback_spec.lua @@ -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') -- cgit