@@ -161,7 +161,7 @@ impl<'s, F: FnOnce() -> clap::Command> CompleteEnv<'s, F> {
161161
162162 /// Override the binary to call to get completions
163163 ///
164- /// Default: `Command::get_bin_name `
164+ /// Default: `args_os()[0] `
165165 pub fn completer ( mut self , completer : impl Into < String > ) -> Self {
166166 self . completer = Some ( completer. into ( ) ) ;
167167 self
@@ -242,6 +242,7 @@ impl<'s, F: FnOnce() -> clap::Command> CompleteEnv<'s, F> {
242242 let mut cmd = ( self . factory ) ( ) ;
243243 cmd. build ( ) ;
244244
245+ let completer = args. remove ( 0 ) ;
245246 let escape_index = args
246247 . iter ( )
247248 . position ( |a| * a == "--" )
@@ -255,14 +256,20 @@ impl<'s, F: FnOnce() -> clap::Command> CompleteEnv<'s, F> {
255256 . as_deref ( )
256257 . or_else ( || cmd. get_bin_name ( ) )
257258 . unwrap_or_else ( || cmd. get_name ( ) ) ;
258- let completer = self
259- . completer
260- . as_deref ( )
261- . or_else ( || cmd. get_bin_name ( ) )
262- . unwrap_or_else ( || cmd. get_name ( ) ) ;
259+ let completer = if let Some ( completer) = self . completer . as_deref ( ) {
260+ completer. to_owned ( )
261+ } else {
262+ let mut completer = std:: path:: PathBuf :: from ( completer) ;
263+ if let Some ( current_dir) = current_dir. as_deref ( ) {
264+ if 1 < completer. components ( ) . count ( ) {
265+ completer = current_dir. join ( completer) ;
266+ }
267+ }
268+ completer. to_string_lossy ( ) . into_owned ( )
269+ } ;
263270
264271 let mut buf = Vec :: new ( ) ;
265- shell. write_registration ( self . var , name, bin, completer, & mut buf) ?;
272+ shell. write_registration ( self . var , name, bin, & completer, & mut buf) ?;
266273 std:: io:: stdout ( ) . write_all ( & buf) ?;
267274 } else {
268275 let mut buf = Vec :: new ( ) ;
0 commit comments