Add physical keyboard parity aliases
This commit is contained in:
@@ -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" {
|
||||
|
||||
Reference in New Issue
Block a user