small software-rendered rust tty
add csi 6n cursor report
| -rw-r--r-- | src/main.rs | 4 | ||||
| -rw-r--r-- | src/term.rs | 16 |
2 files changed, 17 insertions, 3 deletions
diff --git a/src/main.rs b/src/main.rs index 944318e..d59817b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -223,7 +223,7 @@ fn main() -> Result<()> { while let Ok(x) = trx.recv_timeout(Duration::from_millis(16)) { f.write_all(&x)?; for char in x { - t.rx(char); + t.rx(char, pty.as_fd()); } } let i = render::render(&mut t, w.get_size(), ppem); @@ -238,7 +238,7 @@ fn main() -> Result<()> { fn tpaxrse() { println!("-------------------"); let mut x = TerminalInputParser::new(); - for c in "\x1b[?1049h".as_bytes() { + for c in "\x1b[6n".as_bytes() { use ctlfun::TerminalInput::*; match x.parse_byte(*c) { Char(x) => { diff --git a/src/term.rs b/src/term.rs index aaf1cec..30e77d5 100644 --- a/src/term.rs +++ b/src/term.rs @@ -1,5 +1,6 @@ use std::iter::repeat_n; use std::ops::Not; +use std::os::fd::BorrowedFd; mod cells; use cells::*; use ctlfun::Parameter::*; @@ -52,7 +53,7 @@ impl Terminal { self.cells.cells().fill(Cell::default()); } #[implicit_fn::implicit_fn] - pub fn rx(&mut self, x: u8) { + pub fn rx(&mut self, x: u8, pty: BorrowedFd<'_>) { match self.p.parse_byte(x) { Continue => {} Char(x) => { @@ -225,6 +226,19 @@ impl Terminal { } Control(ControlFunction { start: b'[', + params: [Value(6)], + end: b'n', + .. + }) => { + super::write( + pty, + format!("\x1b[{};{}R", self.cells.r(), self.cells.c()) + .as_bytes(), + ) + .unwrap(); + } + Control(ControlFunction { + start: b'[', params: [x], end: b'X', .. |