use ratatui::DefaultTerminal;
pub fn init() -> std::io::Result<DefaultTerminal> {
ratatui::try_init()
}
pub fn restore() {
ratatui::restore();
}
pub fn suspended<T>(terminal: &mut DefaultTerminal, f: impl FnOnce() -> T) -> std::io::Result<T> {
use crossterm::execute;
use crossterm::terminal::{
EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode,
};
disable_raw_mode()?;
execute!(std::io::stdout(), LeaveAlternateScreen)?;
let result = f();
enable_raw_mode()?;
execute!(std::io::stdout(), EnterAlternateScreen)?;
terminal.clear()?; Ok(result)
}