summaryrefslogtreecommitdiff
path: root/.agents
diff options
context:
space:
mode:
Diffstat (limited to '.agents')
-rw-r--r--.agents/skills/pardes-9p/SKILL.md21
1 files changed, 14 insertions, 7 deletions
diff --git a/.agents/skills/pardes-9p/SKILL.md b/.agents/skills/pardes-9p/SKILL.md
index 7f33937f..1fe2aed8 100644
--- a/.agents/skills/pardes-9p/SKILL.md
+++ b/.agents/skills/pardes-9p/SKILL.md
@@ -17,7 +17,9 @@ Check `$NINE_MOUNT` first. `9ns --mntgen` sets it for every process it starts
(an interactive shell on this machine runs inside one), so a set `$NINE_MOUNT`
means the posted-9P registry is mounted there, usually `/mnt/9p`, and each
running editor is a directory `$NINE_MOUNT/pardes/<pid>/` (a `--detach=NAME`
-session's is `pardes/NAME/`). Inside a pane, `$PARDES_9P` is that session's
+session's is `pardes/NAME/`; `pardes --detach=NAME &` runs the editor as
+that process, so `$!` is its pid, and `$m/status`'s first line, `pid <n>`,
+says the same). Inside a pane, `$PARDES_9P` is that session's
socket (`/run/user/1000/pardes-9p-<pid or NAME>.sock`), which names the
directory either way, and `$PARDES_PANE` is the calling pane's serial:
@@ -84,7 +86,8 @@ $m/ctl the settings, one a line as a write takes them; write a setting or
matching a command line's first word; Exit and Restore refuse once,
logging `unsaved <serial> <name>` for each unsaved pane, then failing the write with
`<name>: Modified (Exit again to discard)` for one or `4 unsaved panes: Modified (Exit
- again to discard)` for more (Restore's says `Restore again`); a second refusal names only the panes edited since the last,
+ again to discard)` for more (Restore's says `Restore again`); on screen the list stays
+ in the one +Unsaved pane under a short notice (`3 unsaved panes — Exit again to discard`); a second refusal names only the panes edited since the last,
as acme's does, and the same word again with nothing edited since DISCARDS them all -- not a retry, unlike lock's `file in use`;
Kill stops a command pane's whole line, `&` jobs included; of a line typed into a
shell only the foreground job, and the shell decides the rest (of `sleep 30; echo done`
@@ -94,6 +97,8 @@ $m/ctl the settings, one a line as a write takes them; write a setting or
column word Delcol, which closes that pane's column) go to $m/pane/<n>/ctl
$m/commands every builtin: `Word`, `Word arg`, then `root`, `pane` or `both` (which ctl takes
it), a setting's values comma-joined, then ` -- ` and one sentence of what it does
+$m/recent files opened lately, closed ones too, most recent first: `open|closed <path>`;
+ lost a file you closed? read this, or run Recent and look at its row to reopen it
$m/layout one line per column (16 columns at most: Newcol past that fails, no space for a column): serial index x width current|notcurrent empty|full pane-serials...; active <serial>
$m/tag the workspace tag (> replaces, >> appends, one line); $m/col/<serial>/tag a column's (serials stay, as panes' do)
$m/tagexec a word as a click in the workspace tag (pane/<n>/tagexec: in that pane's tag); every exec
@@ -162,9 +167,10 @@ it again. Each command line runs once whole, however a mount cuts a big write; a
line with no newline runs when the open closes, and an Edit block still open
then fails there (an `err`: ``unmatched `{'``, or an a/c/i text with no `.`
line), changing nothing. One rule: a builtin that fails, whether through a
-ctl, look, exec, tagexec or a column's exec, fails the write (EINVAL for a
-malformed line, else EIO or an errno that fits) and logs one `err` with the
-reason, no `msg`. A look that finds nothing is no failure: it answers
+ctl (a pane's pty/ctl `exec` too), look, exec, tagexec or a column's exec,
+fails the write (EINVAL for a malformed line, ENOENT for what is not there --
+a directory gone, a Find or Grep with no hit -- else EIO or an errno that
+fits) and logs one `err` with the reason, no `msg`. A look that finds nothing is no failure: it answers
nothing and logs one `err`. A command line run in a command pane is judged
by its `exit` record. A word no builtin
knows (a typo included) is a command line: written at a terminal at its
@@ -191,7 +197,8 @@ is followed by two, its argument and where it came from; write all three back
as read (one write or three) and it runs once with its argument. `Tty`'s argument is a shell
(`Tty fish`), and `Tty` on a pane's ctl opens a new terminal pane. After a
Restore, panes have new serials (`restored <old> <new>` in the log), a
-command pane shows `exit ?` and does not run again, and REPLs are unbound. Multi-line code
+command pane shows how it ended, `exit N` (`exit ?` if it was still running when
+dumped), and does not run again, and REPLs are unbound. Multi-line code
written to `pty/data` should be a bracketed paste, `\e[200~<code>\e[201~`,
then, in a separate write once the REPL has echoed the paste (Python 3.13+
takes a `\r` read with the paste as part of it, even for one line), `\r`.
@@ -398,7 +405,7 @@ Only terminal panes have `pty/`. Write keystroke bytes to `pty/data`, not
command. For an interactive application, send its actual input bytes; `b'\x03'`
is Ctrl-C, and Ctrl-U is `b'\x15'` where that application supports it. These go
to the child terminal, not to Pardes key bindings. `pty/ctl` takes `winsize C R`,
-`sig INT` and `exec`, one per line. `pty/status` reads one line: the pty's cols,
+`sig INT` and `exec` (restart the shell; a directory that is gone fails ENOENT), one per line. `pty/status` reads one line: the pty's cols,
rows and busy (1 while a command runs or text is typed at the prompt).
`client.screen()` returns `cols`, `rows`, `cursor`, `styles` and row-major