Generate man page with help2man (#463)

The generated man page doesn't look great by default, so this also adds the
help4help2man feature, which makes Just print a help message that produces
a better man page.
This commit is contained in:
Casey Rodarmor 2019-07-18 21:58:06 -07:00 committed by GitHub
parent 74e45e7c05
commit 04a2b6461e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 109 additions and 10 deletions

View File

@ -8,6 +8,10 @@ homepage = "https://github.com/casey/just"
readme = "crates-io-readme.md" readme = "crates-io-readme.md"
edition = "2018" edition = "2018"
[features]
default = []
help4help2man = []
[dependencies] [dependencies]
ansi_term = "0.11" ansi_term = "0.11"
assert_matches = "1" assert_matches = "1"

View File

@ -36,6 +36,16 @@ check:
watch +COMMAND='test': watch +COMMAND='test':
cargo watch --clear --exec "{{COMMAND}}" cargo watch --clear --exec "{{COMMAND}}"
man:
cargo build --features help4help2man
help2man \
--name 'save and run commands' \
--manual 'JUST MANUAL' \
--no-info \
target/debug/just \
> man/just.1
man man/just.1
version := `sed -En 's/version[[:space:]]*=[[:space:]]*"([^"]+)"/v\1/p' Cargo.toml | head -1` version := `sed -En 's/version[[:space:]]*=[[:space:]]*"([^"]+)"/v\1/p' Cargo.toml | head -1`
# publish to crates.io # publish to crates.io
@ -70,6 +80,10 @@ install-dev-deps:
cargo install -f cargo-check cargo install -f cargo-check
cargo +nightly install cargo-fuzz cargo +nightly install cargo-fuzz
# install system development dependencies with homebrew
install-dev-deps-homebrew:
brew install help2man
# everyone's favorite animate paper clip # everyone's favorite animate paper clip
clippy: clippy:
cargo clippy cargo clippy

70
man/just.1 Normal file
View File

@ -0,0 +1,70 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.10.
.TH JUST "1" "July 2019" "just 0.4.4" "JUST MANUAL"
.SH NAME
just \- save and run commands
.SH DESCRIPTION
just 0.4.4
\- Please see https://github.com/casey/just for more information.
.SS "USAGE:"
.IP
just [FLAGS] [OPTIONS] [\-\-] [ARGUMENTS]...
.SS "FLAGS:"
.TP
\fB\-\-dry\-run\fR
Print what just would do without doing it
.TP
\fB\-\-dump\fR
Print entire justfile
.TP
\fB\-e\fR, \fB\-\-edit\fR
Open justfile with $EDITOR
.TP
\fB\-\-evaluate\fR
Print evaluated variables
.TP
\fB\-\-highlight\fR
Highlight echoed recipe lines in bold
.TP
\fB\-l\fR, \fB\-\-list\fR
List available recipes and their arguments
.TP
\fB\-q\fR, \fB\-\-quiet\fR
Suppress all output
.TP
\fB\-\-summary\fR
List names of available recipes
.TP
\fB\-v\fR, \fB\-\-verbose\fR
Use verbose output
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help information
.TP
\fB\-V\fR, \fB\-\-version\fR
Print version information
.SS "OPTIONS:"
.HP
\fB\-\-color\fR <COLOR>
.TP
Print colorful output [default: auto]
[possible values: auto, always, never]
.TP
\fB\-f\fR, \fB\-\-justfile\fR <JUSTFILE>
Use <JUSTFILE> as justfile.
.TP
\fB\-\-set\fR <VARIABLE> <VALUE>
Set <VARIABLE> to <VALUE>
.TP
\fB\-\-shell\fR <SHELL>
Invoke <SHELL> to run recipes [default: sh]
.TP
\fB\-s\fR, \fB\-\-show\fR <RECIPE>
Show information about <RECIPE>
.HP
\fB\-d\fR, \fB\-\-working\-directory\fR <WORKING\-DIRECTORY>
.IP
Use <WORKING\-DIRECTORY> as working directory. \fB\-\-justfile\fR must also be set
.SS "ARGS:"
.TP
<ARGUMENTS>...
The recipe(s) to run, defaults to the first recipe in the justfile

View File

@ -36,14 +36,7 @@ pub fn run() {
let invocation_directory = let invocation_directory =
env::current_dir().map_err(|e| format!("Error getting current directory: {}", e)); env::current_dir().map_err(|e| format!("Error getting current directory: {}", e));
let matches = App::new(env!("CARGO_PKG_NAME")) let app = App::new(env!("CARGO_PKG_NAME"))
.version(concat!("v", env!("CARGO_PKG_VERSION")))
.author(env!("CARGO_PKG_AUTHORS"))
.about(concat!(
env!("CARGO_PKG_DESCRIPTION"),
" - ",
env!("CARGO_PKG_HOMEPAGE")
))
.help_message("Print help information") .help_message("Print help information")
.version_message("Print version information") .version_message("Print version information")
.setting(AppSettings::ColoredHelp) .setting(AppSettings::ColoredHelp)
@ -160,8 +153,26 @@ pub fn run() {
"SUMMARY", "SUMMARY",
"ARGUMENTS", "ARGUMENTS",
"EVALUATE", "EVALUATE",
])) ]));
.get_matches();
let app = if cfg!(feature = "help4help2man") {
app.version(env!("CARGO_PKG_VERSION")).about(concat!(
"- Please see ",
env!("CARGO_PKG_HOMEPAGE"),
" for more information."
))
} else {
app
.version(concat!("v", env!("CARGO_PKG_VERSION")))
.author(env!("CARGO_PKG_AUTHORS"))
.about(concat!(
env!("CARGO_PKG_DESCRIPTION"),
" - ",
env!("CARGO_PKG_HOMEPAGE")
))
};
let matches = app.get_matches();
let color = match matches.value_of("COLOR").expect("`--color` had no value") { let color = match matches.value_of("COLOR").expect("`--color` had no value") {
"auto" => Color::auto(), "auto" => Color::auto(),