From 761519c1a7cdc950eab70fd6539c71bf22919a50 Mon Sep 17 00:00:00 2001 From: Joscha Date: Fri, 17 Jun 2022 19:52:02 +0200 Subject: [PATCH] Suspend and unsuspend terminal --- src/terminal.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/terminal.rs b/src/terminal.rs index 91706f9..a293656 100644 --- a/src/terminal.rs +++ b/src/terminal.rs @@ -25,9 +25,7 @@ pub struct Terminal { impl Drop for Terminal { fn drop(&mut self) { - let _ = crossterm::terminal::disable_raw_mode(); - let _ = self.out.execute(LeaveAlternateScreen); - let _ = self.out.execute(Show); + let _ = self.suspend(); } } @@ -43,11 +41,24 @@ impl Terminal { prev_frame_buffer: Buffer::default(), full_redraw: true, }; - crossterm::terminal::enable_raw_mode()?; - result.out.execute(EnterAlternateScreen)?; + result.unsuspend()?; Ok(result) } + pub fn suspend(&mut self) -> io::Result<()> { + crossterm::terminal::disable_raw_mode()?; + self.out.execute(LeaveAlternateScreen)?; + self.out.execute(Show)?; + Ok(()) + } + + pub fn unsuspend(&mut self) -> io::Result<()> { + crossterm::terminal::enable_raw_mode()?; + self.out.execute(EnterAlternateScreen)?; + self.full_redraw = true; + Ok(()) + } + pub fn set_measuring(&mut self, active: bool) { self.frame.widthdb.active = active; }