mirror of
https://github.com/sharkdp/bat
synced 2024-11-16 21:25:56 +00:00
Do not pass '--no-init' on newer less versions
With this change, we do not pass the `--no-init` option in newer versions of less (530 or higher). This fixes #749
This commit is contained in:
parent
126729f87a
commit
67fe804256
49
src/less.rs
Normal file
49
src/less.rs
Normal file
@ -0,0 +1,49 @@
|
||||
use std::process::Command;
|
||||
|
||||
pub fn retrieve_less_version() -> Option<usize> {
|
||||
let cmd = Command::new("less").arg("--version").output().ok()?;
|
||||
parse_less_version(&cmd.stdout)
|
||||
}
|
||||
|
||||
fn parse_less_version(output: &[u8]) -> Option<usize> {
|
||||
if output.starts_with(b"less ") {
|
||||
let version = std::str::from_utf8(&output[5..]).ok()?;
|
||||
let end = version.find(' ')?;
|
||||
version[..end].parse::<usize>().ok()
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_less_version_487() {
|
||||
let output = b"less 487 (GNU regular expressions)
|
||||
Copyright (C) 1984-2016 Mark Nudelman
|
||||
|
||||
less comes with NO WARRANTY, to the extent permitted by law.
|
||||
For information about the terms of redistribution,
|
||||
see the file named README in the less distribution.
|
||||
Homepage: http://www.greenwoodsoftware.com/less";
|
||||
|
||||
assert_eq!(Some(487), parse_less_version(output));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_less_version_551() {
|
||||
let output = b"less 551 (PCRE regular expressions)
|
||||
Copyright (C) 1984-2019 Mark Nudelman
|
||||
|
||||
less comes with NO WARRANTY, to the extent permitted by law.
|
||||
For information about the terms of redistribution,
|
||||
see the file named README in the less distribution.
|
||||
Home page: http://www.greenwoodsoftware.com/less";
|
||||
|
||||
assert_eq!(Some(551), parse_less_version(output));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_less_version_wrong_program() {
|
||||
let output = b"more from util-linux 2.34";
|
||||
|
||||
assert_eq!(None, parse_less_version(output));
|
||||
}
|
@ -24,6 +24,7 @@ mod decorations;
|
||||
mod diff;
|
||||
pub mod dirs;
|
||||
pub mod inputfile;
|
||||
mod less;
|
||||
pub mod line_range;
|
||||
mod output;
|
||||
mod preprocessor;
|
||||
|
@ -7,6 +7,7 @@ use std::process::{Child, Command, Stdio};
|
||||
use shell_words;
|
||||
|
||||
use crate::errors::*;
|
||||
use crate::less::retrieve_less_version;
|
||||
use crate::PagingMode;
|
||||
|
||||
#[derive(Debug)]
|
||||
@ -70,10 +71,21 @@ impl OutputType {
|
||||
let mut process = if is_less {
|
||||
let mut p = Command::new(&pager_path);
|
||||
if args.is_empty() || replace_arguments_to_less {
|
||||
p.args(vec!["--RAW-CONTROL-CHARS", "--no-init"]);
|
||||
p.arg("--RAW-CONTROL-CHARS");
|
||||
if quit_if_one_screen {
|
||||
p.arg("--quit-if-one-screen");
|
||||
}
|
||||
|
||||
// Passing '--no-init' fixes a bug with '--quit-if-one-screen' in older
|
||||
// versions of 'less'. Unfortunately, it also breaks mouse-wheel support.
|
||||
//
|
||||
// See: http://www.greenwoodsoftware.com/less/news.530.html
|
||||
match retrieve_less_version() {
|
||||
Some(version) if version < 530 => {
|
||||
p.arg("--no-init");
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
} else {
|
||||
p.args(args);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user