diff --git a/to_review/strace b/to_review/strace index d18b81db..bf9878f4 100644 --- a/to_review/strace +++ b/to_review/strace @@ -6,9 +6,9 @@ have strace && _strace() { - local cur prev offset i syscalls + local cur prev offset i syscalls arch unistd - # check if we're stil completing strace + # check if we're still completing strace offset=0 for (( i=1; i <= COMP_CWORD; i++ )); do case ${COMP_WORDS[$i]} in @@ -25,6 +25,7 @@ _strace() done if [ $offset -gt 0 ]; then + # FAIL: _command_offset is not defined anywhere. Guillame? _command_offset $offset else @@ -37,20 +38,33 @@ _strace() if [[ "$cur" == *=* ]]; then prev=${cur/=*/} cur=${cur/*=/} + + # Import arch-specific syscalls -- not foolproof IMHO + #+ --David Paleino + arch=$(command uname -m) syscalls=$(awk '/^#define __NR/ {print $2}' \ /usr/include/asm/unistd.h | sed -e \ 's/__NR_//') - if [ "$prev" = 'trace' ]; then - COMPREPLY=( $( compgen -W "$syscalls \ - file process network signal ipc desc \ - all none" -- $cur) ) - else - COMPREPLY=( $( compgen -W "$syscalls \ - all none" -- $cur) ) + if [ -z "$syscalls" ]; then + if [[ "$arch" =~ 86$ ]]; then + unistd=/usr/include/asm/unistd_32.h + else + unistd=/usr/include/asm/unistd_64.h + fi + syscalls=$(awk '/^#define __NR/ {print $2}' \ + $unistd | sed -e 's/__NR_//') fi + + case $prev in + trace) + COMPREPLY=( $( compgen -W "$syscalls file process \ + network signal ipc desc all none" -- $cur) ) + return 0 + ;; + esac else - COMPREPLY=( $( compgen -W 'trace= abbrev= \ - verbose= raw= signal= read= write=' \ + COMPREPLY=( $( compgen -S"=" -W 'trace abbrev \ + verbose raw signal read write' \ -- $cur ) ) fi return 0 @@ -63,10 +77,18 @@ _strace() _pids return 0 ;; + -S) + COMPREPLY=( $( compgen -W 'time calls name nothing' -- $cur ) ) + return 0 + ;; + -u) + COMPREPLY=( $( compgen -u -- $cur ) ) + return 0 + ;; esac if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-c -d -f -ff -F -h -i -q \ + COMPREPLY=( $( compgen -W '-c -d -f -ff -F -h --help -i -q \ -r -t -tt -ttt -T -v -V -x -xx -a -e -o -O -p \ -s -S -u -E' -- $cur ) ) else @@ -74,4 +96,4 @@ _strace() fi fi } && -complete -F _strace strace +complete -F _strace $default strace