mirror of
https://github.com/starship/starship.git
synced 2024-10-05 01:43:46 +02:00
Added special case for exit code 130, and fixed colours disappearing in vicmd mode
This commit is contained in:
parent
f505324dac
commit
c43f95131d
@ -10,12 +10,15 @@ use serde::{Deserialize, Serialize};
|
||||
pub struct CharacterConfig<'a> {
|
||||
pub format: &'a str,
|
||||
pub success_symbol: &'a str,
|
||||
pub cancel_symbol: &'a str,
|
||||
pub error_symbol: &'a str,
|
||||
#[serde(alias = "vicmd_symbol")]
|
||||
pub vimcmd_symbol: &'a str,
|
||||
pub vimcmd_success_symbol: &'a str,
|
||||
pub vimcmd_visual_symbol: &'a str,
|
||||
pub vimcmd_replace_symbol: &'a str,
|
||||
pub vimcmd_replace_one_symbol: &'a str,
|
||||
pub vimcmd_cancel_symbol: &'a str,
|
||||
pub vimcmd_error_symbol: &'a str,
|
||||
pub disabled: bool,
|
||||
}
|
||||
|
||||
@ -24,11 +27,14 @@ impl<'a> Default for CharacterConfig<'a> {
|
||||
CharacterConfig {
|
||||
format: "$symbol ",
|
||||
success_symbol: "[❯](bold green)",
|
||||
cancel_symbol: "[❯](bold yellow)",
|
||||
error_symbol: "[❯](bold red)",
|
||||
vimcmd_symbol: "[❮](bold green)",
|
||||
vimcmd_visual_symbol: "[❮](bold yellow)",
|
||||
vimcmd_replace_symbol: "[❮](bold purple)",
|
||||
vimcmd_replace_one_symbol: "[❮](bold purple)",
|
||||
vimcmd_success_symbol: "[❮](bold green)",
|
||||
vimcmd_cancel_symbol: "[❮](bold yellow)",
|
||||
vimcmd_error_symbol: "[❮](bold red)",
|
||||
disabled: false,
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
||||
let exit_code = props.status_code.as_deref().unwrap_or("0");
|
||||
let keymap = props.keymap.as_str();
|
||||
let exit_success = exit_code == "0";
|
||||
let exit_cancel = exit_code == "130";
|
||||
|
||||
// Match shell "keymap" names to normalized vi modes
|
||||
// NOTE: in vi mode, fish reports normal mode as "default".
|
||||
@ -36,7 +37,7 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
||||
// The result: in non-vi fish, keymap is always reported as "insert"
|
||||
let mode = match (&context.shell, keymap) {
|
||||
(Shell::Fish, "default")
|
||||
| (Shell::Zsh, "vicmd")
|
||||
| (Shell::Zsh, "vimcmd")
|
||||
| (Shell::Cmd | Shell::PowerShell | Shell::Pwsh, "vi") => ShellEditMode::Normal,
|
||||
(Shell::Fish, "visual") => ShellEditMode::Visual,
|
||||
(Shell::Fish, "replace") => ShellEditMode::Replace,
|
||||
@ -45,13 +46,23 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
||||
};
|
||||
|
||||
let symbol = match mode {
|
||||
ShellEditMode::Normal => config.vimcmd_symbol,
|
||||
ShellEditMode::Visual => config.vimcmd_visual_symbol,
|
||||
ShellEditMode::Replace => config.vimcmd_replace_symbol,
|
||||
ShellEditMode::ReplaceOne => config.vimcmd_replace_one_symbol,
|
||||
ShellEditMode::Normal => {
|
||||
if exit_success {
|
||||
config.vimcmd_success_symbol
|
||||
} else if exit_cancel {
|
||||
config.vimcmd_cancel_symbol
|
||||
} else {
|
||||
config.vimcmd_error_symbol
|
||||
}
|
||||
}
|
||||
ShellEditMode::Insert => {
|
||||
if exit_success {
|
||||
config.success_symbol
|
||||
} else if exit_cancel {
|
||||
config.cancel_symbol
|
||||
} else {
|
||||
config.error_symbol
|
||||
}
|
||||
@ -97,6 +108,14 @@ mod test {
|
||||
assert_eq!(expected, actual);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cancel_status() {
|
||||
let expected = Some(format!("{} ", Color::Yellow.bold().paint("❯")));
|
||||
|
||||
let actual = ModuleRenderer::new("character").status(130).collect();
|
||||
assert_eq!(expected, actual);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn failure_status() {
|
||||
let expected = Some(format!("{} ", Color::Red.bold().paint("❯")));
|
||||
@ -112,6 +131,7 @@ mod test {
|
||||
#[test]
|
||||
fn custom_symbol() {
|
||||
let expected_fail = Some(format!("{} ", Color::Red.bold().paint("✖")));
|
||||
let expected_cancel = Some(format!("{} ", Color::Yellow.bold().paint("➜")));
|
||||
let expected_success = Some(format!("{} ", Color::Green.bold().paint("➜")));
|
||||
|
||||
let exit_values = [1, 54321, -5000];
|
||||
@ -129,6 +149,17 @@ mod test {
|
||||
assert_eq!(expected_fail, actual);
|
||||
}
|
||||
|
||||
let actual = ModuleRenderer::new("character")
|
||||
.config(toml::toml! {
|
||||
[character]
|
||||
success_symbol = "[➜](bold green)"
|
||||
cancel_symbol = "[➜](bold yellow)"
|
||||
error_symbol = "[✖](bold red)"
|
||||
})
|
||||
.status(130)
|
||||
.collect();
|
||||
assert_eq!(expected_cancel, actual);
|
||||
|
||||
// Test success
|
||||
let actual = ModuleRenderer::new("character")
|
||||
.config(toml::toml! {
|
||||
@ -143,25 +174,47 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn zsh_keymap() {
|
||||
let expected_vicmd = Some(format!("{} ", Color::Green.bold().paint("❮")));
|
||||
let expected_vimcmd_success = Some(format!("{} ", Color::Green.bold().paint("❮")));
|
||||
let expected_vimcmd_cancel = Some(format!("{} ", Color::Yellow.bold().paint("❮")));
|
||||
let expected_vimcmd_error = Some(format!("{} ", Color::Red.bold().paint("❮")));
|
||||
let expected_specified = Some(format!("{} ", Color::Green.bold().paint("V")));
|
||||
let expected_other = Some(format!("{} ", Color::Green.bold().paint("❯")));
|
||||
|
||||
// zle keymap is vicmd
|
||||
// zle keymap is vimcmd
|
||||
let actual = ModuleRenderer::new("character")
|
||||
.shell(Shell::Zsh)
|
||||
.keymap("vicmd")
|
||||
.keymap("vimcmd")
|
||||
.collect();
|
||||
assert_eq!(expected_vicmd, actual);
|
||||
assert_eq!(expected_vimcmd_success, actual);
|
||||
|
||||
// specified vicmd character
|
||||
// Cancel status
|
||||
let actual = ModuleRenderer::new("character")
|
||||
.shell(Shell::Zsh)
|
||||
.keymap("vimcmd")
|
||||
.status(130)
|
||||
.collect();
|
||||
assert_eq!(expected_vimcmd_cancel, actual);
|
||||
|
||||
// Failure status
|
||||
let exit_values = [1, 54321, -5000];
|
||||
|
||||
for status in &exit_values {
|
||||
let actual = ModuleRenderer::new("character")
|
||||
.shell(Shell::Zsh)
|
||||
.keymap("vimcmd")
|
||||
.status(*status)
|
||||
.collect();
|
||||
assert_eq!(expected_vimcmd_error, actual);
|
||||
}
|
||||
|
||||
// specified vimcmd character
|
||||
let actual = ModuleRenderer::new("character")
|
||||
.config(toml::toml! {
|
||||
[character]
|
||||
vicmd_symbol = "[V](bold green)"
|
||||
vimcmd_success_symbol = "[V](bold green)"
|
||||
})
|
||||
.shell(Shell::Zsh)
|
||||
.keymap("vicmd")
|
||||
.keymap("vimcmd")
|
||||
.collect();
|
||||
assert_eq!(expected_specified, actual);
|
||||
|
||||
@ -175,7 +228,9 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn fish_keymap() {
|
||||
let expected_vicmd = Some(format!("{} ", Color::Green.bold().paint("❮")));
|
||||
let expected_vimcmd_success = Some(format!("{} ", Color::Green.bold().paint("❮")));
|
||||
let expected_vimcmd_cancel = Some(format!("{} ", Color::Yellow.bold().paint("❮")));
|
||||
let expected_vimcmd_error = Some(format!("{} ", Color::Red.bold().paint("❮")));
|
||||
let expected_specified = Some(format!("{} ", Color::Green.bold().paint("V")));
|
||||
let expected_visual = Some(format!("{} ", Color::Yellow.bold().paint("❮")));
|
||||
let expected_replace = Some(format!("{} ", Color::Purple.bold().paint("❮")));
|
||||
@ -187,13 +242,33 @@ mod test {
|
||||
.shell(Shell::Fish)
|
||||
.keymap("default")
|
||||
.collect();
|
||||
assert_eq!(expected_vicmd, actual);
|
||||
assert_eq!(expected_vimcmd_success, actual);
|
||||
|
||||
// specified vicmd character
|
||||
// Cancel status
|
||||
let actual = ModuleRenderer::new("character")
|
||||
.shell(Shell::Fish)
|
||||
.keymap("default")
|
||||
.status(130)
|
||||
.collect();
|
||||
assert_eq!(expected_vimcmd_cancel, actual);
|
||||
|
||||
// Failure status
|
||||
let exit_values = [1, 54321, -5000];
|
||||
|
||||
for status in &exit_values {
|
||||
let actual = ModuleRenderer::new("character")
|
||||
.shell(Shell::Fish)
|
||||
.keymap("default")
|
||||
.status(*status)
|
||||
.collect();
|
||||
assert_eq!(expected_vimcmd_error, actual);
|
||||
}
|
||||
|
||||
// specified vimcmd character
|
||||
let actual = ModuleRenderer::new("character")
|
||||
.config(toml::toml! {
|
||||
[character]
|
||||
vicmd_symbol = "[V](bold green)"
|
||||
vimcmd_success_symbol = "[V](bold green)"
|
||||
})
|
||||
.shell(Shell::Fish)
|
||||
.keymap("default")
|
||||
@ -231,7 +306,7 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn cmd_keymap() {
|
||||
let expected_vicmd = Some(format!("{} ", Color::Green.bold().paint("❮")));
|
||||
let expected_vimcmd = Some(format!("{} ", Color::Green.bold().paint("❮")));
|
||||
let expected_specified = Some(format!("{} ", Color::Green.bold().paint("V")));
|
||||
let expected_other = Some(format!("{} ", Color::Green.bold().paint("❯")));
|
||||
|
||||
@ -240,13 +315,15 @@ mod test {
|
||||
.shell(Shell::Cmd)
|
||||
.keymap("vi")
|
||||
.collect();
|
||||
assert_eq!(expected_vicmd, actual);
|
||||
assert_eq!(expected_vimcmd, actual);
|
||||
|
||||
// specified vicmd character
|
||||
// specified vimcmd character
|
||||
let actual = ModuleRenderer::new("character")
|
||||
.config(toml::toml! {
|
||||
[character]
|
||||
vicmd_symbol = "[V](bold green)"
|
||||
vimcmd_success_symbol = "[V](bold green)"
|
||||
vimcmd_cancel_symbol = "[V](bold yellow)"
|
||||
vimcmd_error_symbol = "[V](bold red)"
|
||||
})
|
||||
.shell(Shell::Cmd)
|
||||
.keymap("vi")
|
||||
@ -263,7 +340,7 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn powershell_keymap() {
|
||||
let expected_vicmd = Some(format!("{} ", Color::Green.bold().paint("❮")));
|
||||
let expected_vimcmd = Some(format!("{} ", Color::Green.bold().paint("❮")));
|
||||
let expected_specified = Some(format!("{} ", Color::Green.bold().paint("V")));
|
||||
let expected_other = Some(format!("{} ", Color::Green.bold().paint("❯")));
|
||||
|
||||
@ -272,13 +349,13 @@ mod test {
|
||||
.shell(Shell::PowerShell)
|
||||
.keymap("vi")
|
||||
.collect();
|
||||
assert_eq!(expected_vicmd, actual);
|
||||
assert_eq!(expected_vimcmd, actual);
|
||||
|
||||
// specified vicmd character
|
||||
// specified vimcmd character
|
||||
let actual = ModuleRenderer::new("character")
|
||||
.config(toml::toml! {
|
||||
[character]
|
||||
vicmd_symbol = "[V](bold green)"
|
||||
vimcmd_symbol = "[V](bold green)"
|
||||
})
|
||||
.shell(Shell::PowerShell)
|
||||
.keymap("vi")
|
||||
|
Loading…
Reference in New Issue
Block a user