use std::{
io::{self, stdout, Stdout},
panic,
};
use crossterm::{
self as ct,
event::{DisableMouseCapture, EnableMouseCapture},
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use ratatui::{backend::CrosstermBackend, Terminal};
pub type Tui = Terminal<CrosstermBackend<Stdout>>;
pub fn init() -> io::Result<Tui> {
init_panic_hook();
ct::execute!(stdout(), EnterAlternateScreen, EnableMouseCapture)?;
enable_raw_mode()?;
Terminal::new(CrosstermBackend::new(stdout()))
}
pub fn restore() -> io::Result<()> {
ct::execute!(stdout(), LeaveAlternateScreen, DisableMouseCapture)?;
disable_raw_mode()?;
Ok(())
}
fn init_panic_hook() {
let original_hook = panic::take_hook();
panic::set_hook(Box::new(move |panic_info| {
let _ = restore();
original_hook(panic_info);
}));
}