From: Jonathan Rajotte Julien Date: Thu, 17 Jul 2014 18:13:20 +0000 (-0400) Subject: Improve bash completion with the use of mi and xmllint X-Git-Tag: v2.6.0-rc1~111 X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=commitdiff_plain;h=7335fad67f8c47c2339b82e0dcbf36b28dc1e6a8 Improve bash completion with the use of mi and xmllint Signed-off-by: Jonathan Rajotte Julien --- diff --git a/README b/README index 3e594a52c..716ae1f8a 100644 --- a/README +++ b/README @@ -182,5 +182,6 @@ PACKAGE CONTENTS: Various documentations and quickstart guide. - extras - Contains extra data such as bash completion file. Python bindings for - liblttng-ctl are also available there. + Contains extra data such as bash completion file. + Note: the presence of xmllint is required for bash-completion. + Python bindings for liblttng-ctl are also available there. diff --git a/extras/lttng-bash_completion b/extras/lttng-bash_completion index f5677e9bc..335e9d128 100644 --- a/extras/lttng-bash_completion +++ b/extras/lttng-bash_completion @@ -17,14 +17,38 @@ # Generates COMPREPLY with the existing session names _lttng_complete_sessions() { - # 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="" + 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 +} + +# 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() { @@ -178,12 +202,32 @@ _lttng_cmd_enableevent() { ;; 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 -*) _lttng_complete_options return ;; esac + } _lttng_cmd_list() {