mod csi;
mod esc;
use std::sync::mpsc::Sender;
use bytes::Bytes;
use tui_term::vt100::Callbacks;
pub struct TerminalCallback(pub Sender<Bytes>);
impl Callbacks for TerminalCallback {
fn unhandled_escape(
&mut self,
screen: &mut tui_term::vt100::Screen,
i1: Option<u8>,
i2: Option<u8>,
b: u8,
) {
match (i1, i2, b) {
(Some(b'#'), None, b'8') => esc::decaln(screen),
(None, None, b'D') => esc::ind(screen),
(None, None, b'M') => esc::ri(screen),
_ => {},
}
}
fn unhandled_csi(
&mut self,
screen: &mut tui_term::vt100::Screen,
i1: Option<u8>,
i2: Option<u8>,
params: &[&[u16]],
c: char,
) {
match (i1, i2, params, c) {
(None, None, &[&[n]], 'Z') => csi::cbt(screen, n),
(None, None, &[&[n]], 'I') => csi::cht(screen, n),
(None, None, &[&[5]], 'n') => csi::dsr_status(&self.0),
(None, None, &[&[6]], 'n') => csi::dsr_cursor(&self.0, screen),
_ => {},
}
}
}