diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-15 16:37:35 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-09-15 17:24:42 -0300 |
| commit | 89b3c352378eb0284b521722a13c4245cab41b0c (patch) | |
| tree | d2cff53881d58dfcbea55e7183abface03829d37 /src/tty | |
| parent | 1ab4c071be58033d5452f69797ca8e2c32240cff (diff) | |
| download | pardes-89b3c352378eb0284b521722a13c4245cab41b0c.tar.gz pardes-89b3c352378eb0284b521722a13c4245cab41b0c.zip | |
Normalize keypad Enter in native and attached TTY input
Diffstat (limited to 'src/tty')
| -rw-r--r-- | src/tty/tty.zig | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/tty/tty.zig b/src/tty/tty.zig index 0379e59c..1927577b 100644 --- a/src/tty/tty.zig +++ b/src/tty/tty.zig @@ -1443,6 +1443,7 @@ fn effCp(key: vaxis.Key) u21 { fn mapKey(cp: u21) u21 { return switch (cp) { + vaxis.Key.kp_enter => pardes.Key.enter, vaxis.Key.up => pardes.Key.up, vaxis.Key.down => pardes.Key.down, vaxis.Key.left => pardes.Key.left, @@ -1477,6 +1478,36 @@ fn keyEvent(key: vaxis.Key) pardes.Event { } }; } +test "keypad Enter matches Return for editor input terminal writes and paste" { + for ([_]u21{ vaxis.Key.enter, vaxis.Key.kp_enter }) |codepoint| { + const key: vaxis.Key = .{ .codepoint = codepoint }; + const event = keyEvent(key); + try std.testing.expectEqual(pardes.Key.enter, event.key.cp); + try std.testing.expectEqualStrings("\n", pasteBytes(key)); + { + const core = try pardes.Pardes.init(std.testing.allocator, .{ .tty_only = true }); + defer core.deinit(); + const pane = try core.setTestFile("ab"); + core.update(.{ .key = .{ .cp = 'i' } }); + core.update(event); + try std.testing.expectEqualStrings("\nab", pane.file.?.content); + } + { + const core = try pardes.Pardes.init(std.testing.allocator, .{ .tty_only = true }); + defer core.deinit(); + core.panes[0].?.mode = .tty; + while (core.nextEffect()) |_| {} + core.update(event); + var written: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer written.deinit(); + while (core.nextEffect()) |effect| { + if (effect == .write) try written.writer.writeAll(effect.write.bytes.slice()); + } + try std.testing.expectEqualStrings("\r", written.written()); + } + } +} + fn mouseEvent(m: vaxis.Mouse) ?pardes.Event { const button: pardes.Mouse.Button = switch (m.button) { .left => .left, |
