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
25pub(crate) const ANIM_MS: u64 = 80;
26pub(crate) const SPINNER: [&str; 10] = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
27
28pub fn setup_terminal() -> Result<Terminal<CrosstermBackend<Stdout>>> {
29 enable_raw_mode()?;
30 execute!(
31 std::io::stdout(),
32 event::EnableMouseCapture,
33 event::EnableBracketedPaste
34 )?;
35 let mut t = Terminal::new(CrosstermBackend::new(std::io::stdout()))?;
36 t.clear()?;
37 Ok(t)
38}
39
40pub fn restore_terminal() -> Result<()> {
41 disable_raw_mode()?;
42 execute!(
43 std::io::stdout(),
44 event::DisableMouseCapture,
45 event::DisableBracketedPaste,
46 Clear(ClearType::All),
47 Show
48 )?;
49 Ok(())
50}