use anyhow::Result;
use crossterm::{
cursor::{Hide, Show},
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use std::io;
pub struct TerminalGuard;
impl TerminalGuard {
pub fn new() -> Result<Self> {
enable_raw_mode()?;
crossterm::execute!(io::stdout(), EnterAlternateScreen, Hide)?;
Ok(Self)
}
}
impl Drop for TerminalGuard {
fn drop(&mut self) {
let _ = crossterm::execute!(io::stdout(), LeaveAlternateScreen, Show);
let _ = disable_raw_mode();
}
}