Skip to content

Instantly share code, notes, and snippets.

@chrisvire
Last active June 30, 2017 01:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chrisvire/5571470 to your computer and use it in GitHub Desktop.
Save chrisvire/5571470 to your computer and use it in GitHub Desktop.
movewindow.sh
#!/bin/bash
XDO=/usr/bin/xdotool
# This script moves the active window between different monitors
# usage: movewindow [-vsn] [left|right]
select=0
noop=false
verbose=false
while getopts "h?vsn" opt; do
case "$opt" in
v) verbose=true
;;
s) select=1
;;
n) noop=true
;;
esac
done
shift $((OPTIND-1))
[ "$1" == "--" ] && shift
if [ $select -eq 1 ]
then
read WINDOW <<< `$XDO selectwindow 2> /dev/null`
else
read WINDOW <<< `$XDO getactivewindow`
fi
$verbose && echo "WINDOW=$WINDOW"
read DESKTOP_WINDOW DESKTOP_X DESKTOP_Y DESKTOP_WIDTH DESKTOP_HEIGHT DESKTOP_SCREEN <<< `$XDO search --name "Desktop" getwindowgeometry --shell | cut -d= -f2`
$verbose && echo "Desktop width is $DESKTOP_WIDTH"
read DISPLAY_WIDTH DISPLAY_HEIGHT <<< `$XDO getdisplaygeometry --shell |cut -d= -f2`
$verbose && echo "Display width is $DISPLAY_WIDTH"
read WINDOW X Y WIDTH HEIGHT SCREEN <<< `$XDO getwindowgeometry --shell $WINDOW | cut -d= -f2`
$verbose && echo "Window X is $X"
$verbose && echo "Window width is $WIDTH"
if [ $1 == "left" ]
then
if [ $X -lt $DISPLAY_WIDTH ]
then NEW_X=$[$DESKTOP_WIDTH - $DISPLAY_WIDTH + $X]
else NEW_X=$[$X - $DISPLAY_WIDTH]
fi
else
NEW_X=$[$X + $DISPLAY_WIDTH]
if [ $NEW_X -gt $DESKTOP_WIDTH ]
then NEW_X=$[$NEW_X - $DESKTOP_WIDTH]
fi
fi
$verbose && echo "New X is $NEW_X"
CMD="$XDO windowmove $WINDOW $NEW_X y"
if [ $noop == true ]
then
echo $CMD
exit 0
fi
$CMD
#$XDO windowmove $WINDOW $NEW_X y
@WakeReality
Copy link

WakeReality commented Jun 30, 2017

I found on lines 33, 36, 39 I had to set the delimiter explicitly on Ubuntu 17.04 - by doing "read -d '\t'". I also suggesting quoting "$1" on line 43, consistent with line 23, so that it does not error if you pass no arguments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment