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.
This commit is contained in:
Martin Nordholts 2021-01-10 16:48:13 +01:00 committed by David Peter
parent 060b9981b5
commit dd0d44bbb3
2 changed files with 38 additions and 5 deletions

View File

@ -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![];

View File

@ -499,6 +499,28 @@ fn pager_disable() {
.stdout(predicate::eq("hello world\n").normalize());
}
#[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()
@ -506,7 +528,8 @@ fn pager_value_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