63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| # 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
 |