diff --git a/src/Window.zig b/src/Window.zig index 575680dc4..457051ace 100644 --- a/src/Window.zig +++ b/src/Window.zig @@ -1627,6 +1627,14 @@ pub fn enquiry(self: *Window) !void { try self.queueWrite(""); } +pub fn scrollDown(self: *Window, count: usize) !void { + self.terminal.scrollDown(count); +} + +pub fn scrollUp(self: *Window, count: usize) !void { + self.terminal.scrollUp(count); +} + pub fn setActiveStatusDisplay( self: *Window, req: terminal.StatusDisplay, diff --git a/src/terminal/stream.zig b/src/terminal/stream.zig index 3ba9a0d04..b8494c8a5 100644 --- a/src/terminal/stream.zig +++ b/src/terminal/stream.zig @@ -275,6 +275,30 @@ pub fn Stream(comptime Handler: type) type { }, ) else log.warn("unimplemented CSI callback: {}", .{action}), + // Scroll Up (SD) + 'S' => if (@hasDecl(T, "scrollUp")) try self.handler.scrollUp( + switch (action.params.len) { + 0 => 1, + 1 => action.params[0], + else => { + log.warn("invalid scroll up command: {}", .{action}); + return; + }, + }, + ) else log.warn("unimplemented CSI callback: {}", .{action}), + + // Scroll Down (SD) + 'T' => if (@hasDecl(T, "scrollDown")) try self.handler.scrollDown( + switch (action.params.len) { + 0 => 1, + 1 => action.params[0], + else => { + log.warn("invalid scroll down command: {}", .{action}); + return; + }, + }, + ) else log.warn("unimplemented CSI callback: {}", .{action}), + // Erase Characters (ECH) 'X' => if (@hasDecl(T, "eraseChars")) try self.handler.eraseChars( switch (action.params.len) {