From 41898c1b539f3806644477ea2e3b434037726ea4 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:44:17 -0500 Subject: [PATCH] fix: use terminal guard which allows drop-based cleanup --- src/main.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) 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(()) }