diff --git a/src/terminal/modes.zig b/src/terminal/modes.zig index dcd7f0071..9168cdb89 100644 --- a/src/terminal/modes.zig +++ b/src/terminal/modes.zig @@ -209,6 +209,7 @@ const entries: []const ModeEntry = &.{ .{ .name = "alt_esc_prefix", .value = 1036, .default = true }, .{ .name = "alt_sends_escape", .value = 1039 }, .{ .name = "reverse_wrap_extended", .value = 1045 }, + .{ .name = "alt_screen", .value = 1047 }, .{ .name = "alt_screen_save_cursor_clear_enter", .value = 1049 }, .{ .name = "bracketed_paste", .value = 2004 }, .{ .name = "synchronized_output", .value = 2026 }, diff --git a/src/termio/Exec.zig b/src/termio/Exec.zig index e1eb96956..dc6b7d6d3 100644 --- a/src/termio/Exec.zig +++ b/src/termio/Exec.zig @@ -1772,6 +1772,21 @@ const StreamHandler = struct { self.terminal.scrolling_region.right = self.terminal.cols - 1; }, + .alt_screen => { + const opts: terminal.Terminal.AlternateScreenOptions = .{ + .cursor_save = false, + .clear_on_enter = false, + }; + + if (enabled) + self.terminal.alternateScreen(self.alloc, opts) + else + self.terminal.primaryScreen(self.alloc, opts); + + // Schedule a render since we changed screens + try self.queueRender(); + }, + .alt_screen_save_cursor_clear_enter => { const opts: terminal.Terminal.AlternateScreenOptions = .{ .cursor_save = true,