Add padding above headers when no grid

This commit is contained in:
Prat T 2020-05-11 17:57:51 -07:00 committed by David Peter
parent 1a6e8d297f
commit 0040fef215
3 changed files with 40 additions and 6 deletions

View File

@ -75,7 +75,7 @@ impl<'b> Controller<'b> {
} }
}; };
for input in inputs.into_iter() { for (index, input) in inputs.into_iter().enumerate() {
match input.open(io::stdin().lock()) { match input.open(io::stdin().lock()) {
Err(error) => { Err(error) => {
print_error(&error, writer); print_error(&error, writer);
@ -128,6 +128,7 @@ impl<'b> Controller<'b> {
&mut *printer, &mut *printer,
writer, writer,
&mut opened_input, &mut opened_input,
index != 0,
#[cfg(feature = "git")] #[cfg(feature = "git")]
&line_changes, &line_changes,
); );
@ -148,10 +149,11 @@ impl<'b> Controller<'b> {
printer: &mut dyn Printer, printer: &mut dyn Printer,
writer: &mut dyn Write, writer: &mut dyn Write,
input: &mut OpenedInput, input: &mut OpenedInput,
add_header_padding: bool,
#[cfg(feature = "git")] line_changes: &Option<LineChanges>, #[cfg(feature = "git")] line_changes: &Option<LineChanges>,
) -> Result<()> { ) -> Result<()> {
if !input.reader.first_line.is_empty() || self.config.style_components.header() { if !input.reader.first_line.is_empty() || self.config.style_components.header() {
printer.print_header(writer, input)?; printer.print_header(writer, input, add_header_padding)?;
} }
if !input.reader.first_line.is_empty() { if !input.reader.first_line.is_empty() {

View File

@ -33,7 +33,12 @@ use crate::terminal::{as_terminal_escaped, to_ansi_color};
use crate::wrapping::WrappingMode; use crate::wrapping::WrappingMode;
pub(crate) trait Printer { pub(crate) trait Printer {
fn print_header(&mut self, handle: &mut dyn Write, input: &OpenedInput) -> Result<()>; fn print_header(
&mut self,
handle: &mut dyn Write,
input: &OpenedInput,
add_header_padding: bool,
) -> Result<()>;
fn print_footer(&mut self, handle: &mut dyn Write, input: &OpenedInput) -> Result<()>; fn print_footer(&mut self, handle: &mut dyn Write, input: &OpenedInput) -> Result<()>;
fn print_snip(&mut self, handle: &mut dyn Write) -> Result<()>; fn print_snip(&mut self, handle: &mut dyn Write) -> Result<()>;
@ -56,7 +61,12 @@ impl SimplePrinter {
} }
impl Printer for SimplePrinter { impl Printer for SimplePrinter {
fn print_header(&mut self, _handle: &mut dyn Write, _input: &OpenedInput) -> Result<()> { fn print_header(
&mut self,
_handle: &mut dyn Write,
_input: &OpenedInput,
_add_header_padding: bool,
) -> Result<()> {
Ok(()) Ok(())
} }
@ -219,7 +229,12 @@ impl<'a> InteractivePrinter<'a> {
} }
impl<'a> Printer for InteractivePrinter<'a> { impl<'a> Printer for InteractivePrinter<'a> {
fn print_header(&mut self, handle: &mut dyn Write, input: &OpenedInput) -> Result<()> { fn print_header(
&mut self,
handle: &mut dyn Write,
input: &OpenedInput,
add_header_padding: bool,
) -> Result<()> {
if !self.config.style_components.header() { if !self.config.style_components.header() {
if Some(ContentType::BINARY) == self.content_type && !self.config.show_nonprintable { if Some(ContentType::BINARY) == self.content_type && !self.config.show_nonprintable {
writeln!( writeln!(
@ -232,6 +247,8 @@ impl<'a> Printer for InteractivePrinter<'a> {
)?; )?;
} else if self.config.style_components.grid() { } else if self.config.style_components.grid() {
self.print_horizontal_line(handle, '┬')?; self.print_horizontal_line(handle, '┬')?;
} else if add_header_padding {
writeln!(handle)?;
} }
return Ok(()); return Ok(());
} }
@ -248,6 +265,9 @@ impl<'a> Printer for InteractivePrinter<'a> {
.paint(if self.panel_width > 0 { "" } else { "" }), .paint(if self.panel_width > 0 { "" } else { "" }),
)?; )?;
} else { } else {
if add_header_padding {
writeln!(handle)?;
}
write!(handle, "{}", " ".repeat(self.panel_width))?; write!(handle, "{}", " ".repeat(self.panel_width))?;
} }

View File

@ -611,7 +611,7 @@ fn filename_multiple_ok() {
.arg("--file-name=bar") .arg("--file-name=bar")
.assert() .assert()
.success() .success()
.stdout("File: foo\nFile: bar\n") .stdout("File: foo\n\nFile: bar\n")
.stderr(""); .stderr("");
} }
@ -628,6 +628,18 @@ fn filename_multiple_err() {
.failure(); .failure();
} }
#[test]
fn header_padding() {
bat()
.arg("--decorations=always")
.arg("--style=plain")
.arg("test.txt")
.arg("single-line.txt")
.assert()
.stdout("hello world\n\nSingle Line\n")
.stderr("");
}
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
#[test] #[test]
fn file_with_invalid_utf8_filename() { fn file_with_invalid_utf8_filename() {