diff options
Diffstat (limited to 'Completion/User/_rlogin')
-rw-r--r-- | Completion/User/_rlogin | 123 |
1 files changed, 77 insertions, 46 deletions
diff --git a/Completion/User/_rlogin b/Completion/User/_rlogin index 2b8fdd287..825786d80 100644 --- a/Completion/User/_rlogin +++ b/Completion/User/_rlogin @@ -1,51 +1,82 @@ #compdef rlogin rsh remsh rcp -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:_users' \ - ':remote host name:_hosts' - ;; -rsh|remsh) - local state line ret=1 - typeset -A options - - _arguments -s \ - '-n[ignore stdin]' \ - '-l[specify login user name]:login as:_users' \ - ':remote host name:_hosts' \ - ':command: _command_names -e' \ - '*::command:->command' && ret=0 - - if [[ -n "$state" ]]; then - shift 1 words - (( CURRENT-- )) - _normal && ret=0 +_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 - return ret - ;; -rcp) - local state line ret=1 - typeset -A options - - _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 - _hosts -S: && ret=0 - else - _files && ret=0 - _hosts -S: && ret=0 - _users -S@ && ret=0 + + 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 options + + _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 options + + _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 \ + ${options[-l]:+"users=${options[-l]:q}"} hosts "$@" fi - return ret - ;; -esac +} + +_rlogin_all_hosts () { + _combination accounts_users_hosts hosts "$@" +} + +_rlogin "$@" |