1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# Changelog
## 0.0.1
- Snapshot captures are deltas against the previous capture in the same script,
and a scripted click may name a word (`press middle @Del 2`, `@Del#2` for the
second pane on a row, `@Save-2` for a column beside one) instead of a screen
column. Adding one builtin word to a tagline used to rewrite 78 goldens
(3,758 lines) and silently move seven scripts onto the wrong word: `tutor.snap`
had been clicking `Grep` and asserting a tutor pane, `tagbottomimage.snap`
clicked 176 columns from the `Del` it claimed to execute. Seven tests regained
their subject, the corpus dropped from 16,700 lines to 5,722, and the same
edit now moves 337 lines.
- `zig build snap -- --update` regenerates in parallel at the widest probe
settings and then verifies every golden it just wrote, instead of capturing
once, serially, and blessing whatever it saw: 77s to 41s, and a capture that
does not reproduce is reported rather than committed.
- `zig build unit-test -Dtest-filter=<substring>` runs one test. The whole
binary is 14s, so a one-line change used to cost the full run; the test
runner's own `--test-filter` was silently dropped by the build.
- A snapshot script covers the `Save` prompt for the first time: armed on a
`+New` scratch it draws on the message row, prefilled with the pane's own
directory, and submitting it turns the scratch into the file it names.
- `pardes --fs` serves acme's control filesystem over Linux FUSE: a directory
per pane holding `addr`, `body`, `ctl`, `data`, `errors`, `event`, `rdsel`,
`tag`, `wrsel`, `xdata`, plus `index`, `cons` and `new/` at the root. A
program that opens those files is an editor extension — no plugin API, no
interpreter. `--fs=<dir>` names the mount point instead of deriving one under
`$XDG_RUNTIME_DIR`; every pane shell gets `PARDES_FS` and `PARDES_PANE`.
See docs/acme-fs.md and examples/acmefs/.
- While a script holds a pane's `event` file open, buttons 2 and 3 in that pane
are REPORTED to it instead of performed, so the words in that pane's tag are
the script's commands (acme's extension model). Keyboard Enter/Tab still
execute, so a scripted pane stays editable.
- Writing an event record back (`origin type q0 q1`) makes pardes perform the
Look or Exec it names — the same door acme has always had, and the reason
the mount is 0700.
- Version tracking: the compiled version is embedded from build.zig.zon and shown by Changelog.
- New builtins: Changelog, Newtty, and Joincol.
- Markdown tree-sitter highlighting, including nested fenced code blocks.
- `.patch` and `.diff` files are highlighted.
- Coloring dispatch keys off the buffer title.
- Opening a new file only splits into a new column when both panes would be at least 100 columns wide.
- Terminal ANSI colors render only in tty mode; normal mode is a plain editing
view, so an edit can never shift a shell row's colour.
- `New` and `Newcol` open an empty scratch buffer instead of a shell or a
temporary file. Its directory is inherited from the pane it was opened from.
- `Save` on a scratch asks for a path, prefilled with that inherited
directory, and the buffer becomes an ordinary file once written.
- `Save` reaches every pane that holds text of its own and leads its tagline:
a terminal ("Save New Newtty Del Filter") and an output buffer like
`+Search` ("Save New Newtty Del") as well as a file. Images and PDFs keep
the plain tail — their bytes on disk already are what they are.
- `Save` takes the path as an ARGUMENT (`Save notes.txt`, or a selection
chorded onto the word) and asks for one only when it was not given, the way
Find and Grep ask for a pattern. A relative path resolves against the
pane's own directory, with `.` and `..` normalized; a path that cannot be
made absolute is refused rather than written next to the process.
- Writing to a path never rewrites the pane: a terminal stays a terminal, an
output buffer keeps its rows and its place in the n/N ring, and an open file
keeps the file it has, so `Save <elsewhere>` is a copy and not a rename.
The scratch `+New` is still the one exception, becoming the file it names.
- A dropped pane's memory outlives its frame, so a pane pointer taken during
that frame stays valid until the next one repairs it.
- The core owns the event loop. Each platform is now a `Host` of optional
function pointers; an unimplemented method falls back to an in-process
default, so a host with no methods at all is still a complete pardes.
- Ctrl-V and Ctrl-Shift-V paste in a tty pane: the default register and the
system clipboard, typed at the program the way a terminal emulator pastes
(bracketed under mode 2004). A paste arriving from the desktop reaches the
shell instead of an edit buffer the pty cannot see.
- The default filesystem is pardes's own source, embedded from an allowlist
(src/source_manifest.zig): what a host with no file method reads, and what
the browser has always read. It replaced a build-time generator that embedded
every tracked .zig file.
- `zig build run-isolated` builds and runs `pardes-isolate`: the same source
with one comptime option, whose host supplies only the terminal. The
filesystem is not disabled in it, it is absent — the libc paths compile away.
- Typst highlighting: headings, `*bold*` spans, raw/code blocks and inline raw
spans, and `#`-prefixed function calls (including the sigil itself).
- Fenced Typst raw blocks with a language tag (e.g. ```` ```zig ````) get that
language's grammar injected, the same treatment markdown fenced blocks
already had.
- Markdown bold, italics and inline code spans are highlighted: pardes now
builds the markdown inline grammar, a second parser off the same dependency,
and re-parses the block grammar's `inline` nodes with it. Only the block
grammar was built before, so emphasis had no nodes to match.
- Escape in a PDF pane is the document's own cancel: it drops the mouse
selection and the search highlight overlay and stays where you were reading.
It used to run `Last`, which moved focus out of the pane and left every
following key going somewhere else. `Shift-Esc` is now the hop out — the same
chord that leaves a raw tty.
- `gj`/`gk` move one VISUAL line, following the automatic breaks of a
soft-wrapped body and keeping the goal column inside the row. `j`/`k` are
unchanged: whole file lines. With `Wrap` off a line is one visual row and the
two pairs are the same motion.
|