diff --git a/Functions/Misc/getjobs b/Functions/Misc/getjobs new file mode 100644 index 000000000..0ac2972ff --- /dev/null +++ b/Functions/Misc/getjobs @@ -0,0 +1,29 @@ +# Call this from the preexec function like so: +# preexec() { +# getjobs "${(z)1}" +# } +setopt localoptions noshwordsplit noksharrays +local texts +case $1 in + fg|bg) shift; [[ -n $1 ]] || set -- %% ;; + %*) ;; + *) return 0 ;; +esac +repeat $# +do + # This case statement emulates jobs.c:getjob() + case $1 in + [\;\&\|]|\|\||\&\&) break ;; + %(|[%+])) 1=${(k)jobstates[(r)*:+:*]} ;; + %-) 1=${(k)jobstates[(r)*:-:*]} ;; + %<->) 1=${1#%} ;; + %[?]*) 1=${${(Ok)jobtexts[(R)*${1#%[?]}*]}[1]} ;; + *) 1=${${(Ok)jobtexts[(R)$1*]}[1]} ;; + esac + [[ -n $1 ]] && texts=($texts ${jobtexts[$1]}) + shift +done +# Remove the "-s" below if you'd prefer that this just report +# what jobs are being affected rather than modify the history +(( $#texts )) && print -s ${(j:; :)texts} "$*" +return 0