@@ -9,7 +9,7 @@ use std::{
99
1010use anyhow:: { Context , Result } ;
1111use clap:: { CommandFactory , Parser } ;
12- use clap_complete:: { generate, shells :: Bash } ;
12+ use clap_complete:: { generate, generate_to } ;
1313use gitoxide_core as core;
1414use gitoxide_core:: { pack:: verify, repository:: PathsOrPatterns } ;
1515use gix:: bstr:: { io:: BufReadExt , BString } ;
@@ -1220,36 +1220,14 @@ pub fn main() -> Result<()> {
12201220 } ,
12211221 ) ,
12221222 } ,
1223- Subcommands :: GenerateCompletions => {
1223+ Subcommands :: GenerateCompletions { shell , out_dir } => {
12241224 let mut app = Args :: command ( ) ;
12251225
1226- let bin_name = "gix" ;
1227-
1228- app. set_bin_name ( bin_name) ;
1229-
1230- // TODO: For additonal shells, find preferred completion workflow
1231- let outdir = std:: path:: Path :: new ( "/etc/" ) . join ( "bash_completion.d/" ) ;
1232-
1233- match & mut std:: fs:: OpenOptions :: new ( )
1234- . read ( true )
1235- . write ( true )
1236- . create ( true )
1237- . open ( & outdir. join ( bin_name) )
1238- {
1239- Ok ( write_buffer) => {
1240- generate ( Bash , & mut app, bin_name, write_buffer) ;
1241- // generate(Fish, &mut app, bin_name, write_buffer);
1242- // generate(Zsh, &mut app, bin_name, write_buffer);
1243- // generate(PowerShell, &mut app, bin_name, write_buffer);
1244- // generate(Elvish, &mut app, bin_name, write_buffer);
1245-
1246- println ! ( "completion file generated in: {outdir:?}" ) ;
1247- }
1248- Err ( e) => {
1249- eprintln ! ( "failed to open path '{outdir:?}': {}" , e) ;
1250- std:: process:: exit ( 1 ) ;
1251- }
1252- } ;
1226+ if let Some ( out_dir) = out_dir {
1227+ generate_to ( shell, & mut app, env ! ( "CARGO_PKG_NAME" ) , & out_dir) ?;
1228+ } else {
1229+ generate ( shell, & mut app, env ! ( "CARGO_PKG_NAME" ) , & mut std:: io:: stdout ( ) ) ;
1230+ }
12531231
12541232 Ok ( ( ) )
12551233 }
0 commit comments