summaryrefslogtreecommitdiff
path: root/src/CHANGELOG.md
blob: 0b7bb12ee4e9fb62f968da578ebff8c544ea2d86 (plain) (blame)
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.