Improve ssh -o suboption completion (Alioth: #312122).

This commit is contained in:
Leonard Crestez 2009-12-24 15:45:19 +02:00 committed by Ville Skyttä
parent 8f56de625e
commit 92e7b73564
2 changed files with 79 additions and 2 deletions

View File

@ -58,6 +58,9 @@ bash-completion (2.x)
[ Jeremie Lasalle Ratelle ] [ Jeremie Lasalle Ratelle ]
* Fix rsync remote path completion (Alioth: #312173). * Fix rsync remote path completion (Alioth: #312173).
[ Leonard Crestez ]
* Improve ssh -o suboption completion (Alioth: #312122).
-- David Paleino <d.paleino@gmail.com> Sun, 11 Oct 2009 11:11:57 +0200 -- David Paleino <d.paleino@gmail.com> Sun, 11 Oct 2009 11:11:57 +0200
bash-completion (1.1) bash-completion (1.1)

View File

@ -3,8 +3,10 @@
have ssh && have ssh &&
{ {
_ssh_options() { _ssh_options()
COMPREPLY=( $( compgen -W 'AddressFamily BatchMode BindAddress \ {
type compopt &>/dev/null && compopt -o nospace
COMPREPLY=( $( compgen -S = -W 'AddressFamily BatchMode BindAddress \
ChallengeResponseAuthentication CheckHostIP Cipher Ciphers \ ChallengeResponseAuthentication CheckHostIP Cipher Ciphers \
ClearAllForwardings Compression CompressionLevel ConnectionAttempts \ ClearAllForwardings Compression CompressionLevel ConnectionAttempts \
ConnectTimeout ControlMaster ControlPath DynamicForward EscapeChar \ ConnectTimeout ControlMaster ControlPath DynamicForward EscapeChar \
@ -23,6 +25,74 @@ _ssh_options() {
VisualHostKey XAuthLocation' -- "$cur" ) ) VisualHostKey XAuthLocation' -- "$cur" ) )
} }
# Complete a ssh suboption (like ForwardAgent=y<tab>)
# Only one parameter: the string to complete including the equal sign.
# Not all suboptions are completed.
# Doesn't handle comma-separated lists.
_ssh_suboption()
{
# Split into subopt and subval
local subopt=${1%%=*} subval=${1#*=}
case "$subopt" in
BatchMode|ChallengeResponseAuthentication|CheckHostIP|\
ClearAllForwardings|Compression|ExitOnForwardFailure|ForwardAgent|\
ForwardX11|ForwardX11Trusted|GatewayPorts|GSSAPIAuthentication|\
GSSAPIKeyExchange|GSSAPIDelegateCredentials|GSSAPITrustDns|\
HashKnownHosts|HostbasedAuthentication|IdentitiesOnly|\
KbdInteractiveAuthentication|KbdInteractiveDevices|\
NoHostAuthenticationForLocalhost|PasswordAuthentication|\
PubkeyAuthentication|RhostsRSAAuthentication|RSAAuthentication|\
StrictHostKeyChecking|TCPKeepAlive|UsePrivilegedPort|\
VerifyHostKeyDNS|VisualHostKey)
COMPREPLY=( $( compgen -W 'yes no' -- "$subval") )
;;
AddressFamily)
COMPREPLY=( $( compgen -W 'any inet inet6' -- "$subval" ) )
;;
Cipher)
COMPREPLY=( $( compgen -W 'blowfish des 3des' -- "$subval" ) )
;;
Protocol)
COMPREPLY=( $( compgen -W '1 2 1,2 2,1' -- "$subval" ) )
;;
Tunnel)
COMPREPLY=( $( compgen -W 'yes no point-to-point ethernet' \
-- "$subval" ) )
;;
PreferredAuthentications)
COMPREPLY=( $( compgen -W 'gssapi-with-mic host-based \
publickey keyboard-interactive password' \
-- "$subval" ) )
;;
MACs)
COMPREPLY=( $( compgen -W 'hmac-md5 hmac-sha1 umac-64@openssh.com \
hmac-ripemd160 hmac-sha1-96 hmac-md5-96' -- "subval" ) )
;;
Ciphers)
COMPREPLY=( $( compgen -W '3des-cbc aes128-cbc aes192-cbc \
aes256-cbc aes128-ctr aes192-ctr aes256-ctr arcfour128 \
arcfour256 arcfour blowfish-cbc cast128-cbc' \
-- "$subval" ) )
;;
esac
return 0
}
# Try to complete -o SubOptions=
#
# Returns 0 if the completion was handled or non-zero otherwise.
_ssh_suboption_check()
{
# Get prev and cur words without splitting on =
local cureq=`_get_cword :=` preveq=`_get_pword :=`
if [[ $cureq == *=* && $preveq == -o ]]; then
_ssh_suboption $cureq
return $?
fi
return 1
}
_ssh() _ssh()
{ {
local cur prev configfile local cur prev configfile
@ -32,6 +102,8 @@ _ssh()
cur=`_get_cword :` cur=`_get_cword :`
prev=${COMP_WORDS[COMP_CWORD-1]} prev=${COMP_WORDS[COMP_CWORD-1]}
_ssh_suboption_check && return 0
case "$prev" in case "$prev" in
-F|-i|-S) -F|-i|-S)
_filedir _filedir
@ -112,6 +184,8 @@ _sftp()
cur=`_get_cword` cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]} prev=${COMP_WORDS[COMP_CWORD-1]}
_ssh_suboption_check && return 0
case "$prev" in case "$prev" in
-b|-F|-P) -b|-F|-P)
_filedir _filedir