From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6414 invoked from network); 15 Aug 2000 09:24:22 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 15 Aug 2000 09:24:22 -0000 Received: (qmail 17502 invoked by alias); 15 Aug 2000 09:24:13 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 12640 Received: (qmail 17495 invoked from network); 15 Aug 2000 09:24:12 -0000 Date: Tue, 15 Aug 2000 11:24:09 +0200 (MET DST) Message-Id: <200008150924.LAA05189@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: "Andrej Borsenkow"'s message of Tue, 15 Aug 2000 12:35:13 +0400 Subject: PATCH: RE: Some problems with menu list. Andrej Everyone wrote: > > Question to everyone: should we remove processes-list, i.e. the second > > call to ps? The problem is: how do we replace it. I think it would be > > nice if _pids would look at the first line of the output of ps to see > > which column gives the pids. If it can't find that out, it uses the > > first numeric column (easier to implement: the first number in each > > line). For special cases, users should be able to set a style to tell > > _pids which column to use. > > > > Would that be ok for everyone? > > Yes. Looking at header should be quite robust. Position of pid varies from > system to system, but, hopefully, it is always called PID :-) This would make > _pids usable out of the box on almost every system. I could convince myself to change this now. This makes _pids look at the first line to find out which numbers should be completed. It doesn't really use `columns', but character- based matching (which is easier to write and, hopefully, faster and correct). As a fallback, the first number from each of the second to last line is completed. I haven't added the style I suggested to give the number from where to complete. That seemed too silly, on second thought. Unless someone can come up with a reasonable example where this is needed. The patch also documents all this. Bye Sven Index: Completion/Builtins/_pids =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Builtins/_pids,v retrieving revision 1.7 diff -u -r1.7 _pids --- Completion/Builtins/_pids 2000/08/15 08:32:26 1.7 +++ Completion/Builtins/_pids 2000/08/15 09:19:42 @@ -3,7 +3,7 @@ # If given the `-m ' option, this tries to complete only pids # of processes whose command line match the `'. -local out list expl match desc listargs args all nm ret=1 +local out pids index list expl match desc listargs args all nm ret=1 _tags processes || return 1 @@ -22,24 +22,26 @@ zstyle -s ":completion:${curcontext}:processes" command args -out="$(_call processes ps 2>/dev/null)" +out=( "${(@f)$(_call processes ps 2>/dev/null)}" ) +desc="$out[1]" +out=( "${(@M)out[2,-1]:#${~match}}" ) + +if [[ "$desc" = (#i)(|*[[:blank:]])pid(|[[:blank:]]*) ]]; then + index="${#desc[1,(r)(#i)[[:blank:]]pid]}" + pids=( "${(@)${(@M)out#${(l:index::?:)~:-}[^[:blank:]]#}##*[[:blank:]]}" ) +else + pids=( "${(@)${(@M)out##[^0-9]#[0-9]#}##*[[:blank:]]}" ) +fi if zstyle -T ":completion:${curcontext}:processes" verbose; then - zstyle -s ":completion:${curcontext}:processes-list" command listargs - (( $#listargs )) || listargs=( "$args[@]" ) - if [[ "$listargs" = "$args" ]]; then - list=("${(@Mr:COLUMNS-1:)${(f@)out}[2,-1]:#${~match}}") - else - list=("${(@Mr:COLUMNS-1:)${(f@)$(_call processes-list ps 2>/dev/null)}[2,-1]:#${~match}}") - fi + list=( "${(@Mr:COLUMNS-1:)out}" ) desc=(-ld list) else desc=() fi _wanted processes expl 'process ID' \ - compadd "$@" "$desc[@]" "$all[@]" - \ - ${${${(M)${(f)"${out}"}[2,-1]:#${~match}}## #}%% *} && ret=0 + compadd "$@" "$desc[@]" "$all[@]" -a pids && ret=0 if [[ -n "$all" ]]; then zstyle -s ":completion:${curcontext}:processes" insert-ids out || out=menu Index: Completion/Builtins/_zstyle =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Builtins/_zstyle,v retrieving revision 1.17 diff -u -r1.17 _zstyle --- Completion/Builtins/_zstyle 2000/08/02 13:45:52 1.17 +++ Completion/Builtins/_zstyle 2000/08/15 09:19:42 @@ -103,9 +103,9 @@ history-words hosts indexes jobs keymaps keysyms local-directories libraries limits manuals maps messages modifiers modules my-accounts named-directories names nicknames options original other-accounts packages -parameters path-directories paths pods ports prefixes processes ps regex -sequences sessions signals strings tags targets types urls users values -warnings widgets windows zsh-options) +parameters path-directories paths pods ports prefixes processes +processes-names ps regex sequences sessions signals strings tags targets +types urls users values warnings widgets windows zsh-options) _arguments -C ':context:->contexts' ':style:->styles' '*:argument:->style-arg' Index: Doc/Zsh/compsys.yo =================================================================== RCS file: /cvsroot/zsh/zsh/Doc/Zsh/compsys.yo,v retrieving revision 1.92 diff -u -r1.92 compsys.yo --- Doc/Zsh/compsys.yo 2000/08/10 23:06:42 1.92 +++ Doc/Zsh/compsys.yo 2000/08/15 09:19:44 @@ -744,11 +744,6 @@ item(tt(processes))( for process identifiers ) -kindex(processes-list, completion tag) -item(tt(processes-list))( -used to look up the tt(command) style when generating the list to -display for process identifiers -) kindex(processes-names, completion tag) item(tt(processes-names))( used to look up the tt(command) style when generating the names of @@ -934,11 +929,14 @@ command. As an example, the function generating process IDs as matches uses this -style with the tt(processes) tag to generate the IDs to complete and when -the tt(verbose) style is `true', it uses this style with the -tt(processes-list) tag to generate the strings to display. When using -different values for these two tags one should ensure that the process -IDs appear in the same order in both lists. +style with the tt(processes) tag to generate the IDs to complete and +the list of processes to display (if the tt(verbose) style is `true'). +The list produced by the command should look like the output of the +tt(ps) command. The first line is not displayed, but is searched for +the string `tt(PID)' (or `tt(pid)') to find the position of the +process IDs in the following lines. If the line does not contain +`tt(PID)', the first numbers in each of the other lines are taken as the +process IDs to complete. ) kindex(completer, completion style) item(tt(completer))( -- Sven Wischnowsky wischnow@informatik.hu-berlin.de