Add --squeeze/-s option

Co-authored-by: einfachIrgendwer0815 <85333734+einfachIrgendwer0815@users.noreply.github.com>
This commit is contained in:
Ethan P 2020-12-16 18:10:29 -08:00 committed by einfachIrgendwer0815
parent e1a3fc5529
commit c36ed32816
No known key found for this signature in database
GPG Key ID: 58D55E5F117DA873
4 changed files with 30 additions and 0 deletions

View File

@ -290,6 +290,11 @@ impl App {
#[cfg(feature = "lessopen")] #[cfg(feature = "lessopen")]
use_lessopen: self.matches.get_flag("lessopen"), use_lessopen: self.matches.get_flag("lessopen"),
set_terminal_title: self.matches.get_flag("set-terminal-title"), set_terminal_title: self.matches.get_flag("set-terminal-title"),
squeeze_lines: if self.matches.get_flag("squeeze") {
1
} else {
0
},
}) })
} }

View File

@ -387,6 +387,14 @@ pub fn build_app(interactive_output: bool) -> Command {
.help("Display all supported highlighting themes.") .help("Display all supported highlighting themes.")
.long_help("Display a list of supported themes for syntax highlighting."), .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(
Arg::new("style") Arg::new("style")
.long("style") .long("style")

View File

@ -97,6 +97,9 @@ pub struct Config<'a> {
// Weather or not to set terminal title when using a pager // Weather or not to set terminal title when using a pager
pub set_terminal_title: bool, 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"))] #[cfg(all(feature = "minimal-application", feature = "paging"))]

View File

@ -187,6 +187,7 @@ pub(crate) struct InteractivePrinter<'a> {
pub line_changes: &'a Option<LineChanges>, pub line_changes: &'a Option<LineChanges>,
highlighter_from_set: Option<HighlighterFromSet<'a>>, highlighter_from_set: Option<HighlighterFromSet<'a>>,
background_color_highlight: Option<Color>, background_color_highlight: Option<Color>,
consecutive_empty_lines: usize,
} }
impl<'a> InteractivePrinter<'a> { impl<'a> InteractivePrinter<'a> {
@ -272,6 +273,7 @@ impl<'a> InteractivePrinter<'a> {
line_changes, line_changes,
highlighter_from_set, highlighter_from_set,
background_color_highlight, background_color_highlight,
consecutive_empty_lines: 0,
}) })
} }
@ -577,6 +579,18 @@ impl<'a> Printer for InteractivePrinter<'a> {
return Ok(()); 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: usize = 0;
let mut cursor_max: usize = self.config.term_width; let mut cursor_max: usize = self.config.term_width;
let mut cursor_total: usize = 0; let mut cursor_total: usize = 0;