git-hist 1.0.5

A CLI tool to quickly browse the git history of files on a terminal
Documentation
use anyhow::Result;
use crossterm::{
    cursor, execute,
    terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use std::io;
use tui::{backend::CrosstermBackend, Frame, Terminal as TuiTerminal};

pub fn initialize() -> Result<()> {
    enable_raw_mode()?;
    execute!(io::stdout(), EnterAlternateScreen, cursor::Hide)?;
    Ok(())
}

pub fn terminate() -> Result<()> {
    execute!(io::stdout(), cursor::Show, LeaveAlternateScreen)?;
    disable_raw_mode()?;
    Ok(())
}

pub struct Terminal {
    terminal: TuiTerminal<CrosstermBackend<io::Stdout>>,
}

impl Terminal {
    pub fn new() -> Result<Self> {
        let stdout = io::stdout();
        let backend = CrosstermBackend::new(stdout);
        let mut terminal = TuiTerminal::new(backend)?;
        terminal.clear()?;
        Ok(Terminal { terminal })
    }

    pub fn draw<F>(&mut self, f: F) -> Result<()>
    where
        F: FnOnce(&mut Frame<'_, CrosstermBackend<io::Stdout>>),
    {
        self.terminal.draw(f)?;
        Ok(())
    }

    pub fn height(&self) -> usize {
        self.terminal.size().unwrap().height.into()
    }
}