parent
9c213b36b0
commit
d90c43b8b1
|
@ -100,6 +100,7 @@ can do this in two ways: by changing color (red/green) or by changing its shape
|
||||||
| `symbol` | `"➜"` | The symbol used before the text input in the prompt. |
|
| `symbol` | `"➜"` | The symbol used before the text input in the prompt. |
|
||||||
| `error_symbol` | `"✖"` | The symbol used before text input if the previous command failed. |
|
| `error_symbol` | `"✖"` | The symbol used before text input if the previous command failed. |
|
||||||
| `use_symbol_for_status` | `false` | Indicate error status by changing the symbol. |
|
| `use_symbol_for_status` | `false` | Indicate error status by changing the symbol. |
|
||||||
|
| `vicmd_symbol` | `"❮"` | The symbol used before the text input in the prompt if zsh is in vim normal mode. |
|
||||||
| `disabled` | `false` | Disables the `character` module. |
|
| `disabled` | `false` | Disables the `character` module. |
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
|
@ -158,6 +158,12 @@ if [[ ${preexec_functions[(ie)starship_preexec]} -gt ${#preexec_functions} ]]; t
|
||||||
preexec_functions+=(starship_preexec);
|
preexec_functions+=(starship_preexec);
|
||||||
fi;
|
fi;
|
||||||
STARSHIP_START_TIME="$(date +%s)";
|
STARSHIP_START_TIME="$(date +%s)";
|
||||||
|
function zle-keymap-select
|
||||||
|
{
|
||||||
|
PROMPT=$(starship prompt --keymap=$KEYMAP --jobs="$(jobs | wc -l)");
|
||||||
|
zle reset-prompt;
|
||||||
|
};
|
||||||
|
zle -N zle-keymap-select;
|
||||||
"##;
|
"##;
|
||||||
|
|
||||||
/* Fish setup is simple because they give us CMD_DURATION. Just account for name
|
/* Fish setup is simple because they give us CMD_DURATION. Just account for name
|
||||||
|
|
10
src/main.rs
10
src/main.rs
|
@ -43,6 +43,14 @@ fn main() {
|
||||||
.help("The execution duration of the last command, in seconds")
|
.help("The execution duration of the last command, in seconds")
|
||||||
.takes_value(true);
|
.takes_value(true);
|
||||||
|
|
||||||
|
let keymap_arg = Arg::with_name("keymap")
|
||||||
|
.short("k")
|
||||||
|
.long("keymap")
|
||||||
|
.value_name("KEYMAP")
|
||||||
|
// zsh only
|
||||||
|
.help("The keymap of zsh")
|
||||||
|
.takes_value(true);
|
||||||
|
|
||||||
let jobs_arg = Arg::with_name("jobs")
|
let jobs_arg = Arg::with_name("jobs")
|
||||||
.short("j")
|
.short("j")
|
||||||
.long("jobs")
|
.long("jobs")
|
||||||
|
@ -69,6 +77,7 @@ fn main() {
|
||||||
.arg(&status_code_arg)
|
.arg(&status_code_arg)
|
||||||
.arg(&path_arg)
|
.arg(&path_arg)
|
||||||
.arg(&cmd_duration_arg)
|
.arg(&cmd_duration_arg)
|
||||||
|
.arg(&keymap_arg)
|
||||||
.arg(&jobs_arg),
|
.arg(&jobs_arg),
|
||||||
)
|
)
|
||||||
.subcommand(
|
.subcommand(
|
||||||
|
@ -82,6 +91,7 @@ fn main() {
|
||||||
.arg(&status_code_arg)
|
.arg(&status_code_arg)
|
||||||
.arg(&path_arg)
|
.arg(&path_arg)
|
||||||
.arg(&cmd_duration_arg)
|
.arg(&cmd_duration_arg)
|
||||||
|
.arg(&keymap_arg)
|
||||||
.arg(&jobs_arg),
|
.arg(&jobs_arg),
|
||||||
)
|
)
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
|
@ -12,6 +12,8 @@ use ansi_term::Color;
|
||||||
pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
||||||
const SUCCESS_CHAR: &str = "➜";
|
const SUCCESS_CHAR: &str = "➜";
|
||||||
const FAILURE_CHAR: &str = "✖";
|
const FAILURE_CHAR: &str = "✖";
|
||||||
|
const VICMD_CHAR: &str = "❮";
|
||||||
|
|
||||||
let color_success = Color::Green.bold();
|
let color_success = Color::Green.bold();
|
||||||
let color_failure = Color::Red.bold();
|
let color_failure = Color::Red.bold();
|
||||||
|
|
||||||
|
@ -23,11 +25,14 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
||||||
.config_value_bool("use_symbol_for_status")
|
.config_value_bool("use_symbol_for_status")
|
||||||
.unwrap_or(false);
|
.unwrap_or(false);
|
||||||
let exit_success = arguments.value_of("status_code").unwrap_or("0") == "0";
|
let exit_success = arguments.value_of("status_code").unwrap_or("0") == "0";
|
||||||
|
let keymap = arguments.value_of("keymap").unwrap_or("viins");
|
||||||
|
|
||||||
/* If an error symbol is set in the config, use symbols to indicate
|
/* If an error symbol is set in the config, use symbols to indicate
|
||||||
success/failure, in addition to color */
|
success/failure, in addition to color */
|
||||||
let symbol = if use_symbol && !exit_success {
|
let symbol = if use_symbol && !exit_success {
|
||||||
module.new_segment("error_symbol", FAILURE_CHAR)
|
module.new_segment("error_symbol", FAILURE_CHAR)
|
||||||
|
} else if keymap == "vicmd" {
|
||||||
|
module.new_segment("vicmd_symbol", VICMD_CHAR)
|
||||||
} else {
|
} else {
|
||||||
module.new_segment("symbol", SUCCESS_CHAR)
|
module.new_segment("symbol", SUCCESS_CHAR)
|
||||||
};
|
};
|
||||||
|
|
|
@ -111,17 +111,4 @@ mod tests {
|
||||||
let input = "Python 3.7.2";
|
let input = "Python 3.7.2";
|
||||||
assert_eq!(format_python_version(input), "v3.7.2");
|
assert_eq!(format_python_version(input), "v3.7.2");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_no_virtual_env() {
|
|
||||||
env::set_var("VIRTUAL_ENV", "");
|
|
||||||
assert_eq!(get_python_virtual_env(), None)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_virtual_env() {
|
|
||||||
env::set_var("VIRTUAL_ENV", "/foo/bar/my_venv");
|
|
||||||
assert_eq!(get_python_virtual_env().unwrap(), "my_venv")
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,3 +72,37 @@ fn char_module_symbolyes_status() -> io::Result<()> {
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn char_module_vicmd_keymap() -> io::Result<()> {
|
||||||
|
let expected_vicmd = format!("{} ", Color::Green.bold().paint("❮"));
|
||||||
|
let expected_specified = format!("{} ", Color::Green.bold().paint("N"));
|
||||||
|
let expected_other = format!("{} ", Color::Green.bold().paint("➜"));
|
||||||
|
|
||||||
|
// zle keymap is vicmd
|
||||||
|
let output = common::render_module("character")
|
||||||
|
.arg("--keymap=vicmd")
|
||||||
|
.output()?;
|
||||||
|
let actual = String::from_utf8(output.stdout).unwrap();
|
||||||
|
assert_eq!(expected_vicmd, actual);
|
||||||
|
|
||||||
|
// specified vicmd character
|
||||||
|
let output = common::render_module("character")
|
||||||
|
.use_config(toml::toml! {
|
||||||
|
[character]
|
||||||
|
vicmd_symbol = "N"
|
||||||
|
})
|
||||||
|
.arg("--keymap=vicmd")
|
||||||
|
.output()?;
|
||||||
|
let actual = String::from_utf8(output.stdout).unwrap();
|
||||||
|
assert_eq!(expected_specified, actual);
|
||||||
|
|
||||||
|
// zle keymap is other
|
||||||
|
let output = common::render_module("character")
|
||||||
|
.arg("--keymap=visual")
|
||||||
|
.output()?;
|
||||||
|
let actual = String::from_utf8(output.stdout).unwrap();
|
||||||
|
assert_eq!(expected_other, actual);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue