feat(terminal): port terminal search and the tmux control-mode viewer

search/: sliding-window matcher over pages, active-area, page list,
viewport and screen searches, and the background search thread (std
thread + crossbeam-channel mailbox, 24 ms refresh, terminal behind
Arc<Mutex<_>>). Searches take &mut Screen explicitly; ScreenSearch::deinit
must be called to untrack pins. The sliding window uses a VecDeque
instead of CircBuf (same results; two layout-only assertions dropped).

tmux/: layout parsing, output formatting and the control-mode viewer
state machine, reusing ghostty_vt::tmux::control for parsing. The viewer
is not wired into termio yet; steps are in the notes.

The renderer must set terminal.flags.search_viewport_dirty for the
search thread to re-search the viewport.

Test Plan:
- cargo test -p ghostty-terminal --lib search (54; 51/53 Zig tests,
  2 allocator-failure tests skipped)
- cargo test -p ghostty-terminal --lib tmux (96; all Zig tests)
This commit is contained in:
ddidderr committed 2026-10-11 22:51:36 +02:00
1 parent 3742a131b8
commit db1d4fe41d
14 files changed
+6784

No files matched your search

+2
View File
@@ -12,6 +12,7 @@ pub mod ref_counted_set;
pub mod render;
pub mod screen;
pub mod screen_set;
pub mod search;
pub mod selection;
pub mod size;
pub mod stream_readonly;
@@ -19,3 +20,4 @@ pub mod string_map;
pub mod style;
pub mod tabstops;
pub mod terminal;
pub mod tmux;