tempo_cli/ui/
mod.rs

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