| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
| |
passed over in the init file, not failed: one init file serves the window and the terminal
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
| |
written after its directory with ghostty-vt, SGR becomes spans drawn over the plain text, every other escape is dropped, and PagerColor off pages it plain
|
| |
|
|
|
|
|
|
|
|
|
|
| |
commands are not run a second time
A setting changed in the init file took effect only at the next start.
The host's Save now hands a written init file's text back to the core,
which applies its setting lines again (each idempotent), with the same
notice and err for one that fails; a command line in it (`Newcol`)
belongs to the start and is left alone.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
logged with its line number, never silent
A BOM made the first word unknown, a word no builtin has was skipped
without a word, and a setting that refused its value said nothing (the
init file ran with announcing off). Each failing line now leaves a
notice and an `err - init file line N: <why>` record; `#` still starts
a comment only at a line's start, so `#ff0000` stays a value.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
klingon` is invalid (EINVAL), its message citing no doc path
A refused answer quoted the word `answer`, not the choice refused. A
`name` with nothing after it was an unknown control message. A Repl of
no such language failed EIO with a pointer into the reference; it now
says `invalid language` (EINVAL, here and through a mount) and how many
more there are. A builtin's failure that says invalid anywhere is
EINVAL, as 9ns reads it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
there says no such socket (ENOENT), and the hint says tcp! takes a numeric address
`Mount peer rel/x.sock` dialled relative to wherever the editor ran;
`Mount peer unix!/nonexistent` said `dial failed: no answer` (EIO); and
the hint offered `tcp!host!port` where only a numeric address is taken.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
line, in the same write or the next, is refused EINVAL
Through a mount `printf 'a\nb\n' > pager` arrives a line a write, so the
second asked for another +Pager on the same open, its answer replacing
the first. An open that asked already refuses another.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
disk_hash, an older dump) asks at its first Save, as for a file changed on disk
What its text was read against is unknown, so a Save could write over
a newer file without a word; it now asks once first.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
logged or answered of it, and a serial is never handed out twice
A command pane with no room logged `new N` and `run N ls`, was answered
to its exec, then went with `del N` and no `exit N`; and sync gave N
back (`next_serial -= 1`) to the next pane made, so a script holding N
found another pane under it. Tty did the same. Both now take a refused
placement back at once, before the run is logged or the serial answered
(the pane was never announced, so it leaves no record), and fail the
write with no room. The decrement is gone: gaps are fine, and a serial
once said names one pane for good.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
"pattern" suggested a regular expression
Still ENOENT through a mount ("not found" is in 9ns's table, and the
unit tests' errno-words check holds it so). The guide's quote follows.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
address, EINVAL, not a session name that does not answer
A dial with a `!` and no `/` that was neither tcp!, quic! nor unix! was
taken for a session's name, failing as `dial failed: no answer`, EIO.
It is now refused as the malformed address it is, before any dial. A
path with a `!` in it still dials.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
front, and a Dump that could not make its directory says permission denied
A relative DumpDir was resolved from wherever pardes started, and one
under a directory that may not be written was taken, the Dump failing
later as `no such directory`. DumpDir now takes an absolute or `~` path
whose nearest directory there may be written, and refuses any other with
what it takes; a Dump refused by a directory above says permission
denied (fs.deniedAbove), as a Save does.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
maps, and the rest of it is dropped through its newline, not run as a second line
Past the 1 MiB a line may hold, the write that crossed it was refused
and the pending text dropped, but what followed of the same line was
taken as a new line and ran when its newline came: a second refusal,
`unknown control message "zzz…"`, and a second err. The open now drops
the rest through the newline, and the refusal says `invalid write: a
line or Edit block over 1 MiB`.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
write answered, the err logged, not ENOENT
`./x` and `../x` failed their write with ENOENT while every other name
that opens nothing was a miss the write was still answered with. They
are misses now too, said and logged `look: ./x: no such file`. A pane's
own directory gone stays a failure.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
`fit:height tint:full`), and a Dump keeps the PDF's two
Neither showed in the tag or the ctl, and a Restore brought a PDF back
at width fit and the default tint. The ctl read ends with `collapsed`
when it is, and a PDF's `fit:` and `tint:` in the words PdfFit and
PdfTint take; the dump's image record carries pdf_fit and pdf_tint
(empty in older dumps: the defaults).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
directory`
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
fills a pane answers that pane, made or filled again
The answer was taken from the asking pane's search pane, which a
listing like +Lsp never sets, so Lspinfo answered the file pane. The
pane the answer filled is now known from what fillResults made or
refilled, whatever kind of listing it is.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
directory skipped` no longer sorts first
Find's rows are sorted by path as they are filled in, and the note line
was sorted with them, so it led the list. The rows above the first note
are sorted, the notes left where they are.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
hits`, `N files read only in part (first 256 KiB)`, `walk cut at N entries`; one that finds nothing leaves the +Search as it was
Grep reads 256 KiB of a file and stops at 512 hits, and its walk at
20000 files or 100000 entries; Find stops at 512 names. A cap hit was
silent, so a match past one read as `pattern not found`. The walk now
notes each cap it hit (fs.WalkNotes) and the +Search says it in a line
under the hits, as it says directories skipped; a search that found
nothing but hit a cap opens the +Search with those lines, not a miss.
A Find or Grep that finds nothing and passed nothing over leaves the
directory's +Search with the last search's rows, its failure saying so,
where it used to empty it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
its language say the name, is previewed, never applied; Lspwhy shows the files synced first
zls renaming at a declaration answers with that file's edits only,
cold or warm, whatever it was told of (checked against zls directly:
from a call site in main.zig it renames both files, from the
declaration in util.zig it never does), so the first Rename applied in
util.zig and left main.zig broken. The client now looks for the old
name in the other open files of the language; when one says it and the
answer left it alone, the edits are a preview with a row naming each
such file, and the message row says the server renamed in this file
only. Lspwhy carries the open files too, so its trace shows `synced X
first` for the query it explains.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
since the Dump is said changed, its first Save asking before overwriting it
A Restore put back the dump's copy of every file pane and armed the
watch with the disk as it now was, so a file changed on disk after the
Dump came back as its old text, marked clean, and the next Save wrote
the old text over the new without a word.
A clean file pane's text is now not in the dump: Restore reads its file
(an older dump's copy is read past too, and used only when the file is
gone). An unsaved pane keeps its text once, base64, the plain copy beside
it dropped, with the hash of the file it was read against
(`disk_hash`); a Restore that finds another there says the file changed
on disk, and Save asks once before overwriting it, as for a change seen
while it was open. file_watch.zig's own tests were never collected (no
test root imported it): main.zig's test block does now, and the restored
watch test says what a clean restore now reads.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
names, set rather than flipped: `Petscii on`, `Palette terminal`, `PdfFit width`
Each could only flip, so a script had to read the tag to know which way
a write would go. Each now takes an optional argument, the value its
tag word shows (on|off for Petscii and Ascii, commodore|terminal for
Palette, width|height for PdfFit, disabled|filtered|full for PdfTint),
and sets it; bare, it flips as before. Anything else is refused with
what it takes.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
terminal's word looks already did, rather than stacking another
Each word looked at with LookWord list opened a +Search of its own in
the same directory. Word looks now share the directory's one, the next
word refilling it; a `/` search still keeps a +Search each.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
line past the end is said one way: `<file>:N has no line N`, for `:N` as for `file:N`
lookAt dropped a trailing `:` from what it read but resolved the target
from the text as written, so `@p33:` was `no match for "@p33:"`. And
`:99999` said `address out of range` while `file:99999` said `has no
line 99999`: a bare line number past the end now says the latter too.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
refused EINVAL, in words a mount maps so: `invalid rename: ...` and the data write's own refusal
`rename not allowed: ...` went out EPERM, and `Edit ,d` on a PDF ran
and failed late, EIO, while a data write there was EINVAL. The rename
refusal now says `invalid rename` with EINVAL, and Edit on a pane with
no text is refused before anything runs with the data write's words.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
not be written, permission denied; `pardes -` from such a directory pages into the session's
`/tmp/../etc` named a +Pager `/tmp/../etc/+Pager`, a second one beside
`/etc/+Pager`, and `~/x` was refused as relative. The directory is now
home-expanded and resolved before it is checked, and one that may not
be written is refused as a file's name there is (fs.deniedAbove).
`pardes -` run in such a directory (`git log` under /usr/src) asks for
the session's +Pager instead, so its text is still paged.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
before
writePager emptied the answer only once the directory had passed, so a
read after a refused write on the same open still gave the last write's
serial. It is emptied first, as a refused look or exec leaves none.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
that asked it, and says on the message row that it previewed and applied nothing
A multi-file Rename filled a +Search preview but the waiting exec write
answered the pane it was asked from, and nothing was said. lspResponse
now notes the pane it filled (fs.lsp_result); the write that waited for
the answer reads that pane back, as a look or an exec answers the pane
it went to, and the message row says `Rename: N edit(s) across files,
previewed, not applied`.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
this pane has no text to address`, which a mount reads as EINVAL, not EIO
9ns maps a refusal back to its errno by its words; "this pane has no
text to address" held none it knows. The reference quotes the new words.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
invalid directory "relative": must be absolute`
9ns maps a refusal back to an errno by its words, and "the directory
must be absolute" and "one directory a write" held none it knows, so a
shell through the mount got EIO for both. They now say `invalid`, as
every EINVAL here does, and the reference quotes the new words.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
on showing the one it did, its file still the one named
A Restore makes a fresh core, which started at the default theme and
asked for the dump's ThemeFile; when that file had broken since, the
failure reverted to what the fresh core had loaded, nothing, and ink
became orchard. A Restore that asks for a ThemeFile now carries over
the theme the old session showed and the file it loaded (and its Theme,
unless the dump names one), so a failure there changes nothing.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
argument after a + is no unknown control message there
checkBuiltin split a line at its first blank only, so `Tty+bash` was
one unknown word on a ctl while exec ran it. It now splits at the +
for the words whose registry entry says they take one so.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
EINVAL: no +Pager named into a missing directory, none quietly the session's
`/(/+Pager` was made for a missing absolute directory, and a relative
one fell back to the session's without a word. An empty line still asks
for the session's directory.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
the pane has no text "(a terminal, ...)"
A terminal's body takes writes (its keys), so the old words named the
one kind that does. data, sel and dirty keep "this pane has no text",
which is true of all three.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
never FileTooLarge, ParseZon or a bare `parse zon`
Restore read failures named the Zig error (FileTooLarge, NotAFile,
ReadFailed), a file that is no dump said `not a pardes dump (ParseZon)`,
and a ThemeFile that did not parse said `parse zon`. Messages.errorWords
says an error in words (the few that read badly spelled out plainly,
the rest spaced and lower case, as reportError did), and zonWhy gives
the parser's first error with its line: `not a pardes dump: line 1:
expected ...`, `theme file x.zon: line 3: ...`.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
permission denied, and a Save there says so, not no such directory
`pardes noperm/a/b/c` and `pardes /proc/1/root/x` took the missing
directory for one Save would make, opened a pane and exited 0; its Save
then said "no such directory". fs.deniedAbove finds the nearest
directory there and asks whether it may be searched and written:
forwarding refuses such a name, exit 1, "permission denied", and a
failed Save says "permission denied", which the writer's 9P error
carries as EPERM (9ns: EACCES).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
stays open: another client's command in the same directory gets a pane of its own
A finished command pane was the next command's for its directory, from
any client, so with four clients scripting one session, one read
another's output as its own last run. An open of a look or exec file
whose write was answered a pane's serial now holds that pane: reuse
passes over it and a new command pane runs the line. The open's own
next command may run there again, and once it is closed the directory's
one command pane is reused as before.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
another client's exec meanwhile can never take the text into its pane
pardes - wrote `pager <dir>` to /ctl, then read /exec on a fresh open,
which answers the session's last answer: a client that exec'd in
between had its pane overwritten by the paged text. /pager takes the
directory and answers the +Pager's serial on the open that wrote it,
as /pane/new answers its own open; the ctl verb is gone. Client.ask
writes and reads on one open. The README's look recipe reads its
answer on its own open too.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
are refused alike: "this pane has no text to address"
A terminal took an addr write and evaluated it over nothing, saying
"bad address syntax" or "address out of range" by the expression, while
dot refused it as no text at all. A range file of a pane with no text
now refuses every write the same way, before the expression is read.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
| |
size quoted its own word in every refusal, as bad values were quoted
before round 31's change for the settings. The value is the offending
word here too, and is now what each size refusal quotes.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
look whose address fails never leaves the file it opened
`a.txt:2:3:`, as a compiler prints a place, failed as bad address
syntax, and still opened a.txt: the file was opened to read the
address in, and stayed when the address failed. The trailing colon is
now no part of the place, and a pane opened only to evaluate an address
that fails goes again, the miss said from the pane looked from.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
again, as a /ctl write of it does
The dump's ThemeFile line went to the settings table, which has no
such setting and never asks the host to read a file, so a restored
session came back in the default theme. The restore now makes the
request a /ctl ThemeFile makes, and the host loads the file.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
naming the file last loaded, or none, so they always replay
The request's path was taken as the theme file before the host had
read it, so a file not found or not ZON left /ctl saying ThemeFile
<that path>, and writing the report back failed again. The path a load
succeeds with is now kept apart; a failure puts the request back to it
(and watches it again), or to none.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
and log as different records, never merged as one (x2)
A setting's bad value quoted the setting's word, so "Verbose maybe"
and "Verbose nope" made the same err text and the log's repeat count
merged them. The value is the offending word, and is now the one
quoted, blanks and all; the log's dedupe, comparing whole texts,
then keeps them apart.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
log record; streams the text in bounded writes; never loses it; handles \r, NUL and BEL as a terminal does
Each paged command made another +Pager until placement failed, and
then git's text was lost with exit 0; a 130 MB page timed out half
written and dirty; a directory whose name held a newline left a stray
+New; and the log said new +New then rename. The root ctl's `pager
<dir>` now makes the directory's +Pager (named before it is announced,
placed without the keyboard) or empties the one there; the text goes
into it a line-ended 8 MiB chunk a write, one undo step, up to the file
limit and its note, and is left clean. A directory a ctl line cannot
name pages into the session's. Any failure prints the text to stderr
with why and exits 1. A carriage return keeps a progress line's last
state and CRLF is a newline; NUL, BEL, SO and SI go; empty stdin makes
no pane.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
from every way a look comes; a PDF's :0 has no page 0
A look of `:12` had no path to resolve, so it fell through to a word
search for the text ":12" and found nothing. A digit-led address with
no path now names the looking pane, as `:/re/` already did: its look,
the root's (the keyboard's pane), Look, B3 and an event write-back all
reach it, a terminal's logical lines included. On a PDF, :0 is the
has-no-page miss rather than a refusal.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
choice: Petscii on the pane, TermImages for new ones
Under an outer terminal without kitty graphics a tty pardes cannot pass a
terminal pane's images on, so it draws them itself as an image pane's
Petscii does: each row of an image is matched to C64-palette glyph art
over the cells it covers (GlyphArt.renderRect, the exact-grid half of
GlyphArt.render), cached while it is on screen. yazi is still told the
kitty protocol works, so it keeps sending its previews.
The same art is a choice anywhere: the Petscii builtin now takes a
terminal pane too (PaneKind.picture), flipping its images between pixels
and glyphs, and a terminal holding images, or drawing them as glyphs by
choice, says petscii:on|off in its tag as an image pane does. TermImages
real|petscii (default real) is what a new terminal starts with; it is in
DumpConfig, /ctl and the reference.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GIT_PAGER, Pager pardes|off to opt out; command panes page through cat
A paging command in a terminal, or run through its pty/run, sat in
less, and a pty/run never answered. `pardes -` now reads stdin to its
end, strips terminal escapes (colour, OSC, overstrike), and shows it:
inside a session as a clean <cwd>/+Pager pane made through pane/new and
back at once, outside one as a new editor whose first pane it is, as
`vim -` does. A terminal's shell gets PAGER and GIT_PAGER set to this
pardes's own path and `-` where the user's environment sets neither;
`Pager off`, a setting in /ctl, init and DumpConfig, leaves terminals
started after it to the environment. A command pane's one-shot shell
keeps cat, its output being a pane already.
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]>
|