| 
									
										
										
										
											2012-08-09 16:31:51 +02:00
										 |  |  | # perf completion | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-04 18:11:30 +05:30
										 |  |  | # Taken from git.git's completion script. | 
					
						
							|  |  |  | __my_reassemble_comp_words_by_ref() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	local exclude i j first | 
					
						
							|  |  |  | 	# Which word separators to exclude? | 
					
						
							|  |  |  | 	exclude="${1//[^$COMP_WORDBREAKS]}" | 
					
						
							|  |  |  | 	cword_=$COMP_CWORD | 
					
						
							|  |  |  | 	if [ -z "$exclude" ]; then | 
					
						
							|  |  |  | 		words_=("${COMP_WORDS[@]}") | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 	# List of word completion separators has shrunk; | 
					
						
							|  |  |  | 	# re-assemble words to complete. | 
					
						
							|  |  |  | 	for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do | 
					
						
							|  |  |  | 		# Append each nonempty word consisting of just | 
					
						
							|  |  |  | 		# word separator characters to the current word. | 
					
						
							|  |  |  | 		first=t | 
					
						
							|  |  |  | 		while | 
					
						
							|  |  |  | 			[ $i -gt 0 ] && | 
					
						
							|  |  |  | 			[ -n "${COMP_WORDS[$i]}" ] && | 
					
						
							|  |  |  | 			# word consists of excluded word separators | 
					
						
							|  |  |  | 			[ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ] | 
					
						
							|  |  |  | 		do | 
					
						
							|  |  |  | 			# Attach to the previous token, | 
					
						
							|  |  |  | 			# unless the previous token is the command name. | 
					
						
							|  |  |  | 			if [ $j -ge 2 ] && [ -n "$first" ]; then | 
					
						
							|  |  |  | 				((j--)) | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 			first= | 
					
						
							|  |  |  | 			words_[$j]=${words_[j]}${COMP_WORDS[i]} | 
					
						
							|  |  |  | 			if [ $i = $COMP_CWORD ]; then | 
					
						
							|  |  |  | 				cword_=$j | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 			if (($i < ${#COMP_WORDS[@]} - 1)); then | 
					
						
							|  |  |  | 				((i++)) | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				# Done. | 
					
						
							|  |  |  | 				return | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 		done | 
					
						
							|  |  |  | 		words_[$j]=${words_[j]}${COMP_WORDS[i]} | 
					
						
							|  |  |  | 		if [ $i = $COMP_CWORD ]; then | 
					
						
							|  |  |  | 			cword_=$j | 
					
						
							|  |  |  | 		fi | 
					
						
							|  |  |  | 	done | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type _get_comp_words_by_ref &>/dev/null || | 
					
						
							|  |  |  | _get_comp_words_by_ref() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	local exclude cur_ words_ cword_ | 
					
						
							|  |  |  | 	if [ "$1" = "-n" ]; then | 
					
						
							|  |  |  | 		exclude=$2 | 
					
						
							|  |  |  | 		shift 2 | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 	__my_reassemble_comp_words_by_ref "$exclude" | 
					
						
							|  |  |  | 	cur_=${words_[cword_]} | 
					
						
							|  |  |  | 	while [ $# -gt 0 ]; do | 
					
						
							|  |  |  | 		case "$1" in | 
					
						
							|  |  |  | 		cur) | 
					
						
							|  |  |  | 			cur=$cur_ | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		prev) | 
					
						
							|  |  |  | 			prev=${words_[$cword_-1]} | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		words) | 
					
						
							|  |  |  | 			words=("${words_[@]}") | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		cword) | 
					
						
							|  |  |  | 			cword=$cword_ | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		esac | 
					
						
							|  |  |  | 		shift | 
					
						
							|  |  |  | 	done | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-04 18:11:29 +05:30
										 |  |  | type __ltrim_colon_completions &>/dev/null || | 
					
						
							| 
									
										
										
										
											2012-10-04 14:23:54 +09:00
										 |  |  | __ltrim_colon_completions() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if [[ "$1" == *:* && "$COMP_WORDBREAKS" == *:* ]]; then | 
					
						
							|  |  |  | 		# Remove colon-word prefix from COMPREPLY items | 
					
						
							| 
									
										
										
										
											2013-07-04 18:11:26 +05:30
										 |  |  | 		local colon_word=${1%"${1##*:}"} | 
					
						
							| 
									
										
										
										
											2012-10-04 14:23:54 +09:00
										 |  |  | 		local i=${#COMPREPLY[*]} | 
					
						
							|  |  |  | 		while [[ $((--i)) -ge 0 ]]; do | 
					
						
							|  |  |  | 			COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"} | 
					
						
							|  |  |  | 		done | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-04 18:11:25 +05:30
										 |  |  | type perf &>/dev/null && | 
					
						
							| 
									
										
										
										
											2012-08-09 16:31:51 +02:00
										 |  |  | _perf() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-07-04 18:11:31 +05:30
										 |  |  | 	local cur words cword prev cmd | 
					
						
							| 
									
										
										
										
											2012-08-09 16:31:51 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	COMPREPLY=() | 
					
						
							| 
									
										
										
										
											2013-07-04 18:11:31 +05:30
										 |  |  | 	_get_comp_words_by_ref -n =: cur words cword prev | 
					
						
							| 
									
										
										
										
											2012-08-09 16:31:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-04 18:11:31 +05:30
										 |  |  | 	cmd=${words[0]} | 
					
						
							| 
									
										
										
										
											2012-08-09 16:31:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-03 00:21:33 +09:00
										 |  |  | 	# List perf subcommands or long options | 
					
						
							| 
									
										
										
										
											2013-07-04 18:11:31 +05:30
										 |  |  | 	if [ $cword -eq 1 ]; then | 
					
						
							| 
									
										
										
										
											2012-10-03 00:21:33 +09:00
										 |  |  | 		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 | 
					
						
							| 
									
										
										
										
											2012-08-09 16:31:52 +02:00
										 |  |  | 	# List possible events for -e option | 
					
						
							| 
									
										
										
										
											2013-07-04 18:11:31 +05:30
										 |  |  | 	elif [[ $prev == "-e" && "${words[1]}" == @(record|stat|top) ]]; then | 
					
						
							| 
									
										
										
										
											2012-10-03 00:21:34 +09:00
										 |  |  | 		evts=$($cmd list --raw-dump) | 
					
						
							|  |  |  | 		COMPREPLY=( $( compgen -W '$evts' -- "$cur" ) ) | 
					
						
							| 
									
										
										
										
											2012-10-04 14:23:54 +09:00
										 |  |  | 		__ltrim_colon_completions $cur | 
					
						
							| 
									
										
										
										
											2012-10-03 00:21:34 +09:00
										 |  |  | 	# List long option names | 
					
						
							|  |  |  | 	elif [[ $cur == --* ]];  then | 
					
						
							| 
									
										
										
										
											2013-07-04 18:11:31 +05:30
										 |  |  | 		subcmd=${words[1]} | 
					
						
							| 
									
										
										
										
											2012-10-03 00:21:34 +09:00
										 |  |  | 		opts=$($cmd $subcmd --list-opts) | 
					
						
							|  |  |  | 		COMPREPLY=( $( compgen -W '$opts' -- "$cur" ) ) | 
					
						
							| 
									
										
										
										
											2012-08-09 16:31:51 +02:00
										 |  |  | 	fi | 
					
						
							|  |  |  | } && | 
					
						
							| 
									
										
										
										
											2013-07-04 18:11:27 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | complete -o bashdefault -o default -o nospace -F _perf perf 2>/dev/null \
 | 
					
						
							|  |  |  | 	|| complete -o default -o nospace -F _perf perf |