diff options
author | eldaniz <eldanizbabayev@proton.me> | 2024-04-05 14:20:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-05 15:20:07 +0300 |
commit | dd51d17b26e8e6cd21a65aaeabb02ca9085a617a (patch) | |
tree | d5935b9a0b7942b2b13e8298116594d1db734d71 | |
parent | b47e91a0a25e414f9781519244fb98f5c54e9b6d (diff) |
refactor(tui): improve the termion panic hook (#169)
Co-authored-by: Orhun Parmaksız <orhunparmaksiz@gmail.com>
-rw-r--r-- | systeroid-tui/src/main.rs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/systeroid-tui/src/main.rs b/systeroid-tui/src/main.rs index 55a1dcd..1ddd6b6 100644 --- a/systeroid-tui/src/main.rs +++ b/systeroid-tui/src/main.rs @@ -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) => { |