Advertisement
Twilypastes

grid

Sep 20th, 2014
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.45 KB | None | 0 0
  1. #!/bin/bash
  2. #
  3. #   Author:      Twily                                  2014
  4. #   Description: Tile windows in floating mode using hotkeys
  5. #   Requires:    wmctrl, xdotool
  6. #   Useage:      $ sh ./grid 2 4
  7. #                (Eg.: Bind key C-A-KP_[1-9] to "grid 1 [1-9]"
  8. #  |---|---|---|       Bind key W-KP_[1-9]   to "grid 2 [1-9]"
  9. #  | 7 | 8 | 9 |       Bind key W-S-KP_[1-9] to "grid 3 [1-9]")
  10. #  |---|---|---|
  11. #  | 4 | 5 | 6 |      (C~trl       A~lt        K~ey P~ad
  12. #  |---|---|---|       W~in        S~hift)
  13. #  | 1 | 2 | 3 |
  14. #  |---|---|---|
  15. #
  16.  
  17. WNAME=$(xdotool getactivewindow getwindowname)
  18. if [ "$WNAME" == "Desktop" ]; then exit 3; fi
  19.  
  20. W=1920               # Desktop Width
  21. H=1080               # Desktop Height
  22.  
  23. L=24                 # Left Margin
  24. T=`expr 24 + 24`     # Top Margin (+24 for panel)
  25. R=24                 # Right Margin
  26. B=24                 # Bottom Margin
  27.  
  28. G=24                 # Window Gap
  29. D=24                 # Decoration Height (0 = none)
  30.  
  31. W=`expr $W - $L - $R`
  32. H=`expr $H - $T - $B`
  33. G=`expr $G / 2`
  34.  
  35. X=$L && Y=$T
  36.  
  37. case "$1" in                        # Window Left,Top,Width,Height
  38.     1)  case "$2" in # (grid 1 [1-9])
  39.             7)  X=`expr $L`                     &&  Y=`expr $T`                # top left       (1/6)
  40.                 W=`expr $W / 3 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;
  41.             8)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $T`                # top center     (1/6)
  42.                 W=`expr $W / 3 - $G \* 2`       &&  H=`expr $H / 2 - $G - $D`  ;;
  43.             9)  X=`expr $W / 3 \* 2 + $L + $G`  &&  Y=`expr $T`                # top right      (1/6)
  44.                 W=`expr $W / 3 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;
  45.  
  46.             4)  X=`expr $L`                     &&  Y=`expr $T`                # left           (1/3)
  47.                 W=`expr $W / 3 - $G`            &&  H=`expr $H - $D`           ;;
  48.             5)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $T`                # center         (1/3)
  49.                 W=`expr $W / 3 - $G \* 2`       &&  H=`expr $H - $D`           ;;
  50.             6)  X=`expr $W / 3 \* 2 + $L + $G`  &&  Y=`expr $T`                # right          (1/3)
  51.                 W=`expr $W / 3 - $G`            &&  H=`expr $H - $D`           ;;
  52.  
  53.             1)  X=`expr $L`                     &&  Y=`expr $H / 2 + $T + $G`  # bottom left    (1/6)
  54.                 W=`expr $W / 3 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;
  55.             2)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $H / 2 + $T + $G`  # bottom center  (1/6)
  56.                 W=`expr $W / 3 - $G \* 2`       &&  H=`expr $H / 2 - $G - $D`  ;;
  57.             3)  X=`expr $W / 3 \* 2 + $L + $G`  &&  Y=`expr $H / 2 + $T + $G`  # bottom right   (1/6)
  58.                 W=`expr $W / 3 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;
  59.  
  60.             *)  exit 2  ;;
  61.         esac
  62.     ;;
  63.  
  64.     2)  case "$2" in # (grid 2 [1-9])
  65.             7)  X=`expr $L`                     &&  Y=`expr $T`                # top left       (1/4)
  66.                 W=`expr $W / 2 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;
  67.             8)  X=`expr $L`                     &&  Y=`expr $T`                # top            (1/2)
  68.                 W=`expr $W`                     &&  H=`expr $H / 2 - $G - $D`  ;;
  69.             9)  X=`expr $W / 2 + $L + $G`       &&  Y=`expr $T`                # top right      (1/4)
  70.                 W=`expr $W / 2 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;
  71.  
  72.             4)  X=`expr $L`                     &&  Y=`expr $T`                # left           (1/2)
  73.                 W=`expr $W / 2 - $G`            &&  H=`expr $H - $D`           ;;
  74.             5)  X=`expr $L`                     &&  Y=`expr $T`                # center         (1/1)
  75.                 W=`expr $W`                     &&  H=`expr $H - $D`           ;;
  76.             6)  X=`expr $W / 2 + $L + $G`       &&  Y=`expr $T`                # right          (1/2)
  77.                 W=`expr $W / 2 - $G`            &&  H=`expr $H - $D`           ;;
  78.  
  79.             1)  X=`expr $L`                     &&  Y=`expr $H / 2 + $T + $G`  # bottom left    (1/4)
  80.                 W=`expr $W / 2 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;
  81.             2)  X=`expr $L`                     &&  Y=`expr $H / 2 + $T + $G`  # bottom         (1/2)
  82.                 W=`expr $W`                     &&  H=`expr $H / 2 - $G - $D`  ;;
  83.             3)  X=`expr $W / 2 + $L + $G`       &&  Y=`expr $H / 2 + $T + $G`  # bottom right   (1/4)
  84.                 W=`expr $W / 2 - $G`            &&  H=`expr $H / 2 - $G - $D`  ;;
  85.  
  86.             *)  exit 2  ;;
  87.         esac
  88.     ;;
  89.  
  90.     3)  case "$2" in # (grid 3 [1-9])
  91.             7)  X=`expr $L`                     &&  Y=`expr $T`                # top left       (1/3)
  92.                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H / 2 - $G - $D`  ;;
  93.             8)  X=`expr $W / 3 / 2 + $L`        &&  Y=`expr $T`                # top            (1/2)
  94.                 W=`expr $W / 3 \* 2`            &&  H=`expr $H / 2 - $G - $D`  ;;
  95.             9)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $T`                # top right      (1/3)
  96.                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H / 2 - $G - $D`  ;;
  97.  
  98.             4)  X=`expr $L`                     &&  Y=`expr $T`                # left           (2/3)
  99.                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H - $D`           ;;
  100.             5)  X=`expr $L + $W / 10`           &&  Y=`expr $T + $H / 10`      # center         (1/1)
  101.                 W=`expr $W - $W / 5`            &&  H=`expr $H - $H / 5 - $D`  ;;
  102.             6)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $T`                # right          (2/3)
  103.                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H - $D`           ;;
  104.  
  105.             1)  X=`expr $L`                     &&  Y=`expr $H / 2 + $T + $G`  # bottom left    (1/3)
  106.                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H / 2 - $G - $D`  ;;
  107.             2)  X=`expr $W / 3 / 2 + $L`        &&  Y=`expr $H / 2 + $T + $G`  # bottom         (1/2)
  108.                 W=`expr $W / 3 \* 2`            &&  H=`expr $H / 2 - $G - $D`  ;;
  109.             3)  X=`expr $W / 3 + $L + $G`       &&  Y=`expr $H / 2 + $T + $G`  # bottom right   (1/3)
  110.                 W=`expr $W / 3 \* 2 - $G`       &&  H=`expr $H / 2 - $G - $D`  ;;
  111.  
  112.             *)  exit 2  ;;
  113.         esac
  114.     ;;
  115.  
  116.     *)  exit 1  ;;
  117. esac
  118.  
  119. wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz
  120. xdotool getactivewindow windowmove $X $Y windowsize $W $H
  121. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement