diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-30 11:52:56 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:17 -0300 |
| commit | ff161c1200e57f10bfc5d5b7dc6fc573967b9303 (patch) | |
| tree | 97cef5a076555c5beb7a7416c810bc95fee88ce8 | |
| parent | 7c329baddb0d45ce7937cf29941dde861f9ea27f (diff) | |
| download | pardes-ff161c1200e57f10bfc5d5b7dc6fc573967b9303.tar.gz pardes-ff161c1200e57f10bfc5d5b7dc6fc573967b9303.zip | |
acme's Tab, Indent, Local, Incl and Abort are refused as acme words pardes has not, never run as shell commands
The five were missing from the refused list, so at an exec or a ctl a
typed `Indent on` fell through to the shell as a command named Indent.
pardes has no equivalent for any of them: its tabs and indentation follow
the file, commands always run in the pane's directory, and there is no
include path or abort. They now get the same "invalid: acme's X is not a
pardes builtin" as Zerox or Send.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
| -rw-r--r-- | docs/fs.md | 3 | ||||
| -rw-r--r-- | src/exec.zig | 5 | ||||
| -rw-r--r-- | src/ninep/ctl.zig | 2 |
3 files changed, 8 insertions, 2 deletions
@@ -214,7 +214,8 @@ A line written to `exec` is a middle click: `wrong #args in control message "Msg"`. - acme's words run as pardes's where it has one (`Put` is `Save`, `Delete` a `Del` that does not ask); the rest (`Get`, `Putall`, `Snarf`, `Cut`, - `Paste`, `Zerox`, `Sort`, `Load`, `ID`, `Send`) are refused, `invalid: + `Paste`, `Zerox`, `Sort`, `Load`, `ID`, `Send`, `Tab`, `Indent`, `Local`, + `Incl`, `Abort`) are refused, `invalid: acme's Get is not a pardes builtin: ...`, never run as commands. So is a GUI-only builtin (`Fonts`) on another frontend. - anything else is a command line, at most 1024 bytes. At a terminal idle diff --git a/src/exec.zig b/src/exec.zig index 5b0b0250..eed9297a 100644 --- a/src/exec.zig +++ b/src/exec.zig @@ -828,6 +828,11 @@ pub const acme_words = [_]struct { acme: []const u8, pardes: ?[]const u8, hint: .{ .acme = "Load", .pardes = null, .hint = ": Restore loads a dump" }, .{ .acme = "ID", .pardes = null }, .{ .acme = "Send", .pardes = null }, + .{ .acme = "Tab", .pardes = null }, + .{ .acme = "Indent", .pardes = null }, + .{ .acme = "Local", .pardes = null }, + .{ .acme = "Incl", .pardes = null }, + .{ .acme = "Abort", .pardes = null }, }; pub fn executeBuiltinLine(p: *Pardes, id: usize, txt: []const u8) bool { diff --git a/src/ninep/ctl.zig b/src/ninep/ctl.zig index d86d6047..98980f2c 100644 --- a/src/ninep/ctl.zig +++ b/src/ninep/ctl.zig @@ -2439,7 +2439,7 @@ test "acme's words run as pardes's (Put is Save, Delete a Del that does not ask) const p = try withFile(testing.allocator, "x\n"); defer p.deinit(); const serial = serialOf(p); - for ([_][]const u8{ "Snarf\n", "Putall\n", "Zerox\n", "Get\n" }) |line| { + for ([_][]const u8{ "Snarf\n", "Putall\n", "Zerox\n", "Get\n", "Tab\n", "Indent\n", "Local\n", "Incl\n", "Abort\n" }) |line| { for ([_]u64{ Node.of(serial, .ctl), Node.of(serial, .exec) }) |node| { const r = wr(p, node, line); try testing.expectEqual(E.INVAL, r.errno()); |
