On 2001-10-01 at 02:12 -0400, Sweth Chandramouli wrote: > zsh spawns a subshell for the LHS of a pipe, rather than > the RHS, which lets you do things like > > $ do_something | read VAR > > and have VAR still be set. That means that jobs in your > example is being run in a subshell where there _aren't_ any background > jobs. The only way I can think of offhand to get the info from jobs > would be to redirect the output of jobs to a temp file and then use that > to build your prompt; that's not very efficient, however. I don't know > if there's some other way to get that info from the shell. I picked this up from zefram, I think: jobs % >& /dev/null && psvar[1]="" || psvar[1]=() Actually, what I have is this: precmd () { local exitstatus=$? psvar[1]=SIG [[ $exitstatus -ge 128 ]] && psvar[1]=SIG$signals[$exitstatus-127] [[ $psvar[1] = SIG ]] && psvar[1]=$exitstatus jobs % >& /dev/null && psvar[2]="" || psvar[2]=() } [ switch PS1 depending upon $TERM, but for xterm: ] PS1=': %2(L.%U[%L]%u.)%(?..%B{%v}%b)%(2v:+:-)%n@%m:%l(%!)%30<..<%~%#; ' The key thing is the %(2v:+:-) -- psvar[2] was set depending upon whether or not there are background jobs, %(2v:+:-) therefore gives a '+' if there are background jobs, or a '-' if not. I _really_ miss having +/- indication of background jobs when forced to use bash. -- <-------- The information went data way
Attachment:
pgpzCA5VNF23U.pgp
Description: PGP signature