refactor(tui): improve the termion panic hook (#169)

Co-authored-by: Orhun Parmaksız <orhunparmaksiz@gmail.com>
This commit is contained in:
eldaniz 2024-04-05 14:20:07 +02:00 committed by GitHub
parent b47e91a0a2
commit dd51d17b26
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -11,11 +11,9 @@ use termion::screen::IntoAlternateScreen;
fn main() -> Result<()> {
if let Some(args) = Args::parse(env::args().collect()) {
let output = io::stderr();
let output = output.into_raw_mode()?;
let output = MouseTerminal::from(output);
let output = output.into_alternate_screen()?;
let backend = TermionBackend::new(output);
let raw_output = io::stderr().into_raw_mode()?;
raw_output.suspend_raw_mode()?;
let panic_hook = panic::take_hook();
panic::set_hook(Box::new(move |panic| {
let panic_cleanup = || -> Result<()> {
@ -27,13 +25,20 @@ fn main() -> Result<()> {
termion::screen::ToMainScreen,
termion::cursor::Show
)?;
output.into_raw_mode()?.suspend_raw_mode()?;
io::stderr().flush()?;
raw_output.suspend_raw_mode()?;
output.flush()?;
Ok(())
};
panic_cleanup().expect("failed to clean up for panic");
panic_cleanup().expect("Failed to cleanup after panic");
panic_hook(panic);
}));
let output = io::stderr();
let output = output.into_raw_mode()?;
let output = MouseTerminal::from(output);
let output = output.into_alternate_screen()?;
let backend = TermionBackend::new(output);
match systeroid_tui::run(args, backend) {
Ok(_) => process::exit(0),
Err(e) => {