~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/perf/perf-completion.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/perf/perf-completion.sh (Architecture sparc) and /tools/perf/perf-completion.sh (Architecture i386)


  1 # perf bash and zsh completion                      1 # perf bash and zsh completion
  2 # SPDX-License-Identifier: GPL-2.0                  2 # SPDX-License-Identifier: GPL-2.0
  3                                                     3 
  4 # Taken from git.git's completion script.           4 # Taken from git.git's completion script.
  5 __my_reassemble_comp_words_by_ref()                 5 __my_reassemble_comp_words_by_ref()
  6 {                                                   6 {
  7         local exclude i j first                     7         local exclude i j first
  8         # Which word separators to exclude?         8         # Which word separators to exclude?
  9         exclude="${1//[^$COMP_WORDBREAKS]}"         9         exclude="${1//[^$COMP_WORDBREAKS]}"
 10         cword_=$COMP_CWORD                         10         cword_=$COMP_CWORD
 11         if [ -z "$exclude" ]; then                 11         if [ -z "$exclude" ]; then
 12                 words_=("${COMP_WORDS[@]}")        12                 words_=("${COMP_WORDS[@]}")
 13                 return                             13                 return
 14         fi                                         14         fi
 15         # List of word completion separators h     15         # List of word completion separators has shrunk;
 16         # re-assemble words to complete.           16         # re-assemble words to complete.
 17         for ((i=0, j=0; i < ${#COMP_WORDS[@]};     17         for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do
 18                 # Append each nonempty word co     18                 # Append each nonempty word consisting of just
 19                 # word separator characters to     19                 # word separator characters to the current word.
 20                 first=t                            20                 first=t
 21                 while                              21                 while
 22                         [ $i -gt 0 ] &&            22                         [ $i -gt 0 ] &&
 23                         [ -n "${COMP_WORDS[$i]     23                         [ -n "${COMP_WORDS[$i]}" ] &&
 24                         # word consists of exc     24                         # word consists of excluded word separators
 25                         [ "${COMP_WORDS[$i]//[     25                         [ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ]
 26                 do                                 26                 do
 27                         # Attach to the previo     27                         # Attach to the previous token,
 28                         # unless the previous      28                         # unless the previous token is the command name.
 29                         if [ $j -ge 2 ] && [ -     29                         if [ $j -ge 2 ] && [ -n "$first" ]; then
 30                                 ((j--))            30                                 ((j--))
 31                         fi                         31                         fi
 32                         first=                     32                         first=
 33                         words_[$j]=${words_[j]     33                         words_[$j]=${words_[j]}${COMP_WORDS[i]}
 34                         if [ $i = $COMP_CWORD      34                         if [ $i = $COMP_CWORD ]; then
 35                                 cword_=$j          35                                 cword_=$j
 36                         fi                         36                         fi
 37                         if (($i < ${#COMP_WORD     37                         if (($i < ${#COMP_WORDS[@]} - 1)); then
 38                                 ((i++))            38                                 ((i++))
 39                         else                       39                         else
 40                                 # Done.            40                                 # Done.
 41                                 return             41                                 return
 42                         fi                         42                         fi
 43                 done                               43                 done
 44                 words_[$j]=${words_[j]}${COMP_     44                 words_[$j]=${words_[j]}${COMP_WORDS[i]}
 45                 if [ $i = $COMP_CWORD ]; then      45                 if [ $i = $COMP_CWORD ]; then
 46                         cword_=$j                  46                         cword_=$j
 47                 fi                                 47                 fi
 48         done                                       48         done
 49 }                                                  49 }
 50                                                    50 
 51 # Define preload_get_comp_words_by_ref="false"     51 # Define preload_get_comp_words_by_ref="false", if the function
 52 # __perf_get_comp_words_by_ref() is required i     52 # __perf_get_comp_words_by_ref() is required instead.
 53 preload_get_comp_words_by_ref="true"               53 preload_get_comp_words_by_ref="true"
 54                                                    54 
 55 if [ $preload_get_comp_words_by_ref = "true" ]     55 if [ $preload_get_comp_words_by_ref = "true" ]; then
 56         type _get_comp_words_by_ref &>/dev/nul     56         type _get_comp_words_by_ref &>/dev/null ||
 57         preload_get_comp_words_by_ref="false"      57         preload_get_comp_words_by_ref="false"
 58 fi                                                 58 fi
 59 [ $preload_get_comp_words_by_ref = "true" ] ||     59 [ $preload_get_comp_words_by_ref = "true" ] ||
 60 __perf_get_comp_words_by_ref()                     60 __perf_get_comp_words_by_ref()
 61 {                                                  61 {
 62         local exclude cur_ words_ cword_           62         local exclude cur_ words_ cword_
 63         if [ "$1" = "-n" ]; then                   63         if [ "$1" = "-n" ]; then
 64                 exclude=$2                         64                 exclude=$2
 65                 shift 2                            65                 shift 2
 66         fi                                         66         fi
 67         __my_reassemble_comp_words_by_ref "$ex     67         __my_reassemble_comp_words_by_ref "$exclude"
 68         cur_=${words_[cword_]}                     68         cur_=${words_[cword_]}
 69         while [ $# -gt 0 ]; do                     69         while [ $# -gt 0 ]; do
 70                 case "$1" in                       70                 case "$1" in
 71                 cur)                               71                 cur)
 72                         cur=$cur_                  72                         cur=$cur_
 73                         ;;                         73                         ;;
 74                 prev)                              74                 prev)
 75                         prev=${words_[$cword_-     75                         prev=${words_[$cword_-1]}
 76                         ;;                         76                         ;;
 77                 words)                             77                 words)
 78                         words=("${words_[@]}")     78                         words=("${words_[@]}")
 79                         ;;                         79                         ;;
 80                 cword)                             80                 cword)
 81                         cword=$cword_              81                         cword=$cword_
 82                         ;;                         82                         ;;
 83                 esac                               83                 esac
 84                 shift                              84                 shift
 85         done                                       85         done
 86 }                                                  86 }
 87                                                    87 
 88 # Define preload__ltrim_colon_completions="fal     88 # Define preload__ltrim_colon_completions="false", if the function
 89 # __perf__ltrim_colon_completions() is require     89 # __perf__ltrim_colon_completions() is required instead.
 90 preload__ltrim_colon_completions="true"            90 preload__ltrim_colon_completions="true"
 91                                                    91 
 92 if [ $preload__ltrim_colon_completions = "true     92 if [ $preload__ltrim_colon_completions = "true" ]; then
 93         type __ltrim_colon_completions &>/dev/     93         type __ltrim_colon_completions &>/dev/null ||
 94         preload__ltrim_colon_completions="fals     94         preload__ltrim_colon_completions="false"
 95 fi                                                 95 fi
 96 [ $preload__ltrim_colon_completions = "true" ]     96 [ $preload__ltrim_colon_completions = "true" ] ||
 97 __perf__ltrim_colon_completions()                  97 __perf__ltrim_colon_completions()
 98 {                                                  98 {
 99         if [[ "$1" == *:* && "$COMP_WORDBREAKS     99         if [[ "$1" == *:* && "$COMP_WORDBREAKS" == *:* ]]; then
100                 # Remove colon-word prefix fro    100                 # Remove colon-word prefix from COMPREPLY items
101                 local colon_word=${1%"${1##*:}    101                 local colon_word=${1%"${1##*:}"}
102                 local i=${#COMPREPLY[*]}          102                 local i=${#COMPREPLY[*]}
103                 while [[ $((--i)) -ge 0 ]]; do    103                 while [[ $((--i)) -ge 0 ]]; do
104                         COMPREPLY[$i]=${COMPRE    104                         COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"}
105                 done                              105                 done
106         fi                                        106         fi
107 }                                                 107 }
108                                                   108 
109 __perfcomp ()                                     109 __perfcomp ()
110 {                                                 110 {
111         # Expansion of spaces to array is deli    111         # Expansion of spaces to array is deliberate.
112         # shellcheck disable=SC2207               112         # shellcheck disable=SC2207
113         COMPREPLY=( $( compgen -W "$1" -- "$2"    113         COMPREPLY=( $( compgen -W "$1" -- "$2" ) )
114 }                                                 114 }
115                                                   115 
116 __perfcomp_colon ()                               116 __perfcomp_colon ()
117 {                                                 117 {
118         __perfcomp "$1" "$2"                      118         __perfcomp "$1" "$2"
119         if [ $preload__ltrim_colon_completions    119         if [ $preload__ltrim_colon_completions = "true" ]; then
120                 __ltrim_colon_completions $cur    120                 __ltrim_colon_completions $cur
121         else                                      121         else
122                 __perf__ltrim_colon_completion    122                 __perf__ltrim_colon_completions $cur
123         fi                                        123         fi
124 }                                                 124 }
125                                                   125 
126 __perf_prev_skip_opts ()                          126 __perf_prev_skip_opts ()
127 {                                                 127 {
128         local i cmd_ cmds_                        128         local i cmd_ cmds_
129                                                   129 
130         let i=cword-1                             130         let i=cword-1
131         cmds_=$($cmd $1 --list-cmds)              131         cmds_=$($cmd $1 --list-cmds)
132         prev_skip_opts=""                         132         prev_skip_opts=""
133         while [ $i -ge 0 ]; do                    133         while [ $i -ge 0 ]; do
134                 if [[ ${words[i]} == "$1" ]];     134                 if [[ ${words[i]} == "$1" ]]; then
135                         return                    135                         return
136                 fi                                136                 fi
137                 for cmd_ in $cmds_; do            137                 for cmd_ in $cmds_; do
138                         if [[ ${words[i]} == "    138                         if [[ ${words[i]} == "$cmd_" ]]; then
139                                 prev_skip_opts    139                                 prev_skip_opts=${words[i]}
140                                 return            140                                 return
141                         fi                        141                         fi
142                 done                              142                 done
143                 ((i--))                           143                 ((i--))
144         done                                      144         done
145 }                                                 145 }
146                                                   146 
147 __perf_main ()                                    147 __perf_main ()
148 {                                                 148 {
149         local cmd                                 149         local cmd
150                                                   150 
151         cmd=${words[0]}                           151         cmd=${words[0]}
152         COMPREPLY=()                              152         COMPREPLY=()
153                                                   153 
154         # Skip options backward and find the l    154         # Skip options backward and find the last perf command
155         __perf_prev_skip_opts                     155         __perf_prev_skip_opts
156         # List perf subcommands or long option    156         # List perf subcommands or long options
157         if [ -z $prev_skip_opts ]; then           157         if [ -z $prev_skip_opts ]; then
158                 if [[ $cur == --* ]]; then        158                 if [[ $cur == --* ]]; then
159                         cmds=$($cmd --list-opt    159                         cmds=$($cmd --list-opts)
160                 else                              160                 else
161                         cmds=$($cmd --list-cmd    161                         cmds=$($cmd --list-cmds)
162                 fi                                162                 fi
163                 __perfcomp "$cmds" "$cur"         163                 __perfcomp "$cmds" "$cur"
164         # List possible events for -e option      164         # List possible events for -e option
165         elif [[ $prev == @("-e"|"--event") &&     165         elif [[ $prev == @("-e"|"--event") &&
166                 $prev_skip_opts == @(record|st    166                 $prev_skip_opts == @(record|stat|top) ]]; then
167                                                   167 
168                 local cur1=${COMP_WORDS[COMP_C    168                 local cur1=${COMP_WORDS[COMP_CWORD]}
169                 local raw_evts                    169                 local raw_evts
170                 local arr s tmp result cpu_evt    170                 local arr s tmp result cpu_evts
171                                                   171 
172                 raw_evts=$($cmd list --raw-dum    172                 raw_evts=$($cmd list --raw-dump hw sw cache tracepoint pmu sdt)
173                 # aarch64 doesn't have /sys/bu    173                 # aarch64 doesn't have /sys/bus/event_source/devices/cpu/events
174                 if [[ `uname -m` != aarch64 ]]    174                 if [[ `uname -m` != aarch64 ]]; then
175                         cpu_evts=$(ls /sys/bus    175                         cpu_evts=$(ls /sys/bus/event_source/devices/cpu/events)
176                 fi                                176                 fi
177                                                   177 
178                 if [[ "$cur1" == */* && ${cur1    178                 if [[ "$cur1" == */* && ${cur1#*/} =~ ^[A-Z] ]]; then
179                         OLD_IFS="$IFS"            179                         OLD_IFS="$IFS"
180                         IFS=" "                   180                         IFS=" "
181                         # Expansion of spaces     181                         # Expansion of spaces to array is deliberate.
182                         # shellcheck disable=S    182                         # shellcheck disable=SC2206
183                         arr=($raw_evts)           183                         arr=($raw_evts)
184                         IFS="$OLD_IFS"            184                         IFS="$OLD_IFS"
185                                                   185 
186                         for s in "${arr[@]}"      186                         for s in "${arr[@]}"
187                         do                        187                         do
188                                 if [[ "$s" ==     188                                 if [[ "$s" == *cpu/* ]]; then
189                                         tmp=${    189                                         tmp=${s#*cpu/}
190                                         result    190                                         result=$result" ""cpu/"${tmp^^}
191                                 else              191                                 else
192                                         result    192                                         result=$result" "$s
193                                 fi                193                                 fi
194                         done                      194                         done
195                                                   195 
196                         evts=${result}" "${cpu    196                         evts=${result}" "${cpu_evts}
197                 else                              197                 else
198                         evts=${raw_evts}" "${c    198                         evts=${raw_evts}" "${cpu_evts}
199                 fi                                199                 fi
200                                                   200 
201                 if [[ "$cur1" == , ]]; then       201                 if [[ "$cur1" == , ]]; then
202                         __perfcomp_colon "$evt    202                         __perfcomp_colon "$evts" ""
203                 else                              203                 else
204                         __perfcomp_colon "$evt    204                         __perfcomp_colon "$evts" "$cur1"
205                 fi                                205                 fi
206         elif [[ $prev == @("--pfm-events") &&     206         elif [[ $prev == @("--pfm-events") &&
207                 $prev_skip_opts == @(record|st    207                 $prev_skip_opts == @(record|stat|top) ]]; then
208                 local evts                        208                 local evts
209                 evts=$($cmd list --raw-dump pf    209                 evts=$($cmd list --raw-dump pfm)
210                 __perfcomp "$evts" "$cur"         210                 __perfcomp "$evts" "$cur"
211         elif [[ $prev == @("-M"|"--metrics") &    211         elif [[ $prev == @("-M"|"--metrics") &&
212                 $prev_skip_opts == @(stat) ]];    212                 $prev_skip_opts == @(stat) ]]; then
213                 local metrics                     213                 local metrics
214                 metrics=$($cmd list --raw-dump    214                 metrics=$($cmd list --raw-dump metric metricgroup)
215                 __perfcomp "$metrics" "$cur"      215                 __perfcomp "$metrics" "$cur"
216         else                                      216         else
217                 # List subcommands for perf co    217                 # List subcommands for perf commands
218                 if [[ $prev_skip_opts == @(kvm    218                 if [[ $prev_skip_opts == @(kvm|kmem|mem|lock|sched|
219                         |data|help|script|test    219                         |data|help|script|test|timechart|trace) ]]; then
220                         subcmds=$($cmd $prev_s    220                         subcmds=$($cmd $prev_skip_opts --list-cmds)
221                         __perfcomp_colon "$sub    221                         __perfcomp_colon "$subcmds" "$cur"
222                 fi                                222                 fi
223                 # List long option names          223                 # List long option names
224                 if [[ $cur == --* ]];  then       224                 if [[ $cur == --* ]];  then
225                         subcmd=$prev_skip_opts    225                         subcmd=$prev_skip_opts
226                         __perf_prev_skip_opts     226                         __perf_prev_skip_opts $subcmd
227                         subcmd=$subcmd" "$prev    227                         subcmd=$subcmd" "$prev_skip_opts
228                         opts=$($cmd $subcmd --    228                         opts=$($cmd $subcmd --list-opts)
229                         __perfcomp "$opts" "$c    229                         __perfcomp "$opts" "$cur"
230                 fi                                230                 fi
231         fi                                        231         fi
232 }                                                 232 }
233                                                   233 
234 if [[ -n ${ZSH_VERSION-} ]]; then                 234 if [[ -n ${ZSH_VERSION-} ]]; then
235         autoload -U +X compinit && compinit       235         autoload -U +X compinit && compinit
236                                                   236 
237         __perfcomp ()                             237         __perfcomp ()
238         {                                         238         {
239                 emulate -L zsh                    239                 emulate -L zsh
240                                                   240 
241                 local c IFS=$' \t\n'              241                 local c IFS=$' \t\n'
242                 local -a array                    242                 local -a array
243                                                   243 
244                 for c in ${=1}; do                244                 for c in ${=1}; do
245                         case $c in                245                         case $c in
246                         --*=*|*.) ;;              246                         --*=*|*.) ;;
247                         *) c="$c " ;;             247                         *) c="$c " ;;
248                         esac                      248                         esac
249                         array[${#array[@]}+1]=    249                         array[${#array[@]}+1]="$c"
250                 done                              250                 done
251                                                   251 
252                 compset -P '*[=:]'                252                 compset -P '*[=:]'
253                 compadd -Q -S '' -a -- array &    253                 compadd -Q -S '' -a -- array && _ret=0
254         }                                         254         }
255                                                   255 
256         __perfcomp_colon ()                       256         __perfcomp_colon ()
257         {                                         257         {
258                 emulate -L zsh                    258                 emulate -L zsh
259                                                   259 
260                 local cur_="${2-$cur}"            260                 local cur_="${2-$cur}"
261                 local c IFS=$' \t\n'              261                 local c IFS=$' \t\n'
262                 local -a array                    262                 local -a array
263                                                   263 
264                 if [[ "$cur_" == *:* ]]; then     264                 if [[ "$cur_" == *:* ]]; then
265                         local colon_word=${cur    265                         local colon_word=${cur_%"${cur_##*:}"}
266                 fi                                266                 fi
267                                                   267 
268                 for c in ${=1}; do                268                 for c in ${=1}; do
269                         case $c in                269                         case $c in
270                         --*=*|*.) ;;              270                         --*=*|*.) ;;
271                         *) c="$c " ;;             271                         *) c="$c " ;;
272                         esac                      272                         esac
273                         array[$#array+1]=${c#"    273                         array[$#array+1]=${c#"$colon_word"}
274                 done                              274                 done
275                                                   275 
276                 compset -P '*[=:]'                276                 compset -P '*[=:]'
277                 compadd -Q -S '' -a -- array &    277                 compadd -Q -S '' -a -- array && _ret=0
278         }                                         278         }
279                                                   279 
280         _perf ()                                  280         _perf ()
281         {                                         281         {
282                 local _ret=1 cur cword prev       282                 local _ret=1 cur cword prev
283                 cur=${words[CURRENT]}             283                 cur=${words[CURRENT]}
284                 prev=${words[CURRENT-1]}          284                 prev=${words[CURRENT-1]}
285                 let cword=CURRENT-1               285                 let cword=CURRENT-1
286                 emulate ksh -c __perf_main        286                 emulate ksh -c __perf_main
287                 let _ret && _default && _ret=0    287                 let _ret && _default && _ret=0
288                 # _ret is only assigned 0 or 1    288                 # _ret is only assigned 0 or 1, disable inaccurate analysis.
289                 # shellcheck disable=SC2152       289                 # shellcheck disable=SC2152
290                 return _ret                       290                 return _ret
291         }                                         291         }
292                                                   292 
293         compdef _perf perf                        293         compdef _perf perf
294         return                                    294         return
295 fi                                                295 fi
296                                                   296 
297 type perf &>/dev/null &&                          297 type perf &>/dev/null &&
298 _perf()                                           298 _perf()
299 {                                                 299 {
300         if [[ "$COMP_WORDBREAKS" != *,* ]]; th    300         if [[ "$COMP_WORDBREAKS" != *,* ]]; then
301                 COMP_WORDBREAKS="${COMP_WORDBR    301                 COMP_WORDBREAKS="${COMP_WORDBREAKS},"
302                 export COMP_WORDBREAKS            302                 export COMP_WORDBREAKS
303         fi                                        303         fi
304                                                   304 
305         if [[ "$COMP_WORDBREAKS" == *:* ]]; th    305         if [[ "$COMP_WORDBREAKS" == *:* ]]; then
306                 COMP_WORDBREAKS="${COMP_WORDBR    306                 COMP_WORDBREAKS="${COMP_WORDBREAKS/:/}"
307                 export COMP_WORDBREAKS            307                 export COMP_WORDBREAKS
308         fi                                        308         fi
309                                                   309 
310         local cur words cword prev                310         local cur words cword prev
311         if [ $preload_get_comp_words_by_ref =     311         if [ $preload_get_comp_words_by_ref = "true" ]; then
312                 _get_comp_words_by_ref -n =:,     312                 _get_comp_words_by_ref -n =:, cur words cword prev
313         else                                      313         else
314                 __perf_get_comp_words_by_ref -    314                 __perf_get_comp_words_by_ref -n =:, cur words cword prev
315         fi                                        315         fi
316         __perf_main                               316         __perf_main
317 } &&                                              317 } &&
318                                                   318 
319 complete -o bashdefault -o default -o nospace     319 complete -o bashdefault -o default -o nospace -F _perf perf 2>/dev/null \
320         || complete -o default -o nospace -F _    320         || complete -o default -o nospace -F _perf perf
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php