From 843c4d019dcce4a3d449ebc0c4bddf2fb6a9b57f Mon Sep 17 00:00:00 2001 From: Jens Krause <47693+sectore@users.noreply.github.com> Date: Thu, 6 Feb 2025 11:16:04 +0100 Subject: [PATCH] `set_panic_hook` (#67) --- src/terminal.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/terminal.rs b/src/terminal.rs index 9a56b31..a6d7509 100644 --- a/src/terminal.rs +++ b/src/terminal.rs @@ -12,6 +12,7 @@ pub type Terminal = RatatuiTerminal>; pub fn setup() -> Result { let mut stdout = std::io::stdout(); crossterm::terminal::enable_raw_mode()?; + set_panic_hook(); execute!(stdout, EnterAlternateScreen, cursor::Hide)?; let mut terminal = RatatuiTerminal::new(CrosstermBackend::new(stdout))?; terminal.clear()?; @@ -24,3 +25,13 @@ pub fn teardown() -> Result<()> { crossterm::terminal::disable_raw_mode()?; Ok(()) } + +// Panic hook +// see https://ratatui.rs/tutorials/counter-app/error-handling/#setup-hooks +fn set_panic_hook() { + let hook = std::panic::take_hook(); + std::panic::set_hook(Box::new(move |panic_info| { + let _ = teardown(); // ignore any errors as we are already failing + hook(panic_info); + })); +}