diff --git a/.github/config-schema.json b/.github/config-schema.json index 9931b8487384..a01d83c01ed4 100644 --- a/.github/config-schema.json +++ b/.github/config-schema.json @@ -5311,6 +5311,12 @@ "default": "psh", "type": "string" }, + "pwsh_indicator": { + "type": [ + "string", + "null" + ] + }, "ion_indicator": { "default": "ion", "type": "string" diff --git a/docs/config/README.md b/docs/config/README.md index e200115bea20..c267a37d5d19 100644 --- a/docs/config/README.md +++ b/docs/config/README.md @@ -3817,22 +3817,23 @@ 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. | -| `cmd_indicator` | `'cmd'` | A format string used to represent cmd. | -| `nu_indicator` | `'nu'` | A format string used to represent nu. | -| `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. | +| 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. | +| `pwsh_indicator` | | A format string used to represent pwsh. The default value mirrors the value of `powershell_indicator`. | +| `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. | +| `cmd_indicator` | `'cmd'` | A format string used to represent cmd. | +| `nu_indicator` | `'nu'` | A format string used to represent nu. | +| `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 diff --git a/src/configs/shell.rs b/src/configs/shell.rs index 540ea8e32e54..9d0bd3aa0ae7 100644 --- a/src/configs/shell.rs +++ b/src/configs/shell.rs @@ -13,6 +13,8 @@ pub struct ShellConfig<'a> { pub fish_indicator: &'a str, pub zsh_indicator: &'a str, pub powershell_indicator: &'a str, + #[serde(skip_serializing_if = "Option::is_none")] + pub pwsh_indicator: Option<&'a str>, pub ion_indicator: &'a str, pub elvish_indicator: &'a str, pub tcsh_indicator: &'a str, @@ -32,6 +34,7 @@ impl<'a> Default for ShellConfig<'a> { fish_indicator: "fsh", zsh_indicator: "zsh", powershell_indicator: "psh", + pwsh_indicator: None, ion_indicator: "ion", elvish_indicator: "esh", tcsh_indicator: "tsh", diff --git a/src/context.rs b/src/context.rs index 83af209a0765..0a498c99980b 100644 --- a/src/context.rs +++ b/src/context.rs @@ -372,7 +372,8 @@ impl<'a> Context<'a> { "bash" => Shell::Bash, "fish" => Shell::Fish, "ion" => Shell::Ion, - "powershell" | "pwsh" => Shell::PowerShell, + "pwsh" => Shell::Pwsh, + "powershell" => Shell::PowerShell, "zsh" => Shell::Zsh, "elvish" => Shell::Elvish, "tcsh" => Shell::Tcsh, @@ -810,6 +811,7 @@ pub enum Shell { Bash, Fish, Ion, + Pwsh, PowerShell, Zsh, Elvish, diff --git a/src/modules/shell.rs b/src/modules/shell.rs index c9b6df157d35..98502a266d31 100644 --- a/src/modules/shell.rs +++ b/src/modules/shell.rs @@ -20,6 +20,7 @@ pub fn module<'a>(context: &'a Context) -> Option> { Shell::Bash => Some(config.bash_indicator), Shell::Fish => Some(config.fish_indicator), Shell::Zsh => Some(config.zsh_indicator), + Shell::Pwsh => config.pwsh_indicator.or(Some(config.powershell_indicator)), Shell::PowerShell => Some(config.powershell_indicator), Shell::Ion => Some(config.ion_indicator), Shell::Elvish => Some(config.elvish_indicator), @@ -40,6 +41,7 @@ pub fn module<'a>(context: &'a Context) -> Option> { "fish_indicator" => Some(Ok(config.fish_indicator)), "zsh_indicator" => Some(Ok(config.zsh_indicator)), "powershell_indicator" => Some(Ok(config.powershell_indicator)), + "pwsh_indicator" => config.pwsh_indicator.map(Ok), "ion_indicator" => Some(Ok(config.ion_indicator)), "elvish_indicator" => Some(Ok(config.elvish_indicator)), "tcsh_indicator" => Some(Ok(config.tcsh_indicator)), @@ -200,6 +202,50 @@ mod tests { assert_eq!(expected, actual); } + #[test] + fn test_pwsh_default_format() { + let expected = Some(format!("{} ", Color::White.bold().paint("psh"))); + let actual = ModuleRenderer::new("shell") + .shell(Shell::Pwsh) + .config(toml::toml! { + [shell] + disabled = false + }) + .collect(); + + assert_eq!(expected, actual); + } + + #[test] + fn test_pwsh_custom_format() { + let expected = Some(format!("{} ", Color::Cyan.bold().paint("pwsh"))); + let actual = ModuleRenderer::new("shell") + .shell(Shell::Pwsh) + .config(toml::toml! { + [shell] + pwsh_indicator = "[pwsh](bold cyan)" + disabled = false + }) + .collect(); + + assert_eq!(expected, actual); + } + + #[test] + fn test_pwsh_custom_format_fallback() { + let expected = Some(format!("{} ", Color::Cyan.bold().paint("pwsh"))); + let actual = ModuleRenderer::new("shell") + .shell(Shell::Pwsh) + .config(toml::toml! { + [shell] + powershell_indicator = "[pwsh](bold cyan)" + disabled = false + }) + .collect(); + + assert_eq!(expected, actual); + } + #[test] fn test_ion_default_format() { let expected = Some(format!("{} ", Color::White.bold().paint("ion")));