diff options
Diffstat (limited to 'completions/strace')
-rw-r--r-- | completions/strace | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/completions/strace b/completions/strace new file mode 100644 index 0000000..2b46ce8 --- /dev/null +++ b/completions/strace @@ -0,0 +1,99 @@ +# bash completion for strace -*- shell-script -*- + +_strace() +{ + local cur prev words cword + _init_completion -n = || return + + # check if we're still completing strace + local offset=0 i + for ((i = 1; i <= cword; i++)); do + case ${words[i]} in + -o | -e | -p) + ((i++)) + continue + ;; + -*) + continue + ;; + esac + offset=$i + break + done + + if ((offset > 0)); then + _command_offset $offset + else + + case $prev in + -*e) + if [[ $cur == *=* ]]; then + prev=${cur/=*/} + cur=${cur/*=/} + + case $prev in + trace) + # Import arch-specific syscalls + #+ -- not foolproof IMHO --David Paleino + local define syscall rest + local -A syscalls + while read -r define syscall rest; do + [[ $define == "#define" && \ + $syscall =~ ^__NR_(.+) ]] && + syscalls[${BASH_REMATCH[1]}]=1 + done 2>/dev/null </usr/include/asm/unistd.h + if [[ ! $syscalls ]]; then + local unistd arch=$(command uname -m) + if [[ $arch == *86 ]]; then + unistd=/usr/include/asm/unistd_32.h + else + unistd=/usr/include/asm/unistd_64.h + fi + while read -r define syscall rest; do + [[ $define == "#define" && \ + $syscall =~ ^__NR_(.+) ]] && + syscalls[${BASH_REMATCH[1]}]=1 + done 2>/dev/null <$unistd + fi + + COMPREPLY=($(compgen -W '${!syscalls[@]} file + process network signal ipc desc all none' \ + -- "$cur")) + return + ;; + esac + else + compopt -o nospace + COMPREPLY=($(compgen -S"=" -W 'trace abbrev verbose raw + signal read write' -- "$cur")) + fi + return + ;; + -*o) + _filedir + return + ;; + -*p) + _pids + return + ;; + -*S) + COMPREPLY=($(compgen -W 'time calls name nothing' -- "$cur")) + return + ;; + -*u) + _allowed_users + return + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur")) + else + COMPREPLY=($(compgen -c -- "$cur")) + fi + fi +} && + complete -F _strace -o default strace + +# ex: filetype=sh |