@@ -9,7 +9,7 @@ use std::{
9
9
10
10
use anyhow:: { Context , Result } ;
11
11
use clap:: { CommandFactory , Parser } ;
12
- use clap_complete:: { generate, shells :: Bash } ;
12
+ use clap_complete:: { generate, generate_to } ;
13
13
use gitoxide_core as core;
14
14
use gitoxide_core:: { pack:: verify, repository:: PathsOrPatterns } ;
15
15
use gix:: bstr:: { io:: BufReadExt , BString } ;
@@ -1220,36 +1220,14 @@ pub fn main() -> Result<()> {
1220
1220
} ,
1221
1221
) ,
1222
1222
} ,
1223
- Subcommands :: GenerateCompletions => {
1223
+ Subcommands :: GenerateCompletions { shell , out_dir } => {
1224
1224
let mut app = Args :: command ( ) ;
1225
1225
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
+ }
1253
1231
1254
1232
Ok ( ( ) )
1255
1233
}
0 commit comments