diff --git a/helix-term/src/editor.rs b/helix-term/src/editor.rs index 397ce8df7..9b5cad515 100644 --- a/helix-term/src/editor.rs +++ b/helix-term/src/editor.rs @@ -376,6 +376,14 @@ pub async fn run(&mut self) -> Result<(), Error> { execute!(stdout, terminal::EnterAlternateScreen)?; + // Exit the alternate screen and disable raw mode before panicking + let hook = std::panic::take_hook(); + std::panic::set_hook(Box::new(move |info| { + execute!(std::io::stdout(), terminal::LeaveAlternateScreen); + disable_raw_mode(); + hook(info); + })); + self.event_loop().await; // reset cursor shape