Skip to main content

matrixcode_tui/
lib.rs

1mod app;
2mod commands;
3mod draw;
4mod events;
5mod input;
6mod markdown;
7mod types;
8mod utils;
9
10use anyhow::Result;
11use ratatui::{
12    Terminal,
13    backend::CrosstermBackend,
14    crossterm::{
15        cursor::Show,
16        event, execute,
17        terminal::{Clear, ClearType, disable_raw_mode, enable_raw_mode},
18    },
19};
20use std::io::Stdout;
21
22pub use app::TuiApp;
23pub use matrixcode_core::{AgentEvent, EventData, EventType, cancel::CancellationToken};
24// Re-export crossterm for CLI use
25pub use ratatui::crossterm;
26
27pub(crate) const ANIM_MS: u64 = 80;
28pub(crate) const SPINNER: [&str; 10] = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
29
30pub fn setup_terminal() -> Result<Terminal<CrosstermBackend<Stdout>>> {
31    enable_raw_mode()?;
32    execute!(
33        std::io::stdout(),
34        event::EnableMouseCapture,
35        event::EnableBracketedPaste
36    )?;
37    let mut t = Terminal::new(CrosstermBackend::new(std::io::stdout()))?;
38    t.clear()?;
39    Ok(t)
40}
41
42pub fn restore_terminal() -> Result<()> {
43    disable_raw_mode()?;
44    execute!(
45        std::io::stdout(),
46        event::DisableMouseCapture,
47        event::DisableBracketedPaste,
48        Clear(ClearType::All),
49        Show
50    )?;
51    Ok(())
52}