Skip to content

Commit

Permalink
Adds the subcommands for the log command
Browse files Browse the repository at this point in the history
Signed-off-by: Voldivh <[email protected]>
  • Loading branch information
Voldivh committed Oct 5, 2023
1 parent b012e82 commit 8bf5016
Showing 1 changed file with 88 additions and 15 deletions.
103 changes: 88 additions & 15 deletions src/cmd/transport.bash_completion.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,34 @@
# This is a per-library function definition, used in conjunction with the
# top-level entry point in gz-tools.

GZ_LOG_SUBCOMMANDS="
record
playback
"

GZ_LOG_COMPLETION_LIST="
-h --help
-v --verbose
"

GZ_PLAYBACK_COMPLETION_LIST="
-h --help
-v --verbose
--file
--pattern
--remap
--wait
-f
"

GZ_RECORD_COMPLETION_LIST="
-h --help
-v --verbose
--file
--force
--pattern
"

GZ_SERVICE_COMPLETION_LIST="
-h --help
-v --version
Expand All @@ -46,11 +74,10 @@ GZ_TOPIC_COMPLETION_LIST="
--json-output
"

function _gz_service
{
function __get_comp_from_list {
if [[ ${COMP_WORDS[COMP_CWORD]} == -* ]]; then
# Specify options (-*) word list for this subcommand
COMPREPLY=($(compgen -W "$GZ_SERVICE_COMPLETION_LIST" \
COMPREPLY=($(compgen -W "$@" \
-- "${COMP_WORDS[COMP_CWORD]}" ))
return
else
Expand All @@ -62,29 +89,75 @@ function _gz_service
fi
}

function _gz_service_flags
function _gz_log_playback
{
for word in $GZ_SERVICE_COMPLETION_LIST; do
echo "$word"
done
__get_comp_from_list "$GZ_PLAYBACK_COMPLETION_LIST"
}

function _gz_log_record
{
__get_comp_from_list "$GZ_RECORD_COMPLETION_LIST"
}

function _gz_service
{
__get_comp_from_list "$GZ_SERVICE_COMPLETION_LIST"
}

function _gz_topic
{
__get_comp_from_list "$GZ_TOPIC_COMPLETION_LIST"
}

# This searches the current list of typed words for one of the subcommands
# listed in GZ_LOG_SUBCOMMANDS. This should work for most cases, but may fail
# if a word that looks like a subcommand is used as an argument to a flag.
function __get_subcommand
{
local known_subcmd
local subcmd
for ((i=2; $i<=$COMP_CWORD; i++)); do
for subcmd in $GZ_LOG_SUBCOMMANDS; do
if [[ "${COMP_WORDS[i]}" == "$subcmd" ]]; then
known_subcmd="$subcmd"
fi
done
done
echo "$known_subcmd"
}

function _gz_log
{
if [[ $COMP_CWORD > 2 ]]; then
local known_subcmd=$(__get_subcommand)
if [[ ! -z $known_subcmd ]]; then
local subcmd_func="_gz_log_$known_subcmd"
if [[ "$(type -t $subcmd_func)" == 'function' ]]; then
$subcmd_func
return
fi
fi
fi

# If a subcommand is not found, assume we're still completing the subcommands
# or flags for `log`.
if [[ ${COMP_WORDS[COMP_CWORD]} == -* ]]; then
# Specify options (-*) word list for this subcommand
COMPREPLY=($(compgen -W "$GZ_TOPIC_COMPLETION_LIST" \
COMPREPLY=($(compgen -W "$GZ_LOG_COMPLETION_LIST" \
-- "${COMP_WORDS[COMP_CWORD]}" ))
return
else
# Just use bash default auto-complete, because we never have two
# subcommands in the same line. If that is ever needed, change here to
# detect subsequent subcommands
COMPREPLY=($(compgen -o default -- "${COMP_WORDS[COMP_CWORD]}"))
return
COMPREPLY=($(compgen -W "${GZ_LOG_SUBCOMMANDS}" -- ${cur}))
fi
}


function _gz_service_flags
{
for word in $GZ_SERVICE_COMPLETION_LIST; do
echo "$word"
done
}


function _gz_topic_flags
{
for word in $GZ_TOPIC_COMPLETION_LIST; do
Expand Down

0 comments on commit 8bf5016

Please sign in to comment.