Home | History | Annotate | Download | only in perf
      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