From cc3fd8a773300371e2d1f41265128a7bf10adfa2 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 4 Sep 2026 09:42:50 -0700 Subject: [PATCH] input: encode help and context menu keys --- src/input/function_keys.zig | 2 ++ src/input/key_encode.zig | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/input/function_keys.zig b/src/input/function_keys.zig index b68b26362..995e576fb 100644 --- a/src/input/function_keys.zig +++ b/src/input/function_keys.zig @@ -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" }}); diff --git a/src/input/key_encode.zig b/src/input/key_encode.zig index 2b0a668ee..75dfa2174 100644 --- a/src/input/key_encode.zig +++ b/src/input/key_encode.zig @@ -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);