diff --git a/Cargo.lock b/Cargo.lock index a111bfc..d58b58b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -220,9 +220,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.13" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc" +checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" dependencies = [ "clap_builder", "clap_derive", @@ -230,9 +230,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.13" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99" +checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" dependencies = [ "anstream", "anstyle", @@ -240,11 +240,20 @@ dependencies = [ "strsim", ] +[[package]] +name = "clap_complete" +version = "4.5.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aad5b1b4de04fead402672b48897030eec1f3bfe1550776322f59f6d6e6a5677" +dependencies = [ + "clap", +] + [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" dependencies = [ "heck", "proc-macro2", @@ -254,9 +263,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "colorchoice" @@ -399,6 +408,7 @@ dependencies = [ "byte-unit", "chrono", "clap", + "clap_complete", "crossbeam", "crosstermion", "filesize", diff --git a/Cargo.toml b/Cargo.toml index e97a740..6b3acbf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,6 +30,7 @@ trash-move = ["trash"] [dependencies] clap = { version = "4.0.29", features = ["derive"] } +clap_complete = "4.5.54" jwalk = "0.8.1" byte-unit = "4" atty = "0.2.11" diff --git a/src/aggregate.rs b/src/aggregate.rs index ed8158d..a6cbb4e 100644 --- a/src/aggregate.rs +++ b/src/aggregate.rs @@ -148,12 +148,14 @@ fn output_colored_path( let size_width = byte_format.width(); let path = path.as_ref().display(); - let errors = (num_errors != 0) - .then(|| { - let plural_s = if num_errors > 1 { "s" } else { "" }; - format!(" <{num_errors} IO Error{plural_s}>") - }) - .unwrap_or_default(); + let errors = if num_errors != 0 { + format!( + " <{num_errors} IO Error{plural_s}>", + plural_s = if num_errors > 1 { "s" } else { "" } + ) + } else { + "".into() + }; if let Some(color) = path_color { writeln!(out, "{size:>size_width$} {}{errors}", path.color(color)) diff --git a/src/interactive/widgets/mark.rs b/src/interactive/widgets/mark.rs index 67f465e..c27d2ee 100644 --- a/src/interactive/widgets/mark.rs +++ b/src/interactive/widgets/mark.rs @@ -474,8 +474,7 @@ impl MarkPane { pub fn calculate_size_and_count(marked: &EntryMarkMap) -> (u128, u64) { let entries: Vec<&EntryMark> = marked - .iter() - .map(|(_k, v)| v) + .values() .sorted_by(|a, b| Ord::cmp(&a.path, &b.path)) .collect(); diff --git a/src/main.rs b/src/main.rs index 37e1aa5..11f00df 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ #![forbid(rust_2018_idioms, unsafe_code)] use anyhow::Result; -use clap::Parser; +use clap::{CommandFactory as _, Parser}; use dua::{canonicalize_ignore_dirs, TraversalSorting}; use log::info; use simplelog::{Config, LevelFilter, WriteLogger}; @@ -141,6 +141,12 @@ fn main() -> Result<()> { } res } + Some(Completions { shell }) => { + let mut cmd = options::Args::command(); + let dua = cmd.get_name().to_string(); + clap_complete::generate(shell, &mut cmd, dua, &mut io::stdout()); + return Ok(()); + } None => { let stdout = io::stdout(); let stdout_locked = stdout.lock(); diff --git a/src/options.rs b/src/options.rs index 85edeaa..7b8c52e 100644 --- a/src/options.rs +++ b/src/options.rs @@ -1,3 +1,4 @@ +use clap_complete::Shell; use dua::ByteFormat as LibraryByteFormat; use std::path::PathBuf; @@ -123,4 +124,9 @@ pub enum Command { #[clap(value_parser)] input: Vec, }, + /// Generate shell completions + Completions { + /// The shell to generate a completions-script for + shell: Shell, + }, }