Add physical keyboard parity aliases

This commit is contained in:
slhx agent
2026-06-21 14:30:31 +02:00
parent 616eea670b
commit e96d33edb9
5 changed files with 156 additions and 10 deletions
+14
View File
@@ -18,6 +18,10 @@ pub const Key = enum {
arrow_right,
arrow_up,
arrow_down,
home,
end,
page_up,
page_down,
};
pub const Event = union(enum) {
@@ -82,6 +86,10 @@ pub fn normalize(raw: []const u8) Event {
if (std.mem.eql(u8, raw, "\x1b[C")) return .{ .key = .arrow_right };
if (std.mem.eql(u8, raw, "\x1b[A")) return .{ .key = .arrow_up };
if (std.mem.eql(u8, raw, "\x1b[B")) return .{ .key = .arrow_down };
if (std.mem.eql(u8, raw, "\x1b[H") or std.mem.eql(u8, raw, "\x1b[1~") or std.mem.eql(u8, raw, "\x1b[7~")) return .{ .key = .home };
if (std.mem.eql(u8, raw, "\x1b[F") or std.mem.eql(u8, raw, "\x1b[4~") or std.mem.eql(u8, raw, "\x1b[8~")) return .{ .key = .end };
if (std.mem.eql(u8, raw, "\x1b[5~")) return .{ .key = .page_up };
if (std.mem.eql(u8, raw, "\x1b[6~")) return .{ .key = .page_down };
if (std.unicode.utf8ValidateSlice(raw) and isPrintableText(raw)) return .{ .text = raw };
return .{ .unknown = raw };
@@ -199,6 +207,12 @@ test "regular: raw terminal bytes normalize to stable editor input events" {
try expectEventLabel("\x1b[C", "key:arrow_right");
try expectEventLabel("\x1b[A", "key:arrow_up");
try expectEventLabel("\x1b[B", "key:arrow_down");
try expectEventLabel("\x1b[H", "key:home");
try expectEventLabel("\x1b[1~", "key:home");
try expectEventLabel("\x1b[F", "key:end");
try expectEventLabel("\x1b[4~", "key:end");
try expectEventLabel("\x1b[5~", "key:page_up");
try expectEventLabel("\x1b[6~", "key:page_down");
}
test "regular: captured trace can be replayed" {