summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAman Kumar Sinha <45752299+Perniciosius@users.noreply.github.com>2021-10-04 23:16:33 +0530
committerGitHub <noreply@github.com>2021-10-04 19:46:33 +0200
commitf8e81a162242cbd65a0802435e3efbd9dedc034a (patch)
treea4533f8568250a938820da5785df6e8f9d44f985
parente74f428615b957c7dd359ec24bb98a5db612a966 (diff)
feat(shell): Add style config for shell module (#3108)
* add style config for shell module * update shell docs * fix formatting * update tests
-rw-r--r--docs/config/README.md31
-rw-r--r--src/configs/shell.rs4
-rw-r--r--src/modules/shell.rs51
3 files changed, 64 insertions, 22 deletions
diff --git a/docs/config/README.md b/docs/config/README.md
index fbabf80dd..68ffac0b8 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 818130ae3..9e5c7b18d 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 0b141ec8a..9e99cd3e0 100644
--- a/src/modules/shell.rs
+++ b/src/modules/shell.rs
@@ -30,6 +30,10 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
},
_ => 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);
+ }
}