diff --git a/CHANGELOG.md b/CHANGELOG.md
index a060ce45..c8c6beab 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,13 @@
+
+### v2.22.2 (2017-03-30)
+
+
+#### Bug Fixes
+
+* **Custom Usage Strings:** fixes the usage string regression when using help templates ([0e4fd96d](https://github.com/kbknapp/clap-rs/commit/0e4fd96d74280d306d09e60ac44f938a82321769))
+
+
+
### v2.22.1 (2017-03-24)
diff --git a/Cargo.toml b/Cargo.toml
index fa35b15a..b41c32ac 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "clap"
-version = "2.22.1"
+version = "2.22.2"
authors = ["Kevin K. "]
exclude = ["examples/*", "clap-test/*", "tests/*", "benches/*", "*.png", "clap-perf/*", "*.dot"]
repository = "https://github.com/kbknapp/clap-rs.git"
diff --git a/README.md b/README.md
index 0def8f68..876e9eb7 100644
--- a/README.md
+++ b/README.md
@@ -45,15 +45,16 @@ Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)
## What's New
-Here's the highlights for v2.22.1
+Here's the highlights for v2.22.2
-* **usage:** fixes a big regression with custom usage strings
+* fixes the usage string regression when using help templates
-Here's the highlights for v2.21.0 to v2.22.0
+Here's the highlights for v2.21.0 to v2.22.1
-* **App::name:** adds the ability to change the name of the App instance after creation
-* **Arg::hide_default_value:** adds ability to hide the default value of an argument from the help string
-* **yaml:** fixes support for loading author info from yaml
+* fixes a big regression with custom usage strings
+* adds the ability to change the name of the App instance after creation
+* adds ability to hide the default value of an argument from the help string
+* fixes support for loading author info from yaml
* adds fish subcommand help support
* options that use `require_equals(true)` now display the equals sign in help messages, usage strings, and errors
* setting the max term width now correctly propagates down through child subcommands
diff --git a/src/app/help.rs b/src/app/help.rs
index 67a4a04b..1b400ef4 100644
--- a/src/app/help.rs
+++ b/src/app/help.rs
@@ -888,7 +888,7 @@ impl<'a> Help<'a> {
parser.meta.about.unwrap_or("unknown about")));
}
b"usage" => {
- try!(write!(self.writer, "{}", usage::create_help_usage(parser, true)));
+ try!(write!(self.writer, "{}", usage::create_usage_no_title(parser, &[])));
}
b"all-args" => {
try!(self.write_all_args(&parser));
diff --git a/src/args/arg.rs b/src/args/arg.rs
index dee6cdd1..9f57a883 100644
--- a/src/args/arg.rs
+++ b/src/args/arg.rs
@@ -2440,18 +2440,24 @@ impl<'a, 'b> Arg<'a, 'b> {
self
}
- ///Works identically to Validator but is intended to be used with non UTF-8 formatted strings.
+ /// Works identically to Validator but is intended to be used with values that could
+ /// contain non UTF-8 formatted strings.
+ ///
/// # Examples
- /// ```rust
+ ///
+ #[cfg_attr(not(unix), doc=" ```ignore")]
+ #[cfg_attr( unix , doc=" ```rust")]
/// # use clap::{App, Arg};
- ///fn has_ampersand(v: &OsStr) -> Result<(), String> {
- /// if v.contains("&") { return Ok(()); }
- /// Err(String::from("The value did not contain the required & sigil"))
+ /// # use std::ffi::{OsStr, OsString};
+ /// # use std::os::unix::ffi::OsStrExt;
+ /// fn has_ampersand(v: &OsStr) -> Result<(), OsString> {
+ /// if v.as_bytes().iter().any(|b| *b == b'&') { return Ok(()); }
+ /// Err(OsString::from("The value did not contain the required & sigil"))
/// }
/// let res = App::new("prog")
/// .arg(Arg::with_name("file")
/// .index(1)
- /// .validator(has_ampersand))
+ /// .validator_os(has_ampersand))
/// .get_matches_from_safe(vec![
/// "prog", "Fish & chips"
/// ]);
diff --git a/tests/help.rs b/tests/help.rs
index 16d5c908..3f273931 100644
--- a/tests/help.rs
+++ b/tests/help.rs
@@ -686,7 +686,27 @@ fn ripgrep_usage() {
rg [OPTIONS] --files [ ...]
rg [OPTIONS] --type-list");
- assert!(test::compare_output(app, "ripgrep --help", RIPGREP_USAGE, false));
+ assert!(test::compare_output(app, "rg --help", RIPGREP_USAGE, false));
+}
+
+#[test]
+fn ripgrep_usage_using_templates() {
+ let app = App::new("ripgrep")
+ .version("0.5")
+ .usage("
+ rg [OPTIONS] [ ...]
+ rg [OPTIONS] [-e PATTERN | -f FILE ]... [ ...]
+ rg [OPTIONS] --files [ ...]
+ rg [OPTIONS] --type-list")
+ .template("\
+{bin} {version}
+
+USAGE:{usage}
+
+FLAGS:
+{flags}");
+
+ assert!(test::compare_output(app, "rg --help", RIPGREP_USAGE, false));
}
#[test]