completions.rs
· 1.5 KiB · Rust
Sin formato
use anyhow::Result;
use clap::CommandFactory;
use clap_complete::{generate_to, Shell};
use std::path::PathBuf;
use crate::cli::Cli;
pub fn ejecutar(shell: &str) -> Result<()> {
let shell = match shell {
"bash" => Shell::Bash,
"zsh" => Shell::Zsh,
"fish" => Shell::Fish,
_ => anyhow::bail!("Shell no soportada: {}", shell),
};
let mut cmd = Cli::command();
let bin_name = "crustaceo-tools";
let out_dir = PathBuf::from(".");
let archivo = match shell {
Shell::Bash => "crustaceo-tools.bash",
Shell::Zsh => "_crustaceo-tools",
Shell::Fish => "crustaceo-tools.fish",
_ => unreachable!(),
};
let path = generate_to(shell, &mut cmd, bin_name, &out_dir)?;
println!("Autocompletado generado: {}", path.display());
println!();
println!("Instalalo segun tu shell:");
println!();
match shell {
Shell::Bash => {
println!(" source {}", archivo);
println!(" # O anadelo a ~/.bashrc:");
println!(" echo 'source $(pwd)/{}' >> ~/.bashrc", archivo);
}
Shell::Zsh => {
println!(" # Copia a un directorio en tu fpath:");
println!(" cp {} ~/.zsh/completions/", archivo);
println!(" # O directamente:");
println!(" source {}", archivo);
}
Shell::Fish => {
println!(" mkdir -p ~/.config/fish/completions/");
println!(" cp {} ~/.config/fish/completions/", archivo);
}
_ => unreachable!(),
}
Ok(())
}
| 1 | use anyhow::Result; |
| 2 | use clap::CommandFactory; |
| 3 | use clap_complete::{generate_to, Shell}; |
| 4 | use std::path::PathBuf; |
| 5 | |
| 6 | use crate::cli::Cli; |
| 7 | |
| 8 | pub fn ejecutar(shell: &str) -> Result<()> { |
| 9 | let shell = match shell { |
| 10 | "bash" => Shell::Bash, |
| 11 | "zsh" => Shell::Zsh, |
| 12 | "fish" => Shell::Fish, |
| 13 | _ => anyhow::bail!("Shell no soportada: {}", shell), |
| 14 | }; |
| 15 | |
| 16 | let mut cmd = Cli::command(); |
| 17 | let bin_name = "crustaceo-tools"; |
| 18 | |
| 19 | let out_dir = PathBuf::from("."); |
| 20 | |
| 21 | let archivo = match shell { |
| 22 | Shell::Bash => "crustaceo-tools.bash", |
| 23 | Shell::Zsh => "_crustaceo-tools", |
| 24 | Shell::Fish => "crustaceo-tools.fish", |
| 25 | _ => unreachable!(), |
| 26 | }; |
| 27 | |
| 28 | let path = generate_to(shell, &mut cmd, bin_name, &out_dir)?; |
| 29 | println!("Autocompletado generado: {}", path.display()); |
| 30 | println!(); |
| 31 | println!("Instalalo segun tu shell:"); |
| 32 | println!(); |
| 33 | match shell { |
| 34 | Shell::Bash => { |
| 35 | println!(" source {}", archivo); |
| 36 | println!(" # O anadelo a ~/.bashrc:"); |
| 37 | println!(" echo 'source $(pwd)/{}' >> ~/.bashrc", archivo); |
| 38 | } |
| 39 | Shell::Zsh => { |
| 40 | println!(" # Copia a un directorio en tu fpath:"); |
| 41 | println!(" cp {} ~/.zsh/completions/", archivo); |
| 42 | println!(" # O directamente:"); |
| 43 | println!(" source {}", archivo); |
| 44 | } |
| 45 | Shell::Fish => { |
| 46 | println!(" mkdir -p ~/.config/fish/completions/"); |
| 47 | println!(" cp {} ~/.config/fish/completions/", archivo); |
| 48 | } |
| 49 | _ => unreachable!(), |
| 50 | } |
| 51 | |
| 52 | Ok(()) |
| 53 | } |