#!/bin/bash function READ_SETTINGS() { if [ ! -d "$HOME/.gowin" ]; then mkdir "$HOME/.gowin" fi CONFIG="$HOME/.gowin/$LOOK_FOR" if [ -f "$CONFIG" ]; then echo "Using values from $CONFIG" . "$CONFIG" else echo "No config file $CONFIG was found" fi if [ ! -z "$2" ]; then BIN="$2" fi if [ ! -z "$3" ] && [ ! -z "$4" ]; then TARGET_LEFT="$3" TARGET_TOP="$4" fi if [ ! -z "$5" ] && [ ! -z "$6" ]; then TARGET_WIDTH="$5" TARGET_HEIGHT="$6" fi } if [ -z "$1" ]; then LOOK_FOR="XChat" else LOOK_FOR="$1" fi LIVE_DESK="`wmctrl -d | grep --color=no '*' | cut -d ' ' -f 1`" ACTIVE_WINDOW="`wmctrl -r :ACTIVE: -b toggle,skip_taskbar ; wmctrl -v -r :ACTIVE: -b toggle,skip_taskbar 2>&1 | grep --color=no "^Using window: " | cut -d ' ' -f 3`" TARGET_DESK_COUNT="9" DEAD_DESK="8" ACTIVE_DESK_COUNT="`wmctrl -d | wc -l`" if [ "$ACTIVE_DESK_COUNT" -lt "$TARGET_DESK_COUNT" ]; then echo "Setting desk count from $ACTIVE_DESK_COUNT to $TARGET_DESK_COUNT" wmctrl -n 9 fi if [ "$LIVE_DESK" = "$DEAD_DESK" ]; then echo "You are on the dead desk. Moving you." wmctrl -s 0 LIVE_DESK="0" ACTIVE_WINDOW="" fi let TRIES=0 while [ -z "$LINE" ] && [ "$TRIES" -lt 5 ]; do let TRIES++ LINE="`wmctrl -l -G | grep --color=no "$LOOK_FOR" | head -1 | tr -s '[:blank:]' ' '`" if [ ! -z "$LINE" ]; then HANDLE="`echo "$LINE" | cut -d ' ' -f 1`" if [ "$HANDLE" = "$ACTIVE_WINDOW" ]; then echo "moving to dead desk ($DEAD_DESK)" wmctrl -v -i -r $HANDLE -b add,skip_taskbar wmctrl -v -i -r $HANDLE -t $DEAD_DESK exit 0 fi READ_SETTINGS else READ_SETTINGS if [ -z "$BIN" ]; then echo "Could not find a window named '$LOOK_FOR' and no starter was provided" exit 1 else echo "Could not find window '$LOOK_FOR'." fi if [ -z "$STARTED" ]; then echo "Will start $BIN" "$BIN" & echo "PID $!" STARTED="1" else echo "Already started. Waiting." sleep 2 fi fi if [ -z "$LINE" ]; then sleep 2 fi done DESKTOP="`echo "$LINE" | cut -d ' ' -f 2`" LEFT="`echo "$LINE" | cut -d ' ' -f 3`" TOP="`echo "$LINE" | cut -d ' ' -f 4`" WIDTH="`echo "$LINE" | cut -d ' ' -f 5`" HEIGHT="`echo "$LINE" | cut -d ' ' -f 6`" HOST="`echo "$LINE" | cut -d ' ' -f 7`" TITLE="`echo "$LINE" | cut -d ' ' -f 8-`" echo -e "Active Window:\t$ACTIVE_WINDOW\nFound window:\n\tHANDLE:\t$HANDLE\n\tDESK:\t$DESKTOP\n\tHOST:\t$HOST\n\tPOS:\t($LEFT,$TOP)\n\tSIZE:\t($WIDTH,$HEIGHT)\n\tTITLE:\t$TITLE\n" #exit if [ ! -f "$CONFIG" ]; then echo "Creating initial config $CONFIG" touch "$CONFIG" if [ ! -z "$TARGET_LEFT" ]; then echo "TARGET_LEFT=$TARGET_LEFT" >> "$CONFIG" echo "TARGET_TOP=$TARGET_TOP" >> "$CONFIG" else echo "TARGET_LEFT=$LEFT" >> "$CONFIG" echo "TARGET_TOP=$TOP" >> "$CONFIG" fi if [ ! -z "$TARGET_WIDTH" ]; then echo "TARGET_WIDTH=$TARGET_WIDTH" >> "$CONFIG" echo "TARGET_HEIGHT=$TARGET_HEIGHT" >> "$CONFIG" else echo "TARGET_WIDTH=$WIDTH" >> "$CONFIG" echo "TARGET_HEIGHT=$HEIGHT" >> "$CONFIG" fi if [ ! -z "$BIN" ]; then echo "BIN='$BIN'" >> "$CONFIG" fi fi if [ ! -z "$TARGET_LEFT" ] && [ ! -z "$TARGET_TOP" ]; then if [ ! "$TARGET_LEFT" = "$LEFT" ] || [ ! "$TARGET_TOP" = "$TOP" ]; then echo "Moving to ($TARGET_LEFT,$TARGET_TOP)" wmctrl -v -i -r $HANDLE -b remove,maximized_vert,remove,maximized_horz wmctrl -v -i -r $HANDLE -e 0,$TARGET_LEFT,$TARGET_TOP,-1,-1 fi fi if [ ! -z "$TARGET_WIDTH" ] && [ ! -z "$TARGET_HEIGHT" ]; then if [ ! "$TARGET_WIDTH" = "$WIDTH" ] || [ ! "$TARGET_HEIGHT" = "$HEIGHT" ]; then echo "Sizing to ($TARGET_WIDTH,$TARGET_HEIGHT)" wmctrl -v -i -r $HANDLE -b remove,maximized_vert,remove,maximized_horz wmctrl -v -i -r $HANDLE -e 0,-1,-1,$TARGET_WIDTH,$TARGET_HEIGHT fi fi if [ ! "$DESKTOP" = "$LIVE_DESK" ]; then echo "moving to live desk ($LIVE_DESK)" wmctrl -v -i -r $HANDLE -t $LIVE_DESK fi #wmctrl -v -i -r $HANDLE -b add,above,remove,sticky wmctrl -v -i -r $HANDLE -b remove,skip_taskbar wmctrl -v -i -a $HANDLE