diff --git a/src/bin/bat/app.rs b/src/bin/bat/app.rs index 9a5621ec..6a51171a 100644 --- a/src/bin/bat/app.rs +++ b/src/bin/bat/app.rs @@ -393,7 +393,16 @@ impl App { .matches .get_one::("theme-light") .map(|t| ThemeRequest::from_str(t).unwrap()); - let detect_color_scheme = match self + ThemeOptions { + theme, + theme_dark, + theme_light, + detect_color_scheme: self.detect_color_scheme(), + } + } + + pub(crate) fn detect_color_scheme(&self) -> DetectColorScheme { + match self .matches .get_one::("detect-color-scheme") .map(|s| s.as_str()) @@ -402,12 +411,6 @@ impl App { Some("never") => DetectColorScheme::Never, Some("always") => DetectColorScheme::Always, _ => unreachable!("other values for --detect-color-scheme are not allowed"), - }; - ThemeOptions { - theme, - theme_dark, - theme_light, - detect_color_scheme, } } } diff --git a/src/bin/bat/main.rs b/src/bin/bat/main.rs index c8e03d7c..791bea8a 100644 --- a/src/bin/bat/main.rs +++ b/src/bin/bat/main.rs @@ -14,6 +14,7 @@ use std::io::{BufReader, Write}; use std::path::Path; use std::process; +use bat::theme::DetectColorScheme; use nu_ansi_term::Color::Green; use nu_ansi_term::Style; @@ -188,7 +189,12 @@ fn theme_preview_file<'a>() -> Input<'a> { Input::from_reader(Box::new(BufReader::new(THEME_PREVIEW_DATA))) } -pub fn list_themes(cfg: &Config, config_dir: &Path, cache_dir: &Path) -> Result<()> { +pub fn list_themes( + cfg: &Config, + config_dir: &Path, + cache_dir: &Path, + detect_color_scheme: DetectColorScheme, +) -> Result<()> { let assets = assets_from_cache_or_binary(cfg.use_custom_assets, cache_dir)?; let mut config = cfg.clone(); let mut style = HashSet::new(); @@ -200,8 +206,8 @@ pub fn list_themes(cfg: &Config, config_dir: &Path, cache_dir: &Path) -> Result< let mut stdout = stdout.lock(); if config.colored_output { - use theme::{color_scheme, default_theme, ColorScheme, DetectColorScheme}; - let default_theme = default_theme(color_scheme(DetectColorScheme::Auto)); + use theme::{color_scheme, default_theme, ColorScheme}; + let default_theme = default_theme(color_scheme(detect_color_scheme)); for theme in assets.themes() { let default_theme_info = if default_theme == theme { " (default)" @@ -374,7 +380,7 @@ fn run() -> Result { }; run_controller(inputs, &plain_config, cache_dir) } else if app.matches.get_flag("list-themes") { - list_themes(&config, config_dir, cache_dir)?; + list_themes(&config, config_dir, cache_dir, app.detect_color_scheme())?; Ok(true) } else if app.matches.get_flag("config-file") { println!("{}", config_file().to_string_lossy()); diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 34932994..d842321e 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -274,19 +274,18 @@ fn squeeze_limit_line_numbers() { #[test] fn list_themes() { - #[cfg(target_os = "macos")] - let default_theme_chunk = "Monokai Extended Light\x1B[0m (default)"; - - #[cfg(not(target_os = "macos"))] let default_theme_chunk = "Monokai Extended\x1B[0m (default)"; + let default_light_theme_chunk = "Monokai Extended Light\x1B[0m (default light)"; bat() .arg("--color=always") + .arg("--detect-color-scheme=never") .arg("--list-themes") .assert() .success() .stdout(predicate::str::contains("DarkNeon").normalize()) .stdout(predicate::str::contains(default_theme_chunk).normalize()) + .stdout(predicate::str::contains(default_light_theme_chunk).normalize()) .stdout(predicate::str::contains("Output the square of a number.").normalize()); }