-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
display which theme is the default one in colored output #2838
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, seems like a nice feature. Would be great if you could add a regression in tests/integration_tests.rs too.
@Enselic I added an integration test. |
@Enselic @keith-hall I rebased and fixed the conflicts occurred since the first commits. Do you think about blocking elements preventing the merge of this PR? |
tests/integration_tests.rs
Outdated
.success() | ||
.stdout(predicate::str::contains("DarkNeon").normalize()) | ||
.stdout(predicate::str::contains("Monokai Extended").normalize()) | ||
.stdout(predicate::str::contains("Output the square of a number.").normalize()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm what is this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The test checks two styles and a line in the code example (Output the square of a number.
). I chose this line because it's a comment so there are no decorations inserted by the highlighting.
tests/integration_tests.rs
Outdated
.stdout(predicate::str::contains("DarkNeon").normalize()) | ||
.stdout(predicate::str::contains("Monokai Extended").normalize()) | ||
.stdout(predicate::str::contains("Output the square of a number.").normalize()) | ||
.stdout(predicate::str::contains(" (default)").normalize()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would expect a single contains
that contains "Monokai Extended (default)".
Right now your test will pass even if the wrong theme is marked as default, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Enselic You're right. However, the default theme could be Monokai Extended Light
instead of Monokai Extended
for MacOS with preferences setup to light mode (according to macos_dark_mode_active()).
Several ways to fix it are possible:
- no change: the check is kept weak.
- assert "Monokai Extended (default)". The test will break on some configuration. It could pass currently the CI, and, one day, will break because the MacOS image used has changed preferences setup.
- assert "Monokai Extended (default)" but ignore the test on MacOS with
cfg_attr()
. It's future proof but not tested on MacOS. - assert a regexp like "Monokai Extended.* (default)".
- assert "Monokai Extended (default)" and mock
macos_dark_mode_active()
to be sure the function returnstrue
. - other way I didn't think about?
The regexp solution (4) is my preferred one.
Which solution do you want I implement?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If the default ends up different on macOS, I think it makes sense to #[cfg(...)]
the expected default based on platform.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On MacOS, the default can be Monokai Extended
or Monokai Light Extended
(if some preferences are defined).
Do you mean you prefer solution 3?
Or doing 3 and adding another test only for macOS?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In CI I'm pretty sure the default on macOS is always the same? If that unexpectedly changes, I think it is good if we are notified in the form of a failing test.
So I don't think you need to ignore the test on macOS, I think it should work to cfg the expected default theme within the same test.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The macOS output in CI is different from other operating systems so I used cfg
attribute. Is it good for you or did you expect cfg!
macro?
A bold style is applied to the theme name. The \x1B[0m
characters are the removal of this bold style.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, this looks reasonable! I only had a suggestion on a simplification that I think is worthwhile.
@@ -200,11 +201,18 @@ pub fn list_themes(cfg: &Config, config_dir: &Path, cache_dir: &Path) -> Result< | |||
let mut stdout = stdout.lock(); | |||
|
|||
if config.colored_output { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would be nice to cover the "not colored output" case, but I don't think you need to do that in this PR. The existing PR is clearly an improvement on its own in my view. But feel free to do it in this PR if you want to.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree to implement the same feature for the "not colored output" case but I prefer to do it in another PR after this one is merged into master
.
Co-authored-by: Martin Nordholts <[email protected]>
Co-authored-by: Martin Nordholts <[email protected]>
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [sharkdp/bat](https://github.com/sharkdp/bat) | minor | `v0.24.0` -> `v0.25.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>sharkdp/bat (sharkdp/bat)</summary> ### [`v0.25.0`](https://github.com/sharkdp/bat/blob/HEAD/CHANGELOG.md#v0250) [Compare Source](sharkdp/bat@v0.24.0...v0.25.0) #### Features - Set terminal title to file names when Paging is not Paging::Never [#​2807](sharkdp/bat#2807) ([@​Oliver-Looney](https://github.com/Oliver-Looney)) - `bat --squeeze-blank`/`bat -s` will now squeeze consecutive empty lines, see [#​1441](sharkdp/bat#1441) ([@​eth-p](https://github.com/eth-p)) and [#​2665](sharkdp/bat#2665) ([@​einfachIrgendwer0815](https://github.com/einfachIrgendwer0815)) - `bat --squeeze-limit` to set the maximum number of empty consecutive when using `--squeeze-blank`, see [#​1441](sharkdp/bat#1441) ([@​eth-p](https://github.com/eth-p)) and [#​2665](sharkdp/bat#2665) ([@​einfachIrgendwer0815](https://github.com/einfachIrgendwer0815)) - `PrettyPrinter::squeeze_empty_lines` to support line squeezing for bat as a library, see [#​1441](sharkdp/bat#1441) ([@​eth-p](https://github.com/eth-p)) and [#​2665](sharkdp/bat#2665) ([@​einfachIrgendwer0815](https://github.com/einfachIrgendwer0815)) - Syntax highlighting for JavaScript files that start with `#!/usr/bin/env bun` [#​2913](sharkdp/bat#2913) ([@​sharunkumar](https://github.com/sharunkumar)) - `bat --strip-ansi={never,always,auto}` to remove ANSI escape sequences from bat's input, see [#​2999](sharkdp/bat#2999) ([@​eth-p](https://github.com/eth-p)) - Add or remove individual style components without replacing all styles [#​2929](sharkdp/bat#2929) ([@​eth-p](https://github.com/eth-p)) - Automatically choose theme based on the terminal's color scheme, see [#​2896](sharkdp/bat#2896) ([@​bash](https://github.com/bash)) - Add option `--binary=as-text` for printing binary content, see issue [#​2974](sharkdp/bat#2974) and MR [#​2976](sharkdp/bat#2976) ([@​einfachIrgendwer0815](https://github.com/einfachIrgendwer0815)) - Make shell completions available via `--completion <shell>`, see issue [#​2057](sharkdp/bat#2057) and MR [#​3126](sharkdp/bat#3126) ([@​einfachIrgendwer0815](https://github.com/einfachIrgendwer0815)) - Syntax highlighting for puppet code blocks within Markdown files, see [#​3152](sharkdp/bat#3152) ([@​liliwilson](https://github.com/liliwilson)) #### Bugfixes - Fix long file name wrapping in header, see [#​2835](sharkdp/bat#2835) ([@​FilipRazek](https://github.com/FilipRazek)) - Fix `NO_COLOR` support, see [#​2767](sharkdp/bat#2767) ([@​acuteenvy](https://github.com/acuteenvy)) - Fix handling of inputs with OSC ANSI escape sequences, see [#​2541](sharkdp/bat#2541) and [#​2544](sharkdp/bat#2544) ([@​eth-p](https://github.com/eth-p)) - Fix handling of inputs with combined ANSI color and attribute sequences, see [#​2185](sharkdp/bat#2185) and [#​2856](sharkdp/bat#2856) ([@​eth-p](https://github.com/eth-p)) - Fix panel width when line 10000 wraps, see [#​2854](sharkdp/bat#2854) ([@​eth-p](https://github.com/eth-p)) - Fix compile issue of `time` dependency caused by standard library regression [#​3045](sharkdp/bat#3045) ([@​cyqsimon](https://github.com/cyqsimon)) - Fix override behavior of --plain and --paging, see issue [#​2731](sharkdp/bat#2731) and MR [#​3108](sharkdp/bat#3108) ([@​einfachIrgendwer0815](https://github.com/einfachIrgendwer0815)) - Fix bugs in `$LESSOPEN` support, see [#​2805](sharkdp/bat#2805) ([@​Anomalocaridid](https://github.com/Anomalocaridid)) #### Other - Upgrade to Rust 2021 edition [#​2748](sharkdp/bat#2748) ([@​cyqsimon](https://github.com/cyqsimon)) - Refactor and cleanup build script [#​2756](sharkdp/bat#2756) ([@​cyqsimon](https://github.com/cyqsimon)) - Checks changelog has been written to for MRs in CI [#​2766](sharkdp/bat#2766) ([@​cyqsimon](https://github.com/cyqsimon)) - Use GitHub API to get correct MR submitter [#​2791](sharkdp/bat#2791) ([@​cyqsimon](https://github.com/cyqsimon)) - Minor benchmark script improvements [#​2768](sharkdp/bat#2768) ([@​cyqsimon](https://github.com/cyqsimon)) - Update Arch Linux package URL in README files [#​2779](sharkdp/bat#2779) ([@​brunobell](https://github.com/brunobell)) - Update and improve `zsh` completion, see [#​2772](sharkdp/bat#2772) ([@​okapia](https://github.com/okapia)) - More extensible syntax mapping mechanism [#​2755](sharkdp/bat#2755) ([@​cyqsimon](https://github.com/cyqsimon)) - Use proper Architecture for Debian packages built for musl, see [#​2811](sharkdp/bat#2811) ([@​Enselic](https://github.com/Enselic)) - Pull in fix for unsafe-libyaml security advisory, see [#​2812](sharkdp/bat#2812) ([@​dtolnay](https://github.com/dtolnay)) - Update git-version dependency to use Syn v2, see [#​2816](sharkdp/bat#2816) ([@​dtolnay](https://github.com/dtolnay)) - Update git2 dependency to v0.18.2, see [#​2852](sharkdp/bat#2852) ([@​eth-p](https://github.com/eth-p)) - Improve performance when color output disabled, see [#​2397](sharkdp/bat#2397) and [#​2857](sharkdp/bat#2857) ([@​eth-p](https://github.com/eth-p)) - Relax syntax mapping rule restrictions to allow brace expansion [#​2865](sharkdp/bat#2865) ([@​cyqsimon](https://github.com/cyqsimon)) - Apply clippy fixes [#​2864](sharkdp/bat#2864) ([@​cyqsimon](https://github.com/cyqsimon)) - Faster startup by offloading glob matcher building to a worker thread [#​2868](sharkdp/bat#2868) ([@​cyqsimon](https://github.com/cyqsimon)) - Display which theme is the default one in basic output (no colors), see [#​2937](sharkdp/bat#2937) ([@​sblondon](https://github.com/sblondon)) - Display which theme is the default one in colored output, see [#​2838](sharkdp/bat#2838) ([@​sblondon](https://github.com/sblondon)) - Add aarch64-apple-darwin ("Apple Silicon") binary tarballs to releases, see [#​2967](sharkdp/bat#2967) ([@​someposer](https://github.com/someposer)) - Update the Lisp syntax, see [#​2970](sharkdp/bat#2970) ([@​ccqpein](https://github.com/ccqpein)) - Use bat's ANSI iterator during tab expansion, see [#​2998](sharkdp/bat#2998) ([@​eth-p](https://github.com/eth-p)) - Support 'statically linked binary' for aarch64 in 'Release' page, see [#​2992](sharkdp/bat#2992) ([@​tzq0301](https://github.com/tzq0301)) - Update options in shell completions and the man page of `bat`, see [#​2995](sharkdp/bat#2995) ([@​akinomyoga](https://github.com/akinomyoga)) - Update nix dev-dependency to v0.29.0, see [#​3112](sharkdp/bat#3112) ([@​decathorpe](https://github.com/decathorpe)) - Bump MSRV to [1.74](https://blog.rust-lang.org/2023/11/16/Rust-1.74.0.html), see [#​3154](sharkdp/bat#3154) ([@​keith-hall](https://github.com/keith-hall)) - Update clircle dependency to remove winapi transitive dependency, see [#​3113](sharkdp/bat#3113) ([@​niklasmohrin](https://github.com/niklasmohrin)) #### Syntaxes - `cmd-help`: scope subcommands followed by other terms, and other misc improvements, see [#​2819](sharkdp/bat#2819) ([@​victor-gp](https://github.com/victor-gp)) - Upgrade JQ syntax, see [#​2820](sharkdp/bat#2820) ([@​dependabot](https://github.com/dependabot)\[bot]) - Add syntax mapping for quadman quadlets [#​2866](sharkdp/bat#2866) ([@​cyqsimon](https://github.com/cyqsimon)) - Map containers .conf files to TOML syntax [#​2867](sharkdp/bat#2867) ([@​cyqsimon](https://github.com/cyqsimon)) - Associate `.xsh` files with `xonsh` syntax that is Python, see [#​2840](sharkdp/bat#2840) ([@​anki-code](https://github.com/anki-code)) - Associate JSON with Comments `.jsonc` with `json` syntax, see [#​2795](sharkdp/bat#2795) ([@​mxaddict](https://github.com/mxaddict)) - Associate JSON-LD `.jsonld` files with `json` syntax, see [#​3037](sharkdp/bat#3037) ([@​vorburger](https://github.com/vorburger)) - Associate `.textproto` files with `ProtoBuf` syntax, see [#​3038](sharkdp/bat#3038) ([@​vorburger](https://github.com/vorburger)) - Associate GeoJSON `.geojson` files with `json` syntax, see [#​3084](sharkdp/bat#3084) ([@​mvaaltola](https://github.com/mvaaltola)) - Associate `.aws/{config,credentials}`, see [#​2795](sharkdp/bat#2795) ([@​mxaddict](https://github.com/mxaddict)) - Associate Wireguard config `/etc/wireguard/*.conf`, see [#​2874](sharkdp/bat#2874) ([@​cyqsimon](https://github.com/cyqsimon)) - Add support for [CFML](https://www.adobe.com/products/coldfusion-family.html), see [#​3031](sharkdp/bat#3031) ([@​brenton-at-pieces](https://github.com/brenton-at-pieces)) - Map `*.mkd` files to `Markdown` syntax, see issue [#​3060](sharkdp/bat#3060) and MR [#​3061](sharkdp/bat#3061) ([@​einfachIrgendwer0815](https://github.com/einfachIrgendwer0815)) - Add syntax mapping for CITATION.cff, see [#​3103](sharkdp/bat#3103) ([@​Ugzuzg](https://github.com/Ugzuzg)) - Add syntax mapping for kubernetes config files [#​3049](sharkdp/bat#3049) ([@​cyqsimon](https://github.com/cyqsimon)) - Adds support for pipe delimiter for CSV [#​3115](sharkdp/bat#3115) ([@​pratik-m](https://github.com/pratik-m)) - Add syntax mapping for `/etc/pacman.conf` [#​2961](sharkdp/bat#2961) ([@​cyqsimon](https://github.com/cyqsimon)) - Associate `uv.lock` with `TOML` syntax, see [#​3132](sharkdp/bat#3132) ([@​fepegar](https://github.com/fepegar)) #### Themes - Patched/improved themes for better Manpage syntax highlighting support, see [#​2994](sharkdp/bat#2994) ([@​keith-hall](https://github.com/keith-hall)). #### `bat` as a library - Changes to `syntax_mapping::SyntaxMapping` [#​2755](sharkdp/bat#2755) ([@​cyqsimon](https://github.com/cyqsimon)) - `SyntaxMapping::get_syntax_for` is now correctly public - \[BREAKING] `SyntaxMapping::{empty,builtin}` are removed; use `SyntaxMapping::new` instead - \[BREAKING] `SyntaxMapping::mappings` is replaced by `SyntaxMapping::{builtin,custom,all}_mappings` - Make `Controller::run_with_error_handler`'s error handler `FnMut`, see [#​2831](sharkdp/bat#2831) ([@​rhysd](https://github.com/rhysd)) - Improve compile time by 20%, see [#​2815](sharkdp/bat#2815) ([@​dtolnay](https://github.com/dtolnay)) - Add `theme::theme` for choosing an appropriate theme based on the terminal's color scheme, see [#​2896](sharkdp/bat#2896) ([@​bash](https://github.com/bash)) - \[BREAKING] Remove `HighlightingAssets::default_theme`. Use `theme::default_theme` instead. - Add `PrettyPrinter::print_with_writer` for custom output destinations, see [#​3070](sharkdp/bat#3070) ([@​kojix2](https://github.com/kojix2)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS45MS40IiwidXBkYXRlZEluVmVyIjoiMzkuOTEuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
The user knows which theme is used by default with
--list-themes
parameter.This is a partial screenshot of the output:
Only the
config.colored_output
displays the(default)
string. I didn't add it in the other case because it's really minimal but I will add it if you want.