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