summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-30 21:40:57 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:17 -0300
commit86ce788e925bd19297213ef14cf02fa564ae9f10 (patch)
tree1cb4a23e74679902485f8f34a2febd9cf2844e99
parentf8710ab27b54bf0241ad2ed629ccc98aaa619709 (diff)
downloadpardes-86ce788e925bd19297213ef14cf02fa564ae9f10.tar.gz
pardes-86ce788e925bd19297213ef14cf02fa564ae9f10.zip
Docs give a look miss's real words, that event is one reader's, the real cap on held reads, Dump's Restore word, a reused command pane's runs, and the one-write trap
fs.md's look misses now read as the editor says them (<path>:99 has no line 99, has no page N); event says a second reading open fails file in use; held reads say the 64 state-holding opens are the real cap, under the 128 a connection may park; Dump says it adds a Restore word to the workspace tag; a reused command pane's body is said to keep each run under a % line, with how to take the last. The 9P skill gains the trap that bash's printf to a mounted ctl arrives one write per line. Co-Authored-By: Claude Opus 5.5 <[email protected]>
-rw-r--r--.agents/skills/pardes-9p/SKILL.md4
-rw-r--r--docs/fs.md31
2 files changed, 26 insertions, 9 deletions
diff --git a/.agents/skills/pardes-9p/SKILL.md b/.agents/skills/pardes-9p/SKILL.md
index 85f26ca5..83675b74 100644
--- a/.agents/skills/pardes-9p/SKILL.md
+++ b/.agents/skills/pardes-9p/SKILL.md
@@ -128,6 +128,10 @@ every connection is cut: dial again and restart the mount.
- A word no builtin knows is a shell command (`exit 127` if a typo).
- `lock` needs a held fd: `exec 3>$p/ctl; echo lock >&3; ...; exec 3>&-`.
- plan9port `9p write` truncates: it replaces a whole `body`.
+- Through a mount, bash's `printf 'a\nb\n' > ctl` arrives one write per
+ line, so a block that should be refused whole runs its good lines before
+ the bad one fails. Send a multi-line block as one write: `cat block >
+ "$p/ctl"`.
## No mount: the Python client
diff --git a/docs/fs.md b/docs/fs.md
index 15f490ec..43980973 100644
--- a/docs/fs.md
+++ b/docs/fs.md
@@ -190,9 +190,11 @@ files`.
`pty/data`, `pty/run` before its answer) waits in the editor and is answered
when news comes. A second read on that open meanwhile fails `file in use`.
A read the client flushed is dropped. One connection holds at most 128
-reads at once; the next is refused `too many reads waiting: 128`. A mount
-(9ns) is one connection, so that is 128 followers through it, and the mount
-keeps answering everything else beside them. Through a FUSE mount bash's
+reads at once; the next is refused `too many reads waiting: 128`. Every
+held read is on an open that keeps state, and those are 64 in the session
+(above), so 64 is the real cap on reads held at once, through one
+connection or many. A mount (9ns) is one connection, and it keeps
+answering everything else beside its held reads. Through a FUSE mount bash's
`read -t` cannot time out: wrap the loop in `timeout N`.
**Stats.** A file whose text is kept has its real length: a pane's
@@ -237,9 +239,11 @@ go. An `exec` line's blanks at either end are trimmed.
terminal a word is always listed, rows spelled `@p3:12:5-9`.
A miss logs `err <serial> look: ...` (`no match for "zzq:#3"` quoting what
-was written when nothing by that name exists; `<path>: no match for regexp`
-or `address out of range` when the address fails), opens nothing, and leaves
-`look` reading empty; the write succeeds.
+was written when nothing by that name exists; `<path>:99 has no line 99`
+for a line past a file's end, `<path> has no page 99` for a PDF's page;
+`<path>: no match for regexp` or `<path>: address out of range` when an
+address fails), opens nothing, and leaves `look` reading empty; the write
+succeeds. A path too long to repeat whole gives up its middle to `…`.
A line written to `exec` is a middle click:
@@ -274,7 +278,12 @@ A line written to `exec` is a middle click:
says `run <serial> <line>` and `exit <serial> <N|?>`; `exec` reads back its
serial. A typo ends `exit 127`. The directory's next command reuses a
finished command pane, below what it showed; one still running gets a
- second pane. From a pane whose directory is gone nothing runs: `exec:
+ second pane. A reused pane's `body` keeps every earlier run above a
+ `% <line>` row naming each command, so to take only the last run's
+ output read from after the last `% ` row:
+ `awk '/^% /{out=""; next} {out = out $0 "\n"} END {printf "%s", out}' body`.
+ From a column's or the workspace's tag (or `/tagexec`, `col/<n>/exec`)
+ a command always runs as a command pane, in the session's directory. From a pane whose directory is gone nothing runs: `exec:
<dir>: no such directory` (ENOENT).
The root's `look` and `exec` act at the active pane and log as that pane's
@@ -322,7 +331,9 @@ Writes take settings and session builtins (`scope = .session` in
a pane's `get` refuse the same way with their own word. A `+New` scratch
under 100 bytes, or a command's output, is never asked about.
- `Dump` writes `pardes-<date>-<time>.zon` (UTC) in `DumpDir`
- ([config.md](config.md#dumps)) and logs `dump <path>`. `Restore [path]`
+ ([config.md](config.md#dumps)), logs `dump <path>`, and adds a `Restore
+ <path>` word naming it to the workspace tag (the last dump's, replacing
+ an earlier one's). `Restore [path]`
replaces every pane (bare: the last dump this session wrote). The Restore
write is answered, then **every connection is hung up**: dial again, and
restart a 9ns mount. The new log has a `new` per pane, `restore <path>`,
@@ -584,7 +595,9 @@ Holding `event` open takes the pane's Look and Exec clicks: they come to the
reader as records instead of acting, as do lines written to the pane's own
`look`/`exec` (or the root's while it has the keyboard). A record is acme's
`<origin><action><q0> <q1> <flag> <n> <text>\n`; read `n` **bytes** of
-text, which may hold newlines.
+text, which may hold newlines. One open reads a pane's `event` at a time,
+as acme's is one window's: a second open for reading fails `file in use`
+(EBUSY) until the first is closed.
- origin: `E` a 9P write to body or tag, `F` other files and the editor's
own lines, `K` keyboard, `M` mouse.