diff options
-rw-r--r-- | Completion/Base/_arguments | 2 | ||||
-rw-r--r-- | Completion/Builtins/_pids | 10 | ||||
-rw-r--r-- | Completion/Linux/_rpm | 4 | ||||
-rw-r--r-- | Completion/User/_a2ps | 2 | ||||
-rw-r--r-- | Completion/User/_archie | 2 | ||||
-rw-r--r-- | Completion/User/_diff_options | 2 | ||||
-rw-r--r-- | Completion/User/_finger | 2 | ||||
-rw-r--r-- | Completion/User/_groups | 2 | ||||
-rw-r--r-- | Completion/User/_gs | 2 | ||||
-rw-r--r-- | Completion/User/_killall | 2 | ||||
-rw-r--r-- | Completion/User/_lp | 2 | ||||
-rw-r--r-- | Completion/User/_telnet | 2 | ||||
-rw-r--r-- | Completion/User/_users_on | 2 | ||||
-rw-r--r-- | Completion/User/_yp | 4 | ||||
-rw-r--r-- | Completion/X/_x_font | 2 | ||||
-rw-r--r-- | Completion/X/_x_window | 2 | ||||
-rw-r--r-- | Doc/Zsh/compsys.yo | 54 |
17 files changed, 65 insertions, 33 deletions
diff --git a/Completion/Base/_arguments b/Completion/Base/_arguments index 50c368b11..472f085d5 100644 --- a/Completion/Base/_arguments +++ b/Completion/Base/_arguments @@ -67,7 +67,7 @@ if (( long )); then # those hyphens and anything from the space or comma after the # option up to the end. - lopts=("--${(@)^${(@)${(@)${(@M)${(@ps:\n:j:\n:)${(@)${(@M)${(@f)$(${~words[1]} --help 2>&1)//\[--/ + lopts=("--${(@)^${(@)${(@)${(@M)${(@ps:\n:j:\n:)${(@)${(@M)${(@f)$(_call options ${~words[1]} --help 2>&1)//\[--/ --}:#[ ]#-*}//,/ }}:#[ ]#--*}#*--}%%[], ]*}:#}") lopts=( "${(@)lopts:#--}" ) diff --git a/Completion/Builtins/_pids b/Completion/Builtins/_pids index d74cd9a56..92fc9bac7 100644 --- a/Completion/Builtins/_pids +++ b/Completion/Builtins/_pids @@ -12,17 +12,17 @@ if [[ "$1" = -m ]]; then shift 2 fi -zstyle -a ":completion:${curcontext}:ps" arguments args +zstyle -s ":completion:${curcontext}:pids" command args -out="$(command ps $args 2>/dev/null)" +out="$(_call pids ps 2>/dev/null)" if zstyle -T ":completion:${curcontext}:processes" verbose; then - zstyle -a ":completion:${curcontext}:ps" list-arguments listargs + zstyle -s ":completion:${curcontext}:pids-list" command listargs (( $#listargs )) || listargs=( "$args[@]" ) if [[ "$listargs" = "$args" ]]; then list=("${(@Mr:COLUMNS-1:)${(f@)out}[2,-1]:#[ ]#${PREFIX}[0-9]#${SUFFIX}[ ]*${~match}}") else - list=("${(@Mr:COLUMNS-1:)${(f@)$(command ps $listargs 2>/dev/null)}[2,-1]:#[ ]#${PREFIX}[0-9]#${SUFFIX}[ ]*${~match}}") + list=("${(@Mr:COLUMNS-1:)${(f@)$(_call pids-list ps 2>/dev/null)}[2,-1]:#[ ]#${PREFIX}[0-9]#${SUFFIX}[ ]*${~match}}") fi desc=(-ld list) else @@ -30,4 +30,4 @@ else fi compadd "$expl[@]" "$@" "$desc[@]" - \ - ${${${(M)${(f)"$(command ps $args 2>/dev/null)"}[2,-1]:#[ ]#${PREFIX}[0-9]#${SUFFIX}[ ]#*${~match}}## #}%% *} + ${${${(M)${(f)"${out}"}[2,-1]:#[ ]#${PREFIX}[0-9]#${SUFFIX}[ ]#*${~match}}## #}%% *} diff --git a/Completion/Linux/_rpm b/Completion/Linux/_rpm index a1bd5281b..d5978eb0b 100644 --- a/Completion/Linux/_rpm +++ b/Completion/Linux/_rpm @@ -190,7 +190,7 @@ while [[ -n "$state" ]]; do ;& package) _wanted packages expl 'RPM package' && - compadd "$expl[@]" -M 'r:|-=* r:|=*' - $(rpm -qa) && ret=0 + compadd "$expl[@]" -M 'r:|-=* r:|=*' - $(_call packages rpm -qa) && ret=0 ;; package_file) if compset -P ftp://; then @@ -205,7 +205,7 @@ while [[ -n "$state" ]]; do if compset -P '*\{'; then _wanted tags expl 'RPM tag' && compadd "$expl[@]" -M 'm:{a-z}={A-Z}' -S '\}' - \ - "${(@)${(@f)$(rpm --querytags)}#RPMTAG_}" && ret=0 + "${(@)${(@f)$(_call tags rpm --querytags)}#RPMTAG_}" && ret=0 else _message 'RPM format' fi diff --git a/Completion/User/_a2ps b/Completion/User/_a2ps index 5fbe1990b..d7c9b68e9 100644 --- a/Completion/User/_a2ps +++ b/Completion/User/_a2ps @@ -7,7 +7,7 @@ if [[ "$words[1]" != "$_a2ps_cache_cmd" ]]; then _a2ps_cache_cmd="$words[1]" - descr=( "${(@)${(f@)$(LC_ALL=C $words[1] --list=features)// + descr=( "${(@)${(f@)$(_call features LC_ALL=C $words[1] --list=features)// / }:#}" ) _a2ps_cache_values=( diff --git a/Completion/User/_archie b/Completion/User/_archie index e1c9156fa..57a5db494 100644 --- a/Completion/User/_archie +++ b/Completion/User/_archie @@ -24,7 +24,7 @@ _arguments -C -s \ case "$state" in serverhost) - : ${(A)archie_servers:=${(M)$(archie -L):#archie.*}} + : ${(A)archie_servers:=${(M)$(_call hosts archie -L):#archie.*}} _wanted hosts expl 'archie servers' && compadd "$expl[@]" - $archie_servers ;; diff --git a/Completion/User/_diff_options b/Completion/User/_diff_options index 5cae712d3..4d994acb6 100644 --- a/Completion/User/_diff_options +++ b/Completion/User/_diff_options @@ -4,7 +4,7 @@ local of ofwuc ouc oss ofwy ofwg ofwl (( $+_diff_is_gnu )) || { _diff_is_gnu=0; - [[ $(command diff -v </dev/null 2>/dev/null) == *GNU* ]] && _diff_is_gnu=1 + [[ $(_call version diff -v </dev/null 2>/dev/null) == *GNU* ]] && _diff_is_gnu=1 } if (( _diff_is_gnu )) diff --git a/Completion/User/_finger b/Completion/User/_finger index 9b5760be7..0846acf4e 100644 --- a/Completion/User/_finger +++ b/Completion/User/_finger @@ -4,7 +4,7 @@ local curcontext="$curcontext" state line typeset -A opt_args if (( ! $+_finger_args )); then - local help="$(finger -\? 2>&1)" + local help="$(_call options finger -\? 2>&1)" local -A optionmap ## `finger -\?': diff --git a/Completion/User/_groups b/Completion/User/_groups index 74efe179b..b4ecab38c 100644 --- a/Completion/User/_groups +++ b/Completion/User/_groups @@ -7,7 +7,7 @@ _wanted groups expl group || return 1 if ! zstyle -a ":completion:${curcontext}:" groups groups; then (( $+_cache_groups )) || if (( ${+commands[ypcat]} )); then - : ${(A)_cache_groups:=${${(s: :)$(ypcat group.byname)}%%:*}} # If you use YP + : ${(A)_cache_groups:=${${(s: :)$(_call groups ypcat group.byname)}%%:*}} # If you use YP else : ${(A)_cache_groups:=${${(s: :)$(</etc/group)}%%:*}} fi diff --git a/Completion/User/_gs b/Completion/User/_gs index e81611ef9..8ae5a65f9 100644 --- a/Completion/User/_gs +++ b/Completion/User/_gs @@ -36,7 +36,7 @@ else case "$IPREFIX" in *DEVICE\=) _wanted devices expl 'ghostscript device' && - compadd "$expl[@]" - "${(@)${=${$(gs -h)##* devices:}%%Search path:*}:#}" && ret=0 + compadd "$expl[@]" - "${(@)${=${$(_call devices gs -h)##* devices:}%%Search path:*}:#}" && ret=0 ;; *OutputFile\=) _description files expl 'output file' diff --git a/Completion/User/_killall b/Completion/User/_killall index 05bc8e709..f305e2ef4 100644 --- a/Completion/User/_killall +++ b/Completion/User/_killall @@ -3,7 +3,7 @@ if [[ "$OSTYPE" = linux* ]]; then _alternative \ 'signals:: _signals -p' \ - 'processes:process:{ compadd "$expl[@]" ${$(ps ho comm 2> /dev/null):#(ps|COMMAND)} }' + 'processes:process:{ compadd "$expl[@]" ${$(_call pids ps ho comm 2> /dev/null):#(ps|COMMAND)} }' else _signals -p fi diff --git a/Completion/User/_lp b/Completion/User/_lp index d1c110b1c..51fbb1616 100644 --- a/Completion/User/_lp +++ b/Completion/User/_lp @@ -64,7 +64,7 @@ else else printer=() fi - list=( ${(M)"${(f@)$(lpq $printer 2> /dev/null)}":#[0-9]*} ) + list=( ${(M)"${(f@)$(_call jobs lpq $printer 2> /dev/null)}":#[0-9]*} ) if (( $#list )); then _tags users jobs diff --git a/Completion/User/_telnet b/Completion/User/_telnet index 9df23b87c..2542ff34d 100644 --- a/Completion/User/_telnet +++ b/Completion/User/_telnet @@ -9,7 +9,7 @@ local curcontext="$curcontext" state line expl typeset -A opt_args if (( ! $+_telnet_args )); then - local help="$(telnet -\? < /dev/null 2>&1)" + local help="$(_call options telnet -\? < /dev/null 2>&1)" local -A optionmap optionmap=( '*\[-8\]*' '-8[allow 8-Bit data]' diff --git a/Completion/User/_users_on b/Completion/User/_users_on index 0589e7059..f620f83c7 100644 --- a/Completion/User/_users_on +++ b/Completion/User/_users_on @@ -6,7 +6,7 @@ _tags users || return 1 if which users >/dev/null; then _description users expl 'users logged on' - compadd "$@" "$expl[@]" - $(users) && return 0 + compadd "$@" "$expl[@]" - $(_call users users) && return 0 else # Other methods of finding out users logged on should be added here return 1 diff --git a/Completion/User/_yp b/Completion/User/_yp index 1e86bf278..fe3c0a482 100644 --- a/Completion/User/_yp +++ b/Completion/User/_yp @@ -4,8 +4,8 @@ local curcontext="$curcontext" line state ret=1 typeset -A opt_args if (( ! $+_yp_cache_maps )); then - _yp_cache_maps=( "${(@)${(@f)$(ypwhich -m)}%% *}" ) - _yp_cache_nicks=( "${(@)${(@)${(@f)$(ypwhich -x)}#*\"}%%\"*}" ) + _yp_cache_maps=( "${(@)${(@f)$(_call maps ypwhich -m)}%% *}" ) + _yp_cache_nicks=( "${(@)${(@)${(@f)$(_call names ypwhich -x)}#*\"}%%\"*}" ) _yp_args=( '(-x)-d[specify domain]:domain name:' \ '(-x)-k[display keys]' \ diff --git a/Completion/X/_x_font b/Completion/X/_x_font index 59c628d6d..1be2d3312 100644 --- a/Completion/X/_x_font +++ b/Completion/X/_x_font @@ -9,7 +9,7 @@ _wanted fonts expl font || return 1 if (( ! $+_font_cache )); then typeset -gU _font_cache - _font_cache=( "${(@)^${(@f)$(xlsfonts)}%%--*}--" ) + _font_cache=( "${(@)^${(@f)$(_call fonts xlsfonts)}%%--*}--" ) fi compadd -M 'r:|-=* r:|=*' "$expl[@]" "$@" -S '' - "$_font_cache[@]" diff --git a/Completion/X/_x_window b/Completion/X/_x_window index 139210f32..a79f7fd62 100644 --- a/Completion/X/_x_window +++ b/Completion/X/_x_window @@ -4,7 +4,7 @@ local list expl _tags windows || return 1 -list=( "${(@)${(M@)${(@f)$(xwininfo -root -tree)}:#[ ]#0x[0-9a-f]# \"*}##[ ]#}" ) +list=( "${(@)${(M@)${(@f)$(_call windows xwininfo -root -tree)}:#[ ]#0x[0-9a-f]# \"*}##[ ]#}" ) if [[ "$1" = -n ]]; then shift diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo index 27e52c8b2..bc5c70ef4 100644 --- a/Doc/Zsh/compsys.yo +++ b/Doc/Zsh/compsys.yo @@ -587,6 +587,13 @@ item(tt(paths))( used to look up the values of the tt(expand), tt(cursor) and tt(special-dirs) styles ) +item(tt(pids))( +for process identifiers +) +item(tt(pids-list))( +used to look up the tt(command) style when generating the list to +display for process identifiers +) item(tt(pods))( for perl pods ) @@ -602,9 +609,6 @@ for printer names item(tt(processes))( for process identifiers ) -item(tt(ps))( -used to look up the tt(arguments) and tt(list-arguments) styles -) item(tt(sequences))( for sequences (e.g. tt(mh) sequences) ) @@ -674,10 +678,6 @@ item(tt(add-space))( This style is used by the tt(_prefix) completer to decide if a space should be inserted before the suffix. ) -item(tt(arguments))( -The value of this style is given to the tt(ps) command by functions -that call it when generating process identifiers as matches. -) item(tt(auto-description))( If set, this style's value will be used as the description for options which are not described by the completion functions, but that have exactly @@ -693,6 +693,25 @@ should be a pattern and all keys matching this pattern will cause the widget to stop incremental completion without the key having any further effect. ) +item(tt(command))( +This style can be used to override the defaults in several completion +functions for how commands are called to generate information about +possible matches. The strings in the value are joined with spaces +between them to build the command line to execute. If the value starts +with a hyphen the string built will be prepended to the default +supplied by the completion function. This allows one to easily stick a +tt(builtin) or tt(command) in front of the default in case one has, +for example, a shell function with the same name as the command +called, but for completion purposes one needs to ensure that the real +command is called. + +For example, the function generating process IDs as matches uses this +style with the tt(pids) tag to generate the IDs to complete and iwhen +the tt(verbose) style is `true', it uses this style with the +tt(pids-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. +) item(tt(completer))( The strings given as the value of this style give the names of the completer functions to use. The available completer functions are @@ -1005,10 +1024,6 @@ The tt(predict-on) widget uses this style to decide if the completion should be shown even if there is only one possible completion. This is done if the value of this style is the string tt(always). ) -item(tt(list-arguments))( -Like the tt(arguments) style, but used when calling the tt(ps) command -to generate the list to display. -) item(tt(list-colors))( If the tt(zsh/complist) module is used, this style can be used to set color specifications as with the tt(ZLS_COLORS) and tt(ZLS_COLOURS) @@ -1469,6 +1484,10 @@ item(tt(users-hosts-ports))( Like tt(users-hosts) but used for commands like tt(telnet) and containing strings of the form `var(user)tt(@)var(host)tt(:)var(port)'. ) +item(tt(users-hosts-ports))( +Like tt(users-hosts) but used for commands like tt(telnet) and +containing strings of the form `var(user)tt(@)var(host)tt(:)var(port)'. +) item(tt(verbose))( This is used in several contexts to decide if only a simple or a verbose list of matches should be generated. For example some commands @@ -1909,6 +1928,19 @@ example, the function completing inside subscripts might use `tt(_compalso -math-)' to include the completions generated for mathematical environments. ) +findex(_call) +item(tt(_call) var(tag) var(string) ...)( +This function is used in places where a command is called and the user +should have the possibility to override the default for calling this +command. It looks up the tt(command) style with the supplied +var(tag). If the style is set, its value is used as the command to +execute. + +In any case, the var(strings) from the call to tt(_call) or from the +style are concatenated with spaces between them and the resulting +string is evaluated. The return value is the return value of the +command called. +) findex(_normal) item(tt(_normal))( This function is used for normal command completion. If |