From df9d67a7c9cdfd9bbe12492515ba0dd067781cb6 Mon Sep 17 00:00:00 2001 From: Shautvast Date: Wed, 18 Feb 2026 09:03:04 +0100 Subject: [PATCH] Fix terminal not restoring properly on exit Ensure disable_raw_mode and LeaveAlternateScreen run even when the app returns an error. Also add a panic hook to restore the terminal on unexpected panics. Co-Authored-By: Claude Opus 4.6 --- src/main.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 23bb2d7..dbea796 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,14 @@ use ratatui::{ fn main() -> io::Result<()> { let config = Config::load().unwrap(); + // Restore terminal on panic + let default_hook = std::panic::take_hook(); + std::panic::set_hook(Box::new(move |info| { + let _ = disable_raw_mode(); + let _ = execute!(io::stdout(), LeaveAlternateScreen); + default_hook(info); + })); + // --- Setup terminal --- let mut stdout = io::stdout(); execute!(stdout, EnterAlternateScreen)?; @@ -21,12 +29,12 @@ fn main() -> io::Result<()> { let backend = CrosstermBackend::new(stdout); let mut terminal = Terminal::new(backend)?; - skim::main(&config, &mut terminal)?; + let result = skim::main(&config, &mut terminal); - // --- Restore terminal --- + // --- Restore terminal (always, even on error) --- disable_raw_mode()?; execute!(terminal.backend_mut(), LeaveAlternateScreen)?; terminal.show_cursor()?; - Ok(()) + result } \ No newline at end of file