feat(tui): ratatui skeleton with layout

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
dailz
2026-04-10 21:20:14 +08:00
parent 09e7f995fb
commit 73322138c1
3 changed files with 84 additions and 1 deletions

View File

@@ -1 +1,41 @@
fn main() {}
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<String>,
}
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();
while !app.should_quit {
terminal.draw(|frame| ui::render(frame, &app))?;
if crossterm::event::poll(std::time::Duration::from_millis(100))?
&& let crossterm::event::Event::Key(key) = crossterm::event::read()?
{
app.handle_key(key);
}
}
crossterm::terminal::disable_raw_mode()?;
crossterm::execute!(
terminal.backend_mut(),
crossterm::terminal::LeaveAlternateScreen
)?;
terminal.show_cursor()?;
Ok(())
}