mod seq;
mod shadow;
mod vt100;
#[cfg(feature = "decode")]
pub(crate) use self::seq::decode_base64;
pub(crate) use self::seq::Query;
pub(crate) use self::vt100::Vt100Emulator;
use crate::screen::MouseMode;
use crate::Screen;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) struct FrameSpan {
pub(crate) duration: std::time::Duration,
pub(crate) printable: u32,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) enum Stop {
FrameComplete(FrameSpan),
Query(Query),
}
#[derive(Debug, Clone)]
pub(crate) struct Processed {
pub(crate) consumed: usize,
pub(crate) stop: Option<Stop>,
}
#[derive(Debug, Clone, Copy)]
pub(crate) struct InputModes {
pub(crate) mouse: MouseMode,
pub(crate) mouse_encoding: MouseEncoding,
pub(crate) bracketed_paste: bool,
pub(crate) application_cursor: bool,
pub(crate) focus_events: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum MouseEncoding {
Legacy,
Sgr,
Utf8,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum ModeState {
Set,
Reset,
NotRecognized,
}
impl ModeState {
pub(crate) fn report_value(self) -> u32 {
match self {
ModeState::Set => 1,
ModeState::Reset => 2,
ModeState::NotRecognized => 0,
}
}
}
pub(crate) trait Emulator: Send {
fn process(&mut self, bytes: &[u8]) -> Processed;
fn snapshot(&self) -> Screen;
fn mid_sequence(&self) -> bool;
fn in_sync_update(&self) -> bool;
fn input_modes(&self) -> InputModes;
fn mode_state(&self, mode: u32) -> ModeState;
fn set_size(&mut self, rows: u16, cols: u16);
}