terminal: CSI E and F

This commit is contained in:
Mitchell Hashimoto
2023-09-21 08:21:32 -07:00
parent 9af51a71e4
commit 92e98d34b5
2 changed files with 32 additions and 2 deletions

View File

@ -163,6 +163,7 @@ pub fn Stream(comptime Handler: type) type {
return;
},
},
false,
) else log.warn("unimplemented CSI callback: {}", .{action}),
// CUD - Cursor Down
@ -175,6 +176,7 @@ pub fn Stream(comptime Handler: type) type {
return;
},
},
false,
) else log.warn("unimplemented CSI callback: {}", .{action}),
// CUF - Cursor Right
@ -201,6 +203,32 @@ pub fn Stream(comptime Handler: type) type {
},
) else log.warn("unimplemented CSI callback: {}", .{action}),
// CNL - Cursor Next Line
'E' => if (@hasDecl(T, "setCursorDown")) try self.handler.setCursorDown(
switch (action.params.len) {
0 => 1,
1 => action.params[0],
else => {
log.warn("invalid cursor up command: {}", .{action});
return;
},
},
true,
) else log.warn("unimplemented CSI callback: {}", .{action}),
// CPL - Cursor Previous Line
'F' => if (@hasDecl(T, "setCursorUp")) try self.handler.setCursorUp(
switch (action.params.len) {
0 => 1,
1 => action.params[0],
else => {
log.warn("invalid cursor down command: {}", .{action});
return;
},
},
true,
) else log.warn("unimplemented CSI callback: {}", .{action}),
// HPA - Cursor Horizontal Position Absolute
// TODO: test
'G', '`' => if (@hasDecl(T, "setCursorCol")) switch (action.params.len) {

View File

@ -1277,12 +1277,14 @@ const StreamHandler = struct {
self.terminal.cursorRight(amount);
}
pub fn setCursorDown(self: *StreamHandler, amount: u16) !void {
pub fn setCursorDown(self: *StreamHandler, amount: u16, carriage: bool) !void {
self.terminal.cursorDown(amount);
if (carriage) self.terminal.carriageReturn();
}
pub fn setCursorUp(self: *StreamHandler, amount: u16) !void {
pub fn setCursorUp(self: *StreamHandler, amount: u16, carriage: bool) !void {
self.terminal.cursorUp(amount);
if (carriage) self.terminal.carriageReturn();
}
pub fn setCursorCol(self: *StreamHandler, col: u16) !void {