[Bash-completion-commits] ./current r1326: Improved strace completion, undefined _command_offset() found.

David Paleino d.paleino at gmail.com
Thu Feb 5 10:15:13 UTC 2009


------------------------------------------------------------
revno: 1326
committer: David Paleino <d.paleino at gmail.com>
branch nick: current
timestamp: Thu 2009-02-05 11:15:13 +0100
message:
  Improved strace completion, undefined _command_offset() found.
modified:
  to_review/strace
-------------- next part --------------
=== modified file 'to_review/strace'
--- a/to_review/strace	2009-01-19 20:51:24 +0000
+++ b/to_review/strace	2009-02-05 10:15:13 +0000
@@ -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 @@
 	done
 
 	if [ $offset -gt 0 ]; then
+		# FAIL: _command_offset is not defined anywhere. Guillame?
 		_command_offset $offset
 	else
 
@@ -37,20 +38,33 @@
 			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 @@
 			_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 @@
 		fi
 	fi
 } &&
-complete -F _strace strace
+complete -F _strace $default strace



More information about the Bash-completion-commits mailing list