mirror of https://github.com/docker/cli.git
Improve key specific bash subcompletions
The obscure `case "${words[$cword-2]}$prev=" in` idiom is no longer used for key specific completions in options with map values. The `__docker_map_key_of_current_option()` function does a much better job. Signed-off-by: Harald Albers <github@albersweb.de>
This commit is contained in:
parent
904481becd
commit
fcad8ce206
|
@ -227,7 +227,6 @@ __docker_pos_first_nonflag() {
|
||||||
# If we are currently completing the value of a map option (key=value)
|
# If we are currently completing the value of a map option (key=value)
|
||||||
# which matches the extglob given as an argument, returns key.
|
# which matches the extglob given as an argument, returns key.
|
||||||
# This function is needed for key-specific completions.
|
# This function is needed for key-specific completions.
|
||||||
# TODO use this in all "${words[$cword-2]}$prev=" occurrences
|
|
||||||
__docker_map_key_of_current_option() {
|
__docker_map_key_of_current_option() {
|
||||||
local glob="$1"
|
local glob="$1"
|
||||||
|
|
||||||
|
@ -452,21 +451,20 @@ __docker_complete_log_options() {
|
||||||
}
|
}
|
||||||
|
|
||||||
__docker_complete_log_driver_options() {
|
__docker_complete_log_driver_options() {
|
||||||
# "=" gets parsed to a word and assigned to either $cur or $prev depending on whether
|
local key=$(__docker_map_key_of_current_option '--log-opt')
|
||||||
# it is the last character or not. So we search for "xxx=" in the the last two words.
|
case "$key" in
|
||||||
case "${words[$cword-2]}$prev=" in
|
gelf-address)
|
||||||
*gelf-address=*)
|
COMPREPLY=( $( compgen -W "udp" -S "://" -- "${cur##*=}" ) )
|
||||||
COMPREPLY=( $( compgen -W "udp" -S "://" -- "${cur#=}" ) )
|
|
||||||
__docker_nospace
|
__docker_nospace
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*syslog-address=*)
|
syslog-address)
|
||||||
COMPREPLY=( $( compgen -W "tcp:// tcp+tls:// udp:// unix://" -- "${cur#=}" ) )
|
COMPREPLY=( $( compgen -W "tcp:// tcp+tls:// udp:// unix://" -- "${cur##*=}" ) )
|
||||||
__docker_nospace
|
__docker_nospace
|
||||||
__ltrim_colon_completions "${cur}"
|
__ltrim_colon_completions "${cur}"
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*syslog-facility=*)
|
syslog-facility)
|
||||||
COMPREPLY=( $( compgen -W "
|
COMPREPLY=( $( compgen -W "
|
||||||
auth
|
auth
|
||||||
authpriv
|
authpriv
|
||||||
|
@ -488,26 +486,25 @@ __docker_complete_log_driver_options() {
|
||||||
syslog
|
syslog
|
||||||
user
|
user
|
||||||
uucp
|
uucp
|
||||||
" -- "${cur#=}" ) )
|
" -- "${cur##*=}" ) )
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*syslog-tls-@(ca-cert|cert|key)=*)
|
syslog-tls-@(ca-cert|cert|key))
|
||||||
_filedir
|
_filedir
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*syslog-tls-skip-verify=*)
|
syslog-tls-skip-verify)
|
||||||
COMPREPLY=( $( compgen -W "true" -- "${cur#=}" ) )
|
COMPREPLY=( $( compgen -W "true" -- "${cur##*=}" ) )
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*splunk-url=*)
|
splunk-url)
|
||||||
COMPREPLY=( $( compgen -W "http:// https://" -- "${cur#=}" ) )
|
COMPREPLY=( $( compgen -W "http:// https://" -- "${cur##*=}" ) )
|
||||||
__docker_nospace
|
__docker_nospace
|
||||||
__ltrim_colon_completions "${cur}"
|
__ltrim_colon_completions "${cur}"
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*splunk-insecureskipverify=*)
|
splunk-insecureskipverify)
|
||||||
COMPREPLY=( $( compgen -W "true false" -- "${cur#=}" ) )
|
COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) )
|
||||||
__docker_nospace
|
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -789,22 +786,27 @@ _docker_daemon() {
|
||||||
|
|
||||||
__docker_complete_log_driver_options && return
|
__docker_complete_log_driver_options && return
|
||||||
|
|
||||||
case "${words[$cword-2]}$prev=" in
|
key=$(__docker_map_key_of_current_option '--cluster-store-opt')
|
||||||
# completions for --storage-opt
|
case "$key" in
|
||||||
*dm.@(blkdiscard|override_udev_sync_check|use_deferred_@(removal|deletion))=*)
|
kv.*file)
|
||||||
COMPREPLY=( $( compgen -W "false true" -- "${cur#=}" ) )
|
cur=${cur##*=}
|
||||||
return
|
|
||||||
;;
|
|
||||||
*dm.fs=*)
|
|
||||||
COMPREPLY=( $( compgen -W "ext4 xfs" -- "${cur#=}" ) )
|
|
||||||
return
|
|
||||||
;;
|
|
||||||
*dm.thinpooldev=*)
|
|
||||||
_filedir
|
_filedir
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
# completions for --cluster-store-opt
|
esac
|
||||||
*kv.*file=*)
|
|
||||||
|
local key=$(__docker_map_key_of_current_option '--storage-opt')
|
||||||
|
case "$key" in
|
||||||
|
dm.@(blkdiscard|override_udev_sync_check|use_deferred_@(removal|deletion)))
|
||||||
|
COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) )
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
dm.fs)
|
||||||
|
COMPREPLY=( $( compgen -W "ext4 xfs" -- "${cur##*=}" ) )
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
dm.thinpooldev)
|
||||||
|
cur=${cur##*=}
|
||||||
_filedir
|
_filedir
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
|
@ -914,8 +916,8 @@ _docker_diff() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_docker_events() {
|
_docker_events() {
|
||||||
local filter=$(__docker_map_key_of_current_option '-f|--filter')
|
local key=$(__docker_map_key_of_current_option '-f|--filter')
|
||||||
case "$filter" in
|
case "$key" in
|
||||||
container)
|
container)
|
||||||
cur="${cur##*=}"
|
cur="${cur##*=}"
|
||||||
__docker_complete_containers_all
|
__docker_complete_containers_all
|
||||||
|
@ -1051,12 +1053,13 @@ _docker_history() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_docker_images() {
|
_docker_images() {
|
||||||
case "${words[$cword-2]}$prev=" in
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
||||||
*dangling=*)
|
case "$key" in
|
||||||
COMPREPLY=( $( compgen -W "true false" -- "${cur#=}" ) )
|
dangling)
|
||||||
|
COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) )
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*label=*)
|
label)
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -1329,19 +1332,20 @@ _docker_network_inspect() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_docker_network_ls() {
|
_docker_network_ls() {
|
||||||
case "${words[$cword-2]}$prev=" in
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
||||||
*id=*)
|
case "$key" in
|
||||||
cur="${cur#=}"
|
id)
|
||||||
|
cur="${cur##*=}"
|
||||||
__docker_complete_network_ids
|
__docker_complete_network_ids
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*name=*)
|
name)
|
||||||
cur="${cur#=}"
|
cur="${cur##*=}"
|
||||||
__docker_complete_network_names
|
__docker_complete_network_names
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*type=*)
|
type)
|
||||||
COMPREPLY=( $( compgen -W "builtin custom" -- "${cur#=}" ) )
|
COMPREPLY=( $( compgen -W "builtin custom" -- "${cur##*=}" ) )
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -1421,24 +1425,25 @@ _docker_port() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_docker_ps() {
|
_docker_ps() {
|
||||||
case "${words[$cword-2]}$prev=" in
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
||||||
*ancestor=*)
|
case "$key" in
|
||||||
cur="${cur#=}"
|
ancestor)
|
||||||
|
cur="${cur##*=}"
|
||||||
__docker_complete_images
|
__docker_complete_images
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*id=*)
|
id)
|
||||||
cur="${cur#=}"
|
cur="${cur##*=}"
|
||||||
__docker_complete_container_ids
|
__docker_complete_container_ids
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*name=*)
|
name)
|
||||||
cur="${cur#=}"
|
cur="${cur##*=}"
|
||||||
__docker_complete_container_names
|
__docker_complete_container_names
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*status=*)
|
status)
|
||||||
COMPREPLY=( $( compgen -W "created dead exited paused restarting running" -- "${cur#=}" ) )
|
COMPREPLY=( $( compgen -W "created dead exited paused restarting running" -- "${cur##*=}" ) )
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -2015,9 +2020,10 @@ _docker_volume_inspect() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_docker_volume_ls() {
|
_docker_volume_ls() {
|
||||||
case "${words[$cword-2]}$prev=" in
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
||||||
*dangling=*)
|
case "$key" in
|
||||||
COMPREPLY=( $( compgen -W "true false" -- "${cur#=}" ) )
|
dangling)
|
||||||
|
COMPREPLY=( $( compgen -W "true false" -- "${cur##*=}" ) )
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
Loading…
Reference in New Issue