diff options
Diffstat (limited to 'src/ui.rs')
| -rw-r--r-- | src/ui.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/ui.rs b/src/ui.rs new file mode 100644 index 0000000..9133f1c --- /dev/null +++ b/src/ui.rs @@ -0,0 +1,32 @@ +use crossterm::{ + event::{DisableMouseCapture, EnableMouseCapture}, + execute, + terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, +}; +use std::io; +use tui::{ + backend::{Backend, CrosstermBackend}, + Terminal, +}; + +pub fn init_terminal() -> Result<Terminal<CrosstermBackend<io::Stdout>>, io::Error> { + enable_raw_mode()?; + let mut stdout = io::stdout(); + execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?; + let backend = CrosstermBackend::new(stdout); + Terminal::new(backend) +} + +pub fn cleanup_terminal<B>(mut terminal: Terminal<B>) -> Result<(), io::Error> +where + B: Backend + io::Write, +{ + disable_raw_mode()?; + execute!( + terminal.backend_mut(), + LeaveAlternateScreen, + DisableMouseCapture, + )?; + terminal.show_cursor()?; + Ok(()) +} |