X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=extras%2Flttng-bash_completion;h=335e9d128454fe3da1b5312624c9d8515b54c0d1;hp=00ac17ef0abf86d48e0a31999b0380581167bb8f;hb=7335fad67f8c47c2339b82e0dcbf36b28dc1e6a8;hpb=fc256d995013fb0557601fd203531493e1dacff7 diff --git a/extras/lttng-bash_completion b/extras/lttng-bash_completion index 00ac17ef0..335e9d128 100644 --- a/extras/lttng-bash_completion +++ b/extras/lttng-bash_completion @@ -15,14 +15,53 @@ # 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 + local sessions + sessions=$(lttng --mi xml list | xmllint --xpath "//command/output/sessions/session/name" - 2>/dev/null | sed -e 's///g' -e $'s/<\/name>/\\n/g') + COMPREPLY=( $(compgen -W "${sessions}" -- $cur) ) + return +} +# + +# Generates COMPREPLY with the available kernel event +_lttng_complete_kernel_events() { + local kernel_event + kernel_event=$(lttng --mi xml list -k | xmllint --xpath "//command/output/domains/domain[./type = 'KERNEL']/events/event/name" - 2>/dev/null | sed -e "s///g" -e $"s/<\/name>/\\n/g") + COMPREPLY=( $(compgen -W "${kernel_event}" -- $cur) ) + return +} + +# Generates COMPREPLY with the available ust event +_lttng_complete_ust_events() { + local ust_event + ust_event=$(lttng --mi xml list -u | xmllint --xpath "//command/output/domains/domain[./type = 'UST']/pids/pid/events/event/name" - 2>/dev/null | sed -e "s///g" -e $"s/<\/name>/\\n/g") + COMPREPLY=( $(compgen -W "${ust_event}" -- $cur) ) return } -_lttng_cmd_add_context() { - local add_context_opts - add_context_opts=$(lttng add-context --list-options) +# Generates COMPREPLY with the available jul event +_lttng_complete_jul_events() { + local jul_event + jul_event=$(lttng --mi xml list -j | xmllint --xpath "//command/output/domains/domain[./type = 'JUL']/pids/pid/events/event/name" - 2>/dev/null | sed -e "s///g" -e $"s/<\/name>/\\n/g") + COMPREPLY=( $(compgen -W "${jul_event}" -- $cur) ) + return +} + + + +# 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) @@ -32,25 +71,32 @@ _lttng_cmd_add_context() { --channel|-c) return ;; - --event|-e) + --type|-t) return ;; - --type|-t) + esac + + case $cur in + -*) + _lttng_complete_options return ;; esac +} + +_lttng_cmd_calibrate() { + options=$(lttng calibrate --list-options) case $cur in -*) - COMPREPLY=( $(compgen -W "${add_context_opts}" -- $cur) ) + _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) @@ -61,29 +107,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) @@ -94,15 +139,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) @@ -112,25 +155,18 @@ _lttng_cmd_enableevent() { --channel|-c) return ;; - --probe) - return - ;; - --function) - return - ;; esac case $cur in -*) - COMPREPLY=( $(compgen -W "${enable_event_opts}" -- $cur) ) + _lttng_complete_options return ;; esac } -_lttng_cmd_disablechannel() { - local disable_channel_opts - disable_channel_opts=$(lttng disable-channel --list-options) +_lttng_cmd_enablechannel() { + options=$(lttng enable-channel --list-options) case $prev in --session|-s) @@ -141,15 +177,14 @@ _lttng_cmd_disablechannel() { case $cur in -*) - COMPREPLY=( $(compgen -W "${disable_channel_opts}" -- $cur) ) + _lttng_complete_options return ;; esac } -_lttng_cmd_disable_event() { - local disable_event_opts - disable_channel_opts=$(lttng disable-event --list-options) +_lttng_cmd_enableevent() { + options=$(lttng enable-event --list-options) case $prev in --session|-s) @@ -159,19 +194,44 @@ _lttng_cmd_disable_event() { --channel|-c) return ;; + --probe) + return + ;; + --function) + return + ;; esac + + #Check if we want kernel event completion + if [[ "$COMP_LINE" == *"-k"* ]]; then + _lttng_complete_kernel_events + return + fi + + #Check if we want ust event completion + if [[ "$COMP_LINE" == *"-u"* ]]; then + _lttng_complete_ust_events + return + fi + + #Check if we want jul event completion + if [[ "$COMP_LINE" == *"-j"* ]]; then + _lttng_complete_jul_events + return + fi + case $cur in -*) - COMPREPLY=( $(compgen -W "${disable_event_opts}" -- $cur) ) + _lttng_complete_options return ;; esac + } _lttng_cmd_list() { - local list_opts - disable_channel_opts=$(lttng list --list-options) + options=$(lttng list --list-options) case $prev in --channel|-c) @@ -181,45 +241,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 @@ -228,37 +318,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) ) + _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 @@ -276,11 +355,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 } @@ -288,11 +367,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 @@ -303,14 +384,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="" @@ -318,18 +403,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