From 6c0609ddc85b63b91055f6c5835905619d2e27b3 Mon Sep 17 00:00:00 2001 From: Gregory Anders Date: Mon, 25 Mar 2024 12:03:59 -0500 Subject: [PATCH] terminal: reset alt screen kitty keyboard state on full reset --- src/terminal/Terminal.zig | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/terminal/Terminal.zig b/src/terminal/Terminal.zig index c7d3b159e..1fa6f4e91 100644 --- a/src/terminal/Terminal.zig +++ b/src/terminal/Terminal.zig @@ -2342,6 +2342,7 @@ pub fn fullReset(self: *Terminal) void { self.tabstops.reset(TABSTOP_INTERVAL); self.screen.clearSelection(); self.screen.kitty_keyboard = .{}; + self.secondary_screen.kitty_keyboard = .{}; self.screen.protected_mode = .off; self.scrolling_region = .{ .top = 0, @@ -8117,6 +8118,25 @@ test "Terminal: fullReset status display" { try testing.expect(t.status_display == .main); } +// https://github.com/mitchellh/ghostty/issues/1607 +test "Terminal: fullReset clears alt screen kitty keyboard state" { + var t = try init(testing.allocator, .{ .cols = 10, .rows = 10 }); + defer t.deinit(testing.allocator); + + t.alternateScreen(.{}); + t.screen.kitty_keyboard.push(.{ + .disambiguate = true, + .report_events = false, + .report_alternates = true, + .report_all = true, + .report_associated = true, + }); + t.primaryScreen(.{}); + + t.fullReset(); + try testing.expectEqual(0, t.secondary_screen.kitty_keyboard.current().int()); +} + // https://github.com/mitchellh/ghostty/issues/272 // This is also tested in depth in screen resize tests but I want to keep // this test around to ensure we don't regress at multiple layers.