use std::io::{Write}; use anes::parser::{KeyCode, Sequence}; use crate::stdin_term::{StdinInterface, StdinInterfaceOptions}; #[macro_use] extern crate smart_default; mod stdin_term; /// Event received from the input stream - can be keys, mouse, query response or shutdown (end of stream) enum InputEvent { Key(anes::parser::Sequence), EndOfStream, } trait TerminalInterface : Write { fn get_receiver(&mut self) -> Option>; fn shutdown(&mut self); } fn main() -> std::io::Result<()> { let mut term = StdinInterface::new(StdinInterfaceOptions::default()); let receiver = term.get_receiver().unwrap(); 'lp: loop { match receiver.recv() { Ok(InputEvent::EndOfStream) | Err(_) => { break 'lp; } Ok(InputEvent::Key(k)) => { write!(term, "{:?}\n", k)?; if let Sequence::Key(KeyCode::Esc, _) = k { write!(term, "ESC, exit\n")?; break 'lp; } } } } term.shutdown(); Ok(()) }