quake_tui/
lib.rs

1mod app;
2mod entry_action;
3mod ui;
4mod widgets;
5
6use crate::app::App;
7use crossterm::{
8    event::{DisableMouseCapture, EnableMouseCapture},
9    execute,
10    terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
11};
12use quake_core::QuakeConfig;
13use std::error::Error;
14use std::fs;
15use std::io;
16use tui::backend::CrosstermBackend;
17use tui::Terminal;
18
19pub fn tui_main_loop() -> Result<(), Box<dyn Error>> {
20    enable_raw_mode()?;
21    let mut stdout = io::stdout();
22    execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
23    let backend = CrosstermBackend::new(stdout);
24    let mut terminal = Terminal::new(backend)?;
25
26    let config: QuakeConfig = serde_yaml::from_str(fs::read_to_string(".quake.yaml")?.as_str())?;
27    let app = App::new(config);
28    let res = app.run(&mut terminal);
29
30    disable_raw_mode()?;
31    execute!(
32        terminal.backend_mut(),
33        LeaveAlternateScreen,
34        DisableMouseCapture
35    )?;
36    terminal.show_cursor()?;
37
38    if let Err(err) = res {
39        println!("{:?}", err);
40    }
41
42    Ok(())
43}