summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-29 00:58:36 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:15 -0300
commite0aadf23d5ff5759fd53267dbafa8e278a324107 (patch)
tree99709e673fbe2bfeaa84950cc09a97d019aa6b4f
parent7c4cb0a7badecdd91e910c64b824eff68eae1b84 (diff)
downloadpardes-e0aadf23d5ff5759fd53267dbafa8e278a324107.tar.gz
pardes-e0aadf23d5ff5759fd53267dbafa8e278a324107.zip
The tree's README and fs.md answer round 8's doc questions
The README's log line names newcol, delcol, ask, restored and restoredcol; it says what $m is under 9ns --unix; and a build that embeds no sources no longer lists src/ (derived from the build, and tested). fs.md says what the rest of a typed line does after Kill for each shell (fish runs on, bash abandons it), that Exec <text> in a .py pane runs a command and never the REPL, and why appending to a tag wants printf and a leading blank. Co-Authored-By: Claude Opus 5.5 <[email protected]>
-rw-r--r--docs/fs.md16
-rw-r--r--src/fs-help.txt8
-rw-r--r--src/fs.zig13
3 files changed, 28 insertions, 9 deletions
diff --git a/docs/fs.md b/docs/fs.md
index 46fe9f86..742506f1 100644
--- a/docs/fs.md
+++ b/docs/fs.md
@@ -181,8 +181,10 @@ in a shell running without job control (`set +m`) the job shares the
shell's group, so there is none to signal: Kill says `Kill: no job to
signal`, and a write of it to `ctl` fails with that; with nothing running
it says `Kill: nothing running`; and, of a typed line, only the
-foreground job, so of `sleep 30; echo done` typed at a prompt the `echo`
-still runs once the `sleep` is stopped --
+foreground job, after which what the rest of the line does is the shell's
+affair: of `sleep 30; echo done` typed at a prompt, fish goes on and runs
+the `echo`, and bash abandons the line, as each does when a job it waits
+on is killed --
and reads every setting there is, one a line, in the words a write of it
takes (`Verbose on`, `WindowOpacity 70`, `PanelSlide off`, `DumpDir
<the directory in effect>`, `LocationsConfig ...`), so writing what it reads
@@ -344,7 +346,9 @@ terminal's while a program other than its shell holds the tty -- after
Ctrl-D the shell would run the text, so nothing is sent and the pane says
so. Still commands, whatever is bound: a word in a tag (so
the tag is how to run `make` from that file), `Exec <text>` run by name
-(typed, a 2-1 chord onto `Exec`, a `ctl` line) and a command word @`cmd` in
+(typed, a 2-1 chord onto `Exec`, a `ctl` line) -- in a `.py` pane bound to
+a REPL, `Exec print(1)` runs `print(1)` as a command, never in the REPL --
+and a command word @`cmd` in
the text, looked at or clicked (`# @`pytest -x`` in a script). A 9P `exec`
is no gesture and is never sent: a script writes to the REPL pane's
`pty/data`, multi-line code as a bracketed paste (`\e[200~<code>\e[201~`,
@@ -544,8 +548,10 @@ words (`Del`, `Put` and the rest) with it, since they are that text until
you edit it, so `echo Make > tag` leaves only `Make` -- a truncating write
drops the one newline that ends what it wrote, which would draw an empty
row, and keeps any other; append with `>>` to
-keep them, with `printf ' Make' >> tag`: `echo` ends its word with a
-newline, which starts a new line of the tag. The clearing is an edit of the tag like a typed one and its undo
+keep them, with `printf ' Make' >> tag`. The leading blank is needed: the
+tag reads back with no blank after its last word, so `printf Make >> tag`
+glues `Make` onto it; and `echo ' Make' >> tag` ends with a newline, which
+starts a new line of the tag. The clearing is an edit of the tag like a typed one and its undo
history is kept: `u` in the tag brings back the text it cleared, words
included.
diff --git a/src/fs-help.txt b/src/fs-help.txt
index 08a7e262..73a49e9b 100644
--- a/src/fs-help.txt
+++ b/src/fs-help.txt
@@ -5,7 +5,8 @@ index one line per pane: serial, kind (text|term|pdf|image), dirty flag, n
status pid, version and pane count
look write a line: a right click on it at the active pane; read: the serials it touched
exec write a line: a middle click, an editor command word or a shell line; read the same
-log events: new/del/rename/save <serial> <name>, run/exit/send <serial> ..., dump/restore <path>, msg, err
+log events: new/del/rename/save <serial> <name>, newcol/delcol <column serial>, run/exit/send <serial> ...,
+ ask <serial> <what> <choices>, dump/restore <path>, restored/restoredcol <old> <new>, msg, err
screen rendered screen as JSON, frozen from open to close
listeners the session's dial addresses
focus the serial of the pane with the keyboard (empty on a column tag); write a serial to give it the keyboard
@@ -18,9 +19,10 @@ col/<n>/ctl Delcol, Joincol, New or Tty on that column; col/<n>/exec a word as a
pane/new open it to make a pane (named +New) in the active column, filling it if empty; the read answers its serial
pane/<n>/ name body tag ctl addr dot limit data xdata sel dirty mark scroll errors (write-only:
appended to its directory's +Errors pane) event look exec, pty/ on terminals; rmdir closes
-os/, src/ the host filesystem; the editor's own sources (-Dembed-sources=true builds only)
+os/, src/ the host filesystem; the editor's own sources
-Below, $m is the mount: $NINE_MOUNT/pardes/<pid, or NAME of --detach=NAME>; PARDES_MOUNT in a Tty9p shell.
+Below, $m is the mount: $NINE_MOUNT/pardes/<pid, or NAME of --detach=NAME>; PARDES_MOUNT in a Tty9p shell;
+$NINE_MOUNT itself under `9ns --unix SOCKET -- cmd`, which mounts one session as its root.
cat $m/index which panes exist
n=$(cat $m/pane/new) make a pane, take its serial
diff --git a/src/fs.zig b/src/fs.zig
index 65e5d276..8be728a6 100644
--- a/src/fs.zig
+++ b/src/fs.zig
@@ -19,7 +19,14 @@ const Reply = tree.Reply;
const E = tree.E;
/// The served README; tree.zig answers it.
-pub const help = @embedFile("fs-help.txt");
+/// The tree's README; a build that embeds no sources lists no src/.
+pub const help = help: {
+ const raw = @embedFile("fs-help.txt");
+ if (limits.embedded_sources) break :help raw;
+ const both = "os/, src/ the host filesystem; the editor's own sources";
+ const at = std.mem.indexOf(u8, raw, both) orelse @compileError("fs-help.txt no longer lists os/, src/");
+ break :help raw[0..at] ++ "os/ the host filesystem" ++ raw[at + both.len ..];
+};
/// Host filesystem nodes: the root, and one hashed node per path a client walked to.
pub const os_root: u64 = (1 << 63) + 2;
@@ -1364,3 +1371,7 @@ pub fn unmount(p: *Pardes, name: []const u8) !void {
test {
_ = tree;
}
+
+test "the tree's README lists src/ only when the build serves it" {
+ try std.testing.expectEqual(limits.embedded_sources, std.mem.indexOf(u8, help, "src/") != null);
+}