| Commit message (Collapse) | Author | Age |
| ... | |
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
Repeated `/^/` from #3 stayed at #3: the search found the empty match
where it started and called that the next one. sam (editors/sam/
address.c:97-119) searches again a character on, or back, wrapping; so
does addr now, and `/$/` and `/x*/` step as they should.
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
smaller window
A terminal of one body row loses its prompt's mark and reads busy for
ever. Placement already refused to make one that short; now layout never
leaves one there either: a grip drag stops at the floor, and a column
squeezed by weights or by the window takes the rows from its other panes.
Text panes keep acme's way and can still be dragged to their tag, since
acme has no terminals to follow. The shrinktag, splitparent and cornerdrag
goldens are re-recorded for it, shrinktag's re-grab moved to where the
grip now is.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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]>
|
| | |
| |
| |
| |
| |
| |
| | |
A Msg past 256 bytes was cut mid-word and silently: nothing told a reader
of /log that the line went on.
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
write's does
Under the one rule a click fails its write too, but only a ctl write
assembled the `<a>, <b>: Modified (Exit again to discard)` line: a click
failed with the first pane's name alone.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
active pane's
No pane asked for it, so borrowing the directory of whichever pane last
had the keyboard named it after an accident; acme's new window has acme's
directory.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
busy for ever
A one-row pty loses the prompt's input mark as soon as the prompt wraps,
and busy detection never sees the shell idle again. Placement already
keeps a new terminal at tag + 2 rows; a winsize write now keeps the pty
at two. A pane dragged down to one body row keeps a one-row pty, since
a taller pty than the pane shows would put its cursor below the pane.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A pane from pane/new or New takes the bottom half of its column's last
pane, as acme's coladd does (cols.c:62-65); when that pane is too short
to give it a tag and 2 rows, the fallback halved the tallest pane and
put the new one under it, mid-column (the 7 9 8 found). It now goes last
all the same, with half the tallest pane's rows (its tag measured at the
column's width). Tty from a pane's ctl already follows acme's
makenewwindow (the active column first, util.c:456-467); fs.md now says
so rather than beside that pane.
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The directory mark took CLOSE_WRITE, MOVED_TO and CREATE only, so a file
deleted or moved away was noticed only when something else in the
directory next changed. The mark takes DELETE and MOVED_FROM too, so
changed <serial> deleted comes at once; a test deletes a watched file and
finds the watch readable within a second and the pane told.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A +Search row for a pane with no path (a terminal's), a jump list row and
a line-number look said @p<slot>, the pane's place in the core's table,
which no client can see. They now say @p<serial>, and @p resolves a
serial. Re-recorded by name, their diffs checked: jumps, ttylook and
psearch (whose waits now say @p1) for @p<serial>, and with them argv,
nested, reflow, tinywin, ttyhelp and ttyonly for the boot scratch now
named <cwd>/+New (the change before).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
An exec write does not fail for what its command says, so an a/c/i text
or { group cut short by a write that ended early was only a msg, easy to
miss. Over 9P, that failure (a truncated write, not a command's) is now
logged as an err record naming exec; the pane still says it.
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]>
|
| | |
| |
| |
| |
| |
| |
| | |
An err record's reason was cut at 200 bytes, mid-word. It is now cut at
the last word that fits, and ends with an ellipsis.
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| | |
At boot the scratch under the shell was made before the shell said where
it was, so its name was /+New. A scratch made from a pane with no
directory yet is now the session's, <cwd>/+New.
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A terminal's directory rode inline in the spawn effect, capped at 256
bytes, so Tty in a directory of about 377 bytes said path too long. A
directory past the inline buffer now goes out of line (Pardes.spawn_dirs,
given to the host when the spawn is performed), up to the host's path
limit (4095); past that, Tty says its directory is longer than a path
may be. The effect queue stays its size.
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
The save record was logged as soon as the host was asked to write, so a
Save into a read-only directory logged save and then failed. It is now
logged only once the write is done; a failure's err record (the write's,
naming the path) stands alone, the msg it was also said as dropped.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
argument
Writing a chorded exec's three records back as read ran the argument
and its location as shell commands. The first record (flag 8) now takes
the next record as its argument when it comes in the same write, else
the one kept from the click (or, with none kept, waits for it); its two
follow-up records, however they are written, are consumed as its, never
run. Tested written back together and one per write.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| | |
A look an event reader wrote back ran, but /look still read the last
look made through it. It now answers the pane the written-back look
found, as a look written there would.
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Exit, Restore, Del and Delcol share one list (warnModifiedIn), but it was
built in 256 bytes, so with a few long paths a +New scratch near the end
fell off Exit's and Restore's, which list every pane; and several +New
panes were indistinguishable. The list is built in 1024 bytes (the
write's error is still cut to fit, between words), and a scratch is named
with its serial, /dir/+New (pane 12), the same everywhere.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
With event open, a 2-1 chord's exec went out as one record with flag 8
and nothing after it: the argument was freed unsaid. As acme does
(exec.c:150-190), two records follow it, the argument's text and where
it came from (file:#q0,#q1, empty when not known), and the pane keeps the
argument, so the record written back runs with it (acme's own write-back,
xfid.c:842, passes none; the reader was told, so it runs as the click
would have).
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
winsize 0 0 was refused as ill-formed, as if the words were wrong, and
any u16 was taken. Numbers that are no size (0, or past 4096 a side, the
root ctl size's bound) now say invalid winsize: out of range, 1x1 to
4096x4096 (EINVAL through a mount).
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The Enter went on Python's first output after the paste, before it had
taken in the whole paste, and one Enter leaves a multi-line input at
... anyway. Python's output now only restarts a 100 ms quiet wait (the
250 ms fallback stays), and a paste of more than one line gets the second
Enter a block gets. fs.py runs print(11)\nprint(22), the same with a
trailing newline, and a for block followed by a statement in a real
python3, each back at >>>.
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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]>
|