X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=extras%2Flttng-bash_completion;h=f5677e9bcef70f532867b490d6927bd805db6139;hp=efd5f58e35a74adce631d7e75ea1940432f0e403;hb=6c1494fd8daa571cf08ca27e274d9abcdd65b053;hpb=651adb86f32459e91d03a2ead36eb147ac2eea77 diff --git a/extras/lttng-bash_completion b/extras/lttng-bash_completion index efd5f58e3..f5677e9bc 100644 --- a/extras/lttng-bash_completion +++ b/extras/lttng-bash_completion @@ -15,14 +15,29 @@ # Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # +# Generates COMPREPLY with the existing session names _lttng_complete_sessions() { - # TODO, maybe have a lttng list --simple or something like that + # TODO + # This code does nothing for now. When there is a mecanism to get the + # existing sessions, use it to fill the sessions variable. + local sessions + sessions="" + COMPREPLY=( $(compgen -W "${sessions}" -- $cur) ) return } -_lttng_cmd_add_context() { - local add_context_opts - add_context_opts=$(lttng add-context --list-options) +# Generates COMPREPLY with whatever is in the $options variable. +_lttng_complete_options() { + COMPREPLY=( $(compgen -W "${options}" -- $cur) ) +} + +# Generates COMPREPLY with whatever is in the $commands variable. +_lttng_complete_commands() { + COMPREPLY=( $(compgen -W "${commands}" -- $cur) ) +} + +_lttng_cmd_addcontext() { + options=$(lttng add-context --list-options) case $prev in --session|-s) @@ -39,15 +54,25 @@ _lttng_cmd_add_context() { case $cur in -*) - COMPREPLY=( $(compgen -W "${add_context_opts}" -- $cur) ) + _lttng_complete_options + return + ;; + esac +} + +_lttng_cmd_calibrate() { + options=$(lttng calibrate --list-options) + + case $cur in + -*) + _lttng_complete_options return ;; esac } _lttng_cmd_create() { - local create_opts - create_opts=$(lttng create --list-options) + options=$(lttng create --list-options) case $prev in --output|-o) @@ -58,29 +83,28 @@ _lttng_cmd_create() { case $cur in -*) - COMPREPLY=( $(compgen -W "${create_opts}" -- $cur) ) + _lttng_complete_options return ;; esac } _lttng_cmd_destroy() { - local destroy_opts - destroy_opts=$(lttng destroy --list-options) + options=$(lttng destroy --list-options) case $cur in -*) - COMPREPLY=( $(compgen -W "${destroy_opts}" -- $cur) ) + _lttng_complete_options + return ;; *) _lttng_complete_sessions + return ;; esac } - -_lttng_cmd_enablechannel() { - local enable_channel_opts - enable_channel_opts=$(lttng enable-channel --list-options) +_lttng_cmd_disablechannel() { + options=$(lttng disable-channel --list-options) case $prev in --session|-s) @@ -91,15 +115,13 @@ _lttng_cmd_enablechannel() { case $cur in -*) - COMPREPLY=( $(compgen -W "${enable_channel_opts}" -- $cur) ) + _lttng_complete_options return ;; esac } - -_lttng_cmd_enableevent() { - local enable_event_opts - enable_event_opts=$(lttng enable-event --list-options) +_lttng_cmd_disableevent() { + options=$(lttng disable-event --list-options) case $prev in --session|-s) @@ -109,44 +131,18 @@ _lttng_cmd_enableevent() { --channel|-c) return ;; - --probe) - return - ;; - --function) - return - ;; - esac - - case $cur in - -*) - COMPREPLY=( $(compgen -W "${enable_event_opts}" -- $cur) ) - return - ;; - esac -} - -_lttng_cmd_enableconsumer() { - local enable_consumer_opts - enable_consumer_opts=$(lttng enable-consumer --list-options) - - case $prev in - --session|-s) - _lttng_complete_sessions - return - ;; esac case $cur in -*) - COMPREPLY=( $(compgen -W "${enable_consumer_opts}" -- $cur) ) + _lttng_complete_options return ;; esac } -_lttng_cmd_disableconsumer() { - local disable_consumer_opts - disable_consumer_opts=$(lttng disable-consumer --list-options) +_lttng_cmd_enablechannel() { + options=$(lttng enable-channel --list-options) case $prev in --session|-s) @@ -157,56 +153,41 @@ _lttng_cmd_disableconsumer() { case $cur in -*) - COMPREPLY=( $(compgen -W "${disable_consumer_opts}" -- $cur) ) + _lttng_complete_options return ;; esac } -_lttng_cmd_disablechannel() { - local disable_channel_opts - disable_channel_opts=$(lttng disable-channel --list-options) +_lttng_cmd_enableevent() { + options=$(lttng enable-event --list-options) case $prev in --session|-s) _lttng_complete_sessions return ;; - esac - - case $cur in - -*) - COMPREPLY=( $(compgen -W "${disable_channel_opts}" -- $cur) ) + --channel|-c) return ;; - esac -} - -_lttng_cmd_disable_event() { - local disable_event_opts - disable_channel_opts=$(lttng disable-event --list-options) - - case $prev in - --session|-s) - _lttng_complete_sessions + --probe) return ;; - --channel|-c) + --function) return ;; esac case $cur in -*) - COMPREPLY=( $(compgen -W "${disable_event_opts}" -- $cur) ) + _lttng_complete_options return ;; esac } _lttng_cmd_list() { - local list_opts - list_opts=$(lttng list --list-options) + options=$(lttng list --list-options) case $prev in --channel|-c) @@ -216,45 +197,75 @@ _lttng_cmd_list() { case $cur in -*) - COMPREPLY=( $(compgen -W "${list_opts}" -- $cur) ) + _lttng_complete_options return ;; + *) + _lttng_complete_sessions + return esac } -_lttng_cmd_set_session() { - local set_session_opts - set_session_opts=$(lttng set-session --list-options) +_lttng_cmd_setsession() { + options=$(lttng set-session --list-options) case $cur in -*) - COMPREPLY=( $(compgen -W "${set_session_opts}" -- $cur) ) + _lttng_complete_options + return + ;; + *) + _lttng_complete_sessions return ;; esac } +_lttng_cmd_snapshot() { + options=$(lttng snapshot --list-options) + commands=$(lttng snapshot --list-commands) + + _lttng_find_command $((command_found_index + 1)) + + if _lttng_cursor_is_after_command; then + case $prev in + --session|-s) + _lttng_complete_sessions + return + ;; + esac + + case $cur in + -*) + _lttng_complete_options + ;; + esac + else + _lttng_complete_commands + fi +} + _lttng_cmd_start() { - local start_opts - start_opts=$(lttng start --list-options) + options=$(lttng start --list-options) case $cur in -*) - COMPREPLY=( $(compgen -W "${start_opts}" -- $cur) ) + _lttng_complete_options + return ;; *) _lttng_complete_sessions + return ;; esac } _lttng_cmd_stop() { - local stop_opts - stop_opts=$(lttng stop --list-options) + options=$(lttng stop --list-options) case $cur in -*) - COMPREPLY=( $(compgen -W "${stop_opts}" -- $cur) ) + _lttng_complete_options ;; *) _lttng_complete_sessions @@ -263,48 +274,26 @@ _lttng_cmd_stop() { } _lttng_cmd_version() { - local version_opts - version_opts=$(lttng version --list-options) + options=$(lttng version --list-options) case $cur in -*) - COMPREPLY=( $(compgen -W "${version_opts}" -- $cur) ) + _lttng_complete_options ;; esac } -_lttng_cmd_calibrate() { - local calibrate_opts - calibrate_opts=$(lttng calibrate --list-options) +_lttng_cmd_view() { + options=$(lttng view --list-options) case $cur in -*) - COMPREPLY=( $(compgen -W "${calibrate_opts}" -- $cur) ) - ;; - esac -} - -_lttng_cmd_view() { - local view_opts - view_opts=$(lttng view --list-options) - - case $cur in - -*) - COMPREPLY=( $(compgen -W "${view_opts}" -- $cur) ) + _lttng_complete_options ;; esac } -_lttng_opts() { - local opts - opts=$(lttng --list-options) - COMPREPLY=( $(compgen -W "${opts}" -- $cur) ) -} - -_lttng_commands() { - COMPREPLY=( $(compgen -W "$commands" -- $cur) ) -} _lttng_before_command() { # Check if the previous word should alter the behavior @@ -322,11 +311,11 @@ _lttng_before_command() { case $cur in -*) # If the current word starts with a dash, complete with options - _lttng_opts + _lttng_complete_options ;; *) # Otherwise complete with commands - _lttng_commands + _lttng_complete_commands ;; esac } @@ -334,11 +323,13 @@ _lttng_before_command() { _lttng_after_command() { local cmd_name - cmd_name=_lttng_cmd_${command//-/} + cmd_name=_lttng_cmd_${command_found//-/} type -t $cmd_name | grep -q 'function' && $cmd_name } +# Check if the word passed as the first parameter corresponds to a +# command. $command must be set to the list of possible commands. _lttng_is_command() { for command in $commands; do if [ "$1" == "$command" ]; then @@ -349,14 +340,18 @@ _lttng_is_command() { return 1 } -_lttng() { - local cur prev commands command_found command_found_index - - # Get the current and previous word - _get_comp_words_by_ref cur prev - - # Get the valid LTTng commands - commands=$(lttng --list-commands) +# Try to find a command in the current command line. Possible commands +# are passed in $commands. +# +# This function takes an optional parameter that indicates the index +# where to start the search in COMP_WORDS. If omitted, it defaults to 1. +# +# If a command is found, $command_found is filled with the name of the +# command and $command_found_index is set to the index of the command in +# $COMP_WORDS. If no command is found, $command_found is an empty string +# and $command_found_index is set to -1. +_lttng_find_command() { + start=${1:-1} # The text of the found command command_found="" @@ -364,18 +359,34 @@ _lttng() { # The index of the found command in COMP_WORDS command_found_index=-1 - for (( i = 1 ; i < ${#COMP_WORDS[@]} ; i++ )); do + for (( i = start ; i < ${#COMP_WORDS[@]} ; i++ )); do _lttng_is_command ${COMP_WORDS[$i]} if [ $? -eq 0 ]; then command_found=${COMP_WORDS[$i]} command_found_index=$i break fi - done +} + +_lttng_cursor_is_after_command() { + [ -n "$command_found" ] && [ "$COMP_CWORD" -gt "$command_found_index" ] +} + +_lttng() { + local cur prev commands command_found command_found_index + + # Get the current and previous word + _get_comp_words_by_ref cur prev + + # Get the valid first-level LTTng commands and options + commands=$(lttng --list-commands) + options=$(lttng --list-options) + + _lttng_find_command # Check if the cursor is before or after the command keyword - if [ -n "$command_found" ] && [ "$COMP_CWORD" -gt "$command_found_index" ]; then + if _lttng_cursor_is_after_command; then _lttng_after_command else _lttng_before_command