feat(shell): allow distinguishing between pwsh and powershell (#5478)

* Distinguish between pwsh and powershell

Co-authored-by: David Knaack <davidkna@users.noreply.github.com>
This commit is contained in:
Gilbert Sanchez 2023-11-25 05:06:03 -08:00 committed by GitHub
parent cb6df1d142
commit d7a34b45f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 75 additions and 17 deletions

View File

@ -5311,6 +5311,12 @@
"default": "psh",
"type": "string"
},
"pwsh_indicator": {
"type": [
"string",
"null"
]
},
"ion_indicator": {
"default": "ion",
"type": "string"

View File

@ -3818,11 +3818,12 @@ 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. |
| `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. |

View File

@ -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",

View File

@ -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,

View File

@ -20,6 +20,7 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
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<Module<'a>> {
"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")));