| #!/bin/bash |
| # LTTng Trace Control bash completion |
| # |
| |
| _lttng_complete_sessions() { |
| local sessions |
| if ! _complete_as_root ; then |
| sessions=$(for i in $(ls -d ~/.lttng/*/); do basename $i; done) |
| COMPREPLY=( $(compgen -W "${sessions}" -- $cur) ) |
| #else |
| # Permission denied, what should we do ? |
| # sessions=$(for i in $(ls -d ~root/.lttng/*/); do basename $i; done) |
| #COMPREPLY=( $(compgen -W "${sessions}" -- $cur) ) |
| fi |
| } |
| |
| _lttng_create() { |
| local create_opts |
| create_opts="-h --help -o --output" |
| |
| case $prev in |
| --output|-o) |
| _filedir -d |
| return |
| ;; |
| esac |
| |
| case $cur in |
| -*) |
| COMPREPLY=( $(compgen -W "${create_opts}" -- $cur) ) |
| return |
| ;; |
| esac |
| } |
| |
| _lttng_start_stop() { |
| local start_stop_opts |
| start_stop_opts="-h --help" |
| |
| case $cur in |
| -*) |
| COMPREPLY=( $(compgen -W "${start_stop_opts}" -- $cur) ) |
| ;; |
| *) |
| _lttng_complete_sessions |
| ;; |
| esac |
| } |
| |
| _lttng_opts() { |
| local opts |
| opts=$(lttng --dump-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 |
| case $prev in |
| --group|-g) |
| COMPREPLY=( $(compgen -g -- $cur) ) |
| return |
| ;; |
| esac |
| |
| case $cur in |
| -*) |
| # If the current word starts with a dash, complete with options |
| _lttng_opts |
| ;; |
| *) |
| # Otherwise complete with commands |
| _lttng_commands |
| ;; |
| esac |
| } |
| |
| _lttng_after_command() { |
| case $command_found in |
| "create") |
| _lttng_create |
| ;; |
| "start"|"stop") |
| _lttng_start_stop |
| ;; |
| esac |
| } |
| |
| _lttng_is_command() { |
| for command in $commands; do |
| if [ "$1" == "$command" ]; then |
| return 0 |
| fi |
| done |
| |
| return 1 |
| } |
| |
| _lttng() { |
| local cur prev commands command_found command_found_index |
| |
| cur="${COMP_WORDS[COMP_CWORD]}" |
| prev="${COMP_WORDS[COMP_CWORD-1]}" |
| commands=$(lttng --dump-commands) |
| |
| command_found="" |
| command_found_index=-1 |
| |
| for (( i = 1 ; 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 |
| |
| if [ -n "$command_found" ] && [ "$COMP_CWORD" -gt "$command_found_index" ]; then |
| _lttng_after_command |
| else |
| _lttng_before_command |
| fi |
| } |
| |
| complete -F _lttng lttng |
| |