Ramkumar Ramachandraperf completion: Use more comp words6e0dc3713 years agoHistory
126 lines · 2.9 KB · Text
RawDownload
# perf completion # 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} type __ltrim_colon_completions &>/dev/null ||__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} type perf &>/dev/null &&_perf(){	local cur words cword prev cmd 	COMPREPLY=()	_get_comp_words_by_ref -n =: cur words cword prev 	cmd=${words[0]} 	# List perf subcommands or long options	if [ $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" && "${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=${words[1]}		opts=$($cmd $subcmd --list-opts)		COMPREPLY=( $( compgen -W '$opts' -- "$cur" ) )	fi} && complete -o bashdefault -o default -o nospace -F _perf perf 2>/dev/null \	|| complete -o default -o nospace -F _perf perf