mod cell;
mod color;
mod cursor;
mod damage;
mod event;
mod grid;
mod input;
mod search;
mod selection;
mod serialize;
mod term;
pub use cell::{Cell, CellFlags};
pub use color::Color;
pub use cursor::{Cursor, CursorShape, Pen};
pub use damage::{LineDamage, ScrollOp, TermDamage};
pub use event::TermEvent;
pub use grid::{Grid, Row};
pub use input::{
Key, KeyAction, KeyEvent, KeypadKey, Modifiers, MouseAction, MouseButton, MouseEvent,
};
pub use search::Match;
pub use selection::{SelectionSpan, SelectionType, Side};
pub use serialize::{
CELL_RECORD_LEN, DecodeError, Frame, FrameKind, Span, WIRE_VERSION, decode, encode,
encode_cell_record, encode_color,
};
pub use term::Term;
use vte::Parser;
pub struct Engine {
parser: Parser,
term: Term,
}
impl Engine {
pub fn new(cols: usize, rows: usize) -> Self {
Engine {
parser: Parser::new(),
term: Term::new(cols, rows),
}
}
pub fn with_scrollback(cols: usize, rows: usize, scrollback_limit: usize) -> Self {
Engine {
parser: Parser::new(),
term: Term::with_scrollback(cols, rows, scrollback_limit),
}
}
pub fn feed(&mut self, bytes: &[u8]) {
self.parser.advance(&mut self.term, bytes);
}
pub fn resize(&mut self, cols: usize, rows: usize) {
self.term.resize(cols, rows);
}
pub fn grid(&self) -> &Grid {
self.term.grid()
}
pub fn cursor(&self) -> &Cursor {
self.term.cursor()
}
pub fn bracketed_paste(&self) -> bool {
self.term.bracketed_paste()
}
pub fn encode_key(&self, ev: KeyEvent) -> Option<Vec<u8>> {
self.term.encode_key(ev)
}
pub fn encode_mouse(&self, ev: MouseEvent) -> Option<Vec<u8>> {
self.term.encode_mouse(ev)
}
pub fn encode_paste(&self, text: &str) -> Vec<u8> {
self.term.encode_paste(text)
}
pub fn encode_focus(&self, focused: bool) -> Option<Vec<u8>> {
self.term.encode_focus(focused)
}
pub fn drain_events(&mut self) -> Vec<TermEvent> {
self.term.drain_events()
}
pub fn drain_replies(&mut self) -> Vec<u8> {
self.term.drain_replies()
}
pub fn link_at(&self, row: usize, col: usize) -> Option<core::num::NonZeroU32> {
self.term.screen_link_at(row, col)
}
pub fn viewport_link_at(&self, row: usize, col: usize) -> Option<core::num::NonZeroU32> {
self.term.viewport_link_at(row, col)
}
pub fn hyperlink(&self, link: core::num::NonZeroU32) -> Option<&str> {
self.term.hyperlink(link)
}
pub fn scrollback_len(&self) -> usize {
self.term.scrollback_len()
}
pub fn synchronized_output(&self) -> bool {
self.term.synchronized_output()
}
pub fn color_scheme_updates(&self) -> bool {
self.term.color_scheme_updates()
}
pub fn report_color_scheme(&mut self, dark: bool) {
self.term.report_color_scheme(dark);
}
pub fn win32_input_mode(&self) -> bool {
self.term.win32_input_mode()
}
pub fn damage(&self) -> TermDamage {
self.term.damage()
}
pub fn frame(&self) -> Frame {
self.term.frame()
}
pub fn reset_damage(&mut self) {
self.term.reset_damage();
}
pub fn mark_fully_damaged(&mut self) {
self.term.mark_fully_damaged();
}
pub fn scroll_delta(&self) -> Option<ScrollOp> {
self.term.scroll_delta()
}
pub fn viewport_line(&self, i: usize) -> &[Cell] {
self.term.viewport_line(i)
}
pub fn scroll_up(&mut self, n: usize) {
self.term.scroll_up(n);
}
pub fn scroll_down(&mut self, n: usize) {
self.term.scroll_down(n);
}
pub fn scroll_to_bottom(&mut self) {
self.term.scroll_to_bottom();
}
pub fn selection_begin(&mut self, row: usize, col: usize, side: Side, ty: SelectionType) {
self.term.selection_begin(row, col, side, ty);
}
pub fn selection_extend(&mut self, row: usize, col: usize, side: Side) {
self.term.selection_extend(row, col, side);
}
pub fn selection_clear(&mut self) {
self.term.selection_clear();
}
pub fn selection_range(&self) -> Vec<SelectionSpan> {
self.term.selection_range()
}
pub fn selection_text(&self) -> Option<String> {
self.term.selection_text()
}
pub fn search(&self, query: &str) -> Vec<Match> {
self.term.search(query)
}
pub fn scroll_to_match(&mut self, m: &Match) {
self.term.search_scroll_to(m);
}
pub fn match_spans(&self, m: &Match) -> Vec<SelectionSpan> {
self.term.match_spans(m)
}
}