tempo_cli/ui/
mod.rs

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}