diff --git a/Cargo.toml b/Cargo.toml index 62ff8e8..f128fc3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zfsdu" -version = "0.1.0" +version = "0.2.0" edition = "2021" description = "ncdu-like disk usage viewer for ZFS with snapshot management" authors = ["Florian Schermer"] diff --git a/releases/zfsdu-linux-amd64 b/releases/zfsdu-linux-amd64 index c3d5882..a650722 100644 Binary files a/releases/zfsdu-linux-amd64 and b/releases/zfsdu-linux-amd64 differ diff --git a/src/main.rs b/src/main.rs index aeddd75..529293d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,8 +13,30 @@ use crossterm::{ use std::time::Duration; use ratatui::{backend::CrosstermBackend, Terminal}; use std::io; +use std::env; + +const VERSION: &str = env!("CARGO_PKG_VERSION"); fn main() -> Result<()> { + // Handle command line arguments + let args: Vec = env::args().collect(); + if args.len() > 1 { + match args[1].as_str() { + "-v" | "--version" => { + println!("zfsdu {}", VERSION); + return Ok(()); + } + "-h" | "--help" => { + print_help(); + return Ok(()); + } + _ => { + eprintln!("Unknown option: {}", args[1]); + eprintln!("Use --help for usage information"); + std::process::exit(1); + } + } + } enable_raw_mode()?; let mut stdout = io::stdout(); execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?; @@ -39,6 +61,35 @@ fn main() -> Result<()> { Ok(()) } +fn print_help() { + println!("zfsdu {} - ZFS Disk Usage Viewer", VERSION); + println!(); + println!("USAGE:"); + println!(" zfsdu [OPTIONS]"); + println!(); + println!("OPTIONS:"); + println!(" -h, --help Print help information"); + println!(" -v, --version Print version information"); + println!(); + println!("KEYBINDINGS:"); + println!(" ↑/k, ↓/j Navigate up/down"); + println!(" Enter/l Expand/collapse dataset"); + println!(" Space Mark/unmark snapshot"); + println!(" +/-/* Select/unselect/invert"); + println!(" s Toggle sort (Size/Date/Name)"); + println!(" / Search"); + println!(" f Filter"); + println!(" d Delete marked snapshots"); + println!(" D Toggle dry-run mode"); + println!(" a Toggle auto-refresh"); + println!(" r Refresh"); + println!(" ? Help"); + println!(" q Quit"); + println!(); + println!("CONFIG:"); + println!(" ~/.config/zfsdu/config.toml"); +} + fn run_app(terminal: &mut Terminal, app: &mut App) -> Result<()> { loop { terminal.draw(|f| ui::draw(f, app))?; diff --git a/src/ui.rs b/src/ui.rs index 786e243..5468366 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -52,10 +52,12 @@ pub fn draw(f: &mut Frame, app: &mut App) { } } +const VERSION: &str = env!("CARGO_PKG_VERSION"); + fn draw_title(f: &mut Frame, area: Rect, app: &App) { let (bg, _fg, header, _, _, _, _, _, _, _) = get_colors(app); - let mut title = " zfsdu ".to_string(); + let mut title = format!(" zfsdu v{} ", VERSION); // Show sort mode title.push_str(&format!("[Sort: {}] ", app.sort_mode.label())); @@ -435,7 +437,7 @@ fn draw_help(f: &mut Frame, app: &App) { let help = Paragraph::new(help_text.join("\n")) .block( Block::default() - .title(" Help - zfsdu ") + .title(format!(" Help - zfsdu v{} ", VERSION)) .borders(Borders::ALL) .border_style(Style::default().fg(header)), )