main.rs (1140B)
1 mod app; 2 mod audio; 3 mod library; 4 mod setting; 5 mod ui; 6 7 use std::{io, time::Duration}; 8 9 use crossterm::{ 10 ExecutableCommand, 11 event::{self, Event, KeyEventKind}, 12 terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode}, 13 }; 14 use ratatui::{Terminal, prelude::CrosstermBackend}; 15 16 use crate::app::App; 17 18 fn main() -> Result<(), Box<dyn std::error::Error>> { 19 enable_raw_mode()?; 20 io::stdout().execute(EnterAlternateScreen)?; 21 let mut terminal = Terminal::new(CrosstermBackend::new(io::stdout()))?; 22 23 let mut app = App::new()?; 24 25 loop { 26 terminal.draw(|f| { 27 ui::render(f, &mut app); 28 })?; 29 30 if event::poll(Duration::from_millis(100))? { 31 if let Event::Key(key) = event::read()? 32 && key.kind == KeyEventKind::Press 33 { 34 let should_quit = app.handle_key_event(key)?; 35 if should_quit { 36 break; 37 } 38 } 39 } 40 } 41 42 io::stdout().execute(LeaveAlternateScreen)?; 43 disable_raw_mode()?; 44 Ok(()) 45 }