Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: completion grouping
- X-seq: zsh-workers 8537
- From: Sven Wischnowsky <wischnow@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: Re: completion grouping
- Date: Thu, 4 Nov 1999 14:50:01 +0100 (MET)
- In-reply-to: Sven Wischnowsky's message of Thu, 4 Nov 1999 10:32:43 +0100 (MET)
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
(I'm beginning to think that maybe everyone should apply 8520 and 8533
even though I said otherwise in 8520 -- it's probably easier to
build/change that than to keep different versions alive.)
I wrote:
> I also forgot to mention another thing that may be interesting: I
> already used the style-stuff for `describe_option' and friends. That
> was easy to think about because they allowed definitions on a per-
> command basis already. But ther may be other things we currently use
> config keys for which may be interesting to turn into styles so that
> we can define them differently for different commands (the `ps_*' keys
> come to mind, but that may be a bad example). If we do that, however,
> we probably should think about some standard structure for defining
> styles. Things like multiple styles (separated by commas?), styles
> with values (`[style_a=foo,style_b=bar]' or something like that). If
> this turns out to be useful, I would like change `_tags' to report
> styles in a format that is easier to parse in the calling functions.
When hacking the tags stuff I first thought about storing the
definitions in `compconfig'. The I decided against that because for tags
we need a more convenient way to modify the entries than what
`compconf' offers (where it isn't needed).
After having a look at the keys as listed in the compsys doc, I'm back
again at the idea to combine configuration definitions and tag
definitions -- but this time the other way round. There are only very
few config keys for which it is really completely unnecessary to let
user define them per-command. For several keys it would be rather
weird to define different values, but that never kept us from doing
things.
So, maybe we should try to look at it from this point of view and see
what comes of it... (per-command completer-key? ouch! ;-)
We'll need an easy way to define per-tag defaults and some kind of
agreement about what to do with keys that must not have more than one
value, and we should probably try to make this look less tag-centered
(with styles looking only like some random add-on), etc.
This patch finally adds `_pids' to complete process ids and make the
functions use it. It also adds the `-i' option to `_tags' which means
`immediately' and can be used like `_tags -i foo || return 1' to name
a tag and immediately check if matches of that type are wanted.
Otherwise there isn't much... I just had some time while waiting for a
compiler run.
Bye
Sven
diff -u -r oldcompletion/Base/_describe Completion/Base/_describe
--- oldcompletion/Base/_describe Thu Nov 4 10:33:55 1999
+++ Completion/Base/_describe Thu Nov 4 14:32:45 1999
@@ -23,9 +23,7 @@
# Do the tests. `showd' is set if the descriptions should be shown.
-_tags -c "$cmd" -f "$func" "$type"
-
-_tags || return 1
+_tags -i -c "$cmd" -f "$func" "$type" || return 1
[[ "$tags" = *:${type}\[*describe*\]* ]] && showd=yes
diff -u -r oldcompletion/Base/_values Completion/Base/_values
--- oldcompletion/Base/_values Thu Nov 4 10:33:55 1999
+++ Completion/Base/_values Thu Nov 4 14:32:10 1999
@@ -6,8 +6,7 @@
if ! compvalues -D descr action; then
- _tags value
- _tags || return 1
+ _tags -i value || return 1
compvalues -V noargs args opts
@@ -52,8 +51,7 @@
fi
fi
- _tags argument
- _tags || return 1
+ _tags -i argument || return 1
_description expl "$descr"
diff -u -r oldcompletion/Builtins/_kill Completion/Builtins/_kill
--- oldcompletion/Builtins/_kill Thu Nov 4 10:33:56 1999
+++ Completion/Builtins/_kill Thu Nov 4 14:32:05 1999
@@ -1,24 +1,21 @@
#compdef kill
-local list expl
+local tags list expl
if compset -P 1 -; then
+
+ _tags -i signal || return 1
+
_description expl signal
compadd "$expl[@]" $signals[1,-3]
else
- local tags ret=1
+ local ret=1
_tags job process
while _tags; do
- [[ "$tags" = *:job:* ]] && _jobs && ret=0
- if [[ "$tags" = *:process:* ]]; then
- list=("${(@M)${(f@)$(ps ${=compconfig[ps_listargs]:-$=compconfig[ps_args]} 2>/dev/null)}[2,-1]:#[ ]#${PREFIX}[0-9]#${SUFFIX}[ ]*}")
- _description expl 'process ID'
- compadd "$expl[@]" -ld list - \
- ${${${(f)"$(ps $=compconfig[ps_args] 2>/dev/null)"}[2,-1]## #}%% *} &&
- ret=0
- fi
+ [[ "$tags" = *:job:* ]] && _jobs && ret=0
+ [[ "$tags" = *:process:* ]] && _pids && ret=0
(( ret )) || break
done
diff -u -r oldcompletion/Builtins/_pids Completion/Builtins/_pids
--- oldcompletion/Builtins/_pids Thu Nov 4 13:48:35 1999
+++ Completion/Builtins/_pids Thu Nov 4 14:28:00 1999
@@ -0,0 +1,18 @@
+#autoload
+
+# If given the `-m <pattern>' option, this tries to complete only pids
+# of processes whose command line match the `<pattern>'.
+
+local list expl match
+
+if [[ "$1" = -m ]]; then
+ match="${2}*"
+ shift 2
+fi
+
+_description expl 'process ID'
+
+list=("${(@Mr:COLUMNS-1:)${(f@)$(ps ${=compconfig[ps_listargs]:-$=compconfig[ps_args]} 2>/dev/null)}[2,-1]:#[ ]#${PREFIX}[0-9]#${SUFFIX}[ ]*${~match}}")
+
+compadd "$expl[@]" "$@" -ld list - \
+ ${${${(M)${(f)"$(ps $=compconfig[ps_args] 2>/dev/null)"}[2,-1]:#*${~match}}## #}%% *}
diff -u -r oldcompletion/Builtins/_wait Completion/Builtins/_wait
--- oldcompletion/Builtins/_wait Thu Nov 4 10:33:57 1999
+++ Completion/Builtins/_wait Thu Nov 4 13:41:11 1999
@@ -1,18 +1,12 @@
#compdef wait
-local tags list ret=1 expl
+local tags ret=1
_tags job process
while _tags; do
- [[ "$tags" = *:job:* ]] && _jobs && ret=0
- if [[ "$tags" = *:process:* ]]; then
- list=("${(@M)${(f@)$(ps ${=compconfig[ps_listargs]:-$=compconfig[ps_args]} 2>/dev/null)}[2,-1]:#[ ]#${PREFIX}[0-9]#${SUFFIX}[ ]*}")
- _description expl 'process ID'
- compadd "$expl[@]" -ld list - \
- ${${${(f)"$(ps $=compconfig[ps_args] 2>/dev/null)"}[2,-1]## #}%% *} &&
- ret=0
- fi
+ [[ "$tags" = *:job:* ]] && _jobs && ret=0
+ [[ "$tags" = *:process:* ]] && _pids && ret=0
(( ret )) || break
done
diff -u -r oldcompletion/Core/_tags Completion/Core/_tags
--- oldcompletion/Core/_tags Thu Nov 4 10:34:00 1999
+++ Completion/Core/_tags Thu Nov 4 14:31:24 1999
@@ -2,13 +2,14 @@
if (( $# )); then
local cmd="$words[1]" func="$funcstack[2]" defs i tags tag pat style prio
+ local trynow
- while getopts 'c:f:' i; do
- if [[ "$i" = c ]]; then
- cmd="$OPTARG"
- else
- func="$OPTARG"
- fi
+ while getopts 'c:f:i' i; do
+ case "$i" in
+ c) cmd="$OPTARG" ;;
+ f) func="$OPTARG" ;;
+ i) trynow=yes ;;
+ esac
done
shift OPTIND-1
@@ -67,7 +68,7 @@
_prio_names[$funcstack]="$prio"
eval "${prio}=( \"\${(@)tags:#}\" )"
- return 0
+ [[ -z "$trynow" ]] && return 0
fi
local prios="$_prio_names[$funcstack]"
diff -u -r oldcompletion/User/_gdb Completion/User/_gdb
--- oldcompletion/User/_gdb Thu Nov 4 10:34:03 1999
+++ Completion/User/_gdb Thu Nov 4 13:52:25 1999
@@ -21,20 +21,22 @@
_description expl option
compadd "$expl[@]" -QS '' - -symbols\= -exec\= -se\= -core\= -command\= \
-directory\= -cd\= -tty\=
- compadd "$expl[@]" - -help -h -s -e -c -x -d -nx -n -quiet -q -batch \
- -fullname -f -b
+ compadd "$expl[@]" - -help -h -s -e -c -x -d -nx -n -quiet -q \
+ -batch -fullname -f -b
else
prev="$words[CURRENT-1]"
case "$prev" in
- (-d) _files -/ && return 0 ;;
+ (-d) _files -/ && return 0 ;;
(-[csx]) _files && return 0 ;;
- (-e) _description expl executable
- _files "$expl[@]" -g '*(*)' && return 0 ;;
- (-b) _description -V expl 'baud rate'
- compadd "$expl[@]" 0 50 75 110 134 150 200 300 600 1200 1800 2400 4800 \
- 9600 19200 38400 57600 115200 230400 && return 0 ;;
+ (-e) _description expl executable
+ _files "$expl[@]" -g '*(*)' && return 0 ;;
+ (-b) _description -V expl 'baud rate'
+ compadd "$expl[@]" 0 50 75 110 134 150 200 300 600 1200 1800 \
+ 2400 4800 9600 19200 38400 57600 115200 \
+ 230400 && return 0 ;;
esac
+
w=( "${(@)words[2,-1]}" )
while [[ "$w[1]" = -* ]]; do
[[ "$w[1]" = -[decsxb] ]] && shift 1 w
@@ -42,10 +44,8 @@
done
if [[ $#w -gt 1 ]]; then
- _files && ret=0
- _description expl 'process ID'
- list=("${(@M)${(f)$(ps ${=compconfig[ps_listargs]:-$=compconfig[ps_args]} 2>/dev/null)}[2,-1]:#[ ]#${PREFIX}[0-9]#${SUFFIX}[ ]*${w[1]:t}*}")
- compadd "$expl[@]" -ld list - ${${${(M)${(f)"$(ps $=compconfig[ps_args] 2>/dev/null)"}:#*${w[1]:t}*}## #}%% *} && ret=0
+ _files && ret=0
+ _pids -m "${w[1]:t}" && ret=0
return ret
else
--
Sven Wischnowsky wischnow@xxxxxxxxxxxxxxxxxxxxxxx
Messages sorted by:
Reverse Date,
Date,
Thread,
Author