Scripting
Toggle Window Between Monitors
This script will take the current foreground app and move it to your second monitor (and vice versa)
I took it from (page here when I can find it again...) but that script you had to enter the screen resolutions in the file. As I have different monitors at home and work, I wanted this to autodetect, so modified it.
Map a key combo to it and you should be good to go.
#!/bin/bash
#++++++++++++++++
# Monitor Switch
#
# Moves currently focused window from one monitor to the other.
# Designed for a system with two monitors.
# Script should be triggered using a keyboard shortcut.
# If the window is maximized it should remain maximized after being moved.
# If the window is not maximized it should retain its current size, unless
# height is too large for the destination monitor, when it will be trimmed.
#++++++++++++++++
# window title bar height (default title bar height in Gnome)
h_tbar=29
function check_progs {
#Check existence of certain required programs
PROGS="xdotool xwininfo xrandr"
for name in $PROGS; do
if [ ! `which $name` ];then
echo -e "*Program “$name” is not installed or not in PATH."
exit 1
fi
done
}
check_progs
set -e
function get_number_of_displays {
DISPLAY_COUNT=$(xrandr | grep " connected" | wc -l)
}
function grab_left_display {
local DISP=$(xrandr |grep " connected" |grep "+0+0" | grep -Po "[\d]*x[\d]*\+0\+0" | cut -d'+' -f1)
echo "$DISP"
}
function grab_right_display {
local DISP=$(xrandr |grep " connected" |grep -v "+0+0" | grep -Po "[\d]*x[\d]*\+[\d]+\+[\d]+" | cut -d'+' -f1)
echo "$DISP"
}
function get_horiz {
local RES=$(echo $1 | cut -d'x' -f1 )
echo "$RES"
}
function get_vert {
local RES=$(echo $1 | cut -d'x' -f2 )
echo "$RES"
}
LEFT=$(grab_left_display)
RIGHT=$(grab_right_display)
# resolution of left monitor
w_r_monitor=$(get_horiz $RIGHT)
h_r_monitor=$(get_vert $RIGHT)
# resolution of right monitor
w_l_monitor=$(get_horiz $LEFT)
h_l_monitor=$(get_vert $LEFT)
# focus on active window
window=`xdotool getactivewindow`
# get active window size and position
x=`xwininfo -id $window | grep "Absolute upper-left X" | awk '{print $4}'`
y=`xwininfo -id $window | grep "Absolute upper-left Y" | awk '{print $4}'`
w=`xwininfo -id $window | grep "Width" | awk '{print $2}'`
h=`xwininfo -id $window | grep "Height" | awk '{print $2}'`
# window on left monitor
if [ "$x" -lt "$w_l_monitor" ]; then
new_x=$(($x+$w_l_monitor))
new_y=$(($y-$h_tbar))
xdotool windowmove $window $new_x $new_y
# retain maximization
if [ "$w" -eq "$w_l_monitor" ]; then
xdotool windowsize $window 100% 100%
# adjust height
elif [ "$h" -gt $(($h_r_monitor-$h_tbar)) ]; then
xdotool windowsize $window $w $(($h_r_monitor-$h_tbar))
fi
# window on right monitor
else
new_x=$(($x-$w_l_monitor))
new_y=$(($y-$h_tbar))
xdotool windowmove $window $new_x $new_y
# retain maximization
if [ "$w" -eq "$w_r_monitor" ]; then
xdotool windowsize $window 100% 100%
# adjust height
elif [ "$h" -gt $(($h_l_monitor-$h_tbar)) ]; then
xdotool windowsize $window $w $(($h_l_monitor-$h_tbar))
fi
fi