summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Nordholts <enselic@gmail.com>2021-01-10 16:48:13 +0100
committerDavid Peter <sharkdp@users.noreply.github.com>2021-01-11 21:56:10 +0100
commitdd0d44bbb3608618427153515a71cdc11c041988 (patch)
tree01dc4f56de4f92e18c6eda30f4c71d6b86b353f2
parent060b9981b545cb7c813c3261442c9fa718e4d61a (diff)
Fix #1413 Can't use `bat` at all! (Error: Use of bat as a pager is disallowed...)
Fixed by implementing the proposal by sharkdp: * Allow PAGER=bat, but ignore the setting in bat and simply default to less. Unless of course, BAT_PAGER or --pager is used to overwrite the value of PAGER. * Disallow the usage of bat within BAT_PAGER and --pager.
-rw-r--r--src/pager.rs18
-rw-r--r--tests/integration_tests.rs25
2 files changed, 38 insertions, 5 deletions
diff --git a/src/pager.rs b/src/pager.rs
index f6ae7bf4..e1658864 100644
--- a/src/pager.rs
+++ b/src/pager.rs
@@ -98,10 +98,20 @@ pub(crate) fn get_pager(config_pager: Option<&str>) -> Result<Option<Pager>, Par
Some((bin, args)) => {
let kind = PagerKind::from_bin(bin);
- // 'more' and 'most' do not supports colors; automatically use 'less' instead
- // if the problematic pager came from the generic PAGER env var
- let no_color_support = kind == PagerKind::More || kind == PagerKind::Most;
- let use_less_instead = no_color_support && source == PagerSource::EnvVarPager;
+ let use_less_instead = match source {
+ PagerSource::EnvVarPager => {
+ // 'more' and 'most' do not supports colors; automatically use 'less' instead
+ // if the problematic pager came from the generic PAGER env var
+ let no_color_support = kind == PagerKind::More || kind == PagerKind::Most;
+
+ // If PAGER=bat, silently use 'less' instead to prevent recursion ...
+ let is_self = kind == PagerKind::Bat;
+
+ no_color_support || is_self
+ },
+ // Never silently replace with less if bat-specific means to set a pager is used
+ _ => false
+ } ;
Ok(Some(if use_less_instead {
let no_args = vec![];
diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs
index 6128b801..ce44933b 100644
--- a/tests/integration_tests.rs
+++ b/tests/integration_tests.rs
@@ -500,13 +500,36 @@ fn pager_disable() {
}
#[test]
+fn env_var_pager_value_bat() {
+ bat()
+ .env("PAGER", "bat")
+ .arg("--paging=always")
+ .arg("test.txt")
+ .assert()
+ .success()
+ .stdout(predicate::eq("hello world\n").normalize());
+}
+
+#[test]
+fn env_var_bat_pager_value_bat() {
+ bat()
+ .env("BAT_PAGER", "bat")
+ .arg("--paging=always")
+ .arg("test.txt")
+ .assert()
+ .failure()
+ .stderr(predicate::str::contains("bat as a pager is disallowed"));
+}
+
+#[test]
fn pager_value_bat() {
bat()
.arg("--pager=bat")
.arg("--paging=always")
.arg("test.txt")
.assert()
- .failure();
+ .failure()
+ .stderr(predicate::str::contains("bat as a pager is disallowed"));
}
/// We shall use less instead of most if PAGER is used since PAGER