From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9064 invoked from network); 14 Sep 1997 20:16:50 -0000 Received: from math.gatech.edu (list@130.207.146.50) by coral.primenet.com.au with SMTP; 14 Sep 1997 20:16:50 -0000 Received: (from list@localhost) by math.gatech.edu (8.8.5/8.8.5) id QAA09920; Sun, 14 Sep 1997 16:11:32 -0400 (EDT) Resent-Date: Sun, 14 Sep 1997 16:11:02 -0400 (EDT) From: "Bart Schaefer" Message-Id: <970914121042.ZM22784@candle.brasslantern.com> Date: Sun, 14 Sep 1997 12:10:42 -0700 In-Reply-To: <19970914102839.45957@sco.com> Comments: In reply to "Adam R. Paul" "Re: multiple background jobs of the same program" (Sep 14, 10:28am) References: <9709140326.AA21133@cryptica.UCSD.EDU> <19970914102839.45957@sco.com> X-Mailer: Z-Mail (4.0b.820 20aug96) To: "Adam R. Paul" , zsh Subject: Re: multiple background jobs of the same program MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Resent-Message-ID: <"Zcig72.0.vP2.LJ47q"@math> Resent-From: zsh-users@math.gatech.edu X-Mailing-List: archive/latest/1018 X-Loop: zsh-users@math.gatech.edu X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu On Sep 14, 10:28am, Adam R. Paul wrote: } Subject: Re: multiple background jobs of the same program } } setopt interactive_comments } } listjobs() { } jobs > /tmp/._zshjobcomp.$$ 2>&1 } set -A reply } OIFS="$IFS" } IFS=' } ' } reply=( $(sed -e '{ } s/.\(....\).............\(.*\)/\1 # \2/g } s/\]//g } s/ */ /g } }' /tmp/._zshjobcomp.$$) ) } IFS="$OIFS" } } } } compctl -P % -K listjobs fg } } The only problem is that zsh is escaping the spaces & #'s that result Change it to compctl -Q -P % -K listjobs fg } Also, I don't really want } interactive_comments set all the time Replace the `#' with `;:'. This works best if you have menu completion so that the `;' isn't interpreted as a command separator until after you have a chance to cycle through all the possibilities. } Any improvements? Either remove the temp file or use >| so `setopt clobber' isn't needed. You don't need `set -A reply'. Don't change IFS, use "${(@f)...}" to interpret each line as a word. Have listjobs insert the leading % instead of using -P, and use -U to cause the line so far to be replaced by the completion. Then when there are no possible completions (no jobs), nothing gets inserted. (Your original inserts "% " when there are no jobs.) Do the completion for `bg' and `kill', too. } I suspect that the sed bit could be replaced by some neato } zsh internal parameter mangling stuff Since you're doing several substitutions and already reading from a file, I don't think that's worth it. Finished product: listjobs() { jobs >| /tmp/._zshjobcomp.$$ 2>&1 reply=( "${(@f)$(sed -e '{ s/.\(....\).............\(.*\)/%\1 ;: \2/g s/\]//g s/ */ /g }' /tmp/._zshjobcomp.$$)}" ) } compctl -U -Q -K listjobs fg bg kill -- Bart Schaefer Brass Lantern Enterprises http://www.well.com/user/barts http://www.brasslantern.com