1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-10-23 04:30:24 +02:00

zsh-workers/7737

This commit is contained in:
Tanaka Akira 1999-09-09 09:30:07 +00:00
parent b6dd9af942
commit 2aaebab316
2 changed files with 69 additions and 6 deletions

View file

@ -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 @@ ssh)
'-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 @@ ssh)
_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)

View file

@ -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