Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement