| Commit message (Collapse) | Author | Age |
| ... | |
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
environment sets neither, so a pty/run or a command pane never hangs in a pager
git log or man run through pty/run, or in a command pane, sat in less
at its first screen: no one presses q, and the run never answers. The
child's environment now names cat as the pager when the inherited one
names none; a user's own PAGER or GIT_PAGER is kept. It is every pane
child's, a terminal's shell too, since a pty/run's line runs in it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
directory is not there
Exit or Restore refused over a pane named into a directory that does
not exist made +Unsaved in that missing directory, where its rows
could not be looked at and a Save of it could only fail. The list now
goes in the session's directory when the asking pane's is not on disk.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
control message "Newcol", not "Newcol 2"
Some refusals quoted the whole line, arguments and all ("Newcol 2",
"Verbose maybe", "lock x"), others the word alone ("Theme", "Mount"),
so a script matching one could not match the other. Every ctl
refusal, the root's, a pane's and a column's, now quotes the message's
word alone, and one too long to quote whole gives up its middle.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
The refusal said "look: permission denied", leaving the script to guess
which of the paths it looked at was locked. A file or image that will
not open is now named in the failure, its path cut in the middle when
long.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A script following a pane's event in a loop ended in an error when the
pane went, though nothing had gone wrong: the pane was simply done. A
read on an event open whose pane has closed now answers no bytes, the
end a pipe's reader sees when its writer goes, so cat and while-read
end cleanly. pty/data keeps acme's answer.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
The zero-column check ran only after a nonzero line, so file:0:0 went
on as an address and failed some other way, or not at all. The check
now reads the look's whole tail first, line 0 included, and refuses a
zero column in addr's words.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
they do a byte not UTF-8, so the name decodes to what it is
A control byte in a name read as a space, so /index could not be
decoded back to the name the name file now accepts (\x07 and a space
read the same). Every byte a name holds that is not printable UTF-8 is
now \xNN there; a message's text keeps spaces.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
write, EIO and its err, as fs.md says
A Del refused over unsaved text, written back by an event reader, said
so on the message row and answered the write ok, so the script that
wrote it could not tell. The write-back now captures failures as an
exec write does: the first one fails the write with its words and the
errno they read as.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
already running" and exits 1, with no error trace
The second session built its whole core before its bind failed, then
returned an error that main printed with a Zig error-return trace. The
name is now checked first: a live session's socket is said, and the
process exits 1 having made nothing.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
event write-back; a blank context line resolves to its path:line
The mouse expanded a diff line by its kind (a header or a hunk line's
prefix to the line's address, a hunk line's code to words), but an
empty look written back to event used the plain word expansion, so ML
on a `+` took nothing, and a 9P look of a blank context line (` `) was
refused as whitespace. look.diffClick is now the one answer: the
mouse, the whole-line look and the event write-back all ask it, and a
blank context line is a line like any other. A test asks all three on
each kind of line.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and nonseekable: fs.md's follow recipe with cat works through a mount
The log stated the length an open would freeze, a length a mount's
kernel could take as its end, and a splicing cat read it from the
kernel's offset. log now stats 0, as the other streams and generated
views do, and the re-pinned cloud9's 9ns opens any file stating 0
FOPEN_DIRECT_IO | FOPEN_NONSEEKABLE. A look at such a file (the mounted
index) reads a regular file that will not seek as a stream rather than
refusing it as a pipe. selfmount runs the recipe, exec 3<>log; echo
follow >&3; cat <&3, through the mount and hears a record made after it
started.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
| |
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
A pairs-density state, set to tight by cheatsheet-a4.typ and roomy
otherwise, gives book and HTML tables more row padding and room between
the key and the meaning. The book sets its body at 10pt with more space
around sections and between paragraphs and list items.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
chapters now names guide, cheatsheet, scripting, reference, themes and
building. #doc takes the chapter ids, keeps the old ones mapped onto
them (tags and fs to the guide and the reference, config, keys and
detached to their guide sections), and links in the book and the HTML,
where a doc-links state says every chapter is there; on the A4 sheet it
names the chapter and section. The reference points at the scripting
and building chapters by #doc instead of in words, and the guide heading
for pardes FILE and --wait keeps its two dashes.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
style.typ lists the chapters in reading order (guide, cheatsheet,
scripting, reference, building), each with its content file or none
while unwritten. book.typ sets them as an A4 book with a title page and
contents, the tutor read from src/tutor.txt last; html.typ sets them as
one HTML page with a nav of anchors. An unwritten chapter shows a
placeholder, so both compile before the topics exist.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
tables
#btn and #chord draw a mouse (left button, wheel, right button) with the
pressed part filled; the wheel is a narrow slot on a paper halo, hollow
or filled, so it never reads as a button. A chord is the held button,
then for each click the held one and that one down, with arrows between;
#btn(.., shift: true) adds a ⇧. HTML gets a span with an aria-label.
A key is one soft pill with no border: a combination (Ctrl-w) reads
Ctrl + w and a sequence (g g, SPC f c) g › g, separators muted inside it;
#keys("h", "j", ...) sets alternatives as separate pills. The drift
test reads every key a #keys call names.
#pairs sets key | meaning content as a two-column table on alternating
tints; split: 2 sets the leader map as two such tables side by side.
The mouse chords get their own table: cut, paste, copy (B1-B2 then
B1-B3, one B1 hold, as mouse.zig says), 2-1 with an argument, 2-3
cancelling. The A4 page draws its own title and drops the content's level-1
heading. docs/typ/README is the function contract for content files.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
| |
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
teaches $ as line end or the terminal tag's old words; a test checks the words, paths, chords and tags it names
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
ports, and a theme file's roles
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
core, threads, detached sessions and 9P fit, from the old design notes checked against the code
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
with the settings table, and says what the pane ctl's Left, Right, Up and Down do
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
shrink to a summary, the traps and a pointer to it
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
says what Esc and Shift-Esc really do
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
| |
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
then each jump-list pane's, most recent first
fs.md's look section and tags.md said nothing of where a relative path
is looked for, so a look that found a file in a directory visited an
hour ago, or not in an open pane never visited, was a surprise. The
order is written as look.zig's resolveLookTarget has it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
browser and says so in a msg
With no frontend to send it to, the link was kept and nothing said,
so a script could not tell the look had landed or why nothing opened.
It still opens nothing on the session's own desktop, and now leaves
"look: <url>: no frontend attached to open it in a browser", logged
as a msg.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
signal, and a start sweeps the ones a dead editor left
/tmp had gathered thousands of private prompt files: Exit removed its
own, but an editor killed by a signal, or a crashed one, left them for
ever. They now carry their editor's pid in the name, a SIGTERM or
SIGHUP removes them before the signal's death, and each start removes
those whose pid kill(pid, 0) answers ESRCH for. Files of the older
shape carry no pid and are left alone, as a running older editor may
still read them; the shared ones in the runtime directory are kept,
being every session's.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
dial address, both EINVAL
Mount name alone failed "Mount name dial: missing argument" and a
malformed dial "Mount: bad dial", both EIO, though each is a malformed
request. They now say wrong #args and bad dial address (with the forms
a dial takes), and a builtin failure in those words answers EINVAL, as
9ns reads them.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
where they jumped, "Callers: the one, <place>"
A word that asks for a list jumps straight to a lone answer, with no
list to show it was the only one, so the jump read as a definition
jump or a miss. It now leaves a message naming the place. A
definition's jump, which is its answer, says nothing new.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
documented, whether or not a program runs in each
Only REPLs with a program running were counted, so with two bound and
one at its shell prompt the text went to the other without a word,
and which REPL got it depended on what happened to be running. All
bound REPLs are offered now; one chosen with no program running is
sent nothing and says so.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
on held reads, Dump's Restore word, a reused command pane's runs, and the one-write trap
fs.md's look misses now read as the editor says them (<path>:99 has no
line 99, has no page N); event says a second reading open fails file in
use; held reads say the 64 state-holding opens are the real cap, under
the 128 a connection may park; Dump says it adds a Restore word to the
workspace tag; a reused command pane's body is said to keep each run
under a % line, with how to take the last. The 9P skill gains the trap
that bash's printf to a mounted ctl arrives one write per line.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
EOPNOTSUPP, and /os refuses a rename or a chmod as not permitted, EACCES
"w is not supported in pardes" read through a mount as EOPNOTSUPP, as
if the file system lacked an operation, and a chmod under /os was
answered "invalid truncate", EINVAL. An Edit command pardes leaves out
now says so in words 9ns reads as EIO, and a rename or mode change of
an /os file is "permission denied", EACCES. fs.md's Failure section and
/os entry say both.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
sweeps the pardes-9p-<pid>.sock files whose pid is gone
The runtime directory had gathered a hundred sockets of dead editors:
only a clean exit removed its own, and a signal or a crash left it. The
terminal's kill handler and, where nothing else handles the signals, a
handler of the listener's own now unlink the socket before the signal's
death. At listen, each pardes-9p-<pid>.sock whose pid kill(pid, 0)
answers ESRCH for, that is a socket of this user's and that nothing
answers on, is removed; a live pid's, a named session's and anything
else are never touched.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
not UTF-8 included, so what name reads writes back as it was
A pane opened on a file whose name held a tab, a control byte or bytes
not UTF-8 read that name from its name file, and the same bytes written
back were refused. Only what no file name holds is refused now: a second
line and a NUL. The ctl word name still refuses a second blank after the
word, as a line's words are split at blanks.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
name no session has is "no such session"
A detached session's core has no frontend loop to take an Attach, so
the word was asked and never answered: a ctl write of it succeeded
and nothing happened. The core now knows it is a detached session's,
and Attach there says why: bare names no session but itself, a name
with no session behind it is said so, and one that is a session is
told to be attached from a frontend.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
layout, recent and listeners; fs.md says which files have real lengths
A stat of index, layout, recent or listeners built the whole view to
count it, and data and xdata reported the body's length though a read
answers what addr selects. Those now stat 0, as screen and pane/new
already did, and fs.md lists the files whose length is real and says to
read the rest to the end.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Config's new init; only a file that existed when dumped is said deleted
A restored pane whose path was not on disk was marked deleted on disk,
so Config's not-yet-written init came back dirty and asked before Del,
Exit or Restore. The dump now records whether the file was on disk
(older dumps read as yes), and only one that was and is gone is said
deleted.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
session has no such pane", exit 1 and no pane made; one it has is looked at
@p999:1 was taken as a new file's name, so a pane named <cwd>/@p999 was
made and the launch succeeded; an @pN the session did have was the same
stray pane. A pane address is now checked against the session: one it
has is a look at it, one it has not is refused with the reason and exit
1, as a refused name is.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
"a file name is one line", never NotOneLine
The forwarding refusal printed the error's name for anything the
session itself did not answer: NotOneLine, NotAFileName,
NoWorkingDirectory. Those are now sentences, a dial failure is said as
the message row says one, and any other error is its name's words.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
The truncation of an empty body is no edit and pushes no step, but it
still marked the open's writes as joining the step it would have
pushed, so the text written after it had no undo step at all. A
truncation that changed nothing (of body, data or xdata) now leaves the
step to the write that follows.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
answers ok with no err; an address in a pane with no text names the pane
A PDF pane took :N as a word to search for, and @p<pdf>:N failed as
"is no text to address" after the page had nothing to do with it, an
err in the log for a look that meant something. A PDF's address is now
its page: :N turns to it, one past the last is the has-no-page miss,
and a byte offset or a pattern is refused saying a PDF's address is a
page. The refusal for any other textless pane named an empty path when
the look was a bare :addr; it names the image or @p<serial> now.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
pane in the session's directory, never typed into the terminal with the keyboard
A command clicked in a header tag, or written to /tagexec or a
column's exec, was typed into the active terminal when it sat at an
empty prompt, so it ran in that pane's directory and left no run or
exit record. It now always gets a command pane of its own in the
session's directory, as acme's row and column tags have no directory
but the session's. tags.md writes the rule down: pane words act on the
column's active pane, a column's words on the column, shell commands
as their own panes, and over 9P a pane's word is refused.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
as acme's tag clicks do, not run past it
A real click in a held pane's tag was already told to the reader, but
the same click written to the pane's tagexec ran at once, so a script
holding the pane could not intercept it. The line is now an x record
(l for a look), done when the reader writes it back. A column's or the
workspace's tag is still no pane's and runs as before.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |\
| |
| |
| | |
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
docs/typ/cheatsheet.typ holds the facts as semantic calls (#key, #btn,
#chord, #word, #tag, #addr, #file, #cmd, #doc); docs/typ/style.typ
defines those once, drawing them for paged output and emitting HTML
elements under --features html; docs/typ/cheatsheet-a4.typ is the page.
`zig build cheatsheet` renders it when typst is on PATH. A config.zig
test reads every .typ in docs/typ and fails when one names a builtin,
key binding or default tag pardes no longer has.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The look on a diff line was its own resolver: a walk up to .git/.jj from
the diff's directory, its own "no such file here" and "deleted by this
diff". A review tool's cached patch, in no repository, missed every file
though the session's terminals sat in the checkout.
Now a diff line only expands and transforms. Its expansion (what the hover
shows) is the whole line for a header, a `@@` line, or a hunk line
pointed at on its prefix, and its text is the look address the line names
(look.diffAddress): `path` for `diff --git`/`---`/`+++`, `path:c` for
`@@ -a,b +c,d @@`, `path:N` for a hunk line's new line (a removed line's,
the new line now where it was). That text goes through the regular look
exactly as if selected by hand: same resolution, placement and errors. A
9P look of a whole diff line takes the same transform.
Kept: the line classification, hunk arithmetic, git prefix stripping and
timestamp cutting (diff.zig). Gone: the repo-root walk, its messages,
Target.old_side and deletesAhead, and the click's row stash
(Pardes.diff_look). A test compares a B3 on a cached patch's line with a
look of the hand-selected `entry/src/entry.rs:2` in the same session.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |\
| |
| |
| | |
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
look, as in any pane, and Shift sends them to the program as its buttons 2 and 3; B1 and the wheel stay the program's, Shift keeping them pardes's
The Shift that sends B2 or B3 is left out of their reports and of the
drags they hold: it only chose the target. A B2 or B3 sweep of pardes's
moves nothing to the program under 1003.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
file's row is where its dot is now
Only text files were recorded, so a PDF read yesterday was not there to
find again, and an open file's row showed the place it last closed at,
stale by however far it had moved since. A PDF is kept at its page and
reopened there from its row; an image by its path; an open one's row
reads its pane's place at the time of the listing.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
found", not "theme file: file not found"
The read and parse failures come back after the write, often from a
relative name resolved against the config directory, so which file was
missing or bad was left to guess. They now carry the resolved path,
its middle cut when long.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|