1use anyhow::Result;
2use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
3use crossterm::execute;
4use crossterm::terminal::{
5 disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
6};
7use ratatui::backend::CrosstermBackend;
8use ratatui::Terminal;
9use std::io::{stdout, Stdout};
10
11pub type Tui = Terminal<CrosstermBackend<Stdout>>;
12
13pub fn enter() -> Result<Tui> {
14 enable_raw_mode()?;
15 let mut out = stdout();
16 execute!(out, EnterAlternateScreen, EnableMouseCapture)?;
17 let backend = CrosstermBackend::new(out);
18 Ok(Terminal::new(backend)?)
19}
20
21pub fn leave(term: &mut Tui) -> Result<()> {
22 disable_raw_mode()?;
23 execute!(
24 term.backend_mut(),
25 LeaveAlternateScreen,
26 DisableMouseCapture
27 )?;
28 term.show_cursor()?;
29 Ok(())
30}