From ad1cdbcd593bee7f102700c1a6ee1c49632a7cd3 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Tue, 9 Aug 2022 09:22:34 -0700 Subject: [PATCH] implement erase display scrollback ("clear" command) --- src/terminal/Screen.zig | 2 -- src/terminal/Terminal.zig | 12 +++++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/terminal/Screen.zig b/src/terminal/Screen.zig index afcb9ed0d..817c7d8fe 100644 --- a/src/terminal/Screen.zig +++ b/src/terminal/Screen.zig @@ -116,8 +116,6 @@ pub const RowIndex = union(RowIndexTag) { /// The index is from the top of the history (scrollback) to just /// prior to the active area. history: usize, - - // TODO: others }; /// The tags of RowIndex diff --git a/src/terminal/Terminal.zig b/src/terminal/Terminal.zig index 179ee743c..ac934263b 100644 --- a/src/terminal/Terminal.zig +++ b/src/terminal/Terminal.zig @@ -597,9 +597,15 @@ pub fn eraseDisplay( self.screen.cursor.pending_wrap = false; }, - else => { - log.err("unimplemented display mode: {}", .{mode}); - @panic("unimplemented"); + .scrollback => { + const region = self.screen.region(.history); + std.mem.set(Screen.Cell, region[0], self.screen.cursor.pen); + std.mem.set(Screen.Cell, region[1], self.screen.cursor.pen); + + // TODO: move this logic to the Screen implementation + self.screen.top = self.screen.visible_offset; + self.screen.bottom = self.screen.bottom - self.screen.visible_offset; + self.screen.visible_offset = 0; }, } }