 ae0c1f9934
			
		
	
	
	ae0c1f9934
	
	
	
		
			
			Currently tracepoint events cannot be completed because they contain a colon (:) character. The colon is considered as a word separator when bash completion is done - variable COMP_WORDBREAKS contains colon - so if a word being completed contains a colon it can be a problem. Recent versions of bash completion provide -n switch to _get_comp_words_by_ref and __ltrim_colon_completions functions in order to resolve this issue. Copy the latter in case not exists. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1349328234-16995-1-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			62 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
 |