Skip to main content

matrixcode_tui/
lib.rs

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