Última actividad 1 month ago

Subcomando completions con generacion de autocompletado (capitulo 07)

atareao's Avatar atareao revisó este gist 1 month ago. Ir a la revisión

1 file changed, 53 insertions

completions.rs(archivo creado)

@@ -0,0 +1,53 @@
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 + }
Siguiente Anterior