summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Completion/User/_chown8
-rw-r--r--Completion/User/_perl_basepods12
-rw-r--r--Completion/User/_perl_modules4
-rw-r--r--Completion/User/_user_at_host32
4 files changed, 39 insertions, 17 deletions
diff --git a/Completion/User/_chown b/Completion/User/_chown
index aa2ff4928..0363e838c 100644
--- a/Completion/User/_chown
+++ b/Completion/User/_chown
@@ -1,14 +1,18 @@
#compdef chown chgrp
+local suf
+
if [[ CURRENT -eq 2 || CURRENT -eq 3 && $words[CURRENT-1] = -* ]]; then
if [[ ${words[1]:t} = chgrp ]] || compset -P '*[:.]'; then
_groups
else
if [[ $OSTYPE = (solaris*|hpux*) ]]; then
- _users -S ':' -q
+ suf=':'
else
- _users -S '.' -q
+ suf='.'
fi
+ compset -S '.*' && unset suf
+ _users -S "$suf" -q
fi
else
_files
diff --git a/Completion/User/_perl_basepods b/Completion/User/_perl_basepods
index f4e70382b..4478c5263 100644
--- a/Completion/User/_perl_basepods
+++ b/Completion/User/_perl_basepods
@@ -11,20 +11,22 @@
if [[ ${+_perl_basepods} -eq 0 ]]; then
typeset -agU _perl_basepods
- if which basdepods >/dev/null; then
+ if (( ${+commands[basepods]} )); then
_perl_basepods=( ${$(basepods):t:r} )
else
local podpath
+
podpath=$(perl -MConfig -e 'print "$Config{installprivlib}/pod"')
+
if [[ ! -e $podpath/perl.pod ]]; then
echo "Couldn't find perl.pod from Config.pm; giving up."
return 1
else
- cd $podpath
- _perl_basepods=( *.pod(:r:t) )
- cd $OLDPWD
+ _perl_basepods=( ${podpath}/*.pod(:r:t) )
fi
fi
fi
-compadd - $_perl_basepods
+local expl
+
+_wanted pods expl 'Perl base pods' compadd - $_perl_basepods
diff --git a/Completion/User/_perl_modules b/Completion/User/_perl_modules
index c6ea93f4c..d63f94f1b 100644
--- a/Completion/User/_perl_modules
+++ b/Completion/User/_perl_modules
@@ -22,11 +22,11 @@ zparseopts -D -a opts S: q
if [[ ${+_perl_modules} -eq 0 ]]; then
if zstyle -t ":completion:${curcontext}:modules" try-to-use-pminst \
- && which pminst >/dev/null; then
+ && (( ${+commands[pminst]} )); then
_perl_modules=( $(pminst) )
else
local inc libdir new_pms
- if which perl >/dev/null; then
+ if (( ${+commands[perl]} )); then
inc=( $( perl -e 'print "@INC"' ) )
else
# If perl isn't there, one wonders why the user's trying to
diff --git a/Completion/User/_user_at_host b/Completion/User/_user_at_host
index 6006ef63b..b652242d3 100644
--- a/Completion/User/_user_at_host
+++ b/Completion/User/_user_at_host
@@ -1,15 +1,31 @@
#autoload
-local expl nm="$compstate[nmatches]"
+# Complete user/host combinations. Normally this looks for the style
+# `users-hosts' for the tag `accounts'. A different tag may be given
+# with `-t tag'.
+# A `-' or `--' as the first argument is ignored.
+
+local suf tag=accounts
+
+if [[ "$1" = -t?* ]]; then
+ tag="${1[3,-1]}"
+ shift
+elif [[ "$1" = -t ]]; then
+ tag="$2"
+ shift 2
+fi
+
+[[ "$1" = -(|-) ]] && shift
if [[ -prefix 1 *@ ]]; then
- local user=${PREFIX/@}
+ local user=${PREFIX%%@*}
+
compset -P 1 '*@'
- _description expl "hostnames for $user"
- _combination accounts_users_hosts users="$user" hosts "$expl[@]" "$@"
+
+ _wanted -C user-at hosts expl "host for $user" \
+ _combination -s '[:@]' "${tag}" users-hosts users="$user" hosts "$@" -
else
- _description expl "usernames"
- _combination accounts_users_hosts users -S@ -q "$expl[@]" "$@"
+ compset -S '@*' || suf="@"
+ _wanted users expl "user" \
+ _combination -s '[:@]' "${tag}" users-hosts users -S "$suf" -q "$@" -
fi
-
-[[ nm -ne compstate[nmatches] ]]