Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/config-schema.json
Expand Up @@ -5286,6 +5286,12 @@
"default": "psh",
"type": "string"
},
"pwsh_indicator": {
"type": [
"string",
"null"
]
},
"ion_indicator": {
"default": "ion",
"type": "string"
Expand Down
33 changes: 17 additions & 16 deletions docs/config/README.md
Expand Up @@ -3808,22 +3808,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

Expand Down
3 changes: 3 additions & 0 deletions src/configs/shell.rs
Expand Up @@ -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,
Expand All @@ -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",
Expand Down
4 changes: 3 additions & 1 deletion src/context.rs
Expand Up @@ -368,7 +368,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,
Expand Down Expand Up @@ -794,6 +795,7 @@ pub enum Shell {
Bash,
Fish,
Ion,
Pwsh,
PowerShell,
Zsh,
Elvish,
Expand Down
46 changes: 46 additions & 0 deletions src/modules/shell.rs
Expand Up @@ -20,6 +20,7 @@
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),
Expand All @@ -40,6 +41,7 @@
"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),

Check warning on line 44 in src/modules/shell.rs

View check run for this annotation

Codecov / codecov/patch

src/modules/shell.rs#L44

Added line #L44 was not covered by tests
"ion_indicator" => Some(Ok(config.ion_indicator)),
"elvish_indicator" => Some(Ok(config.elvish_indicator)),
"tcsh_indicator" => Some(Ok(config.tcsh_indicator)),
Expand Down Expand Up @@ -200,6 +202,50 @@
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);
}

HeyItsGilbert marked this conversation as resolved.
Show resolved Hide resolved
#[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")));
Expand Down