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")]
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
},
})
}

View file

@ -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")

View file

@ -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"))]

View file

@ -187,6 +187,7 @@ pub(crate) struct InteractivePrinter<'a> {
pub line_changes: &'a Option<LineChanges>,
highlighter_from_set: Option<HighlighterFromSet<'a>>,
background_color_highlight: Option<Color>,
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;