From 59367575385db3fc3aa9b44a400f4bad00e4b59f Mon Sep 17 00:00:00 2001 From: Stephan Dilly Date: Thu, 21 May 2020 12:16:33 +0200 Subject: [PATCH] output panics for simpler diagnosis --- src/main.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 6c79b7df..cb7041e8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -54,11 +54,9 @@ fn main() -> Result<()> { return Ok(()); } - enable_raw_mode()?; - io::stdout().execute(EnterAlternateScreen)?; + setup_terminal()?; defer! { - io::stdout().execute(LeaveAlternateScreen).unwrap(); - disable_raw_mode().unwrap(); + shutdown_terminal().expect("shutdown failed"); } set_panic_handlers(); @@ -118,6 +116,18 @@ fn main() -> Result<()> { Ok(()) } +fn setup_terminal() -> Result<()> { + enable_raw_mode()?; + io::stdout().execute(EnterAlternateScreen)?; + Ok(()) +} + +fn shutdown_terminal() -> Result<()> { + io::stdout().execute(LeaveAlternateScreen)?; + disable_raw_mode()?; + Ok(()) +} + fn draw( terminal: &mut Terminal, app: &mut App, @@ -202,6 +212,8 @@ fn set_panic_handlers() { panic::set_hook(Box::new(|e| { let backtrace = Backtrace::new(); error!("panic: {:?}\ntrace:\n{:?}", e, backtrace); + shutdown_terminal().expect("shutdown failed inside panic"); + eprintln!("panic: {:?}\ntrace:\n{:?}", e, backtrace); })); // global threadpool