use clap::CommandFactory;
use clap_complete::generate;
use std::io::{self, Write};
use worktrunk::shell;
use worktrunk::styling::println;
use crate::cli::Cli;
pub fn handle_init(shell: shell::Shell, cmd: String) -> Result<(), String> {
let init = shell::ShellInit::with_prefix(shell, cmd);
let integration_output = init
.generate()
.map_err(|e| format!("Failed to generate shell code: {}", e))?;
println!("{}", integration_output);
Ok(())
}
pub fn handle_completions(shell: shell::Shell) -> anyhow::Result<()> {
let mut cmd = Cli::command();
let cmd_name = crate::binary_name();
let mut stdout = io::stdout();
match shell {
shell::Shell::Bash => {
generate(
clap_complete::shells::Bash,
&mut cmd,
&cmd_name,
&mut stdout,
);
}
shell::Shell::Fish => {
generate(
clap_complete::shells::Fish,
&mut cmd,
&cmd_name,
&mut stdout,
);
}
shell::Shell::Zsh => {
generate(clap_complete::shells::Zsh, &mut cmd, &cmd_name, &mut stdout);
}
shell::Shell::Nushell => {
let init = shell::ShellInit::with_prefix(shell, cmd_name.clone());
let code = init
.generate()
.expect("Failed to generate nushell integration");
write!(stdout, "{}", code).expect("Failed to write to stdout");
}
shell::Shell::PowerShell => {
generate(
clap_complete::shells::PowerShell,
&mut cmd,
&cmd_name,
&mut stdout,
);
}
}
Ok(())
}