1pub mod animations;
2pub mod dashboard;
3pub mod formatter;
4pub mod history;
5pub mod interactive;
6pub mod timer;
7pub mod widgets;
8
9use anyhow::Result;
10use crossterm::{
11 event::{DisableMouseCapture, EnableMouseCapture, Event, KeyCode},
12 execute,
13 terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
14};
15use ratatui::{backend::CrosstermBackend, Terminal};
16use std::io;
17
18pub fn setup_terminal() -> Result<Terminal<CrosstermBackend<io::Stdout>>> {
19 let mut stdout = io::stdout();
20 enable_raw_mode()?;
21 execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
22 let backend = CrosstermBackend::new(stdout);
23 let terminal = Terminal::new(backend)?;
24 Ok(terminal)
25}
26
27pub fn restore_terminal() -> Result<()> {
28 disable_raw_mode()?;
29 execute!(io::stdout(), LeaveAlternateScreen, DisableMouseCapture)?;
30 Ok(())
31}
32
33pub fn should_quit(event: Event) -> bool {
34 if let Event::Key(key) = event {
35 return key.code == KeyCode::Char('q') || key.code == KeyCode::Esc;
36 }
37 false
38}