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}