use crossterm::event::{DisableBracketedPaste, EnableBracketedPaste};
use crossterm::execute;
use crossterm::terminal::{disable_raw_mode, enable_raw_mode};
use crate::error::Result;
pub struct TerminalGuard {
bracketed_paste: bool,
}
impl TerminalGuard {
pub fn new() -> Result<Self> {
enable_raw_mode()?;
let bracketed_paste =
execute!(std::io::stdout(), EnableBracketedPaste).is_ok();
Ok(Self { bracketed_paste })
}
}
impl Drop for TerminalGuard {
fn drop(&mut self) {
if self.bracketed_paste {
let _ = execute!(std::io::stdout(), DisableBracketedPaste);
}
let _ = disable_raw_mode();
}
}