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