aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/ui.lua1
-rw-r--r--test/test.lua18
2 files changed, 19 insertions, 0 deletions
diff --git a/core/ui.lua b/core/ui.lua
index 73616719..7c493b15 100644
--- a/core/ui.lua
+++ b/core/ui.lua
@@ -444,6 +444,7 @@ events.connect(
events.BUFFER_BEFORE_SWITCH, function() view._prev_buffer = buffer end)
events.connect(events.BUFFER_DELETED, function()
if _BUFFERS[view._prev_buffer] and buffer ~= view._prev_buffer then
+ restore_view_state() -- events.BUFFER_AFTER_SWITCH is not emitted in time
view:goto_buffer(view._prev_buffer)
end
end)
diff --git a/test/test.lua b/test/test.lua
index e3fb296b..91365563 100644
--- a/test/test.lua
+++ b/test/test.lua
@@ -3670,6 +3670,24 @@ function test_ui_maximized()
end
expected_failure(test_ui_maximized)
+function test_ui_restore_view_state()
+ buffer.new() -- 1
+ view.view_ws = view.WS_VISIBLEALWAYS
+ buffer.new() -- 2
+ assert(view.view_ws ~= view.WS_VISIBLEALWAYS, 'view whitespace settings not reset')
+ view:goto_buffer(-1) -- go back to 1
+ assert_equal(view.view_ws, view.WS_VISIBLEALWAYS)
+ view.view_ws = view.WS_INVISIBLE -- reset
+ buffer.new() -- 3
+ view.view_ws = view.WS_VISIBLEALWAYS
+ buffer:close() -- switches back to 1 (after briefly switching to 2)
+ assert_equal(view.view_ws, view.WS_INVISIBLE)
+ view:goto_buffer(1) -- go back to 2
+ assert_equal(view.view_ws, view.WS_INVISIBLE)
+ buffer:close()
+ buffer:close()
+end
+
function test_reset()
local _persist
_G.foo = 'bar'