diff options
author | Yunlong Song <yunlong.song@huawei.com> | 2015-03-18 09:35:47 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-03-19 12:49:20 -0400 |
commit | 67afff485b2ce742374edb2e17d21e2bc664eb1f (patch) | |
tree | 86eede15647798601aeaca9e00559bd98c6c1c70 /tools | |
parent | 02fde323b9aaebb4a21e7c0e04759470b6c07594 (diff) |
perf tools: Fix the bash completion for listing subsubcommands of perf subcommand
The bash completion does not support listing subsubcommands for 'perf
kvm|kmem|mem|lock|sched --<long option> <TAB>', where 'kvm|kmem|mem|
lock|sched' are all subcommands of perf.
Example:
Before this patch:
$ perf kvm --verbose <TAB>
$
As shown above, the subsubcommands of perf kvm does not come out.
After this patch:
$ perf kvm --verbose <TAB>
buildid-list diff record report stat
top
As shown above, the subsubcommands of perf kvm can come out now.
Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1426685758-25488-3-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/perf-completion.sh | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/tools/perf/perf-completion.sh b/tools/perf/perf-completion.sh index 4822ed38e23e..bbb61d0b79cd 100644 --- a/tools/perf/perf-completion.sh +++ b/tools/perf/perf-completion.sh | |||
@@ -100,6 +100,23 @@ __perfcomp_colon () | |||
100 | __ltrim_colon_completions $cur | 100 | __ltrim_colon_completions $cur |
101 | } | 101 | } |
102 | 102 | ||
103 | __perf_prev_skip_opts () | ||
104 | { | ||
105 | local i cmd_ cmds_ | ||
106 | |||
107 | let i=cword-1 | ||
108 | cmds_=$($cmd --list-cmds) | ||
109 | prev_skip_opts=() | ||
110 | while [ $i -ge 0 ]; do | ||
111 | for cmd_ in $cmds_; do | ||
112 | if [[ ${words[i]} == $cmd_ ]]; then | ||
113 | prev_skip_opts=${words[i]} | ||
114 | return | ||
115 | fi | ||
116 | done | ||
117 | ((i--)) | ||
118 | done | ||
119 | } | ||
103 | __perf_main () | 120 | __perf_main () |
104 | { | 121 | { |
105 | local cmd | 122 | local cmd |
@@ -107,6 +124,8 @@ __perf_main () | |||
107 | cmd=${words[0]} | 124 | cmd=${words[0]} |
108 | COMPREPLY=() | 125 | COMPREPLY=() |
109 | 126 | ||
127 | # Skip options backward and find the last perf command | ||
128 | __perf_prev_skip_opts | ||
110 | # List perf subcommands or long options | 129 | # List perf subcommands or long options |
111 | if [ $cword -eq 1 ]; then | 130 | if [ $cword -eq 1 ]; then |
112 | if [[ $cur == --* ]]; then | 131 | if [[ $cur == --* ]]; then |
@@ -121,8 +140,8 @@ __perf_main () | |||
121 | __perfcomp_colon "$evts" "$cur" | 140 | __perfcomp_colon "$evts" "$cur" |
122 | else | 141 | else |
123 | # List subcommands for perf commands | 142 | # List subcommands for perf commands |
124 | if [[ $prev == @(kvm|kmem|mem|lock|sched) ]]; then | 143 | if [[ $prev_skip_opts == @(kvm|kmem|mem|lock|sched) ]]; then |
125 | subcmds=$($cmd $prev --list-cmds) | 144 | subcmds=$($cmd $prev_skip_opts --list-cmds) |
126 | __perfcomp_colon "$subcmds" "$cur" | 145 | __perfcomp_colon "$subcmds" "$cur" |
127 | fi | 146 | fi |
128 | # List long option names | 147 | # List long option names |