|
|
|
@ -16,7 +16,7 @@ use errors::*;
|
|
|
|
|
use line_range::LineRange;
|
|
|
|
|
use style::{OutputComponent, OutputComponents, OutputWrap};
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq)]
|
|
|
|
|
pub enum PagingMode {
|
|
|
|
|
Always,
|
|
|
|
|
QuitIfOneScreen,
|
|
|
|
@ -353,6 +353,27 @@ impl App {
|
|
|
|
|
let files = self.files();
|
|
|
|
|
let output_components = self.output_components()?;
|
|
|
|
|
|
|
|
|
|
let paging_mode = match self.matches.value_of("paging") {
|
|
|
|
|
Some("always") => PagingMode::Always,
|
|
|
|
|
Some("never") => PagingMode::Never,
|
|
|
|
|
Some("auto") | _ => if files.contains(&InputFile::StdIn) {
|
|
|
|
|
// If we are reading from stdin, only enable paging if we write to an
|
|
|
|
|
// interactive terminal and if we do not *read* from an interactive
|
|
|
|
|
// terminal.
|
|
|
|
|
if self.interactive_output && !atty::is(Stream::Stdin) {
|
|
|
|
|
PagingMode::QuitIfOneScreen
|
|
|
|
|
} else {
|
|
|
|
|
PagingMode::Never
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if self.interactive_output {
|
|
|
|
|
PagingMode::QuitIfOneScreen
|
|
|
|
|
} else {
|
|
|
|
|
PagingMode::Never
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Ok(Config {
|
|
|
|
|
true_color: is_truecolor_terminal(),
|
|
|
|
|
language: self.matches.value_of("language"),
|
|
|
|
@ -376,26 +397,7 @@ impl App {
|
|
|
|
|
Some("never") => false,
|
|
|
|
|
Some("auto") | _ => self.interactive_output,
|
|
|
|
|
},
|
|
|
|
|
paging_mode: match self.matches.value_of("paging") {
|
|
|
|
|
Some("always") => PagingMode::Always,
|
|
|
|
|
Some("never") => PagingMode::Never,
|
|
|
|
|
Some("auto") | _ => if files.contains(&InputFile::StdIn) {
|
|
|
|
|
// If we are reading from stdin, only enable paging if we write to an
|
|
|
|
|
// interactive terminal and if we do not *read* from an interactive
|
|
|
|
|
// terminal.
|
|
|
|
|
if self.interactive_output && !atty::is(Stream::Stdin) {
|
|
|
|
|
PagingMode::QuitIfOneScreen
|
|
|
|
|
} else {
|
|
|
|
|
PagingMode::Never
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if self.interactive_output {
|
|
|
|
|
PagingMode::QuitIfOneScreen
|
|
|
|
|
} else {
|
|
|
|
|
PagingMode::Never
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
paging_mode,
|
|
|
|
|
term_width: self
|
|
|
|
|
.matches
|
|
|
|
|
.value_of("terminal-width")
|
|
|
|
@ -410,7 +412,13 @@ impl App {
|
|
|
|
|
.value_of("tabs")
|
|
|
|
|
.and_then(|w| w.parse().ok())
|
|
|
|
|
.or_else(|| env::var("BAT_TABS").ok().and_then(|w| w.parse().ok()))
|
|
|
|
|
.unwrap_or(8),
|
|
|
|
|
.unwrap_or(
|
|
|
|
|
if output_components.plain() && paging_mode == PagingMode::Never {
|
|
|
|
|
0
|
|
|
|
|
} else {
|
|
|
|
|
8
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
theme: self
|
|
|
|
|
.matches
|
|
|
|
|
.value_of("theme")
|
|
|
|
|