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
//! retach — terminal multiplexer with native scrollback passthrough.
//!
//! This crate provides a headless terminal emulator ([`screen::Screen`])
//! that can be used as a library for building terminal-aware applications.
//!
//! # Example
//!
//! ```rust
//! use retach::screen::Screen;
//!
//! let mut screen = Screen::new(80, 24, 1000);
//! screen.process(b"Hello \x1b[1mWorld\x1b[0m");
//!
//! for row in screen.visible_rows() {
//! for cell in row.iter() {
//! let style = screen.resolve_style(cell.style_id);
//! // render cell.c with style
//! }
//! }
//! ```
//!
//! Render emulator state as ANSI for a real terminal (incremental,
//! dirty-tracked):
//!
//! ```rust
//! use retach::screen::{AnsiRenderer, Screen};
//!
//! let mut screen = Screen::new(80, 24, 1000);
//! let mut renderer = AnsiRenderer::new();
//!
//! screen.process(b"Hello\r\n");
//! let full = renderer.render(&screen, true); // complete redraw
//! screen.process(b"World");
//! let delta = renderer.render(&screen, false); // only changed rows
//! assert!(!full.is_empty());
//! assert!(delta.len() < full.len()); // incremental update is smaller
//! ```