From 2fcfe7a5b7f008c78c9507c520b5e86d97404a91 Mon Sep 17 00:00:00 2001 From: Bjoern Hiller Date: Sun, 13 Nov 2022 17:49:03 +0100 Subject: [PATCH] Use just the file name of the program name If passed a full path to the executable (like done in the Makefile) that value is used in the generated completions. At least for fish this just doesn't work. This fixes #1172 --- src/main.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 08a9881..1173b1e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -93,10 +93,16 @@ fn run() -> Result { #[cold] fn print_completions(shell: clap_complete::Shell) -> Result { // The program name is the first argument. - let program_name = env::args().next().unwrap_or_else(|| "fd".to_string()); + let first_arg = env::args().next(); + let program_name = first_arg + .as_ref() + .map(Path::new) + .and_then(|path| path.file_name()) + .and_then(|file| file.to_str()) + .unwrap_or("fd"); let mut cmd = Opts::command(); cmd.build(); - clap_complete::generate(shell, &mut cmd, &program_name, &mut std::io::stdout()); + clap_complete::generate(shell, &mut cmd, program_name, &mut std::io::stdout()); Ok(ExitCode::Success) }