[Bash-completion-commits] ./current r1271: completion for strace

Guillaume Rousse guillomovitch at zarb.org
Mon Jan 19 20:51:24 UTC 2009


------------------------------------------------------------
revno: 1271
committer: Guillaume Rousse <guillomovitch at zarb.org>
branch nick: current
timestamp: Mon 2009-01-19 21:51:24 +0100
message:
  completion for strace
added:
  to_review/strace
-------------- next part --------------
=== added file 'to_review/strace'
--- a/to_review/strace	1970-01-01 00:00:00 +0000
+++ b/to_review/strace	2009-01-19 20:51:24 +0000
@@ -0,0 +1,77 @@
+# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
+# ex: ts=8 sw=8 noet filetype=sh
+#
+# bash completion for strace
+
+have strace && 
+_strace()
+{
+	local cur prev offset i syscalls
+
+	# check if we're stil completing strace
+	offset=0
+	for (( i=1; i <= COMP_CWORD; i++ )); do
+		case ${COMP_WORDS[$i]} in
+			-@(o|e|p))
+				i=$((i+1))
+				continue
+				;;
+			-*)
+				continue
+				;;
+		esac
+		offset=$i
+		break
+	done
+
+	if [ $offset -gt 0 ]; then
+		_command_offset $offset
+	else
+
+		COMPREPLY=()
+		cur=`_get_cword`
+		prev=${COMP_WORDS[COMP_CWORD-1]}
+
+		case $prev in
+		-e)
+			if [[ "$cur" == *=* ]]; then
+				prev=${cur/=*/}
+				cur=${cur/*=/}
+				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) )
+				fi
+			else
+				COMPREPLY=( $( compgen -W 'trace= abbrev= \
+					verbose= raw= signal= read= write=' \
+					-- $cur ) )
+			fi
+			return 0
+			;;
+		-o)
+			_filedir
+			return 0
+			;;
+		-p)
+			_pids
+			return 0
+			;;
+		esac
+
+		if [[ "$cur" == -* ]]; then
+			COMPREPLY=( $( compgen -W '-c -d -f -ff -F -h -i -q \
+				-r -t -tt -ttt -T -v -V -x -xx -a -e -o -O -p \
+				-s -S -u -E' -- $cur ) )
+		else
+			COMPREPLY=( $( compgen -c -- $cur ) )
+		fi
+	fi
+} &&
+complete -F _strace strace



More information about the Bash-completion-commits mailing list