diff options
author | Bart Schaefer <barts@users.sourceforge.net> | 2001-04-05 18:50:45 +0000 |
---|---|---|
committer | Bart Schaefer <barts@users.sourceforge.net> | 2001-04-05 18:50:45 +0000 |
commit | 1a4194f1764f165b927e78cc730569ee9845874e (patch) | |
tree | ae4bb139ccca8933921f927871b04115a0386aa9 | |
parent | 62e9af7ce66767f08385e43e9e216b362ee746bc (diff) | |
download | zsh-1a4194f1764f165b927e78cc730569ee9845874e.tar.gz zsh-1a4194f1764f165b927e78cc730569ee9845874e.tar.xz zsh-1a4194f1764f165b927e78cc730569ee9845874e.zip |
Write history entries for jobs resumed with fg/bg; from users/3795, plus
a couple of minor bugfixes.
-rw-r--r-- | Functions/Misc/getjobs | 29 |
1 files changed, 29 insertions, 0 deletions
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 |