diff_tool/services/
terminal.rs1use anyhow::Result;
2use crossterm::{
3 terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
4 ExecutableCommand,
5};
6use ratatui::prelude::*;
7use std::{io::stdout, panic};
8
9pub fn init_terminal() -> Result<Terminal<impl Backend>> {
10 log::trace!("Initialising Terminal");
11 enable_raw_mode()?;
12 stdout().execute(EnterAlternateScreen)?;
13 let terminal = Terminal::new(CrosstermBackend::new(stdout()))?;
14 Ok(terminal)
15}
16
17pub fn restore_terminal() -> Result<()> {
18 log::trace!("Restoring Terminal");
19 stdout().execute(LeaveAlternateScreen)?;
20 disable_raw_mode()?;
21 Ok(())
22}
23
24pub fn install_panic_hook() {
25 let original_hook = panic::take_hook();
26 panic::set_hook(Box::new(move |panic_info| {
27 stdout().execute(LeaveAlternateScreen).unwrap();
28 disable_raw_mode().unwrap();
29 original_hook(panic_info);
30 }));
31}