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 225f5ae2d7
commit 40dc87519e
13 files changed
+5510 -356

No files matched your search

Generated
+21
View File
@@ -562,6 +562,15 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
[[package]]
name = "crossbeam-channel"
version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.23"
@@ -1351,19 +1360,31 @@ dependencies = [
name = "ghostty-terminal"
version = "0.1.0"
dependencies = [
"crossbeam-channel",
"flate2",
"ghostty-config",
"ghostty-datastruct",
"ghostty-unicode",
"ghostty-vt",
"log",
"onig",
"png",
"rustix",
"thiserror 2.0.21",
]
[[package]]
name = "ghostty-termio"
version = "0.1.0"
dependencies = [
"crossbeam-channel",
"ghostty-apprt",
"ghostty-config",
"ghostty-datastruct",
"ghostty-os",
"ghostty-renderer",
"ghostty-terminal",
"ghostty-vt",
"libc",
"log",
"nix 0.31.3",