Skip to content

Commit 1b7f535

Browse files
authored
Merge pull request #288 from fgimian/completions
Add the ability to generate shell completions
2 parents 63b129b + f983e60 commit 1b7f535

File tree

6 files changed

+41
-17
lines changed

6 files changed

+41
-17
lines changed

Cargo.lock

Lines changed: 18 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ trash-move = ["trash"]
3030

3131
[dependencies]
3232
clap = { version = "4.0.29", features = ["derive"] }
33+
clap_complete = "4.5.54"
3334
jwalk = "0.8.1"
3435
byte-unit = "4"
3536
atty = "0.2.11"

src/aggregate.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,14 @@ fn output_colored_path(
148148
let size_width = byte_format.width();
149149
let path = path.as_ref().display();
150150

151-
let errors = (num_errors != 0)
152-
.then(|| {
153-
let plural_s = if num_errors > 1 { "s" } else { "" };
154-
format!(" <{num_errors} IO Error{plural_s}>")
155-
})
156-
.unwrap_or_default();
151+
let errors = if num_errors != 0 {
152+
format!(
153+
" <{num_errors} IO Error{plural_s}>",
154+
plural_s = if num_errors > 1 { "s" } else { "" }
155+
)
156+
} else {
157+
"".into()
158+
};
157159

158160
if let Some(color) = path_color {
159161
writeln!(out, "{size:>size_width$} {}{errors}", path.color(color))

src/interactive/widgets/mark.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -474,8 +474,7 @@ impl MarkPane {
474474

475475
pub fn calculate_size_and_count(marked: &EntryMarkMap) -> (u128, u64) {
476476
let entries: Vec<&EntryMark> = marked
477-
.iter()
478-
.map(|(_k, v)| v)
477+
.values()
479478
.sorted_by(|a, b| Ord::cmp(&a.path, &b.path))
480479
.collect();
481480

src/main.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![forbid(rust_2018_idioms, unsafe_code)]
22
use anyhow::Result;
3-
use clap::Parser;
3+
use clap::{CommandFactory as _, Parser};
44
use dua::{canonicalize_ignore_dirs, TraversalSorting};
55
use log::info;
66
use simplelog::{Config, LevelFilter, WriteLogger};
@@ -141,6 +141,12 @@ fn main() -> Result<()> {
141141
}
142142
res
143143
}
144+
Some(Completions { shell }) => {
145+
let mut cmd = options::Args::command();
146+
let dua = cmd.get_name().to_string();
147+
clap_complete::generate(shell, &mut cmd, dua, &mut io::stdout());
148+
return Ok(());
149+
}
144150
None => {
145151
let stdout = io::stdout();
146152
let stdout_locked = stdout.lock();

src/options.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use clap_complete::Shell;
12
use dua::ByteFormat as LibraryByteFormat;
23
use std::path::PathBuf;
34

@@ -123,4 +124,9 @@ pub enum Command {
123124
#[clap(value_parser)]
124125
input: Vec<PathBuf>,
125126
},
127+
/// Generate shell completions
128+
Completions {
129+
/// The shell to generate a completions-script for
130+
shell: Shell,
131+
},
126132
}

0 commit comments

Comments
 (0)