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};
24pub 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}