diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-29 07:56:59 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:16 -0300 |
| commit | 0b359e1f99f1a2630969c1c00b6c71db3b794ccd (patch) | |
| tree | 3c35b7e20237ce0690372c233ceeb96a244904a9 /src/ninep | |
| parent | 411d0b6059192b75853e220e1242b694ae461a3e (diff) | |
| download | pardes-0b359e1f99f1a2630969c1c00b6c71db3b794ccd.tar.gz pardes-0b359e1f99f1a2630969c1c00b6c71db3b794ccd.zip | |
A Save refused for want of a name counts as a failure, so its announcement goes
A builtin that would open a prompt nobody can answer (Save with no name
on a scratch, through a ctl write) failed the write without saying a
failure, so the announcement rule missed it and `msg N Save` stayed.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/ninep')
| -rw-r--r-- | src/ninep/ctl.zig | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/ninep/ctl.zig b/src/ninep/ctl.zig index 4f52d661..6a8a37be 100644 --- a/src/ninep/ctl.zig +++ b/src/ninep/ctl.zig @@ -1504,6 +1504,11 @@ test "a builtin's Verbose announcement is logged only when it succeeds, its fail const serial = serialOf(p); var want: [64]u8 = undefined; const said_exit = try std.fmt.bufPrint(&want, "msg {d} Exit\n", .{serial}); + // A Save a ctl write gives no name to, on a scratch: refused, no Save. + const scratch = try th.newPane(p); + var said_save_buf: [64]u8 = undefined; + try testing.expectEqual(E.INVAL, wr(p, Node.of(scratch, .ctl), "Save\n").errno()); + try testing.expect(!th.logHas(p, try std.fmt.bufPrint(&said_save_buf, "msg {d} Save\n", .{scratch}))); // Refused as it runs, through a click: the write fails, and no Exit. const f = &p.panes[0].?.file.?; f.saved_revision = f.revision -% 1; |
