From d94ec144dd1ca29886ebbc438882e73af6fe0ae9 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 6 Dec 2021 03:33:57 -0500 Subject: add example for testing vte processing --- examples/vte.rs | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 examples/vte.rs (limited to 'examples') diff --git a/examples/vte.rs b/examples/vte.rs new file mode 100644 index 0000000..e7db674 --- /dev/null +++ b/examples/vte.rs @@ -0,0 +1,85 @@ +use std::io::Read as _; + +/// A type implementing Perform that just logs actions +struct Log; + +impl vte::Perform for Log { + fn print(&mut self, c: char) { + println!("[print] U+{:04x}", c as u32); + } + + fn execute(&mut self, byte: u8) { + println!("[execute] {:02x}", byte); + } + + fn hook( + &mut self, + params: &vte::Params, + intermediates: &[u8], + ignore: bool, + c: char, + ) { + println!( + "[hook] params={:?}, intermediates={:?}, ignore={:?}, c=U+{:04x}", + params, intermediates, ignore, c as u32 + ); + } + + fn put(&mut self, byte: u8) { + println!("[put] {:02x}", byte); + } + + fn unhook(&mut self) { + println!("[unhook]"); + } + + fn osc_dispatch(&mut self, params: &[&[u8]], bell_terminated: bool) { + println!( + "[osc_dispatch] params={:?} bell_terminated={}", + params, bell_terminated + ); + } + + fn csi_dispatch( + &mut self, + params: &vte::Params, + intermediates: &[u8], + ignore: bool, + c: char, + ) { + println!( + "[csi_dispatch] \ + params={:#?}, intermediates={:?}, ignore={:?}, c=U+{:04x}", + params, intermediates, ignore, c as u32 + ); + } + + fn esc_dispatch(&mut self, intermediates: &[u8], ignore: bool, byte: u8) { + println!( + "[esc_dispatch] intermediates={:?}, ignore={:?}, byte={:02x}", + intermediates, ignore, byte + ); + } +} + +fn main() { + let mut stdin = std::io::stdin(); + let mut parser = vte::Parser::new(); + let mut performer = Log; + + let mut buf = [0; 4096]; + loop { + match stdin.read(&mut buf) { + Ok(0) => break, + Ok(n) => { + for byte in &buf[..n] { + parser.advance(&mut performer, *byte); + } + } + Err(err) => { + eprintln!("err: {}", err); + std::process::exit(1); + } + } + } +} -- cgit v1.2.3-54-g00ecf