llm 1.3.8

A Rust library unifying multiple LLM backends.
Documentation
use std::io::{self, Stdout};

use crossterm::event::{
    DisableBracketedPaste, DisableMouseCapture, EnableBracketedPaste, EnableMouseCapture,
};
use crossterm::execute;
use crossterm::terminal::{
    disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
};
use ratatui::backend::CrosstermBackend;
use ratatui::Terminal;

use crate::terminal::TerminalCapabilities;

pub type AppTerminal = Terminal<CrosstermBackend<Stdout>>;

pub fn init_terminal(caps: &TerminalCapabilities) -> io::Result<AppTerminal> {
    enable_raw_mode()?;
    let mut stdout = io::stdout();
    execute!(stdout, EnterAlternateScreen)?;
    if caps.supports_mouse {
        execute!(stdout, EnableMouseCapture)?;
    }
    if caps.supports_bracketed_paste {
        execute!(stdout, EnableBracketedPaste)?;
    }
    let backend = CrosstermBackend::new(stdout);
    Terminal::new(backend)
}

pub fn restore_terminal() -> io::Result<()> {
    disable_raw_mode()?;
    execute!(
        io::stdout(),
        LeaveAlternateScreen,
        DisableMouseCapture,
        DisableBracketedPaste
    )?;
    Ok(())
}