feat(terminal): port render state, highlights and the formatter

- render.rs ports render.zig: RenderState, the per-frame snapshot the
  renderer consumes (rows, cells, styles, graphemes, selection,
  highlights, cursor, colors), updated incrementally with Zig's full
  redraw triggers and per-page/per-row dirty tracking. Cells are stored
  struct-of-arrays; use the accessors.
- highlight.rs ports highlight.zig (untracked, tracked, flattened).
- formatter.rs ports formatter.zig: plain, VT and HTML output for
  terminal, screen, page list and page, with selection, rectangle,
  unwrap, trim, palette, codepoint maps, hyperlinks and pin/point maps.
  Screen's test dump helpers now delegate to it.

Cargo.toml also picks up dependencies for the kitty graphics and search
modules that are being ported concurrently.

Test Plan:
- cargo test -p ghostty-terminal --lib (1243 passed; formatter 100/100,
  render 15/15 Zig tests)
This commit is contained in:
ddidderr committed 2026-10-11 22:50:22 +02:00
1 parent f43c0cd00f
commit 6a374b6953
13 files changed
+5510 -356

No files matched your search

+5
View File
@@ -5,11 +5,16 @@ edition.workspace = true
license.workspace = true
[dependencies]
crossbeam-channel = "0.5.17"
flate2 = "1.1.10"
ghostty-datastruct.workspace = true
ghostty-unicode.workspace = true
ghostty-vt.workspace = true
log = "0.4.34"
onig = "6.5.3"
png = "0.18.1"
rustix = { version = "1.1.5", features = ["shm", "fs"] }
thiserror = "2.0.21"
[dev-dependencies]
ghostty-config.workspace = true