~ [ 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 (Version linux-6.12-rc7) and /tools/perf/perf-completion.sh (Version linux-5.14.21)


  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 << 
112         # shellcheck disable=SC2207            << 
113         COMPREPLY=( $( compgen -W "$1" -- "$2"    111         COMPREPLY=( $( compgen -W "$1" -- "$2" ) )
114 }                                                 112 }
115                                                   113 
116 __perfcomp_colon ()                               114 __perfcomp_colon ()
117 {                                                 115 {
118         __perfcomp "$1" "$2"                      116         __perfcomp "$1" "$2"
119         if [ $preload__ltrim_colon_completions    117         if [ $preload__ltrim_colon_completions = "true" ]; then
120                 __ltrim_colon_completions $cur    118                 __ltrim_colon_completions $cur
121         else                                      119         else
122                 __perf__ltrim_colon_completion    120                 __perf__ltrim_colon_completions $cur
123         fi                                        121         fi
124 }                                                 122 }
125                                                   123 
126 __perf_prev_skip_opts ()                          124 __perf_prev_skip_opts ()
127 {                                                 125 {
128         local i cmd_ cmds_                        126         local i cmd_ cmds_
129                                                   127 
130         let i=cword-1                             128         let i=cword-1
131         cmds_=$($cmd $1 --list-cmds)              129         cmds_=$($cmd $1 --list-cmds)
132         prev_skip_opts=""                      !! 130         prev_skip_opts=()
133         while [ $i -ge 0 ]; do                    131         while [ $i -ge 0 ]; do
134                 if [[ ${words[i]} == "$1" ]];  !! 132                 if [[ ${words[i]} == $1 ]]; then
135                         return                    133                         return
136                 fi                                134                 fi
137                 for cmd_ in $cmds_; do            135                 for cmd_ in $cmds_; do
138                         if [[ ${words[i]} == " !! 136                         if [[ ${words[i]} == $cmd_ ]]; then
139                                 prev_skip_opts    137                                 prev_skip_opts=${words[i]}
140                                 return            138                                 return
141                         fi                        139                         fi
142                 done                              140                 done
143                 ((i--))                           141                 ((i--))
144         done                                      142         done
145 }                                                 143 }
146                                                   144 
147 __perf_main ()                                    145 __perf_main ()
148 {                                                 146 {
149         local cmd                                 147         local cmd
150                                                   148 
151         cmd=${words[0]}                           149         cmd=${words[0]}
152         COMPREPLY=()                              150         COMPREPLY=()
153                                                   151 
154         # Skip options backward and find the l    152         # Skip options backward and find the last perf command
155         __perf_prev_skip_opts                     153         __perf_prev_skip_opts
156         # List perf subcommands or long option    154         # List perf subcommands or long options
157         if [ -z $prev_skip_opts ]; then           155         if [ -z $prev_skip_opts ]; then
158                 if [[ $cur == --* ]]; then        156                 if [[ $cur == --* ]]; then
159                         cmds=$($cmd --list-opt    157                         cmds=$($cmd --list-opts)
160                 else                              158                 else
161                         cmds=$($cmd --list-cmd    159                         cmds=$($cmd --list-cmds)
162                 fi                                160                 fi
163                 __perfcomp "$cmds" "$cur"         161                 __perfcomp "$cmds" "$cur"
164         # List possible events for -e option      162         # List possible events for -e option
165         elif [[ $prev == @("-e"|"--event") &&     163         elif [[ $prev == @("-e"|"--event") &&
166                 $prev_skip_opts == @(record|st    164                 $prev_skip_opts == @(record|stat|top) ]]; then
167                                                   165 
168                 local cur1=${COMP_WORDS[COMP_C    166                 local cur1=${COMP_WORDS[COMP_CWORD]}
169                 local raw_evts                 !! 167                 local raw_evts=$($cmd list --raw-dump)
170                 local arr s tmp result cpu_evt !! 168                 local arr s tmp result
171                                                << 
172                 raw_evts=$($cmd list --raw-dum << 
173                 # aarch64 doesn't have /sys/bu << 
174                 if [[ `uname -m` != aarch64 ]] << 
175                         cpu_evts=$(ls /sys/bus << 
176                 fi                             << 
177                                                   169 
178                 if [[ "$cur1" == */* && ${cur1    170                 if [[ "$cur1" == */* && ${cur1#*/} =~ ^[A-Z] ]]; then
179                         OLD_IFS="$IFS"            171                         OLD_IFS="$IFS"
180                         IFS=" "                   172                         IFS=" "
181                         # Expansion of spaces  << 
182                         # shellcheck disable=S << 
183                         arr=($raw_evts)           173                         arr=($raw_evts)
184                         IFS="$OLD_IFS"            174                         IFS="$OLD_IFS"
185                                                   175 
186                         for s in "${arr[@]}"   !! 176                         for s in ${arr[@]}
187                         do                        177                         do
188                                 if [[ "$s" ==     178                                 if [[ "$s" == *cpu/* ]]; then
189                                         tmp=${    179                                         tmp=${s#*cpu/}
190                                         result    180                                         result=$result" ""cpu/"${tmp^^}
191                                 else              181                                 else
192                                         result    182                                         result=$result" "$s
193                                 fi                183                                 fi
194                         done                      184                         done
195                                                   185 
196                         evts=${result}" "${cpu !! 186                         evts=${result}" "$(ls /sys/bus/event_source/devices/cpu/events)
197                 else                              187                 else
198                         evts=${raw_evts}" "${c !! 188                         evts=${raw_evts}" "$(ls /sys/bus/event_source/devices/cpu/events)
199                 fi                                189                 fi
200                                                   190 
201                 if [[ "$cur1" == , ]]; then       191                 if [[ "$cur1" == , ]]; then
202                         __perfcomp_colon "$evt    192                         __perfcomp_colon "$evts" ""
203                 else                              193                 else
204                         __perfcomp_colon "$evt    194                         __perfcomp_colon "$evts" "$cur1"
205                 fi                                195                 fi
206         elif [[ $prev == @("--pfm-events") &&  << 
207                 $prev_skip_opts == @(record|st << 
208                 local evts                     << 
209                 evts=$($cmd list --raw-dump pf << 
210                 __perfcomp "$evts" "$cur"      << 
211         elif [[ $prev == @("-M"|"--metrics") & << 
212                 $prev_skip_opts == @(stat) ]]; << 
213                 local metrics                  << 
214                 metrics=$($cmd list --raw-dump << 
215                 __perfcomp "$metrics" "$cur"   << 
216         else                                      196         else
217                 # List subcommands for perf co    197                 # List subcommands for perf commands
218                 if [[ $prev_skip_opts == @(kvm    198                 if [[ $prev_skip_opts == @(kvm|kmem|mem|lock|sched|
219                         |data|help|script|test    199                         |data|help|script|test|timechart|trace) ]]; then
220                         subcmds=$($cmd $prev_s    200                         subcmds=$($cmd $prev_skip_opts --list-cmds)
221                         __perfcomp_colon "$sub    201                         __perfcomp_colon "$subcmds" "$cur"
222                 fi                                202                 fi
223                 # List long option names          203                 # List long option names
224                 if [[ $cur == --* ]];  then       204                 if [[ $cur == --* ]];  then
225                         subcmd=$prev_skip_opts    205                         subcmd=$prev_skip_opts
226                         __perf_prev_skip_opts     206                         __perf_prev_skip_opts $subcmd
227                         subcmd=$subcmd" "$prev    207                         subcmd=$subcmd" "$prev_skip_opts
228                         opts=$($cmd $subcmd --    208                         opts=$($cmd $subcmd --list-opts)
229                         __perfcomp "$opts" "$c    209                         __perfcomp "$opts" "$cur"
230                 fi                                210                 fi
231         fi                                        211         fi
232 }                                                 212 }
233                                                   213 
234 if [[ -n ${ZSH_VERSION-} ]]; then                 214 if [[ -n ${ZSH_VERSION-} ]]; then
235         autoload -U +X compinit && compinit       215         autoload -U +X compinit && compinit
236                                                   216 
237         __perfcomp ()                             217         __perfcomp ()
238         {                                         218         {
239                 emulate -L zsh                    219                 emulate -L zsh
240                                                   220 
241                 local c IFS=$' \t\n'              221                 local c IFS=$' \t\n'
242                 local -a array                    222                 local -a array
243                                                   223 
244                 for c in ${=1}; do                224                 for c in ${=1}; do
245                         case $c in                225                         case $c in
246                         --*=*|*.) ;;              226                         --*=*|*.) ;;
247                         *) c="$c " ;;             227                         *) c="$c " ;;
248                         esac                      228                         esac
249                         array[${#array[@]}+1]=    229                         array[${#array[@]}+1]="$c"
250                 done                              230                 done
251                                                   231 
252                 compset -P '*[=:]'                232                 compset -P '*[=:]'
253                 compadd -Q -S '' -a -- array &    233                 compadd -Q -S '' -a -- array && _ret=0
254         }                                         234         }
255                                                   235 
256         __perfcomp_colon ()                       236         __perfcomp_colon ()
257         {                                         237         {
258                 emulate -L zsh                    238                 emulate -L zsh
259                                                   239 
260                 local cur_="${2-$cur}"            240                 local cur_="${2-$cur}"
261                 local c IFS=$' \t\n'              241                 local c IFS=$' \t\n'
262                 local -a array                    242                 local -a array
263                                                   243 
264                 if [[ "$cur_" == *:* ]]; then     244                 if [[ "$cur_" == *:* ]]; then
265                         local colon_word=${cur    245                         local colon_word=${cur_%"${cur_##*:}"}
266                 fi                                246                 fi
267                                                   247 
268                 for c in ${=1}; do                248                 for c in ${=1}; do
269                         case $c in                249                         case $c in
270                         --*=*|*.) ;;              250                         --*=*|*.) ;;
271                         *) c="$c " ;;             251                         *) c="$c " ;;
272                         esac                      252                         esac
273                         array[$#array+1]=${c#"    253                         array[$#array+1]=${c#"$colon_word"}
274                 done                              254                 done
275                                                   255 
276                 compset -P '*[=:]'                256                 compset -P '*[=:]'
277                 compadd -Q -S '' -a -- array &    257                 compadd -Q -S '' -a -- array && _ret=0
278         }                                         258         }
279                                                   259 
280         _perf ()                                  260         _perf ()
281         {                                         261         {
282                 local _ret=1 cur cword prev       262                 local _ret=1 cur cword prev
283                 cur=${words[CURRENT]}             263                 cur=${words[CURRENT]}
284                 prev=${words[CURRENT-1]}          264                 prev=${words[CURRENT-1]}
285                 let cword=CURRENT-1               265                 let cword=CURRENT-1
286                 emulate ksh -c __perf_main        266                 emulate ksh -c __perf_main
287                 let _ret && _default && _ret=0    267                 let _ret && _default && _ret=0
288                 # _ret is only assigned 0 or 1 << 
289                 # shellcheck disable=SC2152    << 
290                 return _ret                       268                 return _ret
291         }                                         269         }
292                                                   270 
293         compdef _perf perf                        271         compdef _perf perf
294         return                                    272         return
295 fi                                                273 fi
296                                                   274 
297 type perf &>/dev/null &&                          275 type perf &>/dev/null &&
298 _perf()                                           276 _perf()
299 {                                                 277 {
300         if [[ "$COMP_WORDBREAKS" != *,* ]]; th    278         if [[ "$COMP_WORDBREAKS" != *,* ]]; then
301                 COMP_WORDBREAKS="${COMP_WORDBR    279                 COMP_WORDBREAKS="${COMP_WORDBREAKS},"
302                 export COMP_WORDBREAKS            280                 export COMP_WORDBREAKS
303         fi                                        281         fi
304                                                   282 
305         if [[ "$COMP_WORDBREAKS" == *:* ]]; th    283         if [[ "$COMP_WORDBREAKS" == *:* ]]; then
306                 COMP_WORDBREAKS="${COMP_WORDBR    284                 COMP_WORDBREAKS="${COMP_WORDBREAKS/:/}"
307                 export COMP_WORDBREAKS            285                 export COMP_WORDBREAKS
308         fi                                        286         fi
309                                                   287 
310         local cur words cword prev                288         local cur words cword prev
311         if [ $preload_get_comp_words_by_ref =     289         if [ $preload_get_comp_words_by_ref = "true" ]; then
312                 _get_comp_words_by_ref -n =:,     290                 _get_comp_words_by_ref -n =:, cur words cword prev
313         else                                      291         else
314                 __perf_get_comp_words_by_ref -    292                 __perf_get_comp_words_by_ref -n =:, cur words cword prev
315         fi                                        293         fi
316         __perf_main                               294         __perf_main
317 } &&                                              295 } &&
318                                                   296 
319 complete -o bashdefault -o default -o nospace     297 complete -o bashdefault -o default -o nospace -F _perf perf 2>/dev/null \
320         || complete -o default -o nospace -F _    298         || 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