mirror of
https://github.com/sharkdp/bat.git
synced 2024-12-21 22:10:45 +01:00
Extract grid and line-number color from theme
This changes the output color of the grid and the line numbers to use the "gutter" foreground color defined in the Sublime `.tmTheme` files. Sublime Text does the same. Note: we could go one step further and also extract the "GitGutter" colors from the themes. These could be used instead of red/green/yellow to signify Git modifications. The problem is that they are quite a bit harder to extract from the syntect `Theme` object. closes #178
This commit is contained in:
parent
297afad337
commit
2508323264
@ -61,7 +61,7 @@ pub fn print_files(assets: &HighlightingAssets, config: &Config) -> Result<bool>
|
|||||||
|
|
||||||
let mut output_type = OutputType::from_mode(config.paging_mode);
|
let mut output_type = OutputType::from_mode(config.paging_mode);
|
||||||
let handle = output_type.handle()?;
|
let handle = output_type.handle()?;
|
||||||
let mut printer = Printer::new(handle, &config);
|
let mut printer = Printer::new(handle, &config, &theme);
|
||||||
let mut no_errors: bool = true;
|
let mut no_errors: bool = true;
|
||||||
|
|
||||||
for file in &config.files {
|
for file in &config.files {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use ansi_term::Colour::{Fixed, Green, Red, White, Yellow};
|
use ansi_term::Colour::{Fixed, Green, Red, Yellow};
|
||||||
use ansi_term::Style;
|
use ansi_term::Style;
|
||||||
use app::Config;
|
use app::Config;
|
||||||
use console::AnsiCodeIterator;
|
use console::AnsiCodeIterator;
|
||||||
@ -9,8 +9,8 @@ use std::boxed::Box;
|
|||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::vec::Vec;
|
use std::vec::Vec;
|
||||||
use style::OutputWrap;
|
use style::OutputWrap;
|
||||||
use syntect::highlighting;
|
use syntect::highlighting::{self, Theme};
|
||||||
use terminal::as_terminal_escaped;
|
use terminal::{as_terminal_escaped, to_ansi_color};
|
||||||
|
|
||||||
pub struct Printer<'a> {
|
pub struct Printer<'a> {
|
||||||
handle: &'a mut Write,
|
handle: &'a mut Write,
|
||||||
@ -24,9 +24,9 @@ pub struct Printer<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Printer<'a> {
|
impl<'a> Printer<'a> {
|
||||||
pub fn new(handle: &'a mut Write, config: &'a Config) -> Self {
|
pub fn new(handle: &'a mut Write, config: &'a Config, theme: &Theme) -> Self {
|
||||||
let colors = if config.colored_output {
|
let colors = if config.colored_output {
|
||||||
Colors::colored()
|
Colors::colored(theme, config.true_color)
|
||||||
} else {
|
} else {
|
||||||
Colors::plain()
|
Colors::plain()
|
||||||
};
|
};
|
||||||
@ -274,8 +274,7 @@ impl<'a> Printer<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const GRID_COLOR: u8 = 238;
|
const DEFAULT_GUTTER_COLOR: u8 = 238;
|
||||||
const LINE_NUMBER_COLOR: u8 = 244;
|
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct Colors {
|
pub struct Colors {
|
||||||
@ -292,14 +291,20 @@ impl Colors {
|
|||||||
Colors::default()
|
Colors::default()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn colored() -> Self {
|
fn colored(theme: &Theme, true_color: bool) -> Self {
|
||||||
|
let gutter_color = theme
|
||||||
|
.settings
|
||||||
|
.gutter_foreground
|
||||||
|
.map(|c| to_ansi_color(c, true_color))
|
||||||
|
.unwrap_or(Fixed(DEFAULT_GUTTER_COLOR));
|
||||||
|
|
||||||
Colors {
|
Colors {
|
||||||
grid: Fixed(GRID_COLOR).normal(),
|
grid: gutter_color.normal(),
|
||||||
filename: White.bold(),
|
filename: Style::new().bold(),
|
||||||
git_added: Green.normal(),
|
git_added: Green.normal(),
|
||||||
git_removed: Red.normal(),
|
git_removed: Red.normal(),
|
||||||
git_modified: Yellow.normal(),
|
git_modified: Yellow.normal(),
|
||||||
line_number: Fixed(LINE_NUMBER_COLOR).normal(),
|
line_number: gutter_color.normal(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use ansi_term::Colour::{Fixed, RGB};
|
use ansi_term::Colour::{Fixed, RGB};
|
||||||
use ansi_term::Style;
|
use ansi_term::{self, Style};
|
||||||
use syntect::highlighting::{self, FontStyle};
|
use syntect::highlighting::{self, FontStyle};
|
||||||
|
|
||||||
/// Approximate a 24 bit color value by a 8 bit ANSI code
|
/// Approximate a 24 bit color value by a 8 bit ANSI code
|
||||||
@ -20,6 +20,15 @@ fn rgb2ansi(r: u8, g: u8, b: u8) -> u8 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> ansi_term::Colour {
|
||||||
|
if true_color {
|
||||||
|
RGB(color.r, color.g, color.b)
|
||||||
|
} else {
|
||||||
|
let ansi_code = rgb2ansi(color.r, color.g, color.b);
|
||||||
|
Fixed(ansi_code)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn as_terminal_escaped(
|
pub fn as_terminal_escaped(
|
||||||
style: highlighting::Style,
|
style: highlighting::Style,
|
||||||
text: &str,
|
text: &str,
|
||||||
@ -29,12 +38,7 @@ pub fn as_terminal_escaped(
|
|||||||
let style = if !colored {
|
let style = if !colored {
|
||||||
Style::default()
|
Style::default()
|
||||||
} else {
|
} else {
|
||||||
let color = if true_color {
|
let color = to_ansi_color(style.foreground, true_color);
|
||||||
RGB(style.foreground.r, style.foreground.g, style.foreground.b)
|
|
||||||
} else {
|
|
||||||
let ansi = rgb2ansi(style.foreground.r, style.foreground.g, style.foreground.b);
|
|
||||||
Fixed(ansi)
|
|
||||||
};
|
|
||||||
|
|
||||||
if style.font_style.contains(FontStyle::BOLD) {
|
if style.font_style.contains(FontStyle::BOLD) {
|
||||||
color.bold()
|
color.bold()
|
||||||
|
Loading…
Reference in New Issue
Block a user