diff options
-rw-r--r-- | Completion/User/_chown | 8 | ||||
-rw-r--r-- | Completion/User/_perl_basepods | 12 | ||||
-rw-r--r-- | Completion/User/_perl_modules | 4 | ||||
-rw-r--r-- | Completion/User/_user_at_host | 32 |
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] ]] |