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
 |