From 0fe00ecd828c72b9bbc55d8bbf2e69d4649b1eec Mon Sep 17 00:00:00 2001 From: Matan Kushner Date: Tue, 23 Jul 2019 11:49:14 -0400 Subject: fix: prompt now updates on bash and zsh (#109) Making use of PROMPT_COMMAND in bash and precmd in zsh, the prompt is no longer being expanded and rendered when the variable is initially set. --- src/init.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/init.rs b/src/init.rs index 4a237ac88..5db23c2b4 100644 --- a/src/init.rs +++ b/src/init.rs @@ -7,12 +7,23 @@ pub fn init(shell_name: &str) { let shell_basename = Path::new(shell_name).file_stem().and_then(OsStr::to_str); let setup_script = match shell_basename { + // The contents of `PROMPT_COMMAND` are executed as a regular Bash command + // just before Bash displays a prompt. Some("bash") => { - let script = "PS1=\"$(starship prompt --status=$?)\""; + let script = " + PROMPT_COMMAND=starship_prompt + + starship_prompt() { + PS1=\"$(starship prompt --status=$?)\" + }"; Some(script) } + // `precmd` executes a command before the zsh prompt is displayed. Some("zsh") => { - let script = "PROMPT=\"$(starship prompt --status=$?)\""; + let script = " + precmd() { + PROMPT=\"$(starship prompt --status=$?)\" + }"; Some(script) } Some("fish") => { -- cgit v1.2.3