Title: [Bash] grid Author: Twilypastes Pastebin link: http://pastebin.com/J0u8D7DN First Edit: Saturday 20th of September 2014 07:26:49 AM CDT Last Edit: Last edit on: Saturday 3rd of January 2015 08:07:24 AM CDT #!/bin/bash # #   Author:      Twily                                  2014 #   Description: Tile windows in floating mode using hotkeys #   Requires:    wmctrl, xdotool #   Useage:      $ sh ./grid 2 4 #                (Eg.: Bind key C-A-KP_[1-9] to "grid 1 [1-9]" #  |---|---|---|       Bind key W-KP_[1-9]   to "grid 2 [1-9]" #  | 7 | 8 | 9 |       Bind key W-S-KP_[1-9] to "grid 3 [1-9]") #  |---|---|---| #  | 4 | 5 | 6 |      (C~trl       A~lt        K~ey P~ad #  |---|---|---|       W~in        S~hift) #  | 1 | 2 | 3 | #  |---|---|---| #   WNAME=$(xdotool getactivewindow getwindowname) if [ "$WNAME" == "Desktop" ]; then exit 3; fi   W=1920               # Desktop Width H=1080               # Desktop Height   L=24                 # Left Margin T=`expr 24 + 24`     # Top Margin (+24 for panel) R=24                 # Right Margin B=24                 # Bottom Margin   G=24                 # Window Gap D=24                 # Decoration Height (0 = none)   W=`expr $W - $L - $R` H=`expr $H - $T - $B` G=`expr $G / 2`   X=$L && Y=$T   case "$1" in                        # Window Left,Top,Width,Height     1)  case "$2" in # (grid 1 [1-9])             7)  X=`expr $L`                     &&  Y=`expr $T`                # top left       (1/6)                 W=`expr $W / 3 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;             8)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $T`                # top center     (1/6)                 W=`expr $W / 3 - $G \* 2`       &&  H=`expr $H / 2 - $G - $D`  ;;             9)  X=`expr $W / 3 \* 2 + $L + $G`  &&  Y=`expr $T`                # top right      (1/6)                 W=`expr $W / 3 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;               4)  X=`expr $L`                     &&  Y=`expr $T`                # left           (1/3)                 W=`expr $W / 3 - $G`            &&  H=`expr $H - $D`           ;;             5)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $T`                # center         (1/3)                 W=`expr $W / 3 - $G \* 2`       &&  H=`expr $H - $D`           ;;             6)  X=`expr $W / 3 \* 2 + $L + $G`  &&  Y=`expr $T`                # right          (1/3)                 W=`expr $W / 3 - $G`            &&  H=`expr $H - $D`           ;;               1)  X=`expr $L`                     &&  Y=`expr $H / 2 + $T + $G`  # bottom left    (1/6)                 W=`expr $W / 3 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;             2)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $H / 2 + $T + $G`  # bottom center  (1/6)                 W=`expr $W / 3 - $G \* 2`       &&  H=`expr $H / 2 - $G - $D`  ;;             3)  X=`expr $W / 3 \* 2 + $L + $G`  &&  Y=`expr $H / 2 + $T + $G`  # bottom right   (1/6)                 W=`expr $W / 3 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;               *)  exit 2  ;;         esac     ;;       2)  case "$2" in # (grid 2 [1-9])             7)  X=`expr $L`                     &&  Y=`expr $T`                # top left       (1/4)                 W=`expr $W / 2 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;             8)  X=`expr $L`                     &&  Y=`expr $T`                # top            (1/2)                 W=`expr $W`                     &&  H=`expr $H / 2 - $G - $D`  ;;             9)  X=`expr $W / 2 + $L + $G`       &&  Y=`expr $T`                # top right      (1/4)                 W=`expr $W / 2 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;               4)  X=`expr $L`                     &&  Y=`expr $T`                # left           (1/2)                 W=`expr $W / 2 - $G`            &&  H=`expr $H - $D`           ;;             5)  X=`expr $L`                     &&  Y=`expr $T`                # center         (1/1)                 W=`expr $W`                     &&  H=`expr $H - $D`           ;;             6)  X=`expr $W / 2 + $L + $G`       &&  Y=`expr $T`                # right          (1/2)                 W=`expr $W / 2 - $G`            &&  H=`expr $H - $D`           ;;               1)  X=`expr $L`                     &&  Y=`expr $H / 2 + $T + $G`  # bottom left    (1/4)                 W=`expr $W / 2 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;             2)  X=`expr $L`                     &&  Y=`expr $H / 2 + $T + $G`  # bottom         (1/2)                 W=`expr $W`                     &&  H=`expr $H / 2 - $G - $D`  ;;             3)  X=`expr $W / 2 + $L + $G`       &&  Y=`expr $H / 2 + $T + $G`  # bottom right   (1/4)                 W=`expr $W / 2 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;               *)  exit 2  ;;         esac     ;;       3)  case "$2" in # (grid 3 [1-9])             7)  X=`expr $L`                     &&  Y=`expr $T`                # top left       (1/3)                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H / 2 - $G - $D`  ;;             8)  X=`expr $W / 3 / 2 + $L`        &&  Y=`expr $T`                # top            (1/2)                 W=`expr $W / 3 \* 2`            &&  H=`expr $H / 2 - $G - $D`  ;;             9)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $T`                # top right      (1/3)                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H / 2 - $G - $D`  ;;               4)  X=`expr $L`                     &&  Y=`expr $T`                # left           (2/3)                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H - $D`           ;;             5)  X=`expr $L + $W / 10`           &&  Y=`expr $T + $H / 10`      # center         (1/1)                 W=`expr $W - $W / 5`            &&  H=`expr $H - $H / 5 - $D`  ;;             6)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $T`                # right          (2/3)                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H - $D`           ;;               1)  X=`expr $L`                     &&  Y=`expr $H / 2 + $T + $G`  # bottom left    (1/3)                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H / 2 - $G - $D`  ;;             2)  X=`expr $W / 3 / 2 + $L`        &&  Y=`expr $H / 2 + $T + $G`  # bottom         (1/2)                 W=`expr $W / 3 \* 2`            &&  H=`expr $H / 2 - $G - $D`  ;;             3)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $H / 2 + $T + $G`  # bottom right   (1/3)                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H / 2 - $G - $D`  ;;               *)  exit 2  ;;         esac     ;;       *)  exit 1  ;; esac   wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz xdotool getactivewindow windowmove $X $Y windowsize $W $H exit 0