mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-11-04 09:01:56 +00:00 
			
		
		
		
	Merge branch 'master' of https://github.com/tskinn/bat into tskinn-master
This commit is contained in:
		@@ -77,7 +77,11 @@ pub struct Config<'a> {
 | 
				
			|||||||
    /// Command to start the pager
 | 
					    /// Command to start the pager
 | 
				
			||||||
    pub pager: Option<&'a str>,
 | 
					    pub pager: Option<&'a str>,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Whether or not to use ANSI italics
 | 
				
			||||||
    pub use_italic_text: bool,
 | 
					    pub use_italic_text: bool,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// A line to highlight
 | 
				
			||||||
 | 
					    pub highlight_line: Option<usize>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn is_truecolor_terminal() -> bool {
 | 
					fn is_truecolor_terminal() -> bool {
 | 
				
			||||||
@@ -264,6 +268,10 @@ impl App {
 | 
				
			|||||||
                Some("always") => true,
 | 
					                Some("always") => true,
 | 
				
			||||||
                _ => false,
 | 
					                _ => false,
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
 | 
					            highlight_line: self
 | 
				
			||||||
 | 
					                .matches
 | 
				
			||||||
 | 
					                .value_of("highlight-line")
 | 
				
			||||||
 | 
					                .and_then(|w| w.parse().ok()),
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -188,6 +188,17 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
 | 
				
			|||||||
                     '--line-range 40:' prints lines 40 to the end of the file",
 | 
					                     '--line-range 40:' prints lines 40 to the end of the file",
 | 
				
			||||||
                ),
 | 
					                ),
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        .arg(
 | 
				
			||||||
 | 
					            Arg::with_name("highlight-line")
 | 
				
			||||||
 | 
					                .long("highlight-line")
 | 
				
			||||||
 | 
					                .overrides_with("highlight-line")
 | 
				
			||||||
 | 
					                .takes_value(true)
 | 
				
			||||||
 | 
					                .value_name("N")
 | 
				
			||||||
 | 
					                .help("Highlight a line.")
 | 
				
			||||||
 | 
					                .long_help(
 | 
				
			||||||
 | 
					                    "Highlight the Nth line. The background color is changed to create contrast.",
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        .arg(
 | 
					        .arg(
 | 
				
			||||||
            Arg::with_name("color")
 | 
					            Arg::with_name("color")
 | 
				
			||||||
                .long("color")
 | 
					                .long("color")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ use ansi_term::Style;
 | 
				
			|||||||
use console::AnsiCodeIterator;
 | 
					use console::AnsiCodeIterator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use syntect::easy::HighlightLines;
 | 
					use syntect::easy::HighlightLines;
 | 
				
			||||||
 | 
					use syntect::highlighting::Color;
 | 
				
			||||||
use syntect::highlighting::Theme;
 | 
					use syntect::highlighting::Theme;
 | 
				
			||||||
use syntect::parsing::SyntaxSet;
 | 
					use syntect::parsing::SyntaxSet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -79,6 +80,7 @@ pub struct InteractivePrinter<'a> {
 | 
				
			|||||||
    pub line_changes: Option<LineChanges>,
 | 
					    pub line_changes: Option<LineChanges>,
 | 
				
			||||||
    highlighter: Option<HighlightLines<'a>>,
 | 
					    highlighter: Option<HighlightLines<'a>>,
 | 
				
			||||||
    syntax_set: &'a SyntaxSet,
 | 
					    syntax_set: &'a SyntaxSet,
 | 
				
			||||||
 | 
					    background_highlight: Option<Color>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a> InteractivePrinter<'a> {
 | 
					impl<'a> InteractivePrinter<'a> {
 | 
				
			||||||
@@ -90,6 +92,8 @@ impl<'a> InteractivePrinter<'a> {
 | 
				
			|||||||
    ) -> Self {
 | 
					    ) -> Self {
 | 
				
			||||||
        let theme = assets.get_theme(&config.theme);
 | 
					        let theme = assets.get_theme(&config.theme);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let background_highlight = theme.settings.line_highlight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let colors = if config.colored_output {
 | 
					        let colors = if config.colored_output {
 | 
				
			||||||
            Colors::colored(theme, config.true_color)
 | 
					            Colors::colored(theme, config.true_color)
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
@@ -156,6 +160,7 @@ impl<'a> InteractivePrinter<'a> {
 | 
				
			|||||||
            line_changes,
 | 
					            line_changes,
 | 
				
			||||||
            highlighter,
 | 
					            highlighter,
 | 
				
			||||||
            syntax_set: &assets.syntax_set,
 | 
					            syntax_set: &assets.syntax_set,
 | 
				
			||||||
 | 
					            background_highlight,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -301,6 +306,12 @@ impl<'a> Printer for InteractivePrinter<'a> {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Line highlighting
 | 
				
			||||||
 | 
					        let background = self.config.highlight_line
 | 
				
			||||||
 | 
					            .filter(|line| *line == line_number)
 | 
				
			||||||
 | 
					            .map(|_| self.background_highlight)
 | 
				
			||||||
 | 
					            .unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Line contents.
 | 
					        // Line contents.
 | 
				
			||||||
        if self.config.output_wrap == OutputWrap::None {
 | 
					        if self.config.output_wrap == OutputWrap::None {
 | 
				
			||||||
            let true_color = self.config.true_color;
 | 
					            let true_color = self.config.true_color;
 | 
				
			||||||
@@ -313,7 +324,7 @@ impl<'a> Printer for InteractivePrinter<'a> {
 | 
				
			|||||||
                write!(
 | 
					                write!(
 | 
				
			||||||
                    handle,
 | 
					                    handle,
 | 
				
			||||||
                    "{}",
 | 
					                    "{}",
 | 
				
			||||||
                    as_terminal_escaped(style, text_trimmed, true_color, colored_output, italics,)
 | 
					                    as_terminal_escaped(style, text_trimmed, true_color, colored_output, italics, background)
 | 
				
			||||||
                )?;
 | 
					                )?;
 | 
				
			||||||
                write!(handle, "{}", &text[text_trimmed.len()..])?;
 | 
					                write!(handle, "{}", &text[text_trimmed.len()..])?;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -370,7 +381,8 @@ impl<'a> Printer for InteractivePrinter<'a> {
 | 
				
			|||||||
                                            ),
 | 
					                                            ),
 | 
				
			||||||
                                            self.config.true_color,
 | 
					                                            self.config.true_color,
 | 
				
			||||||
                                            self.config.colored_output,
 | 
					                                            self.config.colored_output,
 | 
				
			||||||
                                            self.config.use_italic_text
 | 
					                                            self.config.use_italic_text,
 | 
				
			||||||
 | 
					                                            background
 | 
				
			||||||
                                        )
 | 
					                                        )
 | 
				
			||||||
                                    )?;
 | 
					                                    )?;
 | 
				
			||||||
                                    break;
 | 
					                                    break;
 | 
				
			||||||
@@ -410,7 +422,8 @@ impl<'a> Printer for InteractivePrinter<'a> {
 | 
				
			|||||||
                                        ),
 | 
					                                        ),
 | 
				
			||||||
                                        self.config.true_color,
 | 
					                                        self.config.true_color,
 | 
				
			||||||
                                        self.config.colored_output,
 | 
					                                        self.config.colored_output,
 | 
				
			||||||
                                        self.config.use_italic_text
 | 
					                                        self.config.use_italic_text,
 | 
				
			||||||
 | 
					                                        background
 | 
				
			||||||
                                    ),
 | 
					                                    ),
 | 
				
			||||||
                                    panel_wrap.clone().unwrap()
 | 
					                                    panel_wrap.clone().unwrap()
 | 
				
			||||||
                                )?;
 | 
					                                )?;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,8 +19,9 @@ pub fn as_terminal_escaped(
 | 
				
			|||||||
    true_color: bool,
 | 
					    true_color: bool,
 | 
				
			||||||
    colored: bool,
 | 
					    colored: bool,
 | 
				
			||||||
    italics: bool,
 | 
					    italics: bool,
 | 
				
			||||||
 | 
					    background_color: Option<highlighting::Color>,
 | 
				
			||||||
) -> String {
 | 
					) -> String {
 | 
				
			||||||
    let style = if !colored {
 | 
					    let mut style = if !colored {
 | 
				
			||||||
        Style::default()
 | 
					        Style::default()
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        let color = to_ansi_color(style.foreground, true_color);
 | 
					        let color = to_ansi_color(style.foreground, true_color);
 | 
				
			||||||
@@ -36,5 +37,6 @@ pub fn as_terminal_escaped(
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    style.background = background_color.map(|c| to_ansi_color(c, true_color));
 | 
				
			||||||
    style.paint(text).to_string()
 | 
					    style.paint(text).to_string()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user