84 lines
2.2 KiB
Bash
84 lines
2.2 KiB
Bash
|
#/usr/bin/env bash
|
||
|
|
||
|
_kazList_completions () {
|
||
|
#KAZ_ROOT=$(cd "$(dirname ${COMP_WORDS[0]})"/..; pwd)
|
||
|
COMPREPLY=()
|
||
|
local cword=${COMP_CWORD} cur=${COMP_WORDS[COMP_CWORD]} card=${#COMP_WORDS[@]} i w skip=0
|
||
|
for ((i=1 ; i<cword; i++)) ; do
|
||
|
w="${COMP_WORDS[i]}"
|
||
|
[[ "${w}" == -* ]] && ((skip++))
|
||
|
done
|
||
|
local arg_pos w i cmd= opt= names=
|
||
|
((arg_pos = cword - skip))
|
||
|
for ((i=1 ; i<card; i++)); do
|
||
|
w="${COMP_WORDS[i]}"
|
||
|
if [ -z "${cmd}" ]; then
|
||
|
[[ "${w}" == -* ]] || cmd="${w}"
|
||
|
continue
|
||
|
fi
|
||
|
if [ -z "${opt}" ]; then
|
||
|
[[ "${w}" == -* ]] || opt="${w}"
|
||
|
continue
|
||
|
fi
|
||
|
names="${names} ${w}"
|
||
|
done
|
||
|
#(echo "A cword:${cword} / arg_pos:${arg_pos} / card:${card} / cur:${cur} / cmd:${cmd} / opt:${opt} / names:${names} " >> /dev/pts/1)
|
||
|
|
||
|
case "${cur}" in
|
||
|
-*)
|
||
|
COMPREPLY=($(compgen -W "-h --help" -- "${cur}"))
|
||
|
;;
|
||
|
*)
|
||
|
local cmd_available="compose service"
|
||
|
local opt_available="available validate enable disable status"
|
||
|
case "${arg_pos}" in
|
||
|
1)
|
||
|
# $1 of kazList.sh
|
||
|
COMPREPLY=($(compgen -W "${cmd_available}" -- "${cur}"))
|
||
|
;;
|
||
|
2)
|
||
|
# $2 of kazList.sh
|
||
|
COMPREPLY=($(compgen -W "${opt_available}" -- "${cur}"))
|
||
|
;;
|
||
|
*)
|
||
|
# $3-* of kazList.sh
|
||
|
[[ " ${cmd_available} " =~ " ${cmd} " ]] || return 0
|
||
|
# select set of names
|
||
|
local names_set="${opt}"
|
||
|
local available_args
|
||
|
case "${cmd}" in
|
||
|
service)
|
||
|
case "${names_set}" in
|
||
|
available|validate)
|
||
|
return 0
|
||
|
;;
|
||
|
*)
|
||
|
available_args=$("${COMP_WORDS[0]}" "compose" "enable" "orga" 2>/dev/null)
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
compose)
|
||
|
case "${names_set}" in
|
||
|
validate|enable|disable)
|
||
|
;;
|
||
|
*)
|
||
|
names_set="available"
|
||
|
;;
|
||
|
esac
|
||
|
available_args=$("${COMP_WORDS[0]}" "${cmd}" "${names_set}")
|
||
|
;;
|
||
|
esac
|
||
|
# remove previous selected target
|
||
|
local proposal item
|
||
|
for item in ${available_args} ; do
|
||
|
[[ " ${names} " =~ " ${item} " ]] || proposal="${proposal} ${item}"
|
||
|
done
|
||
|
COMPREPLY=($(compgen -W "${proposal}" -- "${cur}"))
|
||
|
;;
|
||
|
esac
|
||
|
esac
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
complete -F _kazList_completions kazList.sh
|