Repository: sharkdp/bat
Pull request #1082 (2020-06-30 19:27:15)

Add alias for --paging=never
From #1075, here's my proposed implementation for adding an alias for `--paging=never`.

I couldn't find a way for clap to create an alias with a value, so I ended up creating a new parameter for it.

I'm not sure if it needs to be added, but I figure I'll share it anyways. I'm not sold on using `-P` as the flag, but it made the most sense to me.


Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f9d45641..23ad7ae0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@
 ## Features
 
 - Added support for the `NO_COLOR` environment variable, see #1021 and #1031 (@eth-p)
+- Added `-P` short flag to disable paging, revised man page description, see #1075 and #1082 (@LordFlashmeow) 
 
 ## Bugfixes
 
diff --git a/assets/completions/bat.fish.in b/assets/completions/bat.fish.in
index bf22fe9b..420a227f 100644
--- a/assets/completions/bat.fish.in
+++ b/assets/completions/bat.fish.in
@@ -52,6 +52,8 @@ complete -c {{PROJECT_EXECUTABLE}} -l paging -xka "auto never always" -d "Specif
 
 complete -c {{PROJECT_EXECUTABLE}} -s p -l plain -d "Only show plain style, no decorations. Alias for '--style=plain'" -n "not __fish_seen_subcommand_from cache"
 
+complete -c {{PROJECT_EXECUTABLE}} -s P -d "Disable paging. Alias for '--paging=never'" -n "not __fish_seen_subcommand_from cache"
+
 complete -c {{PROJECT_EXECUTABLE}} -s A -l show-all -d "Show non-printable characters like space/tab/newline" -n "not __fish_seen_subcommand_from cache"
 
 complete -c {{PROJECT_EXECUTABLE}} -l style -xka "auto full plain changes header grid numbers" -d "Comma-separated list of style elements or presets to display with file contents" -n "not __fish_seen_subcommand_from cache"
diff --git a/assets/manual/bat.1.in b/assets/manual/bat.1.in
index 6345bde5..740d69e4 100644
--- a/assets/manual/bat.1.in
+++ b/assets/manual/bat.1.in
@@ -89,15 +89,14 @@ values: *auto*, never, always.
 .HP
 \fB\-\-paging\fR <when>
 .IP
-Specify when to use the pager. To control which pager is used, set the PAGER or
-BAT_PAGER environment variables (the latter takes precedence) or use the '\-\-pager'
-option. To disable the pager permanently, set BAT_PAGER to an empty string or set
-\&'\-\-paging=never' in the configuration file. Possible values: *auto*, never, always.
+Specify when to use the pager. To disable the pager, use \&'\-\-paging=never' or its alias,
+\fB-P\fR. To disable the pager permanently, set BAT_PAGER to an empty string. To control
+which pager is used, see the '\-\-pager' option. Possible values: *auto*, never, always.
 .HP
 \fB\-\-pager\fR <command>
 .IP
-Determine which pager is used. This option will overwrite the PAGER and BAT_PAGER
-environment variables. The default pager is 'less'. To disable the pager completely, use
+Determine which pager is used. This option will override the PAGER and BAT_PAGER
+environment variables. The default pager is 'less'. To control when the pager is used, see
 the '\-\-paging' option. Example: '\-\-pager "less \fB\-RF\fR"'.
 .HP
 \fB\-m\fR, \fB\-\-map\-syntax\fR <glob-pattern:syntax-name>...
diff --git a/src/bin/bat/app.rs b/src/bin/bat/app.rs
index 432b8c57..6c61215e 100644
--- a/src/bin/bat/app.rs
+++ b/src/bin/bat/app.rs
@@ -85,6 +85,8 @@ impl App {
                 if self.matches.occurrences_of("plain") > 1 {
                     // If we have -pp as an option when in auto mode, the pager should be disabled.
                     PagingMode::Never
+                } else if self.matches.is_present("no-paging") {
+                    PagingMode::Never
                 } else if inputs.iter().any(Input::is_stdin) {
                     // If we are reading from stdin, only enable paging if we write to an
                     // interactive terminal and if we do not *read* from an interactive
diff --git a/src/bin/bat/clap_app.rs b/src/bin/bat/clap_app.rs
index 4182b76e..730a2175 100644
--- a/src/bin/bat/clap_app.rs
+++ b/src/bin/bat/clap_app.rs
@@ -265,16 +265,23 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
                 .possible_values(&["auto", "never", "always"])
                 .default_value("auto")
                 .hide_default_value(true)
-                .help("Specify when to use the pager (*auto*, never, always).")
+                .help("Specify when to use the pager, or use `-P` to disable (*auto*, never, always).")
                 .long_help(
-                    "Specify when to use the pager. To control which pager \
-                     is used, set the PAGER or BAT_PAGER environment \
-                     variables (the latter takes precedence) or use the '--pager' option. \
-                     To disable the pager permanently, set BAT_PAGER to an empty string \
-                     or set '--paging=never' in the configuration file. \
-                     Possible values: *auto*, never, always.",
+                    "Specify when to use the pager. To disable the pager, use \
+                    --paging=never' or its alias,'-P'. To disable the pager permanently, \
+                    set BAT_PAGER to an empty string. To control which pager is used, see the \
+                    '--pager' option. Possible values: *auto*, never, always."
                 ),
         )
+        .arg(
+            Arg::with_name("no-paging")
+                .short("P")
+                .alias("no-pager")
+                .overrides_with("no-paging")
+                .hidden(true)
+                .hidden_short_help(true)
+                .help("Alias for '--paging=never'")
+            )
         .arg(
             Arg::with_name("pager")
                 .long("pager")
@@ -284,11 +291,10 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
                 .hidden_short_help(true)
                 .help("Determine which pager to use.")
                 .long_help(
-                    "Determine which pager is used. This option will overwrite \
-                     the PAGER and BAT_PAGER environment variables. The default \
-                     pager is 'less'. To disable the pager completely, use the \
-                     '--paging' option. \
-                     Example: '--pager \"less -RF\"'.",
+                    "Determine which pager is used. This option will override the \
+                    PAGER and BAT_PAGER environment variables. The default pager is 'less'. \
+                    To control when the pager is used, see the '--paging' option. \
+                    Example: '--pager \"less -RF\"'."
                 ),
         )
         .arg(


Test patch:
diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs
index d78f068e..730974c9 100644
--- a/tests/integration_tests.rs
+++ b/tests/integration_tests.rs
@@ -405,6 +405,29 @@ fn pager_disable() {
         .stdout(predicate::eq("hello world\n").normalize());
 }
 
+#[test]
+fn alias_pager_disable() {
+    bat()
+        .env("PAGER", "echo other-pager")
+        .arg("-P")
+        .arg("test.txt")
+        .assert()
+        .success()
+        .stdout(predicate::eq("hello world\n").normalize());
+}
+
+#[test]
+fn alias_pager_disable_long_overrides_short() {
+    bat()
+        .env("PAGER", "echo pager-output")
+        .arg("-P")
+        .arg("--paging=always")
+        .arg("test.txt")
+        .assert()
+        .success()
+        .stdout(predicate::eq("pager-output\n").normalize());
+}
+
 #[test]
 fn config_location_test() {
     bat_with_config()