Subversion Repositories configs

Rev

Rev 3 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
33 - 1
# perf bash and zsh completion
3 - 2
 
33 - 3
# Taken from git.git's completion script.
4
__my_reassemble_comp_words_by_ref()
3 - 5
{
33 - 6
	local exclude i j first
7
	# Which word separators to exclude?
8
	exclude="${1//[^$COMP_WORDBREAKS]}"
9
	cword_=$COMP_CWORD
10
	if [ -z "$exclude" ]; then
11
		words_=("${COMP_WORDS[@]}")
12
		return
13
	fi
14
	# List of word completion separators has shrunk;
15
	# re-assemble words to complete.
16
	for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do
17
		# Append each nonempty word consisting of just
18
		# word separator characters to the current word.
19
		first=t
20
		while
21
			[ $i -gt 0 ] &&
22
			[ -n "${COMP_WORDS[$i]}" ] &&
23
			# word consists of excluded word separators
24
			[ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ]
25
		do
26
			# Attach to the previous token,
27
			# unless the previous token is the command name.
28
			if [ $j -ge 2 ] && [ -n "$first" ]; then
29
				((j--))
30
			fi
31
			first=
32
			words_[$j]=${words_[j]}${COMP_WORDS[i]}
33
			if [ $i = $COMP_CWORD ]; then
34
				cword_=$j
35
			fi
36
			if (($i < ${#COMP_WORDS[@]} - 1)); then
37
				((i++))
38
			else
39
				# Done.
40
				return
41
			fi
42
		done
43
		words_[$j]=${words_[j]}${COMP_WORDS[i]}
44
		if [ $i = $COMP_CWORD ]; then
45
			cword_=$j
46
		fi
47
	done
3 - 48
}
49
 
33 - 50
type _get_comp_words_by_ref &>/dev/null ||
51
_get_comp_words_by_ref()
52
{
53
	local exclude cur_ words_ cword_
54
	if [ "$1" = "-n" ]; then
55
		exclude=$2
56
		shift 2
57
	fi
58
	__my_reassemble_comp_words_by_ref "$exclude"
59
	cur_=${words_[cword_]}
60
	while [ $# -gt 0 ]; do
61
		case "$1" in
62
		cur)
63
			cur=$cur_
64
			;;
65
		prev)
66
			prev=${words_[$cword_-1]}
67
			;;
68
		words)
69
			words=("${words_[@]}")
70
			;;
71
		cword)
72
			cword=$cword_
73
			;;
74
		esac
75
		shift
76
	done
77
}
78
 
79
type __ltrim_colon_completions &>/dev/null ||
3 - 80
__ltrim_colon_completions()
81
{
82
	if [[ "$1" == *:* && "$COMP_WORDBREAKS" == *:* ]]; then
83
		# Remove colon-word prefix from COMPREPLY items
33 - 84
		local colon_word=${1%"${1##*:}"}
3 - 85
		local i=${#COMPREPLY[*]}
86
		while [[ $((--i)) -ge 0 ]]; do
87
			COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"}
88
		done
89
	fi
90
}
91
 
33 - 92
__perfcomp ()
3 - 93
{
33 - 94
	COMPREPLY=( $( compgen -W "$1" -- "$2" ) )
95
}
3 - 96
 
33 - 97
__perfcomp_colon ()
98
{
99
	__perfcomp "$1" "$2"
100
	__ltrim_colon_completions $cur
101
}
102
 
103
__perf_main ()
104
{
105
	local cmd
106
 
107
	cmd=${words[0]}
3 - 108
	COMPREPLY=()
109
 
110
	# List perf subcommands or long options
33 - 111
	if [ $cword -eq 1 ]; then
3 - 112
		if [[ $cur == --* ]]; then
33 - 113
			__perfcomp '--help --version \
3 - 114
			--exec-path --html-path --paginate --no-pager \
33 - 115
			--perf-dir --work-tree --debugfs-dir' -- "$cur"
3 - 116
		else
117
			cmds=$($cmd --list-cmds)
33 - 118
			__perfcomp "$cmds" "$cur"
3 - 119
		fi
120
	# List possible events for -e option
33 - 121
	elif [[ $prev == "-e" && "${words[1]}" == @(record|stat|top) ]]; then
3 - 122
		evts=$($cmd list --raw-dump)
33 - 123
		__perfcomp_colon "$evts" "$cur"
124
	# List subcommands for perf commands
125
	elif [[ $prev == @(kvm|kmem|mem|lock|sched) ]]; then
126
		subcmds=$($cmd $prev --list-cmds)
127
		__perfcomp_colon "$subcmds" "$cur"
3 - 128
	# List long option names
129
	elif [[ $cur == --* ]];  then
33 - 130
		subcmd=${words[1]}
3 - 131
		opts=$($cmd $subcmd --list-opts)
33 - 132
		__perfcomp "$opts" "$cur"
3 - 133
	fi
33 - 134
}
135
 
136
if [[ -n ${ZSH_VERSION-} ]]; then
137
	autoload -U +X compinit && compinit
138
 
139
	__perfcomp ()
140
	{
141
		emulate -L zsh
142
 
143
		local c IFS=$' \t\n'
144
		local -a array
145
 
146
		for c in ${=1}; do
147
			case $c in
148
			--*=*|*.) ;;
149
			*) c="$c " ;;
150
			esac
151
			array[${#array[@]}+1]="$c"
152
		done
153
 
154
		compset -P '*[=:]'
155
		compadd -Q -S '' -a -- array && _ret=0
156
	}
157
 
158
	__perfcomp_colon ()
159
	{
160
		emulate -L zsh
161
 
162
		local cur_="${2-$cur}"
163
		local c IFS=$' \t\n'
164
		local -a array
165
 
166
		if [[ "$cur_" == *:* ]]; then
167
			local colon_word=${cur_%"${cur_##*:}"}
168
		fi
169
 
170
		for c in ${=1}; do
171
			case $c in
172
			--*=*|*.) ;;
173
			*) c="$c " ;;
174
			esac
175
			array[$#array+1]=${c#"$colon_word"}
176
		done
177
 
178
		compset -P '*[=:]'
179
		compadd -Q -S '' -a -- array && _ret=0
180
	}
181
 
182
	_perf ()
183
	{
184
		local _ret=1 cur cword prev
185
		cur=${words[CURRENT]}
186
		prev=${words[CURRENT-1]}
187
		let cword=CURRENT-1
188
		emulate ksh -c __perf_main
189
		let _ret && _default && _ret=0
190
		return _ret
191
	}
192
 
193
	compdef _perf perf
194
	return
195
fi
196
 
197
type perf &>/dev/null &&
198
_perf()
199
{
200
	local cur words cword prev
201
	_get_comp_words_by_ref -n =: cur words cword prev
202
	__perf_main
3 - 203
} &&
33 - 204
 
205
complete -o bashdefault -o default -o nospace -F _perf perf 2>/dev/null \
206
	|| complete -o default -o nospace -F _perf perf