Skip to main content

max / ripgrow

736 B · 27 lines History Blame Raw
1 //! Terminal setup and teardown. Owns the raw-mode + alternate-screen
2 //! transitions so the rest of the app never has to think about them.
3
4 use std::io::{Stdout, stdout};
5
6 use crossterm::execute;
7 use crossterm::terminal::{
8 EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode,
9 };
10 use ratatui::Terminal;
11 use ratatui::backend::CrosstermBackend;
12
13 pub type Tui = Terminal<CrosstermBackend<Stdout>>;
14
15 pub fn init() -> std::io::Result<Tui> {
16 enable_raw_mode()?;
17 let mut out = stdout();
18 execute!(out, EnterAlternateScreen)?;
19 Terminal::new(CrosstermBackend::new(out))
20 }
21
22 pub fn restore() -> std::io::Result<()> {
23 disable_raw_mode()?;
24 execute!(stdout(), LeaveAlternateScreen)?;
25 Ok(())
26 }
27