| # 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 prev cmd | 
 |  | 
 | 	COMPREPLY=() | 
 | 	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 or long options | 
 | 	if [ $COMP_CWORD -eq 1 ]; then | 
 | 		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 | 
 | 		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 | 
 | 	fi | 
 | } && | 
 | complete -F _perf perf |