Skip to main content

verso/ui/
terminal.rs

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}