summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Sago <ogham@bsago.me>2020-10-16 23:53:32 +0100
committerBenjamin Sago <ogham@bsago.me>2020-10-16 23:53:42 +0100
commit86de17b788c676c08814441aac1becf2d2e40bdf (patch)
treee7968042ca503a1d8733d14b8e357f9e4642438b
parent91f1541e85f84663081f6a62bf858816beb345c2 (diff)
Help text changes
This changes the --help text, and gets rid of the special behaviour for --help --long, which I thought was a really good idea at the time, but now I just think it's inconsistent and unexpected behaviour. --help should return the same help, no matter what other arguments you have typed. Other things: • Put --help and --version in a section • Capitalisation consistency • Alignment • Move the --octal-permissions line up a bit • Simplify the printing implementation (HelpString is now a unit struct) This _finally_ makes all the extended tests pass.
-rw-r--r--src/main.rs4
-rw-r--r--src/options/help.rs86
-rw-r--r--src/options/version.rs2
-rw-r--r--xtests/help42
-rw-r--r--xtests/help_long23
-rwxr-xr-xxtests/run.sh1
6 files changed, 58 insertions, 100 deletions
diff --git a/src/main.rs b/src/main.rs
index 3e0d1d0..3f94d4c 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -81,11 +81,11 @@ fn main() {
}
OptionsResult::Help(help_text) => {
- println!("{}", help_text);
+ print!("{}", help_text);
}
OptionsResult::Version(version_str) => {
- println!("{}", version_str);
+ print!("{}", version_str);
}
OptionsResult::InvalidOptions(error) => {
diff --git a/src/options/help.rs b/src/options/help.rs
index 5c64116..d7b986a 100644
--- a/src/options/help.rs
+++ b/src/options/help.rs
@@ -5,7 +5,10 @@ use crate::options::flags;
use crate::options::parser::MatchedFlags;
-static OPTIONS: &str = r##"
+static USAGE: &str = r##"Usage:
+ exa [options] [files...]
+
+META OPTIONS
-?, --help show list of command-line options
-v, --version show version of exa
@@ -30,52 +33,40 @@ FILTERING AND SORTING OPTIONS
--group-directories-first list directories before other files
-D, --only-dirs list only directories
-I, --ignore-glob GLOBS glob patterns (pipe-separated) of files to ignore
- --git-ignore Ignore files mentioned in '.gitignore'
+ --git-ignore ignore files mentioned in '.gitignore'
Valid sort fields: name, Name, extension, Extension, size, type,
modified, accessed, created, inode, and none.
date, time, old, and new all refer to modified.
-"##;
-static LONG_OPTIONS: &str = r##"
LONG VIEW OPTIONS
- -b, --binary list file sizes with binary prefixes
- -B, --bytes list file sizes in bytes, without any prefixes
- -g, --group list each file's group
- -h, --header add a header row to each column
- -H, --links list each file's number of hard links
- -i, --inode list each file's inode number
- -m, --modified use the modified timestamp field
- -S, --blocks show number of file system blocks
- -t, --time FIELD which timestamp field to list (modified, accessed, created)
- -u, --accessed use the accessed timestamp field
- -U, --created use the created timestamp field
- --changed use the changed timestamp field
- --time-style how to format timestamps (default, iso, long-iso, full-iso)
- --no-permissions suppress the permissions field
- --no-filesize suppress the filesize field
- --no-user suppress the user field
- --no-time suppress the time field"##;
-
-static GIT_HELP: &str = r##" --git list each file's Git status, if tracked or ignored"##;
-static EXTENDED_HELP: &str = r##" -@, --extended list each file's extended attributes and sizes"##;
-static OCTAL_HELP: &str = r##" --octal-permissions list each file's permission in octal format"##;
+ -b, --binary list file sizes with binary prefixes
+ -B, --bytes list file sizes in bytes, without any prefixes
+ -g, --group list each file's group
+ -h, --header add a header row to each column
+ -H, --links list each file's number of hard links
+ -i, --inode list each file's inode number
+ -m, --modified use the modified timestamp field
+ -S, --blocks show number of file system blocks
+ -t, --time FIELD which timestamp field to list (modified, accessed, created)
+ -u, --accessed use the accessed timestamp field
+ -U, --created use the created timestamp field
+ --changed use the changed timestamp field
+ --time-style how to format timestamps (default, iso, long-iso, full-iso)
+ --no-permissions suppress the permissions field
+ --octal-permissions list each file's permission in octal format
+ --no-filesize suppress the filesize field
+ --no-user suppress the user field
+ --no-time suppress the time field"##;
+
+static GIT_HELP: &str = r##" --git list each file's Git status, if tracked or ignored"##;
+static EXTENDED_HELP: &str = r##" -@, --extended list each file's extended attributes and sizes"##;
/// All the information needed to display the help text, which depends
/// on which features are enabled and whether the user only wants to
/// see one section’s help.
#[derive(PartialEq, Debug, Copy, Clone)]
-pub struct HelpString {
-
- /// Only show the help for the long section, not all the help.
- only_long: bool,
-
- /// Whether the --git option should be included in the help.
- git: bool,
-
- /// Whether the --extended option should be included in the help.
- xattrs: bool,
-}
+pub struct HelpString;
impl HelpString {
@@ -88,10 +79,7 @@ impl HelpString {
/// errors when the user wants help is kind of petty!
pub fn deduce(matches: &MatchedFlags<'_>) -> Option<Self> {
if matches.count(&flags::HELP) > 0 {
- let only_long = matches.count(&flags::LONG) > 0;
- let git = cfg!(feature="git");
- let xattrs = xattr::ENABLED;
- Some(Self { only_long, git, xattrs })
+ Some(Self)
}
else {
None
@@ -104,24 +92,16 @@ impl fmt::Display for HelpString {
/// Format this help options into an actual string of help
/// text to be displayed to the user.
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
- writeln!(f, "Usage:\n exa [options] [files...]")?;
+ writeln!(f, "{}", USAGE)?;
- if ! self.only_long {
- write!(f, "{}", OPTIONS)?;
+ if cfg!(feature="git") {
+ writeln!(f, "{}", GIT_HELP)?;
}
- write!(f, "{}", LONG_OPTIONS)?;
-
- if self.git {
- write!(f, "\n{}", GIT_HELP)?;
- }
-
- if self.xattrs {
- write!(f, "\n{}", EXTENDED_HELP)?;
+ if xattr::ENABLED {
+ writeln!(f, "{}", EXTENDED_HELP)?;
}
- write!(f, "\n{}", OCTAL_HELP)?;
-
Ok(())
}
}
diff --git a/src/options/version.rs b/src/options/version.rs
index f38669e..6d2e05e 100644
--- a/src/options/version.rs
+++ b/src/options/version.rs
@@ -31,7 +31,7 @@ impl VersionString {
impl fmt::Display for VersionString {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
- write!(f, "{}", include!(concat!(env!("OUT_DIR"), "/version_string.txt")))
+ writeln!(f, "{}", include!(concat!(env!("OUT_DIR"), "/version_string.txt")))
}
}
diff --git a/xtests/help b/xtests/help
index 0d899d6..87a491c 100644
--- a/xtests/help
+++ b/xtests/help
@@ -1,6 +1,7 @@
Usage:
exa [options] [files...]
+META OPTIONS
-?, --help show list of command-line options
-v, --version show version of exa
@@ -25,28 +26,29 @@ FILTERING AND SORTING OPTIONS
--group-directories-first list directories before other files
-D, --only-dirs list only directories
-I, --ignore-glob GLOBS glob patterns (pipe-separated) of files to ignore
- --git-ignore Ignore files mentioned in '.gitignore'
+ --git-ignore ignore files mentioned in '.gitignore'
Valid sort fields: name, Name, extension, Extension, size, type,
modified, accessed, created, inode, and none.
date, time, old, and new all refer to modified.
LONG VIEW OPTIONS
- -b, --binary list file sizes with binary prefixes
- -B, --bytes list file sizes in bytes, without any prefixes
- -g, --group list each file's group
- -h, --header add a header row to each column
- -H, --links list each file's number of hard links
- -i, --inode list each file's inode number
- -m, --modified use the modified timestamp field
- -S, --blocks show number of file system blocks
- -t, --time FIELD which timestamp field to list (modified, accessed, created)
- -u, --accessed use the accessed timestamp field
- -U, --created use the created timestamp field
- --changed use the changed timestamp field
- --time-style how to format timestamps (default, iso, long-iso, full-iso)
- --no-permissions suppress the permissions field
- --no-filesize suppress the filesize field
- --no-user suppress the user field
- --no-time suppress the time field
- --git list each file's Git status, if tracked or ignored
- -@, --extended list each file's extended attributes and sizes
+ -b, --binary list file sizes with binary prefixes
+ -B, --bytes list file sizes in bytes, without any prefixes
+ -g, --group list each file's group
+ -h, --header add a header row to each column
+ -H, --links list each file's number of hard links
+ -i, --inode list each file's inode number
+ -m, --modified use the modified timestamp field
+ -S, --blocks show number of file system blocks
+ -t, --time FIELD which timestamp field to list (modified, accessed, created)
+ -u, --accessed use the accessed timestamp field
+ -U, --created use the created timestamp field
+ --changed use the changed timestamp field
+ --time-style how to format timestamps (default, iso, long-iso, full-iso)
+ --no-permissions suppress the permissions field
+ --octal-permissions list each file's permission in octal format
+ --no-filesize suppress the filesize field
+ --no-user suppress the user field
+ --no-time suppress the time field
+ --git list each file's Git status, if tracked or ignored
+ -@, --extended list each file's extended attributes and sizes
diff --git a/xtests/help_long b/xtests/help_long
deleted file mode 100644
index 0a4b63a..0000000
--- a/xtests/help_long
+++ /dev/null
@@ -1,23 +0,0 @@
-Usage:
- exa [options] [files...]
-
-LONG VIEW OPTIONS
- -b, --binary list file sizes with binary prefixes
- -B, --bytes list file sizes in bytes, without any prefixes
- -g, --group list each file's group
- -h, --header add a header row to each column
- -H, --links list each file's number of hard links
- -i, --inode list each file's inode number
- -m, --modified use the modified timestamp field
- -S, --blocks show number of file system blocks
- -t, --time FIELD which timestamp field to list (modified, accessed, created)
- -u, --accessed use the accessed timestamp field
- -U, --created use the created timestamp field
- --changed use the changed timestamp field
- --time-style how to format timestamps (default, iso, long-iso, full-iso)
- --no-permissions suppress the permissions field
- --no-filesize suppress the filesize field
- --no-user suppress the user field
- --no-time suppress the time field
- --git list each file's Git status, if tracked or ignored
- -@, --extended list each file's extended attributes and sizes
diff --git a/xtests/run.sh b/xtests/run.sh
index 516c770..103da5c 100755
--- a/xtests/run.sh
+++ b/xtests/run.sh
@@ -290,7 +290,6 @@ fi
# And finally...
$exa --help | diff -q - $results/help || exit 1
-$exa --help --long | diff -q - $results/help_long || exit 1
echo "All the tests passed!"