mirror of
https://github.com/pimalaya/himalaya.git
synced 2026-06-17 05:07:55 +08:00
make completion cmd a subcommand of shell args
This commit is contained in:
+14
-21
@@ -1,34 +1,27 @@
|
||||
use clap::{self, App, ArgMatches, SubCommand};
|
||||
use clap::{self, App, Arg, ArgMatches, Shell, SubCommand};
|
||||
use error_chain::error_chain;
|
||||
use std::io;
|
||||
|
||||
error_chain! {}
|
||||
|
||||
pub fn completion_subcmds<'a>() -> Vec<App<'a, 'a>> {
|
||||
vec![
|
||||
SubCommand::with_name("bash-completions").about("Generates bash completions script"),
|
||||
SubCommand::with_name("zsh-completions").about("Generates zsh completions script"),
|
||||
SubCommand::with_name("fish-completions").about("Generates fish completions script"),
|
||||
]
|
||||
vec![SubCommand::with_name("completion")
|
||||
.about("Generates the completion script for the given shell")
|
||||
.args(&[Arg::with_name("shell")
|
||||
.possible_values(&["bash", "zsh", "fish"])
|
||||
.required(true)])]
|
||||
}
|
||||
|
||||
pub fn completion_matches(mut app: App, matches: &ArgMatches) -> Result<bool> {
|
||||
use clap::Shell::*;
|
||||
|
||||
if matches.is_present("bash-completions") {
|
||||
app.gen_completions_to("himalaya", Bash, &mut io::stdout());
|
||||
if let Some(matches) = matches.subcommand_matches("completion") {
|
||||
let shell = match matches.value_of("shell").unwrap() {
|
||||
"fish" => Shell::Fish,
|
||||
"zsh" => Shell::Zsh,
|
||||
"bash" | _ => Shell::Bash,
|
||||
};
|
||||
app.gen_completions_to("himalaya", shell, &mut io::stdout());
|
||||
return Ok(true);
|
||||
}
|
||||
|
||||
if matches.is_present("zsh-completions") {
|
||||
app.gen_completions_to("himalaya", Zsh, &mut io::stdout());
|
||||
return Ok(true);
|
||||
}
|
||||
|
||||
if matches.is_present("fish-completions") {
|
||||
app.gen_completions_to("himalaya", Fish, &mut io::stdout());
|
||||
return Ok(true);
|
||||
}
|
||||
};
|
||||
|
||||
Ok(false)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user