]> Pileus Git - ~andy/linux/blobdiff - tools/perf/bash_completion
Merge remote-tracking branch 'asoc/topic/adsp' into asoc-next
[~andy/linux] / tools / perf / bash_completion
index 1958fa539d0f8085f64e897c448ba2ac59eef956..56e6a12aab59b42d4cffbc67858824af818f5fff 100644 (file)
@@ -1,23 +1,59 @@
 # perf completion
 
+function_exists()
+{
+       declare -F $1 > /dev/null
+       return $?
+}
+
+function_exists __ltrim_colon_completions ||
+__ltrim_colon_completions()
+{
+       if [[ "$1" == *:* && "$COMP_WORDBREAKS" == *:* ]]; then
+               # Remove colon-word prefix from COMPREPLY items
+               local colon_word=${1%${1##*:}}
+               local i=${#COMPREPLY[*]}
+               while [[ $((--i)) -ge 0 ]]; do
+                       COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"}
+               done
+       fi
+}
+
 have perf &&
 _perf()
 {
-       local cur cmd
+       local cur prev cmd
 
        COMPREPLY=()
-       _get_comp_words_by_ref cur prev
+       if function_exists _get_comp_words_by_ref; then
+               _get_comp_words_by_ref -n : cur prev
+       else
+               cur=$(_get_cword :)
+               prev=${COMP_WORDS[COMP_CWORD-1]}
+       fi
 
        cmd=${COMP_WORDS[0]}
 
-       # List perf subcommands
+       # List perf subcommands or long options
        if [ $COMP_CWORD -eq 1 ]; then
-               cmds=$($cmd --list-cmds)
-               COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
+               if [[ $cur == --* ]]; then
+                       COMPREPLY=( $( compgen -W '--help --version \
+                       --exec-path --html-path --paginate --no-pager \
+                       --perf-dir --work-tree --debugfs-dir' -- "$cur" ) )
+               else
+                       cmds=$($cmd --list-cmds)
+                       COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
+               fi
        # List possible events for -e option
        elif [[ $prev == "-e" && "${COMP_WORDS[1]}" == @(record|stat|top) ]]; then
-               cmds=$($cmd list --raw-dump)
-               COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
+               evts=$($cmd list --raw-dump)
+               COMPREPLY=( $( compgen -W '$evts' -- "$cur" ) )
+               __ltrim_colon_completions $cur
+       # List long option names
+       elif [[ $cur == --* ]];  then
+               subcmd=${COMP_WORDS[1]}
+               opts=$($cmd $subcmd --list-opts)
+               COMPREPLY=( $( compgen -W '$opts' -- "$cur" ) )
        # Fall down to list regular files
        else
                _filedir