When PAGER=most, don't print a warning to stderr, silently use less instead

This commit is contained in:
Martin Nordholts 2020-12-30 08:11:44 +01:00
parent 552545fe5f
commit 22bdc7c20f
3 changed files with 9 additions and 8 deletions

View File

@ -11,7 +11,7 @@
- Make ./tests/syntax-tests/regression_test.sh work on recent versions of macOS, see #1443 (@Enselic) - Make ./tests/syntax-tests/regression_test.sh work on recent versions of macOS, see #1443 (@Enselic)
- VimL syntax highlighting fix, see #1450 (@esensar) - VimL syntax highlighting fix, see #1450 (@esensar)
- Print an 'Invalid syntax theme settings' error message if a custom theme is broken, see #614 (@Enselic) - Print an 'Invalid syntax theme settings' error message if a custom theme is broken, see #614 (@Enselic)
- Ignore PAGER=most with a warning to stderr, but allow override with BAT_PAGER or --config, see #1063 (@Enselic) - If `PAGER=most` (but not `BAT_PAGER` or `--pager`), silently use `less` instead since `most` does not support colors, see #1063 (@Enselic)
## Other ## Other

View File

@ -52,7 +52,6 @@ impl OutputType {
use std::path::PathBuf; use std::path::PathBuf;
use std::process::{Command, Stdio}; use std::process::{Command, Stdio};
use crate::pager::*; use crate::pager::*;
use crate::bat_warning;
let Pager { pager, source } = get_pager(pager_from_config); let Pager { pager, source } = get_pager(pager_from_config);
@ -60,16 +59,18 @@ impl OutputType {
shell_words::split(&pager).chain_err(|| "Could not parse pager command.")?; shell_words::split(&pager).chain_err(|| "Could not parse pager command.")?;
match pagerflags.split_first() { match pagerflags.split_first() {
Some((pager_name, args)) => { Some((pager_name, pager_args)) => {
let pager_path = PathBuf::from(pager_name); let mut pager_path = PathBuf::from(pager_name);
let mut args = pager_args;
let empty_args = vec![];
if pager_path.file_stem() == Some(&OsString::from("bat")) { if pager_path.file_stem() == Some(&OsString::from("bat")) {
return Err(ErrorKind::InvalidPagerValueBat.into()); return Err(ErrorKind::InvalidPagerValueBat.into());
} }
if pager_path.file_stem() == Some(&OsString::from("most")) && source == PagerSource::PagerEnvVar { if pager_path.file_stem() == Some(&OsString::from("most")) && source == PagerSource::PagerEnvVar {
bat_warning!("Ignoring PAGER=\"{}\": Coloring not supported. Override with BAT_PAGER=\"{}\" or --pager \"{}\"", pager, pager, pager); pager_path = PathBuf::from("less");
return Ok(OutputType::stdout()); args = &empty_args;
} }
let is_less = pager_path.file_stem() == Some(&OsString::from("less")); let is_less = pager_path.file_stem() == Some(&OsString::from("less"));

View File

@ -423,8 +423,8 @@ fn pager_most() {
.arg("test.txt") .arg("test.txt")
.assert() .assert()
.success() .success()
.stderr(predicate::eq("\x1b[33m[bat warning]\x1b[0m: Ignoring PAGER=\"most\": Coloring not supported. Override with BAT_PAGER=\"most\" or --pager \"most\"\n").normalize())
.stdout(predicate::eq("hello world\n").normalize()); .stdout(predicate::eq("hello world\n").normalize());
// TODO: How to ensure less is used?
} }
#[test] #[test]
@ -435,8 +435,8 @@ fn pager_most_with_arg() {
.arg("test.txt") .arg("test.txt")
.assert() .assert()
.success() .success()
.stderr(predicate::eq("\x1b[33m[bat warning]\x1b[0m: Ignoring PAGER=\"most -w\": Coloring not supported. Override with BAT_PAGER=\"most -w\" or --pager \"most -w\"\n").normalize())
.stdout(predicate::eq("hello world\n").normalize()); .stdout(predicate::eq("hello world\n").normalize());
// TODO: How to ensure less is used?
} }
#[test] #[test]