Implement --file-name<name> option

- can specify filename to be displayed when printing.
- useful for when piping data from STDIN

Closes #654
This commit is contained in:
Kyle Criddle 2020-03-17 20:24:48 -06:00
parent 260c5dcb75
commit 517be5c7bc
4 changed files with 21 additions and 2 deletions

View File

@ -222,6 +222,7 @@ impl App {
.transpose()? .transpose()?
.unwrap_or_else(|| vec![LineRange { lower: 0, upper: 0 }]), .unwrap_or_else(|| vec![LineRange { lower: 0, upper: 0 }]),
), ),
filename: self.matches.value_of("file-name").or_else(|| None),
}) })
} }

View File

@ -93,6 +93,18 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
'--highlight-line 40:' highlights lines 40 to the end of the file" '--highlight-line 40:' highlights lines 40 to the end of the file"
), ),
) )
.arg(
Arg::with_name("file-name")
.long("file-name")
.takes_value(true)
.number_of_values(1)
.multiple(true)
.value_name("name")
.help("Specify the name to display for a file.")
.long_help("Specify the name to display for a file. Useful when piping \
data to bat from STDIN when bat does not otherwise know \
the filename."),
)
.arg( .arg(
Arg::with_name("tabs") Arg::with_name("tabs")
.long("tabs") .long("tabs")

View File

@ -129,4 +129,7 @@ pub struct Config<'a> {
/// Lines to highlight /// Lines to highlight
pub highlight_lines: LineRanges, pub highlight_lines: LineRanges,
/// Name of file to display when printing
pub filename: Option<&'a str>,
} }

View File

@ -231,7 +231,7 @@ impl<'a> Printer for InteractivePrinter<'a> {
InputFile::Ordinary(filename) => { InputFile::Ordinary(filename) => {
format!("file '{}'", filename.to_string_lossy()) format!("file '{}'", filename.to_string_lossy())
} }
_ => "STDIN".into(), _ => self.config.filename.unwrap_or("STDIN").to_owned(),
}; };
writeln!( writeln!(
@ -267,7 +267,10 @@ impl<'a> Printer for InteractivePrinter<'a> {
let (prefix, name) = match file { let (prefix, name) = match file {
InputFile::Ordinary(filename) => ("File: ", filename.to_string_lossy()), InputFile::Ordinary(filename) => ("File: ", filename.to_string_lossy()),
_ => ("", Cow::from("STDIN")), _ => (
"File: ",
Cow::from(self.config.filename.unwrap_or("STDIN").to_owned()),
),
}; };
let mode = match self.content_type { let mode = match self.content_type {