like curses, but not evil [WIP]
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.
bless/src/main.rs

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(())
}