summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-15 16:37:35 -0300
committerGabriel Schneider <[email protected]>2026-09-15 17:24:42 -0300
commit89b3c352378eb0284b521722a13c4245cab41b0c (patch)
treed2cff53881d58dfcbea55e7183abface03829d37
parent1ab4c071be58033d5452f69797ca8e2c32240cff (diff)
downloadpardes-89b3c352378eb0284b521722a13c4245cab41b0c.tar.gz
pardes-89b3c352378eb0284b521722a13c4245cab41b0c.zip
Normalize keypad Enter in native and attached TTY input
-rw-r--r--src/tty/tty.zig31
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,