diff options
author | David Paleino <d.paleino@gmail.com> | 2009-02-05 11:15:13 +0100 |
---|---|---|
committer | David Paleino <d.paleino@gmail.com> | 2009-02-05 11:15:13 +0100 |
commit | 71a1d60d5a33d17d5831e0cc6f72d380465f924f (patch) | |
tree | 54913cc0a03a4a695d45f9ce50dea84d9977aa37 | |
parent | 06a82493264b18b4435bb468e180d846c2c8aca9 (diff) | |
download | bash-completion-71a1d60d5a33d17d5831e0cc6f72d380465f924f.tar.gz |
Improved strace completion, undefined _command_offset() found.
-rw-r--r-- | to_review/strace | 48 |
1 files changed, 35 insertions, 13 deletions
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 |