input: encode help and context menu keys

This commit is contained in:
Mitchell Hashimoto
2026-09-04 09:42:50 -07:00
parent 37e3cdd2d2
commit cc3fd8a773
2 changed files with 39 additions and 0 deletions

View File

@@ -88,6 +88,8 @@ pub const keys = keys: {
result.set(.delete, pcStyle("\x1b[3;{}~") ++ .{Entry{ .sequence = "\x1B[3~" }});
result.set(.page_up, pcStyle("\x1b[5;{}~") ++ .{Entry{ .sequence = "\x1B[5~" }});
result.set(.page_down, pcStyle("\x1b[6;{}~") ++ .{Entry{ .sequence = "\x1B[6~" }});
result.set(.help, pcStyle("\x1b[28;{}~") ++ .{Entry{ .sequence = "\x1B[28~" }});
result.set(.context_menu, pcStyle("\x1b[29;{}~") ++ .{Entry{ .sequence = "\x1B[29~" }});
// Function Keys. todo: f26-f35 but we need to add to input.Key
result.set(.f1, pcStyle("\x1b[1;{}P") ++ .{Entry{ .sequence = "\x1BOP" }});

View File

@@ -2580,6 +2580,43 @@ test "legacy: f13 through f25" {
}
}
test "legacy: help and context menu" {
const Case = struct { key: key.Key, code: u8 };
const cases = [_]Case{
.{ .key = .help, .code = 28 },
.{ .key = .context_menu, .code = 29 },
};
var buf: [128]u8 = undefined;
var expected_buf: [32]u8 = undefined;
for (cases) |case| {
{
var writer: std.Io.Writer = .fixed(&buf);
try legacy(&writer, .{ .key = case.key }, .{});
const expected = try std.fmt.bufPrint(
&expected_buf,
"\x1b[{}~",
.{case.code},
);
try testing.expectEqualStrings(expected, writer.buffered());
}
{
var writer: std.Io.Writer = .fixed(&buf);
try legacy(&writer, .{
.key = case.key,
.mods = .{ .ctrl = true },
}, .{ .modify_other_keys_state_2 = true });
const expected = try std.fmt.bufPrint(
&expected_buf,
"\x1b[{};5~",
.{case.code},
);
try testing.expectEqualStrings(expected, writer.buffered());
}
}
}
test "legacy: left_shift+tab" {
var buf: [128]u8 = undefined;
var writer: std.Io.Writer = .fixed(&buf);