#!/bin/sh

# select-bus() - a function to interactively select a D-Bus session bus

_extract_bus ()
{
	test -d /proc || return

	pid="$1"
	grep -z ^DBUS_SESSION_BUS_ADDRESS= /proc/$proc/environ \
		2>/dev/null | sed -e 's/[^=]*=//'
}

select-bus ()
{
	uid=`id -u`
	procs=`find /proc -maxdepth 1 -uid $uid -printf '%P\n'`
	busses=

	# Build a list of all busses by digging through /proc.

	for proc in $procs; do
		bus=`_extract_bus $proc`

		if test -n "$bus"; then
			#cat /proc/$proc/cmdline | tr -d "\000"
			#echo " ($proc):"
			#echo "  $bus"

			if ! echo "$busses" | grep -q "$bus"; then
				busses="$busses$bus "
			fi
		fi
	done

	# For each bus found, print a number, the bus address, and a list of
	# processes using that bus.

	n=1

	for bus in $busses; do
		echo "$n: $bus"

		for proc in $procs; do
			x=`_extract_bus $proc`

			if test "$bus" = "$x"; then
				echo -n "  $proc: "
				cat /proc/$proc/cmdline | tr -d "\000" | \
					cut -c 1-70
			fi
		done

		n=`expr $n + 1`
	done

	# Ask which bus to use.

	echo
	echo -n "select bus: "
	read n

	if test -n "$n"; then
		bus=`echo "$busses" | cut -d" " -f"$n"`

		if test -n "$bus"; then
			echo "using $bus"
			export DBUS_SESSION_BUS_ADDRESS="$bus"
			return
		fi
	fi

	echo "ok, never mind"
}

