From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16515 invoked by alias); 22 Jul 2014 10:39:09 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 32893 Received: (qmail 13910 invoked from network); 22 Jul 2014 10:39:02 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.2 From: Oliver Kiddle To: Zsh workers Subject: using tag-order with _pids MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <18722.1406025098.1@thecus.kiddle.eu> Date: Tue, 22 Jul 2014 12:31:38 +0200 Message-ID: <18723.1406025098@thecus.kiddle.eu> The patch below moves the use of _call_program by _pids to inside the _tags loop. Much of the patch is just reindentation. The purpose of this is to allow separate processes to be grouped so _next_tags can expand the list to include a wider range of processes. So for example: zstyle ':completion:*:kill:*:' tag-order processes:-tty \ 'processes:-mine:user\ processes' 'processes:-all:all\ processes' zstyle ':completion:*:processes-mine' command 'ps -u $EUID' zstyle ':completion:*:processes-all' command 'ps -e' There are some things that aren't ideal about this: the tag-order style has to be defined for e.g. the kill command and can't apply whenever _pids is called. Also an ambiguous prefix from the first tag limits matches in later tags. If anyone has any ideas on solutions to these issues, I'd be interested to know. Oliver diff --git a/Completion/Unix/Type/_pids b/Completion/Unix/Type/_pids index 3f99dfd..3c6a765 100644 --- a/Completion/Unix/Type/_pids +++ b/Completion/Unix/Type/_pids @@ -20,25 +20,30 @@ else nm="$compstate[nmatches]" fi -out=( "${(@f)$(_call_program processes ps 2>/dev/null)}" ) -desc="$out[1]" -out=( "${(@M)out[2,-1]:#${~match}}" ) - -if [[ "$desc" = (#i)(|*[[:blank:]])pid(|[[:blank:]]*) ]]; then - pids=( "${(@)${(@M)out#${(l.${#desc[1,(r)(#i)[[:blank:]]pid]}..?.)~:-}[^[:blank:]]#}##*[[:blank:]]}" ) -else - pids=( "${(@)${(@M)out##[^0-9]#[0-9]#}##*[[:blank:]]}" ) -fi - -if zstyle -T ":completion:${curcontext}:processes" verbose; then - list=( "${(@Mr:COLUMNS-1:)out}" ) - desc=(-ld list) -else - desc=() -fi - -_wanted -V processes expl 'process ID' \ - compadd "$@" "$desc[@]" "$all[@]" -a - pids && ret=0 +while _tags; do + if _requested processes; then + while _next_label processes expl 'process ID'; do + out=( "${(@f)$(_call_program $curtag ps 2>/dev/null)}" ) + desc="$out[1]" + out=( "${(@M)out[2,-1]:#${~match}}" ) + + if [[ "$desc" = (#i)(|*[[:blank:]])pid(|[[:blank:]]*) ]]; then + pids=( "${(@)${(@M)out#${(l.${#desc[1,(r)(#i)[[:blank:]]pid]}..?.)~:-}[^[:blank:]]#}##*[[:blank:]]}" ) + else + pids=( "${(@)${(@M)out##[^0-9]#[0-9]#}##*[[:blank:]]}" ) + fi + + if zstyle -T ":completion:${curcontext}:$curtag" verbose; then + list=( "${(@Mr:COLUMNS-1:)out}" ) + desc=(-ld list) + else + desc=() + fi + compadd "$@" "$expl[@]" "$desc[@]" "$all[@]" -a pids && ret=0 + done + fi + (( ret )) || break +done if [[ -n "$all" ]]; then zstyle -s ":completion:${curcontext}:processes" insert-ids out || out=menu