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

feat(shell): Add style config for shell module (#3108)

* add style config for shell module

* update shell docs

* fix formatting

* update tests
This commit is contained in:
Aman Kumar Sinha 2021-10-04 23:16:33 +05:30 committed by GitHub
parent e74f428615
commit f8e81a1622
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 64 additions and 22 deletions

View File

@ -2707,25 +2707,29 @@ To enable it, set `disabled` to `false` in your configuration file.
### Options ### Options
| Option | Default | Description | | Option | Default | Description |
| ---------------------- | --------------- | ------------------------------------------------------------ | | ---------------------- | ------------------------- | ------------------------------------------------------------ |
| `bash_indicator` | `"bsh"` | A format string used to represent bash. | | `bash_indicator` | `bsh` | A format string used to represent bash. |
| `fish_indicator` | `"fsh"` | A format string used to represent fish. | | `fish_indicator` | `fsh` | A format string used to represent fish. |
| `zsh_indicator` | `"zsh"` | A format string used to represent zsh. | | `zsh_indicator` | `zsh` | A format string used to represent zsh. |
| `powershell_indicator` | `"psh"` | A format string used to represent powershell. | | `powershell_indicator` | `psh` | A format string used to represent powershell. |
| `ion_indicator` | `"ion"` | A format string used to represent ion. | | `ion_indicator` | `ion` | A format string used to represent ion. |
| `elvish_indicator` | `"esh"` | A format string used to represent elvish. | | `elvish_indicator` | `esh` | A format string used to represent elvish. |
| `tcsh_indicator` | `"tsh"` | A format string used to represent tcsh. | | `tcsh_indicator` | `tsh` | A format string used to represent tcsh. |
| `xonsh_indicator` | `"xsh"` | A format string used to represent xonsh. | | `xonsh_indicator` | `xsh` | A format string used to represent xonsh. |
| `unknown_indicator` | `""` | The default value to be displayed when the shell is unknown. | | `unknown_indicator` | | The default value to be displayed when the shell is unknown. |
| `format` | `"$indicator "` | The format for the module. | | `format` | `"[$indicator]($style) "` | The format for the module. |
| `disabled` | `true` | Disables the `shell` module. | | `style` | `"white bold"` | The style for the module. |
| `disabled` | `true` | Disables the `shell` module. |
### Variables ### Variables
| Variable | Default | Description | | Variable | Default | Description |
| ----------- | ------- | ---------------------------------------------------------- | | ----------- | ------- | ---------------------------------------------------------- |
| indicator | | Mirrors the value of `indicator` for currently used shell. | | indicator | | Mirrors the value of `indicator` for currently used shell. |
| style\* | | Mirrors the value of option `style`. |
\*: This variable can only be used as a part of a style string
### Examples ### Examples
@ -2736,6 +2740,7 @@ To enable it, set `disabled` to `false` in your configuration file.
fish_indicator = "" fish_indicator = ""
powershell_indicator = "_" powershell_indicator = "_"
unknown_indicator = "mystery shell" unknown_indicator = "mystery shell"
style = "cyan bold"
disabled = false disabled = false
``` ```

View File

@ -16,13 +16,14 @@ pub struct ShellConfig<'a> {
pub nu_indicator: &'a str, pub nu_indicator: &'a str,
pub xonsh_indicator: &'a str, pub xonsh_indicator: &'a str,
pub unknown_indicator: &'a str, pub unknown_indicator: &'a str,
pub style: &'a str,
pub disabled: bool, pub disabled: bool,
} }
impl<'a> Default for ShellConfig<'a> { impl<'a> Default for ShellConfig<'a> {
fn default() -> Self { fn default() -> Self {
ShellConfig { ShellConfig {
format: "$indicator ", format: "[$indicator]($style) ",
bash_indicator: "bsh", bash_indicator: "bsh",
fish_indicator: "fsh", fish_indicator: "fsh",
zsh_indicator: "zsh", zsh_indicator: "zsh",
@ -33,6 +34,7 @@ impl<'a> Default for ShellConfig<'a> {
nu_indicator: "nu", nu_indicator: "nu",
xonsh_indicator: "xsh", xonsh_indicator: "xsh",
unknown_indicator: "", unknown_indicator: "",
style: "white bold",
disabled: true, disabled: true,
} }
} }

View File

@ -30,6 +30,10 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
}, },
_ => None, _ => None,
}) })
.map_style(|variable| match variable {
"style" => Some(Ok(config.style)),
_ => None,
})
.map(|var| match var { .map(|var| match var {
"bash_indicator" => Some(Ok(config.bash_indicator)), "bash_indicator" => Some(Ok(config.bash_indicator)),
"fish_indicator" => Some(Ok(config.fish_indicator)), "fish_indicator" => Some(Ok(config.fish_indicator)),
@ -80,7 +84,7 @@ mod tests {
#[test] #[test]
fn test_bash_default_format() { fn test_bash_default_format() {
let expected = Some(format!("{} ", "bsh")); let expected = Some(format!("{} ", Color::White.bold().paint("bsh")));
let actual = ModuleRenderer::new("shell") let actual = ModuleRenderer::new("shell")
.shell(Shell::Bash) .shell(Shell::Bash)
.config(toml::toml! { .config(toml::toml! {
@ -109,7 +113,7 @@ mod tests {
#[test] #[test]
fn test_fish_default_format() { fn test_fish_default_format() {
let expected = Some(format!("{} ", "fsh")); let expected = Some(format!("{} ", Color::White.bold().paint("fsh")));
let actual = ModuleRenderer::new("shell") let actual = ModuleRenderer::new("shell")
.shell(Shell::Fish) .shell(Shell::Fish)
.config(toml::toml! { .config(toml::toml! {
@ -138,7 +142,7 @@ mod tests {
#[test] #[test]
fn test_zsh_default_format() { fn test_zsh_default_format() {
let expected = Some(format!("{} ", "zsh")); let expected = Some(format!("{} ", Color::White.bold().paint("zsh")));
let actual = ModuleRenderer::new("shell") let actual = ModuleRenderer::new("shell")
.shell(Shell::Zsh) .shell(Shell::Zsh)
.config(toml::toml! { .config(toml::toml! {
@ -167,7 +171,7 @@ mod tests {
#[test] #[test]
fn test_powershell_default_format() { fn test_powershell_default_format() {
let expected = Some(format!("{} ", "psh")); let expected = Some(format!("{} ", Color::White.bold().paint("psh")));
let actual = ModuleRenderer::new("shell") let actual = ModuleRenderer::new("shell")
.shell(Shell::PowerShell) .shell(Shell::PowerShell)
.config(toml::toml! { .config(toml::toml! {
@ -196,7 +200,7 @@ mod tests {
#[test] #[test]
fn test_ion_default_format() { fn test_ion_default_format() {
let expected = Some(format!("{} ", "ion")); let expected = Some(format!("{} ", Color::White.bold().paint("ion")));
let actual = ModuleRenderer::new("shell") let actual = ModuleRenderer::new("shell")
.shell(Shell::Ion) .shell(Shell::Ion)
.config(toml::toml! { .config(toml::toml! {
@ -225,7 +229,7 @@ mod tests {
#[test] #[test]
fn test_elvish_default_format() { fn test_elvish_default_format() {
let expected = Some(format!("{} ", "esh")); let expected = Some(format!("{} ", Color::White.bold().paint("esh")));
let actual = ModuleRenderer::new("shell") let actual = ModuleRenderer::new("shell")
.shell(Shell::Elvish) .shell(Shell::Elvish)
.config(toml::toml! { .config(toml::toml! {
@ -254,7 +258,7 @@ mod tests {
#[test] #[test]
fn test_nu_default_format() { fn test_nu_default_format() {
let expected = Some(format!("{} ", "nu")); let expected = Some(format!("{} ", Color::White.bold().paint("nu")));
let actual = ModuleRenderer::new("shell") let actual = ModuleRenderer::new("shell")
.shell(Shell::Nu) .shell(Shell::Nu)
.config(toml::toml! { .config(toml::toml! {
@ -283,7 +287,7 @@ mod tests {
#[test] #[test]
fn test_xonsh_default_format() { fn test_xonsh_default_format() {
let expected = Some(format!("{} ", "xsh")); let expected = Some(format!("{} ", Color::White.bold().paint("xsh")));
let actual = ModuleRenderer::new("shell") let actual = ModuleRenderer::new("shell")
.shell(Shell::Xonsh) .shell(Shell::Xonsh)
.config(toml::toml! { .config(toml::toml! {
@ -341,4 +345,35 @@ mod tests {
assert_eq!(expected, actual); assert_eq!(expected, actual);
} }
#[test]
fn test_default_style() {
let expected = Some(format!("{}", Color::White.bold().paint("fish")));
let actual = ModuleRenderer::new("shell")
.shell(Shell::Fish)
.config(toml::toml! {
[shell]
format = "[fish]($style)"
disabled = false
})
.collect();
assert_eq!(expected, actual);
}
#[test]
fn test_custom_style() {
let expected = Some(format!("{}", Color::Cyan.bold().paint("fish")));
let actual = ModuleRenderer::new("shell")
.shell(Shell::Fish)
.config(toml::toml! {
[shell]
format = "[fish]($style)"
style = "cyan bold"
disabled = false
})
.collect();
assert_eq!(expected, actual);
}
} }