mirror of
https://github.com/sharkdp/bat
synced 2026-08-01 18:31:46 +00:00
Fix -n flag to show line numbers in loop-through mode
When the -n/--number flag is passed on the command line, bat now shows line numbers even when piping output to another process (loop-through mode), similar to how `cat -n` behaves. This change detects if -n or --number was passed on the CLI (before merging with config file and environment variables) and disables loop-through mode in that case, allowing the InteractivePrinter to add line numbers. The existing behavior is preserved: - Styles from config/env are still ignored when piping (unless --decorations=always is set) - Only the -n flag from CLI enables line numbers in piped mode - -p and --style options from CLI do not disable loop-through mode
This commit is contained in:
+15
-1
@@ -46,6 +46,10 @@ enum HelpType {
|
||||
pub struct App {
|
||||
pub matches: ArgMatches,
|
||||
interactive_output: bool,
|
||||
/// True if -n / --number was passed on the command line
|
||||
/// (not from config file or environment variables).
|
||||
/// This is used to honor the flag when piping output, similar to `cat -n`.
|
||||
number_from_cli: bool,
|
||||
}
|
||||
|
||||
impl App {
|
||||
@@ -54,6 +58,15 @@ impl App {
|
||||
let _ = nu_ansi_term::enable_ansi_support();
|
||||
|
||||
let interactive_output = std::io::stdout().is_terminal();
|
||||
|
||||
// Check if the -n / --number option was passed on the command line
|
||||
// (before merging with config file and environment variables).
|
||||
// This is needed to honor the -n flag when piping output, similar to `cat -n`.
|
||||
let number_from_cli = wild::args_os().any(|arg| {
|
||||
let arg_str = arg.to_string_lossy();
|
||||
arg_str == "-n" || arg_str == "--number"
|
||||
});
|
||||
|
||||
let matches = Self::matches(interactive_output)?;
|
||||
|
||||
if matches.get_flag("help") {
|
||||
@@ -91,6 +104,7 @@ impl App {
|
||||
Ok(App {
|
||||
matches,
|
||||
interactive_output,
|
||||
number_from_cli,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -384,7 +398,7 @@ impl App {
|
||||
.map(|s| s.as_str())
|
||||
== Some("always")
|
||||
|| self.matches.get_flag("force-colorization")
|
||||
|| self.matches.get_flag("number")),
|
||||
|| self.number_from_cli),
|
||||
tab_width: self
|
||||
.matches
|
||||
.get_one::<String>("tabs")
|
||||
|
||||
Reference in New Issue
Block a user