terminal: simple esc dispatch
parent
9cd4594356
commit
b91149f0fe
|
|
@ -69,6 +69,10 @@ pub const Action = union(Key) {
|
||||||
tab_clear_all,
|
tab_clear_all,
|
||||||
tab_set,
|
tab_set,
|
||||||
tab_reset,
|
tab_reset,
|
||||||
|
index,
|
||||||
|
next_line,
|
||||||
|
reverse_index,
|
||||||
|
full_reset,
|
||||||
set_mode: Mode,
|
set_mode: Mode,
|
||||||
reset_mode: Mode,
|
reset_mode: Mode,
|
||||||
save_mode: Mode,
|
save_mode: Mode,
|
||||||
|
|
@ -143,6 +147,10 @@ pub const Action = union(Key) {
|
||||||
"tab_clear_all",
|
"tab_clear_all",
|
||||||
"tab_set",
|
"tab_set",
|
||||||
"tab_reset",
|
"tab_reset",
|
||||||
|
"index",
|
||||||
|
"next_line",
|
||||||
|
"reverse_index",
|
||||||
|
"full_reset",
|
||||||
"set_mode",
|
"set_mode",
|
||||||
"reset_mode",
|
"reset_mode",
|
||||||
"save_mode",
|
"save_mode",
|
||||||
|
|
@ -1889,22 +1897,22 @@ pub fn Stream(comptime Handler: type) type {
|
||||||
},
|
},
|
||||||
|
|
||||||
// IND - Index
|
// IND - Index
|
||||||
'D' => if (@hasDecl(T, "index")) switch (action.intermediates.len) {
|
'D' => switch (action.intermediates.len) {
|
||||||
0 => try self.handler.index(),
|
0 => try self.handler.vt(.index, {}),
|
||||||
else => {
|
else => {
|
||||||
log.warn("invalid index command: {f}", .{action});
|
log.warn("invalid index command: {f}", .{action});
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
} else log.warn("unimplemented ESC callback: {f}", .{action}),
|
},
|
||||||
|
|
||||||
// NEL - Next Line
|
// NEL - Next Line
|
||||||
'E' => if (@hasDecl(T, "nextLine")) switch (action.intermediates.len) {
|
'E' => switch (action.intermediates.len) {
|
||||||
0 => try self.handler.nextLine(),
|
0 => try self.handler.vt(.next_line, {}),
|
||||||
else => {
|
else => {
|
||||||
log.warn("invalid next line command: {f}", .{action});
|
log.warn("invalid next line command: {f}", .{action});
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
} else log.warn("unimplemented ESC callback: {f}", .{action}),
|
},
|
||||||
|
|
||||||
// HTS - Horizontal Tab Set
|
// HTS - Horizontal Tab Set
|
||||||
'H' => switch (action.intermediates.len) {
|
'H' => switch (action.intermediates.len) {
|
||||||
|
|
@ -1916,13 +1924,13 @@ pub fn Stream(comptime Handler: type) type {
|
||||||
},
|
},
|
||||||
|
|
||||||
// RI - Reverse Index
|
// RI - Reverse Index
|
||||||
'M' => if (@hasDecl(T, "reverseIndex")) switch (action.intermediates.len) {
|
'M' => switch (action.intermediates.len) {
|
||||||
0 => try self.handler.reverseIndex(),
|
0 => try self.handler.vt(.reverse_index, {}),
|
||||||
else => {
|
else => {
|
||||||
log.warn("invalid reverse index command: {f}", .{action});
|
log.warn("invalid reverse index command: {f}", .{action});
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
} else log.warn("unimplemented ESC callback: {f}", .{action}),
|
},
|
||||||
|
|
||||||
// SS2 - Single Shift 2
|
// SS2 - Single Shift 2
|
||||||
'N' => if (@hasDecl(T, "invokeCharset")) switch (action.intermediates.len) {
|
'N' => if (@hasDecl(T, "invokeCharset")) switch (action.intermediates.len) {
|
||||||
|
|
@ -1960,13 +1968,13 @@ pub fn Stream(comptime Handler: type) type {
|
||||||
} else log.warn("unimplemented ESC callback: {f}", .{action}),
|
} else log.warn("unimplemented ESC callback: {f}", .{action}),
|
||||||
|
|
||||||
// RIS - Full Reset
|
// RIS - Full Reset
|
||||||
'c' => if (@hasDecl(T, "fullReset")) switch (action.intermediates.len) {
|
'c' => switch (action.intermediates.len) {
|
||||||
0 => try self.handler.fullReset(),
|
0 => try self.handler.vt(.full_reset, {}),
|
||||||
else => {
|
else => {
|
||||||
log.warn("invalid full reset command: {f}", .{action});
|
log.warn("invalid full reset command: {f}", .{action});
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
} else log.warn("unimplemented ESC callback: {f}", .{action}),
|
},
|
||||||
|
|
||||||
// LS2 - Locking Shift 2
|
// LS2 - Locking Shift 2
|
||||||
'n' => if (@hasDecl(T, "invokeCharset")) switch (action.intermediates.len) {
|
'n' => if (@hasDecl(T, "invokeCharset")) switch (action.intermediates.len) {
|
||||||
|
|
@ -2014,14 +2022,16 @@ pub fn Stream(comptime Handler: type) type {
|
||||||
} else log.warn("unimplemented invokeCharset: {f}", .{action}),
|
} else log.warn("unimplemented invokeCharset: {f}", .{action}),
|
||||||
|
|
||||||
// Set application keypad mode
|
// Set application keypad mode
|
||||||
'=' => if (@hasDecl(T, "setMode") and action.intermediates.len == 0) {
|
'=' => switch (action.intermediates.len) {
|
||||||
try self.handler.setMode(.keypad_keys, true);
|
0 => try self.handler.vt(.set_mode, .{ .mode = .keypad_keys }),
|
||||||
} else log.warn("unimplemented setMode: {f}", .{action}),
|
else => log.warn("unimplemented setMode: {f}", .{action}),
|
||||||
|
},
|
||||||
|
|
||||||
// Reset application keypad mode
|
// Reset application keypad mode
|
||||||
'>' => if (@hasDecl(T, "setMode") and action.intermediates.len == 0) {
|
'>' => switch (action.intermediates.len) {
|
||||||
try self.handler.setMode(.keypad_keys, false);
|
0 => try self.handler.vt(.reset_mode, .{ .mode = .keypad_keys }),
|
||||||
} else log.warn("unimplemented setMode: {f}", .{action}),
|
else => log.warn("unimplemented setMode: {f}", .{action}),
|
||||||
|
},
|
||||||
|
|
||||||
else => if (@hasDecl(T, "escUnimplemented"))
|
else => if (@hasDecl(T, "escUnimplemented"))
|
||||||
try self.handler.escUnimplemented(action)
|
try self.handler.escUnimplemented(action)
|
||||||
|
|
|
||||||
|
|
@ -243,6 +243,10 @@ pub const StreamHandler = struct {
|
||||||
.tab_clear_all => self.terminal.tabClear(.all),
|
.tab_clear_all => self.terminal.tabClear(.all),
|
||||||
.tab_set => self.terminal.tabSet(),
|
.tab_set => self.terminal.tabSet(),
|
||||||
.tab_reset => self.terminal.tabReset(),
|
.tab_reset => self.terminal.tabReset(),
|
||||||
|
.index => try self.index(),
|
||||||
|
.next_line => try self.nextLine(),
|
||||||
|
.reverse_index => try self.reverseIndex(),
|
||||||
|
.full_reset => try self.fullReset(),
|
||||||
.set_mode => try self.setMode(value.mode, true),
|
.set_mode => try self.setMode(value.mode, true),
|
||||||
.reset_mode => try self.setMode(value.mode, false),
|
.reset_mode => try self.setMode(value.mode, false),
|
||||||
.save_mode => self.terminal.modes.save(value.mode),
|
.save_mode => self.terminal.modes.save(value.mode),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue