From f8e81a162242cbd65a0802435e3efbd9dedc034a Mon Sep 17 00:00:00 2001 From: Aman Kumar Sinha <45752299+Perniciosius@users.noreply.github.com> Date: Mon, 4 Oct 2021 23:16:33 +0530 Subject: [PATCH] feat(shell): Add style config for shell module (#3108) * add style config for shell module * update shell docs * fix formatting * update tests --- docs/config/README.md | 31 +++++++++++++++----------- src/configs/shell.rs | 4 +++- src/modules/shell.rs | 51 ++++++++++++++++++++++++++++++++++++------- 3 files changed, 64 insertions(+), 22 deletions(-) diff --git a/docs/config/README.md b/docs/config/README.md index fbabf80d..68ffac0b 100644 --- a/docs/config/README.md +++ b/docs/config/README.md @@ -2707,25 +2707,29 @@ To enable it, set `disabled` to `false` in your configuration file. ### Options -| Option | Default | Description | -| ---------------------- | --------------- | ------------------------------------------------------------ | -| `bash_indicator` | `"bsh"` | A format string used to represent bash. | -| `fish_indicator` | `"fsh"` | A format string used to represent fish. | -| `zsh_indicator` | `"zsh"` | A format string used to represent zsh. | -| `powershell_indicator` | `"psh"` | A format string used to represent powershell. | -| `ion_indicator` | `"ion"` | A format string used to represent ion. | -| `elvish_indicator` | `"esh"` | A format string used to represent elvish. | -| `tcsh_indicator` | `"tsh"` | A format string used to represent tcsh. | -| `xonsh_indicator` | `"xsh"` | A format string used to represent xonsh. | -| `unknown_indicator` | `""` | The default value to be displayed when the shell is unknown. | -| `format` | `"$indicator "` | The format for the module. | -| `disabled` | `true` | Disables the `shell` module. | +| Option | Default | Description | +| ---------------------- | ------------------------- | ------------------------------------------------------------ | +| `bash_indicator` | `bsh` | A format string used to represent bash. | +| `fish_indicator` | `fsh` | A format string used to represent fish. | +| `zsh_indicator` | `zsh` | A format string used to represent zsh. | +| `powershell_indicator` | `psh` | A format string used to represent powershell. | +| `ion_indicator` | `ion` | A format string used to represent ion. | +| `elvish_indicator` | `esh` | A format string used to represent elvish. | +| `tcsh_indicator` | `tsh` | A format string used to represent tcsh. | +| `xonsh_indicator` | `xsh` | A format string used to represent xonsh. | +| `unknown_indicator` | | The default value to be displayed when the shell is unknown. | +| `format` | `"[$indicator]($style) "` | The format for the module. | +| `style` | `"white bold"` | The style for the module. | +| `disabled` | `true` | Disables the `shell` module. | ### Variables | Variable | Default | Description | | ----------- | ------- | ---------------------------------------------------------- | | 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 @@ -2736,6 +2740,7 @@ To enable it, set `disabled` to `false` in your configuration file. fish_indicator = "" powershell_indicator = "_" unknown_indicator = "mystery shell" +style = "cyan bold" disabled = false ``` diff --git a/src/configs/shell.rs b/src/configs/shell.rs index 818130ae..9e5c7b18 100644 --- a/src/configs/shell.rs +++ b/src/configs/shell.rs @@ -16,13 +16,14 @@ pub struct ShellConfig<'a> { pub nu_indicator: &'a str, pub xonsh_indicator: &'a str, pub unknown_indicator: &'a str, + pub style: &'a str, pub disabled: bool, } impl<'a> Default for ShellConfig<'a> { fn default() -> Self { ShellConfig { - format: "$indicator ", + format: "[$indicator]($style) ", bash_indicator: "bsh", fish_indicator: "fsh", zsh_indicator: "zsh", @@ -33,6 +34,7 @@ impl<'a> Default for ShellConfig<'a> { nu_indicator: "nu", xonsh_indicator: "xsh", unknown_indicator: "", + style: "white bold", disabled: true, } } diff --git a/src/modules/shell.rs b/src/modules/shell.rs index 0b141ec8..9e99cd3e 100644 --- a/src/modules/shell.rs +++ b/src/modules/shell.rs @@ -30,6 +30,10 @@ pub fn module<'a>(context: &'a Context) -> Option> { }, _ => None, }) + .map_style(|variable| match variable { + "style" => Some(Ok(config.style)), + _ => None, + }) .map(|var| match var { "bash_indicator" => Some(Ok(config.bash_indicator)), "fish_indicator" => Some(Ok(config.fish_indicator)), @@ -80,7 +84,7 @@ mod tests { #[test] fn test_bash_default_format() { - let expected = Some(format!("{} ", "bsh")); + let expected = Some(format!("{} ", Color::White.bold().paint("bsh"))); let actual = ModuleRenderer::new("shell") .shell(Shell::Bash) .config(toml::toml! { @@ -109,7 +113,7 @@ mod tests { #[test] fn test_fish_default_format() { - let expected = Some(format!("{} ", "fsh")); + let expected = Some(format!("{} ", Color::White.bold().paint("fsh"))); let actual = ModuleRenderer::new("shell") .shell(Shell::Fish) .config(toml::toml! { @@ -138,7 +142,7 @@ mod tests { #[test] fn test_zsh_default_format() { - let expected = Some(format!("{} ", "zsh")); + let expected = Some(format!("{} ", Color::White.bold().paint("zsh"))); let actual = ModuleRenderer::new("shell") .shell(Shell::Zsh) .config(toml::toml! { @@ -167,7 +171,7 @@ mod tests { #[test] fn test_powershell_default_format() { - let expected = Some(format!("{} ", "psh")); + let expected = Some(format!("{} ", Color::White.bold().paint("psh"))); let actual = ModuleRenderer::new("shell") .shell(Shell::PowerShell) .config(toml::toml! { @@ -196,7 +200,7 @@ mod tests { #[test] fn test_ion_default_format() { - let expected = Some(format!("{} ", "ion")); + let expected = Some(format!("{} ", Color::White.bold().paint("ion"))); let actual = ModuleRenderer::new("shell") .shell(Shell::Ion) .config(toml::toml! { @@ -225,7 +229,7 @@ mod tests { #[test] fn test_elvish_default_format() { - let expected = Some(format!("{} ", "esh")); + let expected = Some(format!("{} ", Color::White.bold().paint("esh"))); let actual = ModuleRenderer::new("shell") .shell(Shell::Elvish) .config(toml::toml! { @@ -254,7 +258,7 @@ mod tests { #[test] fn test_nu_default_format() { - let expected = Some(format!("{} ", "nu")); + let expected = Some(format!("{} ", Color::White.bold().paint("nu"))); let actual = ModuleRenderer::new("shell") .shell(Shell::Nu) .config(toml::toml! { @@ -283,7 +287,7 @@ mod tests { #[test] fn test_xonsh_default_format() { - let expected = Some(format!("{} ", "xsh")); + let expected = Some(format!("{} ", Color::White.bold().paint("xsh"))); let actual = ModuleRenderer::new("shell") .shell(Shell::Xonsh) .config(toml::toml! { @@ -341,4 +345,35 @@ mod tests { 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); + } }