use andiskaz::{
color::{BasicColor, Color2},
emergency_restore,
error::Error,
event::{Event, Key, KeyEvent},
style::Style,
terminal::Terminal,
tstring,
};
use std::{panic, process::exit};
#[tokio::main]
async fn main() {
panic::set_hook(Box::new(|info| {
let _ = emergency_restore();
eprintln!("{}", info);
}));
let result = Terminal::run(term_main).await;
if let Ok(Err(error)) | Err(error) = result {
eprintln!("{}", error);
exit(-1);
}
}
async fn term_main(mut term: Terminal) -> Result<(), Error> {
let message = tstring!["Exits on ESC"];
let msg_style = Style::with_colors(Color2::default());
let evt_style = Style::with_colors(Color2::default()).top_margin(2);
term.lock_now().await?.screen().styled_text(&message, msg_style);
loop {
let mut session = term.listen().await?;
if let Some(event) = session.event() {
match event {
Event::Key(KeyEvent { main_key: Key::Esc, .. }) => break,
Event::Resize(_) => {
session.screen().clear(BasicColor::Black.into());
session.screen().styled_text(&message, msg_style);
},
_ => (),
}
session.screen().styled_text(&tstring!["{:?}", event], evt_style);
}
}
Ok(())
}