From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9154 invoked from network); 9 Sep 1999 09:21:45 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 9 Sep 1999 09:21:45 -0000 Received: (qmail 18235 invoked by alias); 9 Sep 1999 09:21:36 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 7737 Received: (qmail 18209 invoked from network); 9 Sep 1999 09:21:22 -0000 Date: Thu, 9 Sep 1999 11:21:20 +0200 (MET DST) Message-Id: <199909090921.LAA02526@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: Clint Adams's message of Wed, 8 Sep 1999 17:29:22 -0400 Subject: Re: PATCH: more completion stuff Clint Adams wrote: > > diff -u -r oldcompletion/User/_ssh Completion/User/_ssh > > --- oldcompletion/User/_ssh Wed Sep 8 15:36:18 1999 > > +++ Completion/User/_ssh Wed Sep 8 16:15:43 1999 > > @@ -0,0 +1,152 @@ > > +#compdef ssh ssh-add ssh-agent ssh-keygen > > Please add slogin to this. > > Also, it would be nice if the construct 'user@host' were supported. Yep, and `scp'. This also modifies `_users' a bit: if an array names `users' exists, we first complete only names from that array (and use `compgen -u' if that gives no matches). Bye Sven diff -u -r oldcompletion/User/_ssh Completion/User/_ssh --- oldcompletion/User/_ssh Wed Sep 8 16:19:44 1999 +++ Completion/User/_ssh Thu Sep 9 11:18:42 1999 @@ -1,10 +1,21 @@ -#compdef ssh ssh-add ssh-agent ssh-keygen +#compdef ssh slogin scp ssh-add ssh-agent ssh-keygen -local state lstate line ret=1 expl +local state lstate line ret=1 expl args typeset -A options +args=() + +# ssh-opt is a pseudo-command used to complete ssh options for `scp -o'. + case "$words[1]" in -ssh) +ssh|slogin) + args=( + ':remote host name:->userhost' + ':command: _command_names -e' + '*::args:->command' + ) + ;& +ssh-opt) _arguments -s \ '-a[disable forwarding of authentication agent connection]' \ '-c[select encryption cipher]:encryption cipher:(idea des 3des blowfish arcfour tss none)' \ @@ -25,9 +36,7 @@ '-C[compress all data]' \ '-L[specify local port forwarding]:local port forwarding:->forward' \ '-R[specify remote port forwarding]:remote port forwarding:->forward' \ - ':remote host name:_hosts' \ - ':command: _command_names -e' \ - '*::args:->command' && ret=0 + "$args[@]" && ret=0 while [[ -n "$state" ]]; do lstate="$state" @@ -113,11 +122,58 @@ _normal return ;; + userhost) + if compset -P '*@'; then + _description expl 'remote host name' + _hosts "$expl[@]" + return + else + _description expl 'remote host name' + _hosts "$expl[@]" && ret=0 + if (( ! $+options[-l] )); then + _description expl 'login name' + _users "$expl[@]" -S@ && ret=0 + fi + fi + ;; esac break; done + return ret + ;; +scp) + _arguments -s \ + '-c[select encryption cipher]:encryption cipher:(idea des 3des blowfish arcfour tss none)' \ + '-P[specify port on remote host]:port number on remote host:' \ + '-i[select identity file]:SSH identity file:_files' \ + '-S[specify path to ssh]:path to ssh:_files -g \*\(\*\)' \ + '-o[give SSH options]:options:->options' \ + '-p[preserve modification times]' \ + '-r[recursively copy directories]' \ + '-v[verbose mode]' \ + '-B[batch mode]' \ + '-C[compress data]' \ + '*:file:->file' && ret=0 + + if [[ "$state" = options ]]; then + compset -q + words=(ssh-opt "$words[@]" ) + (( CURRENT++ )) + _ssh + return + elif [[ -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 + fi + fi return ret ;; ssh-add) diff -u -r oldcompletion/User/_users Completion/User/_users --- oldcompletion/User/_users Wed Sep 8 16:19:43 1999 +++ Completion/User/_users Thu Sep 9 11:19:46 1999 @@ -1,6 +1,13 @@ #autoload +# If a parameter `users' exists and it is an array, we first try to +# complete only to its elements. + local expl _description expl user + +[[ "${(t)users}" = *array* ]] && + compadd "$expl[@]" "$@" - "$users[@]" && return 0 + compgen "$@" "$expl[@]" -u -- Sven Wischnowsky wischnow@informatik.hu-berlin.de