mirror of
https://github.com/Llewellynvdm/starship.git
synced 2024-11-11 15:51:01 +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:
parent
aaf1f246d7
commit
2deaa572af
@ -28,7 +28,7 @@ function blastoff(){
|
|||||||
starship_precmd_user_func="blastoff"
|
starship_precmd_user_func="blastoff"
|
||||||
```
|
```
|
||||||
|
|
||||||
- To run a custom function right before a command runs, you can use the
|
- To run a custom function right before a command runs, you can use the
|
||||||
[`DEBUG` trap mechanism](https://jichu4n.com/posts/debug-trap-and-prompt_command-in-bash/).
|
[`DEBUG` trap mechanism](https://jichu4n.com/posts/debug-trap-and-prompt_command-in-bash/).
|
||||||
However, you **must** trap the DEBUG signal *before* initializing Starship!
|
However, you **must** trap the DEBUG signal *before* initializing Starship!
|
||||||
Starship can preserve the value of the DEBUG trap, but if the trap is overwritten
|
Starship can preserve the value of the DEBUG trap, but if the trap is overwritten
|
||||||
@ -44,7 +44,7 @@ eval $(starship init bash)
|
|||||||
|
|
||||||
## Change Window Title
|
## Change Window Title
|
||||||
|
|
||||||
Some shell prompts will automatically change the window title for you (e.g. to
|
Some shell prompts will automatically change the window title for you (e.g. to
|
||||||
reflect your working directory). Fish even does it by default.
|
reflect your working directory). Fish even does it by default.
|
||||||
Starship does not do this, but it's fairly straightforward to add this
|
Starship does not do this, but it's fairly straightforward to add this
|
||||||
functionality to `bash` or `zsh`.
|
functionality to `bash` or `zsh`.
|
||||||
@ -72,7 +72,7 @@ In `zsh`, add this to the `precmd_functions` array:
|
|||||||
precmd_functions+=(set_win_title)
|
precmd_functions+=(set_win_title)
|
||||||
```
|
```
|
||||||
|
|
||||||
If you like the result, add these lines to your shell configuration file
|
If you like the result, add these lines to your shell configuration file
|
||||||
(`~/.bashrc` or `~/.zshrc`) to make it permanent.
|
(`~/.bashrc` or `~/.zshrc`) to make it permanent.
|
||||||
|
|
||||||
For example, if you want to display your current directory in your terminal tab title,
|
For example, if you want to display your current directory in your terminal tab title,
|
||||||
@ -92,14 +92,15 @@ 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.
|
||||||
|
|
||||||
A color specifier can be one of the following:
|
A color specifier can be one of the following:
|
||||||
|
|
||||||
|
@ -359,7 +359,8 @@ impl StarshipConfig {
|
|||||||
- 'underline'
|
- 'underline'
|
||||||
- 'bold'
|
- 'bold'
|
||||||
- 'italic'
|
- 'italic'
|
||||||
- '<color>' (see the parse_color_string doc for valid color strings)
|
- 'inverted'
|
||||||
|
- '<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> {
|
||||||
style_string
|
style_string
|
||||||
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user