summaryrefslogtreecommitdiffstats
path: root/src/init
diff options
context:
space:
mode:
authorNemo157 <wim@nemo157.com>2020-06-09 18:52:29 +0200
committerGitHub <noreply@github.com>2020-06-09 18:52:29 +0200
commitfb121cd62a2c5dac54fda33d5a928251f742a44d (patch)
tree4d4908b94ea149b932e3aa51240ff32f610bf5f0 /src/init
parent759eaded73d3641f840864940226d9ceed8aa157 (diff)
fix: Retain previous command state on zsh keymap select (#958)
Diffstat (limited to 'src/init')
-rw-r--r--src/init/starship.zsh21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/init/starship.zsh b/src/init/starship.zsh
index b327e3c10..5c521b94c 100644
--- a/src/init/starship.zsh
+++ b/src/init/starship.zsh
@@ -9,23 +9,30 @@
zmodload zsh/parameter # Needed to access jobstates variable for NUM_JOBS
+starship_render() {
+ # Use length of jobstates array as number of jobs. Expansion fails inside
+ # quotes so we set it here and then use the value later on.
+ NUM_JOBS=$#jobstates
+ PROMPT="$(::STARSHIP:: prompt --keymap="${KEYMAP-}" --status=$STATUS --cmd-duration=${STARSHIP_DURATION-} --jobs="$NUM_JOBS")"
+}
+
# Will be run before every prompt draw
starship_precmd() {
# Save the status, because commands in this pipeline will change $?
STATUS=$?
- # Use length of jobstates array as number of jobs. Expansion fails inside
- # quotes so we set it here and then use the value later on.
- NUM_JOBS=$#jobstates
- # Compute cmd_duration, if we have a time to consume
+ # Compute cmd_duration, if we have a time to consume, otherwise clear the
+ # previous duration
if [[ -n "${STARSHIP_START_TIME+1}" ]]; then
STARSHIP_END_TIME=$(::STARSHIP:: time)
STARSHIP_DURATION=$((STARSHIP_END_TIME - STARSHIP_START_TIME))
- PROMPT="$(::STARSHIP:: prompt --status=$STATUS --cmd-duration=$STARSHIP_DURATION --jobs="$NUM_JOBS")"
unset STARSHIP_START_TIME
else
- PROMPT="$(::STARSHIP:: prompt --status=$STATUS --jobs="$NUM_JOBS")"
+ unset STARSHIP_DURATION
fi
+
+ # Render the updated prompt
+ starship_render
}
starship_preexec() {
STARSHIP_START_TIME=$(::STARSHIP:: time)
@@ -48,7 +55,7 @@ fi
# Set up a function to redraw the prompt if the user switches vi modes
zle-keymap-select() {
- PROMPT=$(::STARSHIP:: prompt --keymap="$KEYMAP" --jobs="$(jobs | wc -l)")
+ starship_render
zle reset-prompt
}