#!/bin/sh
# configure wmii

xwrite() {
	file="$1"; shift
	echo -n "$@" | wmiir write "$file"
}

proglist() {
	ls -lL `echo "$@" | tr : ' '` 2>/dev/null |
	awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort -u
}

MODKEY=Alt # changed $MODKEY to Mod4 (instead of $MODKEY=Alt)
WMII_FONT='fixed' export WMII_FONT
WMII_NORMCOLORS='#222222 #eeeeee #666666' export WMII_NORMCOLORS
WMII_SELCOLORS='#ffffff #285577 #4c7899' export WMII_SELCOLORS

handlekeys() {
	# greps wmiirc itself, to extract keybidings to be un/grabbed or reacted
	# you're adviced to be careful, because putting $MODKEY.*), could trash 
	# /def/keys and result in a apparently strange key reacting behavious at worst.
	klist=`grep '$MODKEY.*)' $HOME/.wmii-3/wmiirc |
        sed -n 's/^[	 ]*//g; s/).*$//; s/$MODKEY/'$MODKEY'/; 2,$p'`

	action=$1; shift;
	case $action in
	grab)
		for key in $klist; do
			if ! wmiir read /def/keys|grep $key >/dev/null; then
				(wmiir read /def/keys; echo $key) | wmiir write /def/keys
			fi
		 done
		;;
	ungrab)
		for key in $klist; do 
			if wmiir read /def/keys|grep $key >/dev/null; then
				(wmiir read /def/keys; grep -v $key) | wmiir write /def/keys
			fi
		done
		;;
	event)
		case "$1" in
		$MODKEY-Control-c)
			xwrite /view/sel/sel/ctl kill;;
		$MODKEY-Control-w,y)
			wmiirc &;;
		$MODKEY-Control-q,y)
			xwrite /ctl quit;;
		$MODKEY-Control-p)
			extern `wmiimenu </tmp/ns.$USER.$DISPLAY/progs` &;;
		$MODKEY-Control-a)
			`proglist /usr/local/etc/wmii-3:$HOME/.wmii-3 | wmiimenu` &;;
		$MODKEY-t)
			extern xterm &;;
		$MODKEY-m)
			xwrite /view/sel/mode max;;
		$MODKEY-s)
			xwrite /view/sel/mode stack;;
		$MODKEY-e)
			xwrite /view/sel/mode equal;;
		$MODKEY-n)
			xwrite /view/sel/sel/ctl sendto new;;
		$MODKEY-Control-h)
			xwrite /view/sel/sel/ctl sendto prev;;
		$MODKEY-Control-l)
			xwrite /view/sel/sel/ctl sendto next;;
		$MODKEY-Shift-h)
			xwrite /view/sel/sel/ctl swap prev;;
		$MODKEY-Shift-l)
			xwrite /view/sel/sel/ctl swap next;;
		$MODKEY-Shift-j)
			xwrite /view/sel/sel/ctl swap down;;
		$MODKEY-Shift-k)
			xwrite /view/sel/sel/ctl swap up;;
		$MODKEY-space)
			xwrite /view/ctl select toggle;;
		$MODKEY-Shift-space)
			xwrite /view/sel/sel/ctl sendto toggle;;
		$MODKEY-h)
			xwrite /view/ctl select prev;;
		$MODKEY-l)
			xwrite /view/ctl select next;;
		$MODKEY-j)
			xwrite /view/sel/ctl select next;;
		$MODKEY-k)
			xwrite /view/sel/ctl select prev;;
		$MODKEY-[0-9])
			xwrite /ctl view `echo $1 | sed 's/.*-//'`;;
		$MODKEY-0);;
		$MODKEY-1);;
		$MODKEY-2);;
		$MODKEY-3);;
		$MODKEY-4);;
		$MODKEY-5);;
		$MODKEY-6);;
		$MODKEY-7);;
		$MODKEY-8);;
		$MODKEY-9);;
		$MODKEY-Control-t)
			xwrite /ctl view "`wmiir read /tags | wmiimenu`" &;;
		$MODKEY-Shift-[0-9])
			xwrite /view/sel/sel/tags `echo $1 | sed 's/.*-//'`;;
		$MODKEY-Shift-0);;
		$MODKEY-Shift-1);;
		$MODKEY-Shift-2);;
		$MODKEY-Shift-3);;
		$MODKEY-Shift-4);;
		$MODKEY-Shift-5);;
		$MODKEY-Shift-6);;
		$MODKEY-Shift-7);;
		$MODKEY-Shift-8);;
		$MODKEY-Shift-9);;
		$MODKEY-Shift-t)
			xwrite /view/sel/sel/tags "`wmiir read /view/sel/sel/tags | wmiimenu`" &;;
		esac;;

	esac
}

# give wmiiwm a chance to start
while :
do
	echo Start wmiirc | wmiir write /event >/dev/null 2>&1 && break
	sleep 1
done

# WM CONFIGURATION
xwrite /def/border 2
xwrite /def/font $WMII_FONT
xwrite /def/selcolors $WMII_SELCOLORS
xwrite /def/normcolors $WMII_NORMCOLORS

# TAGGING RULES
wmiir write /def/rules <<EOF
/XMMS:.*/ -> ~
/Gimp.*:.*/ -> ~
EOF

# MISC
xsetroot -solid '#0b1014'
status &
proglist $OLD_PATH >/tmp/ns.$USER.$DISPLAY/progs &

# EVENT LOOP
handlekeys grab
wmiir read /event 2>/dev/null |
while read event
do
	set -- $event
	type="$1"; shift
	case "$type" in
	Start)
		if test wmiirc = "$1"
		then
			exit
		fi;;
	LabelClick)
		xwrite /ctl view "$1";;
	Key)
		handlekeys event $1;;
	esac
done
handlekeys ungrab


