diff options
Diffstat (limited to '.agents')
| -rw-r--r-- | .agents/skills/pardes-9p/SKILL.md | 21 |
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 |
