From f873a9820e2f24ceadddde82b942711f2dd235db Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Wed, 2 Dec 2020 07:29:02 +0100 Subject: [PATCH] fix(bash): Fix background jobs with z/autojump (#1897) Fixes issue where having z.sh or autojump hooked in bash would cause spurious background job indicators to appear. --- src/init/starship.bash | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/init/starship.bash b/src/init/starship.bash index a51b7c2dd..587315572 100644 --- a/src/init/starship.bash +++ b/src/init/starship.bash @@ -28,9 +28,12 @@ starship_preexec() { # Will be run before the prompt is drawn starship_precmd() { + local NUM_JOBS # Save the status, because commands in this pipeline will change $? STATUS=$? + NUM_JOBS=$(n=0; while read line; do [[ $line ]] && n=$((n+1));done <<< $(jobs -p) ; echo $n) + # Run the bash precmd function, if it's set. If not set, evaluates to no-op "${starship_precmd_user_func-:}" @@ -40,10 +43,10 @@ starship_precmd() { if [[ $STARSHIP_START_TIME ]]; then STARSHIP_END_TIME=$(::STARSHIP:: time) STARSHIP_DURATION=$((STARSHIP_END_TIME - STARSHIP_START_TIME)) - PS1="$(::STARSHIP:: prompt --status=$STATUS --jobs="$(jobs -p | wc -l)" --cmd-duration=$STARSHIP_DURATION)" + PS1="$(::STARSHIP:: prompt --status=$STATUS --jobs="$NUM_JOBS" --cmd-duration=$STARSHIP_DURATION)" unset STARSHIP_START_TIME else - PS1="$(::STARSHIP:: prompt --status=$STATUS --jobs="$(jobs -p | wc -l)")" + PS1="$(::STARSHIP:: prompt --status=$STATUS --jobs="$NUM_JOBS")" fi PREEXEC_READY=true # Signal that we can safely restart the timer }