diff --git a/src/main.rs b/src/main.rs index 37da790..d107922 100644 --- a/src/main.rs +++ b/src/main.rs @@ -125,9 +125,25 @@ impl Termato { } } +struct TerminalGuard; + +impl TerminalGuard { + fn new() -> Result { + enable_raw_mode()?; + stdout().execute(EnterAlternateScreen)?; + Ok(TerminalGuard) + } +} + +impl Drop for TerminalGuard { + fn drop(&mut self) { + let _ = disable_raw_mode(); + let _ = stdout().execute(LeaveAlternateScreen); + } +} + fn main() -> Result<(), io::Error> { - enable_raw_mode()?; - stdout().execute(EnterAlternateScreen)?; + let _guard = TerminalGuard::new()?; let backend = CrosstermBackend::new(stdout()); let mut terminal = Terminal::new(backend)?; @@ -249,8 +265,6 @@ fn main() -> Result<(), io::Error> { } } - disable_raw_mode()?; - stdout().execute(LeaveAlternateScreen)?; Ok(()) }