summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTau Gärtli <git@tau.garden>2024-08-23 17:02:15 +0200
committerThomas Otto <th1000s@posteo.net>2024-09-08 23:57:24 +0200
commitcba999a99fb03ce5d82d8c7e0a3d8c9808f88d78 (patch)
treed03347d65038895620fd8d2c0e01af2189d88f8d
parente1f3e618b7fc208117ac259b2a6e77ae39fe81a8 (diff)
Allow --dark to override a light syntax theme
-rw-r--r--src/options/theme.rs35
1 files changed, 18 insertions, 17 deletions
diff --git a/src/options/theme.rs b/src/options/theme.rs
index 642243e..6ce9604 100644
--- a/src/options/theme.rs
+++ b/src/options/theme.rs
@@ -86,21 +86,23 @@ fn is_no_syntax_highlighting_syntax_theme_name(theme_name: &str) -> bool {
fn get_is_light_mode_and_syntax_theme_name(
theme_arg: Option<&String>,
bat_theme_env_var: Option<&String>,
- light_mode: bool,
+ light_mode: Option<bool>,
) -> (bool, String) {
let theme_arg = theme_arg.or(bat_theme_env_var);
match (theme_arg, light_mode) {
- (None, false) => (false, DEFAULT_DARK_SYNTAX_THEME.to_string()),
- (Some(theme_name), false) => (is_light_syntax_theme(theme_name), theme_name.to_string()),
- (None, true) => (true, DEFAULT_LIGHT_SYNTAX_THEME.to_string()),
- (Some(theme_name), is_light_mode) => (is_light_mode, theme_name.to_string()),
+ (Some(theme_name), None) => (is_light_syntax_theme(theme_name), theme_name.to_string()),
+ (Some(theme_name), Some(is_light_mode)) => (is_light_mode, theme_name.to_string()),
+ (None, None | Some(false)) => (false, DEFAULT_DARK_SYNTAX_THEME.to_string()),
+ (None, Some(true)) => (true, DEFAULT_LIGHT_SYNTAX_THEME.to_string()),
}
}
-fn get_is_light(opt: &cli::Opt) -> bool {
- get_is_light_opt(opt)
- .or_else(|| should_detect_dark_light(opt).then(detect_light_mode))
- .unwrap_or_default()
+fn get_is_light(opt: &cli::Opt) -> Option<bool> {
+ get_is_light_opt(opt).or_else(|| {
+ should_detect_dark_light(opt)
+ .then(detect_light_mode)
+ .flatten()
+ })
}
fn get_is_light_opt(opt: &cli::Opt) -> Option<bool> {
@@ -123,20 +125,19 @@ fn should_detect_dark_light(opt: &cli::Opt) -> bool {
}
#[cfg(not(test))]
-fn detect_light_mode() -> bool {
+fn detect_light_mode() -> Option<bool> {
use terminal_colorsaurus::{color_scheme, ColorScheme, QueryOptions};
- color_scheme(QueryOptions::default()).unwrap_or_default() == ColorScheme::Light
+ color_scheme(QueryOptions::default())
+ .ok()
+ .map(|color_scheme| color_scheme == ColorScheme::Light)
}
#[cfg(test)]
-fn detect_light_mode() -> bool {
- LIGHT_MODE_IN_TESTS
+fn detect_light_mode() -> Option<bool> {
+ None
}
#[cfg(test)]
-pub(crate) const LIGHT_MODE_IN_TESTS: bool = false;
-
-#[cfg(test)]
mod tests {
use super::*;
use crate::color;
@@ -163,7 +164,7 @@ mod tests {
(None, Some(Dark), DEFAULT_DARK_SYNTAX_THEME, Dark),
(None, Some(Light), DEFAULT_LIGHT_SYNTAX_THEME, Light),
(Some("GitHub"), Some(Light), "GitHub", Light),
- (Some("GitHub"), Some(Dark), "GitHub", Light), // TODO: This should be Dark.
+ (Some("GitHub"), Some(Dark), "GitHub", Dark),
(Some("Nord"), Some(Light), "Nord", Light),
(Some("Nord"), Some(Dark), "Nord", Dark),
(Some("none"), None, "none", Dark),