mirror of
https://github.com/sharkdp/bat.git
synced 2024-12-21 14:00:40 +01:00
Add --pager option
This commit is contained in:
parent
b22a9f8fe3
commit
154186a58d
@ -70,6 +70,9 @@ pub struct Config<'a> {
|
||||
|
||||
/// File extension/name mappings
|
||||
pub syntax_mapping: SyntaxMapping,
|
||||
|
||||
/// Pager option
|
||||
pub pager: Option<&'a str>,
|
||||
}
|
||||
|
||||
fn is_truecolor_terminal() -> bool {
|
||||
@ -228,6 +231,7 @@ impl App {
|
||||
),
|
||||
output_components,
|
||||
syntax_mapping,
|
||||
pager: self.matches.value_of("pager"),
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -204,12 +204,25 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
|
||||
.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). The default \
|
||||
pager is 'less'. To disable the pager permanently, set \
|
||||
BAT_PAGER to an empty string. \
|
||||
variables (the latter takes precedence) or set --pager option.\
|
||||
The default pager is 'less'. To disable the pager permanently,\
|
||||
set BAT_PAGER to an empty string. \
|
||||
Possible values: *auto*, never, always.",
|
||||
),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("pager")
|
||||
.long("pager")
|
||||
.overrides_with("pager")
|
||||
.takes_value(true)
|
||||
.value_name("pager-command")
|
||||
.hidden_short_help(true)
|
||||
.help("Set pager")
|
||||
.long_help(
|
||||
"Set which pager is used. This option will overwrite \
|
||||
PAGER or BAT_PAGER environment variables.",
|
||||
),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("wrap")
|
||||
.long("wrap")
|
||||
|
@ -19,7 +19,7 @@ impl<'b> Controller<'b> {
|
||||
}
|
||||
|
||||
pub fn run(&self) -> Result<bool> {
|
||||
let mut output_type = OutputType::from_mode(self.config.paging_mode)?;
|
||||
let mut output_type = OutputType::from_mode(self.config.paging_mode, self.config.pager)?;
|
||||
let writer = output_type.handle()?;
|
||||
let mut no_errors: bool = true;
|
||||
|
||||
|
@ -15,19 +15,21 @@ pub enum OutputType {
|
||||
}
|
||||
|
||||
impl OutputType {
|
||||
pub fn from_mode(mode: PagingMode) -> Result<Self> {
|
||||
pub fn from_mode(mode: PagingMode, pager: Option<&str>) -> Result<Self> {
|
||||
use self::PagingMode::*;
|
||||
Ok(match mode {
|
||||
Always => OutputType::try_pager(false)?,
|
||||
QuitIfOneScreen => OutputType::try_pager(true)?,
|
||||
Always => OutputType::try_pager(false, pager)?,
|
||||
QuitIfOneScreen => OutputType::try_pager(true, pager)?,
|
||||
_ => OutputType::stdout(),
|
||||
})
|
||||
}
|
||||
|
||||
/// Try to launch the pager. Fall back to stdout in case of errors.
|
||||
fn try_pager(quit_if_one_screen: bool) -> Result<Self> {
|
||||
let pager = env::var("BAT_PAGER")
|
||||
.or_else(|_| env::var("PAGER"))
|
||||
fn try_pager(quit_if_one_screen: bool, pager_from_config: Option<&str>) -> Result<Self> {
|
||||
let pager_from_env = env::var("BAT_PAGER")
|
||||
.or_else(|_| env::var("PAGER"));
|
||||
let pager = pager_from_config.map(|p| p.to_string())
|
||||
.or(pager_from_env.ok())
|
||||
.unwrap_or(String::from("less"));
|
||||
|
||||
let pagerflags = shell_words::split(&pager)
|
||||
|
Loading…
Reference in New Issue
Block a user