Root/
1 | # perf bash and zsh completion |
2 | |
3 | # Taken from git.git's completion script. |
4 | __my_reassemble_comp_words_by_ref() |
5 | { |
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 |
48 | } |
49 | |
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 || |
80 | __ltrim_colon_completions() |
81 | { |
82 | if [[ "$1" == *:* && "$COMP_WORDBREAKS" == *:* ]]; then |
83 | # Remove colon-word prefix from COMPREPLY items |
84 | local colon_word=${1%"${1##*:}"} |
85 | local i=${#COMPREPLY[*]} |
86 | while [[ $((--i)) -ge 0 ]]; do |
87 | COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"} |
88 | done |
89 | fi |
90 | } |
91 | |
92 | __perfcomp () |
93 | { |
94 | COMPREPLY=( $( compgen -W "$1" -- "$2" ) ) |
95 | } |
96 | |
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]} |
108 | COMPREPLY=() |
109 | |
110 | # List perf subcommands or long options |
111 | if [ $cword -eq 1 ]; then |
112 | if [[ $cur == --* ]]; then |
113 | __perfcomp '--help --version \ |
114 | --exec-path --html-path --paginate --no-pager \ |
115 | --perf-dir --work-tree --debugfs-dir' -- "$cur" |
116 | else |
117 | cmds=$($cmd --list-cmds) |
118 | __perfcomp "$cmds" "$cur" |
119 | fi |
120 | # List possible events for -e option |
121 | elif [[ $prev == "-e" && "${words[1]}" == @(record|stat|top) ]]; then |
122 | evts=$($cmd list --raw-dump) |
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" |
128 | # List long option names |
129 | elif [[ $cur == --* ]]; then |
130 | subcmd=${words[1]} |
131 | opts=$($cmd $subcmd --list-opts) |
132 | __perfcomp "$opts" "$cur" |
133 | fi |
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 |
203 | } && |
204 | |
205 | complete -o bashdefault -o default -o nospace -F _perf perf 2>/dev/null \ |
206 | || complete -o default -o nospace -F _perf perf |
207 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9