| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
|
|
|
|
| |
name as \n
/index printed a name as it was, so a directory with a newline in it split
its row in two, and bytes not UTF-8 went through; the log turned the
newline into a space, silently another name. Both now show a name one
way: a newline `\n`, other controls, DEL and C1 a space, bytes not UTF-8
`\xNN`.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
character
An empty name, a word written to log other than follow, a data, sel, dot
or dirty write to a pane with no text, a truncate other than to zero,
and a control character in a look line written through a held open were
refused with no words, logged as `Invalid argument`. Each says its reason
now; and DEL is refused in exec and look lines as in names.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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 focused pane
Undo, Msg and the other pane words written to a tag no pane owns ran at
whichever pane had the keyboard. They are refused as the root's ctl
refuses them, EINVAL; the tag's own words (a column's New, Tty, Find,
Grep) still run.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
shell never started ends exit 127
Exec made a command pane in a directory that was not there, whose shell
never started: it said running for ever, a follower waited for an exit
that never came, and Kill found it. The line now fails up front, as Tty
does, `exec: <dir>: no such directory`; and a command pane whose shell
the host could not start ends `exit 127` at once. A shell that could not
start in its directory says `directory missing`, not `file not found`.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
spoken, so it logs no rename to the session's and back
Each host read /proc/<pid>/cwd right after forking the shell and at every
frame after; before the shell's chdir that says this process's directory,
a rename to it, then the real one a frame later, a rename back. A shell
given a directory is named by it already (newShell) and is no longer
asked at fork; and until it has printed anything, an answer naming this
process's directory is not taken.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
A look at a directory, or an exec at a terminal, typed its line after
whatever sat unsent at the prompt and ran the two joined (`echo TYPEDls`).
A terminal with text at its prompt now takes no line; a look at its
directory opens a new terminal, an exec runs as a command pane.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
miss fails
Round 18 made a search that found nothing fail, but grep and find never
counted their rows (only a pane search did), so every Grep read as a miss.
Both count the lines they wrote now; a Find or Grep that finds nothing
fails alike, `find: no match, not found` / `grep: ...`, ENOENT, and opens
no empty +Search.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
arriving there is no rename
Tty's terminal was `new N /` until its shell reported its directory, then
`rename N <dir>`: a rename for no change of place. The pane owns the
directory it is started in from the first; only a move elsewhere renames.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
not mounted
`Unmount nothere` failed EIO with `not mounted`. It says `no such mount
nothere` now, and a builtin's failure that says `no such` (this, Tty's
`no such directory`) answers ENOENT, the errno 9ns reads from those words.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
is passed over
Grep walks every pane's directory; one not there (a scratch named into a
directory not made yet) failed the whole search with `file not found`.
Such a root is passed over now, and a search that finds nothing says
`grep: no match` and opens no empty +Search.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
through ctl
Through a ctl the bare word was refused up front (EINVAL); through exec it
ran, failed with EIO or asked for the argument. The exec now refuses it
the same way before it runs.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
| |
get's failure named the path and `cannot be read` for any error but a
missing file; a peer that did not answer now reads `get: <path>: dial
failed: no answer`.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
Any rename marked the pane dirty (saved revision one back), while the
guards ask only whether its text was ever edited: /index said dirty for a
pane Exit let go without asking. The name is no edit now, so /index, the
guards and Restore agree; Save writes under the new name all the same.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
so a mount reads EINVAL
A line over 1024 bytes or with a control character was refused with its
errno EINVAL but words 9ns reads as EIO (no `invalid` in them), and logged
`err - exec`. They now say `invalid command line: ...`, and the root's
err record names the pane the line would have run at.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
| |
The line-past-end check read only a file pane's lines, so a terminal's
look went nowhere and said nothing. A terminal's lines are its logical
lines, as a +Search of it lists them.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
started answers runs
The host could not start the shell (its chdir failed), and the pane stayed
with no pty: a run written to it waited for a prompt for ever. Tty now
refuses a directory that is not there, `Tty: <dir>: no such directory`,
before making a pane; and a terminal whose shell the host could not start
(Pardes.shellFailed, from each host's spawn) answers any run with
`error shell gone`.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
| |
A builtin that would open a prompt nobody can answer (Save with no name
on a scratch, through a ctl write) failed the write without saying a
failure, so the announcement rule missed it and `msg N Save` stayed.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
| |
`err - exec: ...` said nothing of where the line ran; the root's exec and
look run at the keyboard's pane, and their err now names it, as a click
there would.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
is said as `dial failed: <reason>`
Mount took any well-formed dial and nothing was found out until the
first look through it, which then said `look: look: dial`. Mount now
probes the peer (version, attach, its root) with the turn out, and fails
its write, mounting nothing, when none answers; the dial errors read as
words, `no answer`, `timed out`, `hung up`, and a look through a peer
gone since names its path: `look: /n/peer/f: dial failed: no answer`.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
Every look that found something cleared the looker's selection first, so
`@p5:2` or `f.txt:2` written to a pane's look collapsed its dot to
q1-1. Only a look that stays in the pane starts from a clean selection
now; one that goes elsewhere takes away just the click's highlight, and a
miss changes nothing, as acme's look does.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
reads the first word
In acme flag 2 promises a second record with the expanded range, and
acme's libraries read one. F records set it always and a click with no
range known set it, with none following: a library then took the next
event for it. Records here carry the word already, so 2 is never set.
Flag 1 now reads the first word as acme's lookup does, so `Msg hi` is 1.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The check read how the weights shared the rows after the resize, not
whether the rows could hold every pane's tag and two rows: a pane the
proportional squeeze took short made `size` refuse, growing included,
and refuse sizes it took a moment before. It now asks layout.minRows,
the minimum placement asks, per column; a size they fit is taken, and a
pane the resize took under its minimum gets its rows back. An out of
range size says `invalid size`, which 9ns reads as EINVAL, as the doc had.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
| |
`file:?foo?`, `@p5:?foo?` and `:?foo?` were not taken for addresses (the
first character had to be one of `0-9+-/$.#,;`), so they went the path
way and found nothing.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
Only a line number reached a terminal (the line way); any other address
went to lookAddress, which wanted a file and said the terminal was no
text. The body is now the lines a +Search of it lists, addressed from the
cursor, and the match selected as a +Search row's range is.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
active pane
`@p<serial>:<line>` goes the line way (parsePathLine), where a serial
naming no pane quietly did nothing and look read back the active pane.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
A failure said while it ran (Exit's refusal, a Del refused) or later by
the host (a Save's write, a Dump's) left `msg N Save` in the log as if it
had worked. The announcement's record is remembered and taken back out
on either, unless a follower read it already. A refused pane/new logs its
err alone, and a failed Dump says its reason in words (`file not found`,
not `FileNotFound`) so its msg goes and the err is the one record.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
87 of the listed words had no description: settings have no doc comment
to read, so each now carries a one-sentence doc, and the builtins without
one got theirs. Exit's no longer names an internal function, and Repl's
first sentence is short enough to be read whole.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
@p<serial> took a line spot but an address after it (/re/, #n, $, 0/re/,
a range) was dropped, the name failing the file check, and an unknown
serial fell through to a search. The pane is now addressed like a file;
a miss and a serial no pane has each log an err, and look reads back
empty.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
A new Tty is in raw mode, where a right click is its program's, and a
look written to it over 9P did nothing for that reason. The look file is
no keyboard input: over 9P a plain word is listed in a +Search pane and
read back whatever the terminal's key mode.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
deleted, reloaded
get on a file gone from disk failed with a bare ENOENT; it now says get:
<path>: no such file. A watched file deleted on disk was silent; the pane
keeps its text and says <file> deleted on disk (Save writes it again)
once, logged changed <serial> deleted (only a path the watch has read: a
pane renamed to a name never on disk is not deleted). A get that throws a
dirty buffer's
state away logs changed <serial> reloaded, as the watch's reload does.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
| |
With LookWord list, or in a terminal, a look lists every place in a
+Search pane, yet look read back the source pane, as if the hit were
selected there. It now reads back the +Search pane it made.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
Save through exec on a terminal (or a scratch) opened its path prompt on
screen, where no script could see or answer it, and a second Save stacked
another. Opened while a 9P request is served, it now logs ask <serial>
save path; answer <path> on the pane's ctl saves there and closes it,
answer - closes it; asked again, the open one stands. A pane closed with
it open logs answer <serial> -.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
| |
Repl showed Joincol's first line and Joincol another's, because a comment
had drifted above the wrong declaration in builtins.zig; Kill's was cut
mid-sentence and Exit's cited exec.c:892. The drifted line is back on
Joincol, a parenthesis citing source (.c, .zig) is dropped, and the first
sentence is kept whole up to 240 bytes, then cut between words with an
ellipsis. A test checks every description opens its own word's comment.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
A /commands line gave a word, its argument and root or pane, but not
what it does, and called Edit a pane's word though the root's ctl takes
it too. Each line now ends with -- and the first sentence of the word's
doc comment (read from builtins.zig itself, so there is one copy), and
Edit is both. fs.md says a pane's word such as Undo or Msg is refused at
the root.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
choices, a clean reload is logged
get's refusal now quotes the line as a builtin's (Save's) does; a bare
answer while a question stands says what it takes (answer takes k j or
-); and a clean buffer reloaded from disk logs changed <serial> reloaded,
as the kept dirty case logs changed <serial>. (A failed Save already says
why: Save <path>: <the error in words>.)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
A plain word looked at (a look write, a right click, an ML record written
back) opened another identically named +Search pane each time, until the
panes ran out, and never wrapped. As acme's look3 searches the text for
it (look.c:210), it now selects the word's next place in that pane after
the dot, wrapping at the end, and opens nothing. LookWord list, a new
root setting, keeps the +Search listing (search is the default); the
rsearch snapshot and an output test that walk the listing say LookWord
list. (The leader-path check over every builtin gets a comptime
branch quota, as one more builtin took the GUI build past the default.)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
A bare Shell reset to the default without saying which; it now says
Shell: the default again, <shell> ($SHELL, else /bin/sh). A line:col of
column 0 said only address out of range; it now adds that a column
counts from 1.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
takes
A column's ctl refused an unknown word in words 9ns maps to EIO, and
took New extra as New. It now refuses the word as unknown control
message (EINVAL, as the root and pane ctls) and any word but Tty with
an argument as wrong #args. A bare answer on a pane's ctl says answer
takes a choice or -, not unknown control message.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A watched file rewritten on disk was loaded over a buffer's unsaved edits
and its dirty flag cleared, so Exit and Del no longer asked about them. A
clean buffer still reloads; one with edits keeps its text and stays dirty,
says <file> changed on disk (get reloads it, Save overwrites it), logs
changed <serial>, and its Save warns once before overwriting the newer
file, as acme's Put refuses a file modified since read (exec.c:577); get
asks as ever (winclean, exec.c:513). The restored-watch test's dirty case
now keeps the snapshot, and the filewatch snapshot script (re-recorded
by name) checks both halves: the edited pane keeps its edit and says so,
the clean one reloads.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
Finding where an Edit block ends parsed the whole block again for every
line, copying it into the scratch arena each time: a 10k-line $a block
took minutes and tens of GB. sam_edit.waitsFor says what the block waits
for, and while that is a text block's . line, only such a line is parsed
again (editEnd, shared by Messages and completeEnd), its copy freed. A
10k-line block now takes well under a second and 50 MB of scratch.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
| |
"window not locked by this open" was acme's word; pardes has panes.
Its test compares the constant, so it follows.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
The refusal listed every language and was clipped to fit, ending mid-word.
It now names six, those that start as the word did first (pithon:
python), says how many more, and points at docs/tags.md, which lists them
all.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
size refused an out-of-range line without saying the range, took a size
too small for the panes (leaving bodies of no rows), and a terminal
squeezed to its tag kept a pty of its old size. The refusal now names
20x6 to 4096x4096 (a bare size is EINVAL like any malformed line), a size
that would leave any pane less than its tag and 2 rows is refused and
undone, and a terminal's pty is resized with its pane down to one row
(only a folded or unplaced one keeps its grid).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
A directory passes access(X_OK), so Tty /etc made a pane whose shell
exited 127 and Shell /etc was taken. The shell lookup now refuses a
directory, and both say "not a shell: /etc is a directory" (Tty and
Shell share one refusal, host_io.Shell.refusal). shellset's golden takes
the shared wording (re-recorded by name).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
| |
Edit's p and = put their output in +Errors, and when its column had no
room the placement refusal failed the whole Edit. +Errors now tries every
column with room, the last first, and with none its text is logged as msg
records, a line each; the Edit succeeds.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|