diff options
-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 |