From c36ed3281694375a5ee85b86c2c710073c1195dd Mon Sep 17 00:00:00 2001 From: Ethan P Date: Wed, 16 Dec 2020 18:10:29 -0800 Subject: [PATCH] Add --squeeze/-s option Co-authored-by: einfachIrgendwer0815 <85333734+einfachIrgendwer0815@users.noreply.github.com> --- src/bin/bat/app.rs | 5 +++++ src/bin/bat/clap_app.rs | 8 ++++++++ src/config.rs | 3 +++ src/printer.rs | 14 ++++++++++++++ 4 files changed, 30 insertions(+) diff --git a/src/bin/bat/app.rs b/src/bin/bat/app.rs index 8843d53b..58f683cd 100644 --- a/src/bin/bat/app.rs +++ b/src/bin/bat/app.rs @@ -290,6 +290,11 @@ impl App { #[cfg(feature = "lessopen")] use_lessopen: self.matches.get_flag("lessopen"), set_terminal_title: self.matches.get_flag("set-terminal-title"), + squeeze_lines: if self.matches.get_flag("squeeze") { + 1 + } else { + 0 + }, }) } diff --git a/src/bin/bat/clap_app.rs b/src/bin/bat/clap_app.rs index d3cb9276..4bcee8d6 100644 --- a/src/bin/bat/clap_app.rs +++ b/src/bin/bat/clap_app.rs @@ -387,6 +387,14 @@ pub fn build_app(interactive_output: bool) -> Command { .help("Display all supported highlighting themes.") .long_help("Display a list of supported themes for syntax highlighting."), ) + .arg( + Arg::new("squeeze") + .long("squeeze") + .short('s') + .action(ArgAction::SetTrue) + .help("Squeeze consecutive empty lines.") + .long_help("Squeeze consecutive empty lines into a single empty line.") + ) .arg( Arg::new("style") .long("style") diff --git a/src/config.rs b/src/config.rs index c5cc2abd..ee0d5bc1 100644 --- a/src/config.rs +++ b/src/config.rs @@ -97,6 +97,9 @@ pub struct Config<'a> { // Weather or not to set terminal title when using a pager pub set_terminal_title: bool, + + /// The maximum number of consecutive empty lines to display + pub squeeze_lines: usize, } #[cfg(all(feature = "minimal-application", feature = "paging"))] diff --git a/src/printer.rs b/src/printer.rs index 8fd6bc8e..636c0800 100644 --- a/src/printer.rs +++ b/src/printer.rs @@ -187,6 +187,7 @@ pub(crate) struct InteractivePrinter<'a> { pub line_changes: &'a Option, highlighter_from_set: Option>, background_color_highlight: Option, + consecutive_empty_lines: usize, } impl<'a> InteractivePrinter<'a> { @@ -272,6 +273,7 @@ impl<'a> InteractivePrinter<'a> { line_changes, highlighter_from_set, background_color_highlight, + consecutive_empty_lines: 0, }) } @@ -577,6 +579,18 @@ impl<'a> Printer for InteractivePrinter<'a> { return Ok(()); } + // Skip squeezed lines. + if self.config.squeeze_lines > 0 { + if line.trim_end_matches(|c| c == '\r' || c == '\n').is_empty() { + self.consecutive_empty_lines += 1; + if self.consecutive_empty_lines > self.config.squeeze_lines { + return Ok(()); + } + } else { + self.consecutive_empty_lines = 0; + } + } + let mut cursor: usize = 0; let mut cursor_max: usize = self.config.term_width; let mut cursor_total: usize = 0;