You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.1 KiB
46 lines
1.1 KiB
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<crossbeam_channel::Receiver<InputEvent>>;
|
|
|
|
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(())
|
|
}
|
|
|