1 # perf completion 2 3 function_exists() 4 { 5 declare -F $1 > /dev/null 6 return $? 7 } 8 9 function_exists __ltrim_colon_completions || 10 __ltrim_colon_completions() 11 { 12 if [[ "$1" == *:* && "$COMP_WORDBREAKS" == *:* ]]; then 13 # Remove colon-word prefix from COMPREPLY items 14 local colon_word=${1%${1##*:}} 15 local i=${#COMPREPLY[*]} 16 while [[ $((--i)) -ge 0 ]]; do 17 COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"} 18 done 19 fi 20 } 21 22 have perf && 23 _perf() 24 { 25 local cur prev cmd 26 27 COMPREPLY=() 28 if function_exists _get_comp_words_by_ref; then 29 _get_comp_words_by_ref -n : cur prev 30 else 31 cur=$(_get_cword :) 32 prev=${COMP_WORDS[COMP_CWORD-1]} 33 fi 34 35 cmd=${COMP_WORDS[0]} 36 37 # List perf subcommands or long options 38 if [ $COMP_CWORD -eq 1 ]; then 39 if [[ $cur == --* ]]; then 40 COMPREPLY=( $( compgen -W '--help --version \ 41 --exec-path --html-path --paginate --no-pager \ 42 --perf-dir --work-tree --debugfs-dir' -- "$cur" ) ) 43 else 44 cmds=$($cmd --list-cmds) 45 COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) ) 46 fi 47 # List possible events for -e option 48 elif [[ $prev == "-e" && "${COMP_WORDS[1]}" == @(record|stat|top) ]]; then 49 evts=$($cmd list --raw-dump) 50 COMPREPLY=( $( compgen -W '$evts' -- "$cur" ) ) 51 __ltrim_colon_completions $cur 52 # List long option names 53 elif [[ $cur == --* ]]; then 54 subcmd=${COMP_WORDS[1]} 55 opts=$($cmd $subcmd --list-opts) 56 COMPREPLY=( $( compgen -W '$opts' -- "$cur" ) ) 57 # Fall down to list regular files 58 else 59 _filedir 60 fi 61 } && 62 complete -F _perf perf 63