diff options
Diffstat (limited to 'completions/tshark')
-rw-r--r-- | completions/tshark | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/completions/tshark b/completions/tshark new file mode 100644 index 0000000..396fbcb --- /dev/null +++ b/completions/tshark @@ -0,0 +1,136 @@ +# tshark(1) completion -*- shell-script -*- + +_tshark() +{ + local cur prev words cword prefix + _init_completion -n : || return + + case $cur in + -o*) + prefix=-o + ;; + -X*) + prefix=-X + ;; + esac + + case ${prefix:-$prev} in + --*) + # Fallback to completion of long options below. + ;; + -o*) + if [[ $cur == *:* ]]; then + cur=${cur#*:} + _filedir + else + [[ -v _tshark_prefs ]] || + _tshark_prefs="$("$1" -G defaultprefs 2>/dev/null | command sed -ne 's/^#\{0,1\}\([a-z0-9_.-]\{1,\}:\).*/\1/p' | + tr '\n' ' ')" + : ${prefix:=} + COMPREPLY=($(compgen -P "$prefix" -W "$_tshark_prefs" \ + -- "${cur:${#prefix}}")) + [[ ${COMPREPLY-} == *: ]] && compopt -o nospace + fi + return + ;; + -*[fsBDLcRNdCeEzhvoK]) + return + ;; + -*i) + COMPREPLY=($(compgen -W \ + "$("$1" -D 2>/dev/null | awk '{print $2}')" -- "$cur")) + return + ;; + -*y) + local opts i + for ((i = ${#words[@]} - 1; i > 0; i--)); do + if [[ ${words[i]} == -i ]]; then + opts+="-i ${words[i + 1]}" + break + fi + done + COMPREPLY=($(compgen -W "$("$1" $opts -L 2>/dev/null | + awk '/^ / { print $1 }')" -- "$cur")) + return + ;; + -*[ab]) + COMPREPLY=($(compgen -W 'duration: filesize: files:' -- "$cur")) + [[ ${COMPREPLY-} == *: ]] && compopt -o nospace + return + ;; + -*[rH]) + # -r accepts a lot of different file types + _filedir + return + ;; + -*w) + _filedir + [[ $cur == @(|-) ]] && COMPREPLY+=(-) + return + ;; + -*F) + COMPREPLY=($(compgen -W "$("$1" -F 2>&1 | + awk '/^ / { print $1 }')" -- "$cur")) + return + ;; + -*O) + local prefix= + [[ $cur == *,* ]] && prefix="${cur%,*}," + [[ -v _tshark_protocols ]] || + _tshark_protocols="$("$1" -G protocols 2>/dev/null | + cut -f 3 | tr '\n' ' ')" + COMPREPLY=($(compgen -W "$_tshark_protocols" -- "${cur##*,}")) + ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix}) + return + ;; + -*T) + # Parse from: tshark -T . 2>&1 | awk -F \" '/^\t*"/ { print $2 }' + COMPREPLY=($(compgen -W \ + 'pdml ps psml json jsonraw ek tabs text fields' -- "$cur")) + return + ;; + -*t) + # Parse from: tshark -t . 2>&1 | awk -F \" '/^\t*"/ { print $2 }' + COMPREPLY=($(compgen -W \ + 'a ad adoy d dd e r u ud udoy' -- "$cur")) + return + ;; + -*u) + # TODO: could be parsed from "-u ." output + COMPREPLY=($(compgen -W 's hms' -- "$cur")) + return + ;; + -*W) + COMPREPLY=($(compgen -W 'n' -- "$cur")) + return + ;; + -*X) + if [[ ${cur:${#prefix}} == lua_script:* ]]; then + cur=${cur#*:} + _filedir lua + else + COMPREPLY=($(compgen -P "$prefix" -W 'lua_script:' -- \ + "${cur:${#prefix}}")) + [[ ${COMPREPLY-} == *: ]] && compopt -o nospace + fi + return + ;; + -*G) + COMPREPLY=($(compgen -W "$("$1" -G \? 2>/dev/null | + awk '/^[ \t]*-G / \ + { sub("^[[]","",$2); sub("[]]$","",$2); print $2 }')" \ + -- "$cur")) + return + ;; + + esac + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1" -h 2>/dev/null)' \ + -- "$cur")) + return + fi +} && + complete -F _tshark tshark + +# ex: filetype=sh |