summaryrefslogtreecommitdiff
path: root/.agents
Commit message (Collapse)AuthorAge
* A class with non-ASCII runes matches them: [éa-z] is taken as (é|[a-z]), a ↵Gabriel Schneider7 days
| | | | | | | | range up to 256 runes spelled out mvzr's classes hold bytes, and it refused a multibyte member as a bad expression. Rewriting the class before compiling, as ^a|^b already is, needs no mvzr patch; runes that differ only in their last byte go as one alternative (\xc3[\xa0-\xbf] for [à-ÿ]) so a 256-rune range fits the 512-operation limit, which counts the pattern as rewritten. A wider range and [^é] are refused, naming why. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The README and the 9P skill warn that plan9port's 9p write always truncates, ↵Gabriel Schneider7 days
| | | | | | | | so it replaces a body acme ignores OTRUNC, pardes honours it, and 9p write sets it on every open: a pipe into body that appended under acme replaces the text here. The fix is >> through a mount. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A pane's ctl reads acme's fields in acme's order, the undo and redo flags ↵Gabriel Schneider7 days
| | | | | | | | included, then pardes's own Where plan9port's line has whether Undo and Redo have a step, pardes's had current, so a client reading acme's fields by position read a word for a flag. The two flags now follow the tab width, as in plan9port's winctlprint, and current|notcurrent and a REPL's id come after them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* An Edit x gives each of its searches the step budget, and a search that ↵Gabriel Schneider7 days
| | | | | | | | spends it says it took too much time The budget was the compiled pattern's, spent over every search an x made: Edit ,x/x+/c/z/ over 100k lines ran out and failed, blamed on backtracking. Each search now starts with the whole budget, and one that spends it says regular expression search took too much time, gave up. (Not "too long": 9ns reads those words as ENAMETOOLONG.) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A ctl or exec line with no newline runs with its write and fails it, unless ↵Gabriel Schneider7 days
| | | | | | | | it needs more A last line with no newline was held to the close, so printf bogus > ctl answered 0 and failed only in the log, Edit ,s/zzz/y/ too. A write shorter than its Twrite is the whole of what was written (acme takes each write whole): its tail runs then and a failure is the write's. It is held only when the parser says it needs more -- an open { block, an a/c/i text -- or when the write filled its Twrite and may go on (the listener tells the core the room, msize less its header). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A ^ after | anchors its branch: ^def|^ finds lines starting either wayGabriel Schneider7 days
| | | | | | mvzr takes ^ only at its pattern's start, so in ^def|^ the second branch never matched mid-text. An alternation whose every top-level branch starts with ^ is now compiled as ^(def| ); a mix of anchored and unanchored branches is refused rather than silently wrong. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs say what the code does: body's > replaces and >> appends, an ↵Gabriel Schneider7 days
| | | | | | | | image's tag starts with its modes, a Dump's refusal names its file The SKILL's example wrote body with > and called it an append; an image's tag begins with its mode words, not its path; the Dump refusals show the dump file's path. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* addr takes a row's range, L:C-L2:C2 or L:C-C2, so a Recent, +Search or ↵Gabriel Schneider7 days
| | | | | | | | Jumplist row pastes in The rows spell a range L:C-L2:C2 (inclusive), which addr read as L:C then back L2 lines. After an L:C, a - and a number is now that range, through its last character; the docs set both spellings side by side. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs say an Edit loop that finds nothing succeeds silently, as sam's doesGabriel Schneider7 days
| | | | | | Edit ,x/zzz/c/bar/ with no match changed nothing and succeeded, which read as a failure next to s's no substitution; sam does the same, so it is kept and said. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The writes of one open of data, body or xdata are one undo stepGabriel Schneider7 days
| | | | | | bash line-buffers its stdout, so printf 'x\ny\nz\n' > data arrives as three writes and took three Undos. A write now leaves the join mark a truncation already left, so the next write on the file joins its step until the open is released; a truncation and any other edit start a step of their own. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A refusal over unsaved panes keeps its list in +Unsaved and shows a short noticeGabriel Schneider7 days
| | | | | | | | | | | Exit's refusal (and Restore's, Del's, Delcol's, get's) put its full text on a notice that went: a long list of names, gone before it was read. The list now goes into one +Unsaved pane, filled again by each refusal, a row a pane (`<name>: Modified`) and the `Exit again to discard` line; the notice is short, `3 unsaved panes — Exit again to discard`. The 9P `unsaved` records and the write's err are as they were. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Recent lists the files opened lately, closed ones too, and a jump back to a ↵Gabriel Schneider7 days
| | | | | | | | | | | | | | | | closed file reopens it A file closed by accident, its path forgotten, could not be found again: the jumplist dropped closed panes. Every file opened (a look, a Save of a scratch, a Restore, a rename) goes first in a list of 200, kept once, its dot noted when it closes, kept across sessions in $XDG_STATE_HOME/pardes/ recent. `Recent` (SPC f r) shows it in a reused +Recent, each row `path:line:col open|closed` a look reopens; /recent reads `open|closed <path>`. The jumplist keeps a closed file's entries, +Jumps marks them `(closed)`, and Back to one opens the file at its place. acme has no such thing; its dump and Load are the nearest. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs: --detach runs the editor as $!, a line with no newline fails only ↵Gabriel Schneider7 days
| | | | | | | | | | | | in the log, data reads to the end The skill said --detach forks and $! was not the editor's pid; it is, and /status agrees. A line written with no newline runs at the close, after the write is answered, so its failure is in the log alone: end lines with their newline. And `cat data` reads from the address to the end of the text, as acme's does; xdata is the range. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs: the one rule covers pty/ctl exec, misses and gone directories are ↵Gabriel Schneider7 days
| | | | | | | | | | | ENOENT, #100,#50 past the end, --detach forks The one rule's wording left out a pane's pty/ctl and the ENOENT a Find, Grep or missing directory now answers; `#100,#50` in a short text says out of range, its ends checked first; and the skill now says --detach forks, the pid being /status's. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* pty/ctl exec fails the write when the shell cannot start; a directory ↵Gabriel Schneider7 days
| | | | | | | | | | | | | removed under a shell leaves its name `exec` on pty/ctl restarted a shell in a directory that was gone, the write succeeding and the pane dead; and the pane was then renamed `<dir> (deleted)` from /proc, so a restart failed even once the directory was back. `exec` is now refused up front, ENOENT, where the directory is gone; a shell the host cannot start fails the waiting write (late failure, as a Save's); and a `(deleted)` cwd is no name to take. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs: data writes replace their range, restored command panes show their ↵Gabriel Schneider7 days
| | | | | | | | | | | | | | exit, the tag's default words, empty matches at #0, errors' fallback, tagexec and event readers, Find finds names Dogfood round 18 found these false: `>>` on data replaces the addressed range (acme's data write deletes then inserts); a restored command pane shows the `exit N` it ended with; the default tag words are `Save Tty Collapse Del`; `file:0/^/` passes over the empty match at #0; `errors` with no room logs msg records; a pane's tagexec never goes to an event reader; a scratch is named with `(pane N)` in a refusal; and /commands said Find searched the pane, where it finds file names. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs: a log stat is the whole ring, changed's three forms, terminal ↵Gabriel Schneider7 days
| | | | | | | | | | | | | +Search rows' column range, /commands in the skill, read -t through FUSE Dogfood round 17 found these false or missing: the skill said a stat of log was one record's length; fs.md's changed covered only unsaved edits; a terminal's +Search row is `@p<serial>:<line>:<cols>`, not a line alone; the skill's /commands line predated `both`, setting values and the description; bash's `read -t` never times out on a followed file through FUSE. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A detached session no frontend has sized is 160x50, not 80x24Gabriel Schneider7 days
| | | | | | | At 80x24 a script's third or fourth pane/new was refused for want of rows. `size` still sets any other size, and a frontend attaching its own. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A refusal over unsaved panes logs each as `unsaved <serial> <name>`, and its ↵Gabriel Schneider7 days
| | | | | | | | | | | | err never cuts a list Exit's refusal joined every name into one err, cut at the record's cap in mid-name, so a script could not tell which panes held it up. Each pane is now an `unsaved` record before the err, and the err names the one pane or counts them: `4 unsaved panes: Modified (Exit again to discard)`. Restore, Del and Delcol refuse the same way. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs: Kill leaves bash and fish to run the rest of a line, index rows ↵Gabriel Schneider7 days
| | | | | | | | | | | | split from the right, busy names its program, chord follow-ups, /commands rows, Exit's second refusal Dogfood round 16 took these literally and found them false: bash ran the echo after Kill as fish does; a name with spaces broke split(maxsplit=3) since the row ends with the column serial; pty/run's busy line names the program; /commands rows end in a description; a second Exit refusal names only panes edited since. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* One rule for failing builtins: the write fails, one err, no msgGabriel Schneider7 days
| | | | | | | | | | | | | | | | A builtin that failed through a ctl failed the write and logged its err, but through look, exec, tagexec or a column's exec it only said so on the message row, logged as a msg, and the write succeeded. Now every click write runs its builtin as a ctl line does (ctl.captured): a failure fails the write, with its words (EINVAL for malformed input, else EIO or what the words name), logs one err and no msg or announcement. get's Modified and a look miss are shown but logged once, as their err. A control character's refusal names its reason, a failed click reads back nothing, and look never reads back a pane closed since. The special case for a cut-short Edit through exec goes (the rule covers it); fs.md's table of exceptions becomes the one rule, as does the skill. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs: which writes fail, mark for one undo step, directory looks, the ↵Gabriel Schneider7 days
| | | | | | | | | | | | | | skill's log line Round 15's doc findings: one table of which files fail a write and which only say so; mark to make a loop's data writes one undo step; the 100-byte scratch exemption and the chord write-back in the skill; the skill's log line with ask, answer, changed, newcol, delcol and the restored records; a directory looked at opens a terminal that runs ls, and why; a plain word in a terminal is listed in +Search, its rows @p<serial>. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Newcol at the column cap says so, and a desktop session holds 16 columnsGabriel Schneider7 days
| | | | | | | | | | | Newcol with every column slot taken, or a column too narrow to split, did nothing and said nothing. It now fails (a ctl write with it) with no space for a column: 16 max (ENOSPC through 9ns), or that the column is too narrow. MAX_COLS is 16 on a desktop, 6 on the board; each column costs about 8 KB of core state (the Pardes struct grows from 1.47 MB to 1.56 MB), most of it its tag's text. fs.md and the skill give the cap. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs: the raw paste's second Enter, event flags and write-back, a new ↵Gabriel Schneider7 days
| | | | | | | | | | | | | Tty's ls Round 14's doc findings: a raw pty/data paste of more than one line needs the second \r unless it ends in a newline (not only an indented last line); the event flag bits (1 builtin, 2 expansion, 4 filename, 8 chorded, with its two records) and what writing back each record kind does; why a new Tty types ls; and the sam box's N+1 for text without a final newline (out of range). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* follow new: a log follower that starts at the endGabriel Schneider7 days
| | | | | | | | | A follower read the ring's whole history before anything new, and there was no way to skip it. Writing follow new instead of follow skips what the open froze and waits for what comes after (tail -n0 -f); fs.md and the skill say that follow replays first. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* An a, c or i text with no . line fails the Edit, as an open { doesGabriel Schneider7 days
| | | | | | | | | | sam takes the end of input as a text block's end, so a block cut short (a write that lost its tail, an open closed early) inserted half of itself. An Edit whose a, c or i text never meets its . line now fails with "a, c or i text not ended by a . line" and changes nothing, as an unclosed { does; at a close, logged as an err. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A pane has a tagexec: a word run as a click in its tagGabriel Schneider7 days
| | | | | | | | | | The workspace had /tagexec and a column its exec, but a pane's own tag could be clicked only by an event record. pane/<n>/tagexec runs each line as a click in that pane's tag (never redirected to its event reader, as a header's is not) and reads back what it touched. The README, fs.md and the skill list it. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs: sam gotchas, Restore's log order and paths, stream reads, layout's ↵Gabriel Schneider7 days
| | | | | | | | | | | | | | | | | current and active Round 13's doc findings: a sam gotchas box in the skill ($-1 with and without a final newline, N+1 at the end, ^/$ at the end, 2,1, y's leading empty piece, c's literal &, columns from 1); the skill's Restore log order made the true one (new, restore, restored, restoredcol); a relative Restore path is looked for in DumpDir then the session's directory, and a bare one takes the last dump; a follower sees each (xN) as a new line; reading data or xdata moves addr; a second read of look/exec on one fd is EOF (re-open or seek 0); /layout's current (the keyboard's column) and active (acme's activecol) defined; no room, not no rows left; why a scratch's dirty blocks nothing under 100 bytes; the changed record listed. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs say what Restore renumbers and re-runs, what Tty takes, and how a ↵Gabriel Schneider7 days
| | | | | | | | | | | | | | | range reaches a REPL Round 12's doc findings: the README's ctl line gains Restore, Placement and size (still 45 lines, detail in fs.md); Tty's argument is a shell and Tty on a pane's ctl opens a new pane; a .py pane's range goes to its REPL as an MX<q0> <q1> event write-back; after a Restore panes are renumbered (columns count from 1 again, so often keep theirs), a command pane shows exit ? and does not re-run, and REPL bindings are gone. acme's p adds no newline to what it prints (ecmd.c:744, pdisplay), so pardes's p does not either. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs give the full-column refusal, an Edit block left open at close, and ↵Gabriel Schneider7 days
| | | | | | | | | | | | byte columns Round 11's doc findings: the skill names the full-column refusal beside the 64-pane cap; fs.md and the skill say an Edit block still open when its open closes fails with unmatched { and an err; and line:col's byte columns get the tip for character columns from tools (the same on ASCII, else a search or #n). A unit test pins the unmatched { at close. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A detached session with no frontend takes its size from the root ctlGabriel Schneider7 days
| | | | | | | | | | A --detach session nobody is attached to stayed 80x24, too small for an agent's panes, and nothing could change it. The root ctl takes size <cols> <rows> while no frontend is attached (refused while one owns the size), and a client that attaches later still sets its own (the server compares with the core's size). Documented with the 80x24 default. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs say sel is writable, Edit blocks may span writes, and sig INT stops ↵Gabriel Schneider7 days
| | | | | | | | | | | | a REPL sel's write was documented in fs.md only; the skill says it now. With command lines held per open, an Edit block may come in several writes (a shell's line-at-a-time printf), so the heredoc advice goes. Kill never stopped what a REPL runs, since pardes did not start it; the docs point at pty/ctl sig INT. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The default Shell is $SHELL, else /bin/shGabriel Schneider7 days
| | | | | | | | | | With no Shell set, pardes ran fish, which a box may not have and a user may not use. The default is now the user's login shell ($SHELL), else /bin/sh; an explicit Shell still overrides it. The tests pin their own shell (snapshots bash, the python suites /bin/sh or bash) and pass with SHELL unset; the Config report and docs say where the default comes from. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A read on a closed pane's event ends ENOENT, and the pane cap is ENOSPCGabriel Schneider7 days
| | | | | | | | | | 9ns reads an error's words, not its errno: "window shut down" came out as EIO where every other file of a gone pane gives ENOENT, and "no pane slots" as EIO. The event and pty/data reads a pane closed under now say "no such pane: its window shut" (ENOENT), and the cap says "no space for a pane: 64 max" (ENOSPC; 9ns has no word for ENFILE). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Undo and Redo with nothing left say so, and the write succeedsGabriel Schneider7 days
| | | | | | | | | A pane's Undo or Redo with no step left did nothing and said nothing. It now says "Undo: nothing to undo" (or Redo's) as a message, not a failure, so a ctl write of it still succeeds as acme's silent Undo does. The docs give the 256-step history. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* addr reads empty after a failed address instead of failingGabriel Schneider7 days
| | | | | | | | With no address after a failed write, a read of addr itself failed (EIO through a mount), which reads as a broken file rather than as no address. It now reads empty, as an unset limit does; data and xdata still refuse. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Addresses snap to runes, not grapheme clustersGabriel Schneider7 days
| | | | | | | | | | sam and acme address runes; pardes snapped #n, line:col, dot and data's reads to grapheme clusters, so a lone combining mark or a CRLF's \r could not be addressed. #n, line:col, a search's match, dot (both ways) and data now land on rune boundaries (modal.runeStart and friends), and the tty's cell drawing is untouched. The README, fs.md and the skill say so. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A command line cut across writes runs once whole, and look/exec answer per openGabriel Schneider7 days
| | | | | | | | | | | | | | | | A mount cuts a write at its message size, and each piece ran on its own: a line cut at the boundary ran as shell commands and a 50 KB Edit block broke. An open of look, exec, tagexec, any ctl or a column's exec now keeps an unfinished last line, or an Edit block still open, until its next write or its release, and never runs a fragment. The same open record holds what its last write touched, which a read on it answers (as /net/tcp/clone does); an open that never wrote reads the session's last as of its open. A release that runs a held line waits for quiet and counts as a change; a clicked line with a control character is still refused at its write. Tested in unit tests, fs.py (python client, 8 KiB) and selfmount.py (the kernel mount, a 1000-line seq burst and a 50 KB Edit block). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs say the errno that fits, Joincol's order, the pane cap, the paste's ↵Gabriel Schneider7 days
| | | | | | | | | | | | | | second Enter, a follower across Restore, and why wc waits Dogfood round 9's doc findings: ENOENT for a missing pane, file or dump is right, so the skill says EIO or an errno that fits; Joincol folds into the column on the right, the joined panes below its own; the skill gives the 64-pane cap; Python's second \r is needed only when the paste lacks a trailing newline; a log follower loses nothing within a session, but a Restore hangs it up; and a tag word gets no file argument, as in acme, so bare wc waits on stdin (pardes has no $%). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The workspace tag has /tagexec, every exec file reads back what it touched, ↵Gabriel Schneider7 days
| | | | | | | | | | | | | | and a tag's words log as the session's /tagexec runs a word as a click in the workspace tag, as col/<serial>/exec does in a column's. A column's exec was write-only; it and /tagexec now read back the serials the last write touched, as /exec does. A click in a tag no longer goes to the focused pane's event reader, and what a word run from a column's ctl or exec or /tagexec says is logged msg -, not against the focused pane. The README, fs.md and the skill say so, and document the answer record. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Kill stops a command pane's whole command, its & jobs includedGabriel Schneider7 days
| | | | | | | | | | With job control on, a command's & jobs get process groups of their own, so Kill's signal to the foreground group and the shell's group left them running, orphaned. A stop of a command pane now signals every process group in its shell's session (Linux; a /proc scan). Jobs still outlive a command that exits on its own. Docs and the skill say it per route. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A column has a ctl, an exec and an rmdir over 9P, and Restore maps its serialGabriel Schneider7 days
| | | | | | | | | | | | | | A script could read and write a column's tag but not act on the column. col/<serial>/ctl takes Delcol, Joincol, New and Tty, each acting on that column as from its tag; col/<serial>/exec runs a word as a middle click in the tag; rmdir col/<serial> closes an empty column and refuses one with panes (ENOTEMPTY, an err record saying why). The root ctl's refusal of Delcol and Joincol points at col/<serial>/ctl. A dump keeps each column's serial and Restore logs restoredcol <old> <new>; the dump golden gains them. Documented: Joincol's survivor, the column on the right, keeps its serial and tag. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Columns are named by stable serials over 9P, as panes areGabriel Schneider7 days
| | | | | | | | | | | /col/<n> named a column by its index, which shifts when a column left of it closes: exactly what scripts trip on. A column is now /col/<serial>, its serial kept while it lives and never reused; /layout lines give serial and index (`<serial> <index> ...`), active names the serial, /index's last field is the column's serial, and the log says newcol and delcol with serials. Docs, the skill and the tree's README say so. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The tree serves the layout: /layout, /tag and /col/<n>/tagGabriel Schneider7 days
| | | | | | | | | | | | | A script could not see where the panes sit or edit the tags a person clicks in. /layout lists each column, its index, x and width in cells, current or not, empty or full, and its panes' serials, then the active column; /tag is the workspace tag and /col/<n>/tag a column's, read and written as a pane tag is (one line: a newline written in is a space, and a truncating write drops the one ending it); /index's lines end with the pane's column; the log says newcol <n> and delcol <n>. acme serves no column files, and the docs say so. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Docs answer round 7's questionsGabriel Schneider7 days
| | | | | | | | | The grip's two terminal cells (the mode, then * for unsaved text), a new terminal's new N / then rename and the ls it runs at its first prompt, the tag offsets an x record carries, Del k and Del j, each builtin's msg in the log and its serial, and m=$NINE_MOUNT under 9ns --unix in the skill. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A send to Python's REPL runs once, the Enter after the paste, not in itGabriel Schneider7 days
| | | | | | | | | | | | A one-line send (print(1)) to Python 3.14 stopped at ... and needed another Enter: its REPL takes a bracketed paste, and an Enter read in the same read as the paste is part of the paste, one line or not (checked in a real pty). Into a REPL that asked for bracketed paste, the Enters (two for an open block) now wait for its next output, its answer to the paste, or 250 ms with nothing. fs-test runs python3 in a real pty and checks a one-line exec prints at once; the docs' pty/data recipe says to send the Enter apart. Co-Authored-By: Claude Opus 5.5 <[email protected]>
*-. Merge: 9P round 6 + empty columns + render (acme theme, grips, Lift, Motion)Gabriel Schneider7 days
|\ \
| * | A column can be empty, as acme's can; new panes go where acme's ↵Gabriel Schneider7 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | makenewwindow puts them Newcol makes an empty column; closing a column's last pane leaves it empty with the keyboard on its tag; Delcol and Joincol alone take a column away; the session's last pane closing quits. The +New stand-in and replaceStillborn / stillborn_joiner are gone. Every new pane goes through exec.placeNew, which follows acme's makenewwindow (active column, empty column whole, blank space, halving the biggest) or, with Placement pardes, the old rules. ColumnTags is gone: column tags are always shown. A grip drag shows acme's box cursor. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* | | A pane's question is logged as ask, and answer on its ctl answers itGabriel Schneider7 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A script could not answer the several-REPLs question, which only a key could. Every question a pane asks on its notice band (which REPL takes an exec, Del's side from the keyboard) is now logged as `ask <serial> <what> <choices>`, and `answer <choice>` on the pane's ctl answers it as that key would, `answer -` taking it back as Esc does. One function answers for a key and for the ctl. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* | | A Python block sent to a REPL gets the second Enter that ends itGabriel Schneider7 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A dogfood agent's `def` sent to python3 sat open at the continuation prompt: a block whose last line is indented is not over at one Enter, pasted into 3.13's REPL or typed into the old one (checked against python 3.14 in a real pty, both ways). A send to a Python REPL now adds that second Enter, and the pty/data recipe in the docs and the 9P skill says to. Co-Authored-By: Claude Opus 5.5 <[email protected]>