#!/bin/zsh
# windowbounce - shift current X11 window around
# originally by http://xmw.de/dotfiles/scripts/windowbounce
# additions by http://chneukirchen.org/dotfiles/bin/windowbounce

BORDER_LEFT=0
BORDER_RIGHT=252
BORDER_TOP=14
BORDER_BOTTOM=14

if ! xdotool getdisplaygeometry >/dev/null 2>/dev/null ; then
    echo "you need xdootool version 2.20110530.1 or newer to use getdisplaygeometry"
    exit -1
fi

eval `xdotool getdisplaygeometry --shell`
(( SW = WIDTH - 2 ))
(( SH = HEIGHT - 2 ))

eval `xdotool getactivewindow getwindowgeometry --shell`
(( X_ = X = ( X - 1 ) / 2 ))
(( Y_ = Y = ( Y - 1 ) / 2 ))

case $1 in 
    h )
	(( X = ( X == 0 ? BORDER_LEFT : 0 ) ));;
    l )	
	(( X = SW - WIDTH - ( X == SW - WIDTH ? BORDER_RIGHT : 0 ) ));;
    k ) 	
	(( Y = ( Y == 0 ? BORDER_TOP : 0 ) ));;
    j ) 
	(( Y = SH - HEIGHT - ( Y == SH - HEIGHT ? BORDER_BOTTOM : 0 ) ));;
    * )
	echo "Usage: $(basename $0) (h|j|k|l)"; exit -1;;
esac
if [ $(basename $0) != "windowbounce" ] ; then
    case $1 in
	h ) 
	    (( WIDTH += X_ - X ));;
	l )
	    (( WIDTH -= X_ - X ))
	    (( X = X_ ));;
	k )
	    (( HEIGHT += Y_ - Y ));;
	j )
	    (( HEIGHT -= Y_ - Y ))
	    (( Y = Y_ ));;
    esac
fi

xdotool getactivewindow \
    windowmove -- $X $Y \
    windowsize -- $WIDTH $HEIGHT \
    mousemove_relative -- $(( X - X_ )) $(( Y - Y_ ))
