#compdef rlogin rsh remsh rcp _rlogin () { local accounts_users_hosts local varname="$words[1]_accounts" if (( ${(P)+varname} )); then accounts_users_hosts=( ${(P)varname} ) else accounts_users_hosts=( $my_accounts ) fi case "$words[1]" in rlogin) _arguments -s \ '-8[allow 8-Bit data]' \ '-e-[specify escape character]:escape character:' \ '-l[specify login user name]:login as:_rlogin_users' \ ':remote host name:_rlogin_hosts' ;; rsh|remsh) local state line ret=1 typeset -A opt_args _arguments -s \ '-n[ignore stdin]' \ '-l[specify login user name]:login as:_rlogin_users' \ ':remote host name:_rlogin_hosts' \ ':command: _command_names -e' \ '*::command:->command' && ret=0 if [[ -n "$state" ]]; then shift 1 words (( CURRENT-- )) _normal && ret=0 fi return ret ;; rcp) local state line ret=1 typeset -A opt_args _arguments -s \ '-p[preserve modification times]' \ '-r[recursively copy directories]' \ '*:files:->files' && ret=0 if [[ -n "$state" ]]; then if compset -P '*:'; then _files && ret=0 elif compset -P '*@'; then _rlogin_hosts -S: -q && ret=0 else _files && ret=0 _rlogin_all_hosts -S: -q && ret=0 _rlogin_users -S@ -q && ret=0 fi fi return ret ;; esac } _rlogin_users () { _combination accounts_users_hosts users "$@" } _rlogin_hosts () { if [[ "$IPREFIX" == *@ ]]; then _combination accounts_users_hosts "users=${IPREFIX/@}" hosts "$@" else _combination accounts_users_hosts \ ${opt_args[-l]:+"users=${opt_args[-l]:q}"} hosts "$@" fi } _rlogin_all_hosts () { _combination accounts_users_hosts hosts "$@" } _rlogin "$@"