diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fc4d2556c..120ef9372e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Improve README documentation on pager options passed to less, see #3443 (@injust) - Use more robust approach to escaping in Bash completions, see #3448 (@akinomyoga) +- `--theme` now provides a short list of all themes if the given theme does not exist, see #3456 (@monkeydom) ## Syntaxes diff --git a/src/assets.rs b/src/assets.rs index 82c160c9f1..7dbb8bc212 100644 --- a/src/assets.rs +++ b/src/assets.rs @@ -195,7 +195,11 @@ impl HighlightingAssets { return self.get_theme("ansi"); } if !theme.is_empty() { - bat_warning!("Unknown theme '{theme}', using default.") + let all_themes: Vec<&str> = self.get_theme_set().themes().collect(); + bat_warning!( + "Unknown theme '{theme}', using default. (Available themes: {})", + all_themes.join(", ") + ); } self.get_theme_set() .get( diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 20aaad94fb..45d1e8da2c 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -2762,6 +2762,22 @@ fn theme_env_overrides_config() { .stderr(""); } +#[test] +fn theme_list_is_provided() { + bat() + .env("BAT_THEME_DARK", "Coldark-Dark") + .env("COLORTERM", "truecolor") + .arg("--theme") + .arg("some nonexistent theme") + .arg("--color=always") + .arg("--style=plain") + .write_stdin(" ") + .assert() + .success() + .stdout("\x1b[38;2;248;248;242m \x1b[0m") + .stderr(predicate::str::starts_with("\x1b[33m[bat warning]\x1b[0m: Unknown theme \'some nonexistent theme\', using default. (Available themes: ")); +} + #[test] fn highlighting_is_skipped_on_long_lines() { let expected = "\u{1b}[38;5;231m{\u{1b}[0m\u{1b}[38;5;208m\"\u{1b}[0m\u{1b}[38;5;208mapi\u{1b}[0m\u{1b}[38;5;208m\"\u{1b}[0m\u{1b}[38;5;231m:\u{1b}[0m\n".to_owned() +