From b7c98934e647b8faf1a5c803d0bed81b5a3f425a Mon Sep 17 00:00:00 2001 From: Medzik Date: Sun, 27 Feb 2022 12:06:02 +0100 Subject: [PATCH] add gen manpage and completion for elvish --- CHANGELOG.md | 2 ++ Cargo.lock | 17 +++++++++++++++++ Cargo.toml | 1 + src/cli/parse.rs | 25 +++++++++++++++++-------- 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c032453..9439a1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### CLI - update logger - added clipboard +- added manpage +- added completion for elvish ## [0.3.0] - 2022-01-28 ### CLI diff --git a/Cargo.lock b/Cargo.lock index e82cba8..8b3c042 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -328,6 +328,16 @@ dependencies = [ "syn", ] +[[package]] +name = "clap_mangen" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0649fb4156bbd7306896025005596033879a2051f9a3aa7416ab915df1f8fdac" +dependencies = [ + "clap", + "roff", +] + [[package]] name = "clipboard-win" version = "4.4.1" @@ -858,6 +868,7 @@ dependencies = [ "chrono", "clap", "clap_complete", + "clap_mangen", "colored", "dirs 4.0.0", "log", @@ -1474,6 +1485,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "roff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" + [[package]] name = "rust-argon2" version = "0.8.3" diff --git a/Cargo.toml b/Cargo.toml index 0c19197..6cfa38e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,6 +32,7 @@ anyhow = "1.0.55" better-panic = "0.3.0" validator = "0.14.0" colored = "2.0.0" +clap_mangen = "0.1.2" [target.'cfg(not(all(unix, not(any(target_os="macos", target_os="android", target_os="emscripten")))))'.dependencies] arboard = "2.0.1" diff --git a/src/cli/parse.rs b/src/cli/parse.rs index 998515e..b11ff44 100644 --- a/src/cli/parse.rs +++ b/src/cli/parse.rs @@ -1,8 +1,7 @@ use imgurs::api::ImgurClient; - use clap::{Command, IntoApp, Parser, Subcommand}; use clap_complete::{generate, Generator, Shell}; -use std::io::stdout; +use std::io::{stdout, self}; use crate::cli::{credits::*, delete_image::*, info_image::*, upload_image::*}; @@ -22,20 +21,23 @@ struct Cli { #[derive(Subcommand, Debug)] enum Commands { - #[clap(about = "Print API Rate Limit")] + #[clap(about = "Print API Rate Limit", display_order = 1)] Credits, - #[clap(about = "Upload image to Imgur")] + #[clap(about = "Upload image to Imgur", display_order = 2)] Upload { path: String }, - #[clap(about = "Delete image from Imgur")] + #[clap(about = "Delete image from Imgur", display_order = 3)] Delete { delete_hash: String }, - #[clap(about = "Print image info")] + #[clap(about = "Print image info", display_order = 4)] Info { id: String }, - #[clap(about = "Print shell completions (bash, zsh, fish, powershell)")] + #[clap(about = "Generate completion file for a shell [bash, elvish, fish, powershell, zsh]", display_order = 5)] Completions { shell: String }, + + #[clap(about = "Generate man page", display_order = 6)] + Manpage, } fn print_completions(gen: G, app: &mut Command) { @@ -67,12 +69,19 @@ pub async fn parse(client: ImgurClient) { match shell.as_str() { "bash" => print_completions(Shell::Bash, &mut app), - "zsh" => print_completions(Shell::Zsh, &mut app), + "elvish" => print_completions(Shell::Elvish, &mut app), "fish" => print_completions(Shell::Fish, &mut app), "powershell" => print_completions(Shell::PowerShell, &mut app), + "zsh" => print_completions(Shell::Zsh, &mut app), _ => panic!("Completions to shell `{shell}`, not found!"), } } + + Commands::Manpage => { + let clap_app = Cli::command(); + let man = clap_mangen::Man::new(clap_app); + man.render(&mut io::stdout()).unwrap(); + } } }