summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-29 18:05:03 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:17 -0300
commit0fd908eea63d04886b269438aa7529d3dd422256 (patch)
treed85e62ca1c49bab9dd032ddf94a25239a96fde4a
parent1c02a00ef0a0c8941deafc09661cc22159c01522 (diff)
downloadpardes-0fd908eea63d04886b269438aa7529d3dd422256.tar.gz
pardes-0fd908eea63d04886b269438aa7529d3dd422256.zip
Release Pardes 0.4
Co-Authored-By: Claude Opus 5.5 <[email protected]>
-rw-r--r--build.zig.zon2
-rw-r--r--src/CHANGELOG.md59
2 files changed, 59 insertions, 2 deletions
diff --git a/build.zig.zon b/build.zig.zon
index 877dfacb..5ee65c4b 100644
--- a/build.zig.zon
+++ b/build.zig.zon
@@ -1,6 +1,6 @@
.{
.name = .pardes,
- .version = "0.0.3",
+ .version = "0.0.4",
.dependencies = .{
// 9P sessions and transports live in the published cloud9 package, so
// the manifest pins the build: `zig build` fetches this commit into
diff --git a/src/CHANGELOG.md b/src/CHANGELOG.md
index 142287b2..d2641aa9 100644
--- a/src/CHANGELOG.md
+++ b/src/CHANGELOG.md
@@ -1,6 +1,60 @@
# Changelog
-## 0.0.3
+## 0.0.4
+
+- Drive the editor over 9P the way acme is driven. Panes take sam
+ addresses (`/re/`, `#n`, `$-1`, `0/re/`), `L:C` and inclusive `L:C-L2:C2`
+ ranges on `addr`, with `data` and `xdata`; `Edit` runs the sam command
+ language as one undo step. `exec` and `ctl` buffer lines per open, and a
+ line without a newline runs with its write. One rule for failure: a
+ builtin that fails fails the write and logs one `err`, no `msg`.
+- New 9P files: `/layout`, `/tag`, `/tagexec`, `col/<serial>/{tag,ctl,exec}`,
+ `pane/<n>/tagexec`, `/recent`, ask/answer records, and a `size` ctl for
+ detached sessions (160x50 by default). Listings freeze at their open, so
+ a read in several chunks never splices two moments.
+- acme's ctl words (`name`, `put`, `clean`, `dirty`, `del`, `delete`,
+ `dot=addr`, `addr=dot`, `limit=addr`, `mark`, `nomark`, `show`,
+ `cleartag`) are accepted again, done by the files that replace them; a
+ pane's ctl reads acme's fields in acme's order. `Put` saves and `Delete`
+ closes; acme builtins pardes lacks are refused, never run as shell
+ commands. plan9port's `9p write` always truncates, so piping into `body`
+ replaces it: append with `>>` through a mount.
+- Command panes and a REPL binding; `pty/run` runs one line and answers its
+ exit status. Every child starts with default signal dispositions.
+- `Recent` lists recently opened files, closed ones included, and persists
+ in `$XDG_STATE_HOME/pardes/recent`. A Jumplist row for a closed file says
+ `(closed)`. `+Unsaved` lists dirty panes. `ThemeSel` and `FontSel` are now
+ `Themes` and `Fonts`; `Exit`'s refusal opens in an output pane.
+- `pardes --wait FILE` (`-w`) run inside a pane opens FILE there and returns
+ only when its pane is deleted, as plan9port's `E` does: set
+ `EDITOR='pardes --wait'` for fish's Ctrl-O, git and the rest. Without it,
+ `pardes FILE` still hands the file over and returns at once.
+- Only a write logs an `err`: a refused open, create or remove fails with
+ Plan 9 words (`permission denied`, `file does not exist`) and logs nothing.
+- The tag is a full text buffer: multi-line, with undo.
+- Helix keys: the skipped non-conflicting keys, full registers and per-range
+ anchors, checked against the latest helix.
+- Deleting the last column leaves the window empty but for its tag, as in
+ acme. A buffer whose file was deleted on disk counts as dirty.
+- 62 themes in 13 families, each as close as possible to its original,
+ grouped by family in `Themes`; an `acme` theme taken from plan9port's
+ source, with acme's grips, 2 px rules and a 1 px tag rule. Sizes follow
+ display density.
+- GUI motion: `Motion` flavours (crisp, smooth, bouncy, playful, off), `Lift`,
+ a cursor that glides and moves with its pane, smooth scroll, and optional
+ Bloom, Vignette, Grain, SelectionGlow, HoverGlow and Shadertoy post passes
+ that recompile on save. Still passes let the GUI rest; Crt keeps drawing.
+- The terminal: replies to capability queries, malformed escape sequences
+ and lone modifier keys never become typed text; function keys, Insert and
+ the keypad reach terminal panes; a lone Escape is Escape at once; a focus
+ change no longer resends every blank cell.
+- Speed: the theme's chrome is worked out once, not per grapheme; typing
+ tells `g.` where its edit ended; large body and data writes are linear;
+ a pattern that opens with a literal jumps to it. `zig build perf-gate`
+ fails any gesture more than 3x its recorded baseline.
+- Robustness: over-long paths, non-UTF-8 bytes and odd 9P input are refused,
+ never a panic; seeded GUI, core and 9P monkeys (`zig build monkey-9p`)
+ replay and shrink what they find.
- A column can be empty, as in acme. `Newcol` makes an empty column and
gives its tag the keyboard; closing a column's last pane, or dragging it
@@ -63,6 +117,9 @@
carry real lengths, modes and mtimes. Sources are served under `/src` only
with `-Dembed-sources=true`. The tree code moved from `src/fs.zig` to
`src/ninep/`.
+
+## 0.0.3
+
- Add pinned tree-sitter declaration context, with optional compact tagline
styling and separators between discontinuous source lines.
- Configure search and LSP result context with `LocationsConfig`. Results use