tools: bpftool: deal with options upfront
Remove options (in getopt() sense, i.e. starting with a dash like -n or --NAME) while parsing arguments for bash completions. This allows us to refer to position-dependent parameters better, and complete options at any point. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
parent
ef347a340b
commit
121c58bed0
1 changed files with 21 additions and 11 deletions
|
@ -153,6 +153,13 @@ _bpftool()
|
||||||
local cur prev words objword
|
local cur prev words objword
|
||||||
_init_completion || return
|
_init_completion || return
|
||||||
|
|
||||||
|
# Deal with options
|
||||||
|
if [[ ${words[cword]} == -* ]]; then
|
||||||
|
local c='--version --json --pretty --bpffs'
|
||||||
|
COMPREPLY=( $( compgen -W "$c" -- "$cur" ) )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
# Deal with simplest keywords
|
# Deal with simplest keywords
|
||||||
case $prev in
|
case $prev in
|
||||||
help|hex|opcodes|visual)
|
help|hex|opcodes|visual)
|
||||||
|
@ -172,20 +179,23 @@ _bpftool()
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Search for object and command
|
# Remove all options so completions don't have to deal with them.
|
||||||
local object command cmdword
|
local i
|
||||||
for (( cmdword=1; cmdword < ${#words[@]}-1; cmdword++ )); do
|
for (( i=1; i < ${#words[@]}; )); do
|
||||||
[[ -n $object ]] && command=${words[cmdword]} && break
|
if [[ ${words[i]::1} == - ]]; then
|
||||||
[[ ${words[cmdword]} != -* ]] && object=${words[cmdword]}
|
words=( "${words[@]:0:i}" "${words[@]:i+1}" )
|
||||||
|
[[ $i -le $cword ]] && cword=$(( cword - 1 ))
|
||||||
|
else
|
||||||
|
i=$(( ++i ))
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
cur=${words[cword]}
|
||||||
|
prev=${words[cword - 1]}
|
||||||
|
|
||||||
if [[ -z $object ]]; then
|
local object=${words[1]} command=${words[2]}
|
||||||
|
|
||||||
|
if [[ -z $object || $cword -eq 1 ]]; then
|
||||||
case $cur in
|
case $cur in
|
||||||
-*)
|
|
||||||
local c='--version --json --pretty --bpffs'
|
|
||||||
COMPREPLY=( $( compgen -W "$c" -- "$cur" ) )
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
COMPREPLY=( $( compgen -W "$( bpftool help 2>&1 | \
|
COMPREPLY=( $( compgen -W "$( bpftool help 2>&1 | \
|
||||||
command sed \
|
command sed \
|
||||||
|
|
Loading…
Reference in a new issue