diff options
-rw-r--r-- | src/main.rs | 6 | ||||
-rw-r--r-- | src/output.rs | 12 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs index 7d3c93d..c1c2bcb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -89,6 +89,10 @@ pub struct Opt { #[structopt(short = "v", long = "invert-match")] invert: bool, + /// Only show the name of matching files. + #[structopt(short = "l", long = "files-with-matches")] + file_name_only: bool, + /// Disable colored output. #[structopt(long = "no-color")] no_color: bool, @@ -241,7 +245,7 @@ fn grep(opt: &Opt) -> Result<(), RuntimeError> { s.spawn(move |_| { if is_log_file(&entry) { if let Some(result) = search_log(&entry, opt).unwrap() { - output::colored(io::stdout(), &result).unwrap(); + output::output(io::stdout(), opt, &result).unwrap(); } } }); diff --git a/src/output.rs b/src/output.rs index fcbda1b..148c088 100644 --- a/src/output.rs +++ b/src/output.rs @@ -1,8 +1,18 @@ use super::errors::RuntimeError; -use super::{FightOutcome, LogResult}; +use super::{FightOutcome, LogResult, Opt}; use std::io::Write; +/// Write the output to the given stream, according to the command line flags. +pub fn output<W: Write>(mut f: W, opt: &Opt, item: &LogResult) -> Result<(), RuntimeError> { + if opt.file_name_only { + writeln!(f, "{}", item.log_file.to_string_lossy())?; + } else { + colored(f, item)?; + } + Ok(()) +} + /// Write the given log result to the given stream, using ANSI colors. pub fn colored<W: Write>(mut f: W, item: &LogResult) -> Result<(), RuntimeError> { use colored::Colorize; |