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

+3
View File
@@ -1,12 +1,15 @@
//! Safe page-based terminal memory model.
#![cfg_attr(test, allow(clippy::unwrap_used))]
pub mod cursor;
pub mod formatter;
pub mod highlight;
pub mod hyperlink;
pub mod page;
pub mod page_list;
pub mod pin_iter;
pub mod point;
pub mod ref_counted_set;
pub mod render;
pub mod screen;
pub mod screen_set;
pub mod selection;