1
0
mirror of https://github.com/Llewellynvdm/starship.git synced 2024-12-01 09:13:54 +00:00

feat(config): Add support for inverted token in style strings (#2589)

* Add support for `reverse` keyword in style strings

* Duplicate test case and keep original

* Rename keyword to `inverted`

* Add explanatory sentence in readme
This commit is contained in:
Florent 2021-04-22 18:09:21 +02:00 committed by GitHub
parent aaf1f246d7
commit 2deaa572af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 7 deletions

View File

@ -92,12 +92,13 @@ Style strings are a list of words, separated by whitespace. The words are not ca
- `bold` - `bold`
- `underline` - `underline`
- `dimmed` - `dimmed`
- `inverted`
- `bg:<color>` - `bg:<color>`
- `fg:<color>` - `fg:<color>`
- `<color>` - `<color>`
- `none` - `none`
where `<color>` is a color specifier (discussed below). `fg:<color>` and `<color>` currently do the same thing , though this may change in the future. The order of words in the string does not matter. where `<color>` is a color specifier (discussed below). `fg:<color>` and `<color>` currently do the same thing, though this may change in the future. `inverted` swaps the background and foreground colors. The order of words in the string does not matter.
The `none` token overrides all other tokens in a string if it is not part of a `bg:` specifier, so that e.g. `fg:red none fg:blue` will still create a string with no styling. `bg:none` sets the background to the default color so `fg:red bg:none` is equivalent to `red` or `fg:red` and `bg:green fg:red bg:none` is also equivalent to `fg:red` or `red`. It may become an error to use `none` in conjunction with other tokens in the future. The `none` token overrides all other tokens in a string if it is not part of a `bg:` specifier, so that e.g. `fg:red none fg:blue` will still create a string with no styling. `bg:none` sets the background to the default color so `fg:red bg:none` is equivalent to `red` or `fg:red` and `bg:green fg:red bg:none` is also equivalent to `fg:red` or `red`. It may become an error to use `none` in conjunction with other tokens in the future.

View File

@ -359,6 +359,7 @@ impl StarshipConfig {
- 'underline' - 'underline'
- 'bold' - 'bold'
- 'italic' - 'italic'
- 'inverted'
- '<color>' (see the parse_color_string doc for valid color strings) - '<color>' (see the parse_color_string doc for valid color strings)
*/ */
pub fn parse_style_string(style_string: &str) -> Option<ansi_term::Style> { pub fn parse_style_string(style_string: &str) -> Option<ansi_term::Style> {
@ -383,6 +384,7 @@ pub fn parse_style_string(style_string: &str) -> Option<ansi_term::Style> {
"bold" => Some(style.bold()), "bold" => Some(style.bold()),
"italic" => Some(style.italic()), "italic" => Some(style.italic()),
"dimmed" => Some(style.dimmed()), "dimmed" => Some(style.dimmed()),
"inverted" => Some(style.reverse()),
// When the string is supposed to be a color: // When the string is supposed to be a color:
// Decide if we yield none, reset background or set color. // Decide if we yield none, reset background or set color.
color_string => { color_string => {
@ -675,7 +677,7 @@ mod tests {
} }
#[test] #[test]
fn table_get_styles_bold_italic_underline_green_dimmy_silly_caps() { fn table_get_styles_bold_italic_underline_green_dimmed_silly_caps() {
let config = Value::from("bOlD ItAlIc uNdErLiNe GrEeN diMMeD"); let config = Value::from("bOlD ItAlIc uNdErLiNe GrEeN diMMeD");
let mystyle = <Style>::from_config(&config).unwrap(); let mystyle = <Style>::from_config(&config).unwrap();
assert!(mystyle.is_bold); assert!(mystyle.is_bold);
@ -693,6 +695,27 @@ mod tests {
); );
} }
#[test]
fn table_get_styles_bold_italic_underline_green_dimmed_inverted_silly_caps() {
let config = Value::from("bOlD ItAlIc uNdErLiNe GrEeN diMMeD InVeRTed");
let mystyle = <Style>::from_config(&config).unwrap();
assert!(mystyle.is_bold);
assert!(mystyle.is_italic);
assert!(mystyle.is_underline);
assert!(mystyle.is_dimmed);
assert!(mystyle.is_reverse);
assert_eq!(
mystyle,
ansi_term::Style::new()
.bold()
.italic()
.underline()
.dimmed()
.reverse()
.fg(Color::Green)
);
}
#[test] #[test]
fn table_get_styles_plain_and_broken_styles() { fn table_get_styles_plain_and_broken_styles() {
// Test a "plain" style with no formatting // Test a "plain" style with no formatting