use clap::Parser; mod app; mod ui; #[derive(Parser)] #[command(name = "log-viewer", about = "A log viewer TUI")] struct Cli { /// Log files to open files: Vec, } fn main() -> anyhow::Result<()> { let cli = Cli::parse(); crossterm::terminal::enable_raw_mode()?; let mut stdout = std::io::stdout(); crossterm::execute!(stdout, crossterm::terminal::EnterAlternateScreen)?; let backend = ratatui::backend::CrosstermBackend::new(stdout); let mut terminal = ratatui::Terminal::new(backend)?; let mut app = app::App::new(); if let Some(file) = cli.files.first() && let Err(e) = app.load_file(file) { eprintln!("Error loading file: {e}"); std::process::exit(1); } while !app.should_quit { terminal.draw(|frame| ui::render(frame, &mut app))?; if crossterm::event::poll(std::time::Duration::from_millis(100))? { match crossterm::event::read()? { crossterm::event::Event::Key(key) => app.handle_key(key), crossterm::event::Event::Resize(_w, _h) => {} _ => {} } } } crossterm::terminal::disable_raw_mode()?; crossterm::execute!( terminal.backend_mut(), crossterm::terminal::LeaveAlternateScreen )?; terminal.show_cursor()?; Ok(()) }