diff options
Diffstat (limited to 'tools/perf/bash_completion')
| -rw-r--r-- | tools/perf/bash_completion | 50 | 
1 files changed, 43 insertions, 7 deletions
diff --git a/tools/perf/bash_completion b/tools/perf/bash_completion index 1958fa539d0..56e6a12aab5 100644 --- a/tools/perf/bash_completion +++ b/tools/perf/bash_completion @@ -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  |