| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
|
|
|
|
|
| |
docs/site/media, recorded from a hidden test window by test/record_demos.py
text-is-the-interface, terminals-are-panes, scripting-over-9p and
diff-review: each a webm (VP9), an mp4 (H.264, faststart) and a poster
PNG at 960 px, with captions.txt. The script drives a PARDES_TEST session
on the virtual clock through stdin mouse events, keys and 9P, keeps the
settled frame after each step, draws the pointer and loops each clip
with a dissolve back to its first frame.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
recordings, one Typst bundle run
docs/site/site.typ writes every page in one bundle compile: the landing
page (the tagline, the recordings listed in media/clips.toml, links to
start from), a page per entry of `chapters` in style.typ, and the tutor.
Every page shares a tag-line header with the chapter words; #doc links
resolve to the right page and anchor; a chapter with four or more
sections gets an "On this page" list. Links are relative and pages flat,
so it reads from file:// or any static server. `zig build site` installs
it to <prefix>/share/doc/pardes/site and fails plainly without typst.
The look is 0x4200.cafe's lapis layout (framed panels, hard shadows, a
tag-line trail, Departure Mono headings over Crimson Pro) in orchard's
greens and amber, forestbones_light when the reader prefers light; both
fonts are OFL and shipped. In HTML a key is one pill with its + and ›,
and a mouse button is an inline SVG in currentColor. The tagline lives
once in style.typ for the sheet, the book and the site, and the single
page html.typ gives way to the site.
The landing leads with one plain sentence (columns of panes, click to
run or open, helix keys, scripts through files), then the tagline and a
line on where it runs; a hero image is the first ready clip's poster;
"Start: the guide" leads the links, "Hands on: the tutor" next, the rest
a plain row; the captions use no undefined words. docs/typ/install.typ
holds the install lines once: setup.typ has an Install section that
includes it, and the landing includes it too. Building says up front it
is for contributors and points at setup to install. In HTML the guide's
glossary is a closed <details> (#glossary, the same heading and table on
paper), each drawn mouse carries hidden text (left-click, hold left,
click middle) for screen readers, w3m and copying, and the footer takes
a source link and a licence from `project` in style.typ once decided.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
exercises on a +Tutor copy, the README builds the GUI and says what a terminal needs, and Shift-Esc says it needs the kitty keyboard protocol
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
commands run and panes go table, scripting's first tag word Fmt and eight traps, setup as the one home of the pager and the servers, a scannable cheatsheet, an honest README, the edge cases moved to the reference, and the pager's colours
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
helix's :q
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
because a write was short: a long line cut by a mount is one line
A write shorter than its message, and not a multiple of 4096, was taken
as whole, its tail a line. 9ns cuts a FUSE write of up to 512 KiB into
65512-byte Twrites, the last one short, so a 600 KiB `Edit ,c/.../`
arrived cut and its tail ran as an unknown control message; the 1 MiB
refusal failed the same way. Each open now holds a partial line until
its newline, or its release, which ends the last line; an Edit block is
whole when it closes, as before. A name write with a NUL still fails
its write at once. selfmount writes a 600 KiB Edit line and a 1.1 MiB
line through a real 9ns mount; building.typ says how lines are cut.
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]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
pane, as Esc does from normal, and a raw program never sees it; Ctrl-b alone toggles raw
Shift-Esc switched a terminal in normal or insert mode into raw, so the
one key meant to get out of anything got a script or a person into a
program instead. It is now handled before any mode: an open prompt is
closed, insert mode left, a pending count dropped, and Last runs, the
pane keeping its mode (a raw terminal stays raw). Ctrl-b is the only
switch between raw and normal. The keymap's two chords become one,
back_out; the cheatsheet row, the guide's mode table and the tutor say
so, and the tty and builtins goldens are re-recorded.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
and Restore reads, Find and Grep caps and notes, the ctl read's collapsed and fit/tint, PDF search hits, ./x misses, 1 MiB lines, DumpDir, bad dials, /pager files, rename previews, Lspinfo, and --wait from an agent
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
after a match, LookWord list rows, the last-run awk without exit, command pane directories, rename previews, listings that keep the keyboard, set-value toggles, pty/run one line a write, /pager resolving, PDF :N:H, skipped directories and Lspinfo
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]>
|
| |
|
|
|
|
| |
command pane while their open lasts; the docs give cmd panes, the err grep, alt-screen prompts, /pager's refusals, Tty+ on a ctl, --, and theme failures in words
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
fresh open reads anyone's last answer, and /pager is documented
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
before the log's last err, and that Delcol opens no +Unsaved
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
records and EMFILE, ThemeFile failures and replays, trailing-colon looks, pty/run after clear, no-text addr refusals, held log reads at Restore, pardes - in one open, and a detached pty in pixels
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
clicks back and lets event go, and warns that cat event | while read swallows the next click
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
text, SYSTEMD_PAGER, a paged diff drawn as one, event reads in pieces, sel, write-back origins, +PdfSections rows, a PDF body by lines, bare :N looks and quoted bad values
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
itself, the recipes share one stated preamble, run a command waits for its tag, and setup says man reads MANPAGER first
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]>
|
| |
|
|
|
|
| |
terminal's PAGER, command panes' cat, Pager pardes|off, and pty/run no longer waiting in one
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
chapters lists setup.typ second and #doc takes a setup id. Shell lines
(#cmd) follow the density too: roomy in the book and the HTML, with a
tint and space around them, tight on the A4 sheet; the book sets code
blocks on the same tint.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
yazi opener, the shells with prompt marks, language servers, fonts and plan9port, each snippet tried
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
| |
control byte, $winid and the pager defaults, the one client rule, and Shift-Esc said one way in the guide and the cheatsheet
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]>
|
| |
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |\
| |
| |
| | |
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]>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
comment, GripWidth among them on the tty, so the whole report writes back to /ctl
The report said it could be written back as is, but "Lift unsupported"
and the tty's "GripWidth 100" were each refused by the root ctl, and
"DumpDir (none)" would have named a directory "(none)". Those lines are
now comments, and a test writes every line of the report back.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |/
|
|
|
|
|
|
|
|
|
|
|
| |
PDF's body and one open's undo step do, and the PDF tag in its order
fs.md said Rename lists the places; it says its count and lists none.
It now also says a look at no such file is a logged miss while an
unreadable one fails the write, that Restore brings no jump list back,
that a PDF's body is read-only page text no address reaches, and that
one open's writes are one undo step only while nothing else edits the
pane between them. tags.md listed the PDF tag's words out of order.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
by git's rules, a plain diff's names as written
In a git section (one with a `diff --git` line) the one-letter side prefix
git writes, `a/`/`b/` or with diff.mnemonicPrefix `c/`, `i/`, `w/`, `o/`,
is dropped from its paths only when both paths of that line carry one,
different ones: `--no-prefix` writes none, so its `a/x a/x` is a real
directory `a` and is kept. A plain `diff -u` never strips: its names are
used as written, past the timestamp. `/dev/null` stays itself.
The walker does this once (diff.Walk.side, diff.gitHeader), so the path a
look resolves, and the one a miss says, are the repository's name:
`Look: src/x.zig: no such file here`, `Look: lib/old.zig: deleted by this
diff`. The look no longer tries a stripped name beside the written one.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
A write to a terminal's body goes to its child as typed keys: no
bracketed-paste marks around it, even when the program set 2004, so a
newline in it is Enter and a shell runs each line. fs.md did not say
which, and a script cannot guess. It does now, and a test writes to a
terminal whose program asked for bracketed paste and checks the bytes
sent are only the ones written.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
Save of a pane's own file logged `save <serial> <name>`, and so did a
scratch's `Save path` (the pane takes that name). A `Save path` that
writes a copy of a file pane, or a terminal's scrollback, elsewhere
logged nothing, so a follower could not tell the file was written. It
now logs `save <serial> <path>` with the path written, once the host has
written it (events.noteLogAs). fs.md's log table says so.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|