summaryrefslogtreecommitdiffstats
path: root/completions/ssh-keygen
diff options
context:
space:
mode:
Diffstat (limited to 'completions/ssh-keygen')
-rw-r--r--completions/ssh-keygen80
1 files changed, 44 insertions, 36 deletions
diff --git a/completions/ssh-keygen b/completions/ssh-keygen
index 0e629a5..3f9d175 100644
--- a/completions/ssh-keygen
+++ b/completions/ssh-keygen
@@ -1,16 +1,16 @@
# ssh-keygen(1) completion -*- shell-script -*-
-_ssh_keygen()
+_comp_cmd_ssh_keygen()
{
- local cur prev words cword
- _init_completion -n := || return
+ local cur prev words cword comp_args
+ _comp_initialize -n := -- "$@" || return
case $prev in
-*[aCIJjMNPSVWz])
return
;;
-*b)
- local -a sizes
+ local -a sizes=()
case "${words[*]}" in
*" -t dsa"?( *))
sizes=(1024)
@@ -22,102 +22,110 @@ _ssh_keygen()
sizes=(1024 2048 3072 4096)
;;
esac
- COMPREPLY=($(compgen -W '${sizes[@]}' -- "$cur"))
+ ((${#sizes[@]})) &&
+ _comp_compgen -- -W '"${sizes[@]}"'
return
;;
-*E)
- COMPREPLY=($(compgen -W 'md5 sha256' -- "$cur"))
+ _comp_compgen -- -W 'md5 sha256'
return
;;
-*[FR])
# TODO: trim this down to actual entries in known hosts files
- _known_hosts_real -- "$cur"
+ _comp_compgen_known_hosts -- "$cur"
return
;;
-*[Dw])
- _filedir so
+ _comp_compgen_filedir so
return
;;
-*[fGKsT])
- _filedir
+ _comp_compgen_filedir
return
;;
-*m)
- COMPREPLY=($(compgen -W 'PEM PKCS8 RFC4716' -- "$cur"))
+ _comp_compgen -- -W 'PEM PKCS8 RFC4716'
return
;;
-*n)
[[ ${words[*]} != *\ -*Y\ * ]] || return
- local prefix=
- [[ $cur == *,* ]] && prefix="${cur%,*},"
if [[ ${words[*]} == *\ -*h\ * ]]; then
- _known_hosts_real -- "${cur##*,}"
+ _comp_compgen_known_hosts -- "${cur##*,}"
+ ((${#COMPREPLY[@]})) &&
+ _comp_delimited , -W '"${COMPREPLY[@]}"'
else
- COMPREPLY=($(compgen -u -- "${cur##*,}"))
+ _comp_delimited , -u
fi
- ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
return
;;
-*O)
if [[ $cur != *=* ]]; then
- COMPREPLY=($(compgen -W '
- clear critical: extension: force-command=
+ _comp_compgen -- -W 'clear critical: extension: force-command=
no-agent-forwarding no-port-forwarding no-pty no-user-rc
no-x11-forwarding permit-agent-forwarding
permit-port-forwarding permit-pty permit-user-rc
permit-X11-forwarding no-touch-required source-address=
+ verify-required
lines= start-line= checkpoint= memory= start= generator=
- application challenge= device resident user
- write-attestation-path
- ' -- "$cur"))
+ application= challenge= device= no-touch-required resident
+ user= write-attestation='
+
[[ ${COMPREPLY-} == *[:=] ]] && compopt -o nospace
- __ltrim_colon_completions "$cur"
+ _comp_ltrim_colon_completions "$cur"
else
case $cur in
force-command=*)
compopt -o filenames
- COMPREPLY=($(compgen -c -- "${cur#*=}"))
+ _comp_compgen -c "${cur#*=}" commands
+ ;;
+ checkpoint=* | challenge=* | write-attestation=*)
+ _comp_compgen -c "${cur#*=}" filedir
+ ;;
+ application=*([^:=]))
+ _comp_compgen -c "${cur#*=}" -- -W "ssh:"
+ compopt -o nospace
;;
- checkpoint=* | challenge=*)
- cur=${cur#*=}
- _filedir
+ user=*)
+ _comp_compgen -c "${cur#*=}" -- -u
;;
esac
fi
return
;;
-*r)
- [[ ${words[*]} != *\ -*Y\ * ]] || _filedir
+ [[ ${words[*]} != *\ -*Y\ * ]] || _comp_compgen_filedir
return
;;
-*t)
- local protocols=$(_xfunc ssh _ssh_query "$1" protocol-version)
+ # Prefer `ssh` from same dir for resolving options, etc
+ local pathcmd protocols
+ pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ _comp_compgen -v protocols -x ssh query protocol-version
local types='dsa ecdsa ecdsa-sk ed25519 ed25519-sk rsa'
- if [[ $protocols == *1* ]]; then
+ if [[ ${protocols[*]} == *1* ]]; then
types+=' rsa1'
fi
- COMPREPLY=($(compgen -W "$types" -- "$cur"))
+ _comp_compgen -- -W "$types"
return
;;
-*Y)
- COMPREPLY=($(compgen -W 'find-principals check-novalidate sign
- verify' -- "$cur"))
+ _comp_compgen -- -W 'find-principals check-novalidate sign verify'
return
;;
esac
+ _comp_compgen_set
if [[ $cur == -* ]]; then
- local opts=$(_parse_usage "$1" "-?")
- [[ -z $opts ]] && opts=$(_parse_help "$1" "-?") # OpenSSH < 7
- COMPREPLY=($(compgen -W "$opts" -- "$cur"))
+ _comp_compgen_usage -- "-?" ||
+ _comp_compgen_help -- "-?" # OpenSSH < 7
fi
if [[ ${words[*]} == *\ -*s\ * ]]; then
- _filedir pub
+ _comp_compgen -a filedir pub
fi
} &&
- complete -F _ssh_keygen ssh-keygen
+ complete -F _comp_cmd_ssh_keygen ssh-keygen
# ex: filetype=sh