|
|
|
@ -1,17 +1,32 @@
|
|
|
|
|
#!/bin/bash |
|
|
|
|
## clicksnap - click on the appropriate area of the window to snap it in a given direction. |
|
|
|
|
# Works with active and inactive windows |
|
|
|
|
# |
|
|
|
|
# |
|
|
|
|
# |
|
|
|
|
# |
|
|
|
|
## |
|
|
|
|
### clicksnap - click on the appropriate area of the window to snap it in a given direction. |
|
|
|
|
# Works with active and inactive windows |
|
|
|
|
# Author: Daniel Napora <napcok@gmail.com> |
|
|
|
|
# https://maboxlinux.org |
|
|
|
|
# |
|
|
|
|
### Configuration |
|
|
|
|
# Gap between windows |
|
|
|
|
GAP="32" |
|
|
|
|
# TITLEBAR HEIGHT - no idea how to find it from cli |
|
|
|
|
TITLEBAR_HEIGHT="20" |
|
|
|
|
# Activate moved windows? |
|
|
|
|
activate_window="false" |
|
|
|
|
### End Configuration |
|
|
|
|
|
|
|
|
|
eval $(xdotool getmouselocation --shell) |
|
|
|
|
Mouse_x="$X" |
|
|
|
|
Mouse_y="$Y" |
|
|
|
|
|
|
|
|
|
HEX_ID=$(printf '0x%x\n' $WINDOW) |
|
|
|
|
|
|
|
|
|
CHILD_ID=$(xwininfo -id $HEX_ID -children|grep "\"" | awk '{print $1}') |
|
|
|
|
|
|
|
|
|
if xwininfo -id $CHILD_ID -wm |grep Undecorated ; then # Undecorated |
|
|
|
|
T="0" |
|
|
|
|
else # Decorated |
|
|
|
|
T="$TITLEBAR_HEIGHT" |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
eval $(xdotool getwindowgeometry --shell $WINDOW) |
|
|
|
|
Win_x="$X" |
|
|
|
|
Win_y="$Y" |
|
|
|
@ -36,61 +51,26 @@ OFF_Y="${OFFSET#*,}"
|
|
|
|
|
|
|
|
|
|
case $POS_CODE in |
|
|
|
|
00) # top-left |
|
|
|
|
WIDTH=$((AVAIL_X/2)) |
|
|
|
|
HEIGHT=$((AVAIL_Y/2-OFF_Y/2)) |
|
|
|
|
X=$((0+OFF_X)) |
|
|
|
|
Y=$((0+OFF_Y)) |
|
|
|
|
;; |
|
|
|
|
W=$((AVAIL_X/2-GAP)) H=$((AVAIL_Y/2-T-GAP)) X=$((0+OFF_X+GAP/2)) Y=$((0+OFF_Y+GAP/2));; |
|
|
|
|
10) # top |
|
|
|
|
WIDTH=$((AVAIL_X)) |
|
|
|
|
HEIGHT=$((AVAIL_Y/2-OFF_Y/2)) |
|
|
|
|
X=$((0+OFF_X)) |
|
|
|
|
Y=$((0+OFF_Y)) |
|
|
|
|
;; |
|
|
|
|
W=$((AVAIL_X-GAP)) H=$((AVAIL_Y/2-T-GAP)) X=$((0+OFF_X+GAP/2)) Y=$((0+OFF_Y+GAP/2));; |
|
|
|
|
20) # top-right |
|
|
|
|
WIDTH=$((AVAIL_X/2)) |
|
|
|
|
HEIGHT=$((AVAIL_Y/2-OFF_Y/2)) |
|
|
|
|
X=$((AVAIL_X/2+OFF_X)) |
|
|
|
|
Y=$((0+OFF_Y)) |
|
|
|
|
;; |
|
|
|
|
W=$((AVAIL_X/2-GAP)) H=$((AVAIL_Y/2-T-GAP)) X=$((AVAIL_X/2+OFF_X+GAP/2)) Y=$((0+OFF_Y+GAP/2));; |
|
|
|
|
01) # left |
|
|
|
|
WIDTH=$((AVAIL_X/2)) |
|
|
|
|
HEIGHT=$((AVAIL_Y-OFF_Y/2)) |
|
|
|
|
X=$((0+OFF_X)) |
|
|
|
|
Y=$((0+OFF_Y)) |
|
|
|
|
;; |
|
|
|
|
W=$((AVAIL_X/2-GAP)) H=$((AVAIL_Y-T-GAP)) X=$((0+OFF_X+GAP/2)) Y=$((0+OFF_Y+GAP/2));; |
|
|
|
|
11) # center |
|
|
|
|
WIDTH=$((AVAIL_X/2-OFF_X)) |
|
|
|
|
HEIGHT=$((AVAIL_Y/2-OFF_Y)) |
|
|
|
|
X=$((AVAIL_X/4+OFF_X/2)) |
|
|
|
|
Y=$((AVAIL_Y/4+OFF_Y/2));; |
|
|
|
|
W=$((AVAIL_X/8*6-OFF_X)) H=$((AVAIL_Y/8*6-T)) X=$((AVAIL_X/8+OFF_X/2)) Y=$((AVAIL_Y/8+OFF_Y/2));; |
|
|
|
|
21) # right |
|
|
|
|
WIDTH=$((AVAIL_X/2)) |
|
|
|
|
HEIGHT=$((AVAIL_Y-OFF_Y/2)) |
|
|
|
|
X=$((AVAIL_X/2+OFF_X)) |
|
|
|
|
Y=$((0+OFF_Y)) |
|
|
|
|
;; |
|
|
|
|
W=$((AVAIL_X/2-GAP)) H=$((AVAIL_Y-T-GAP)) X=$((AVAIL_X/2+OFF_X+GAP/2)) Y=$((0+OFF_Y+GAP/2));; |
|
|
|
|
02) # bottom-left |
|
|
|
|
WIDTH=$((AVAIL_X/2)) |
|
|
|
|
HEIGHT=$((AVAIL_Y/2-OFF_Y/2)) |
|
|
|
|
X=$((0+OFF_X)) |
|
|
|
|
Y=$((AVAIL_Y/2+OFF_Y)) |
|
|
|
|
;; |
|
|
|
|
W=$((AVAIL_X/2-GAP)) H=$((AVAIL_Y/2-T-GAP)) X=$((0+OFF_X+GAP/2)) Y=$((AVAIL_Y/2+OFF_Y+GAP/2));; |
|
|
|
|
12) # bottom |
|
|
|
|
WIDTH=$((AVAIL_X)) |
|
|
|
|
HEIGHT=$((AVAIL_Y/2-OFF_Y/2)) |
|
|
|
|
X=$((0+OFF_X)) |
|
|
|
|
Y=$((AVAIL_Y/2+OFF_Y)) |
|
|
|
|
;; |
|
|
|
|
W=$((AVAIL_X-GAP)) H=$((AVAIL_Y/2-T-GAP)) X=$((0+OFF_X+GAP/2)) Y=$((AVAIL_Y/2+OFF_Y+GAP/2));; |
|
|
|
|
22) # bottom-right |
|
|
|
|
WIDTH=$((AVAIL_X/2)) |
|
|
|
|
HEIGHT=$((AVAIL_Y/2-OFF_Y/2)) |
|
|
|
|
X=$((AVAIL_X/2+OFF_X)) |
|
|
|
|
Y=$((AVAIL_Y/2+OFF_Y)) |
|
|
|
|
;; |
|
|
|
|
W=$((AVAIL_X/2-GAP)) H=$((AVAIL_Y/2-T-GAP)) X=$((AVAIL_X/2+OFF_X+GAP/2)) Y=$((AVAIL_Y/2+OFF_Y+GAP/2));; |
|
|
|
|
esac |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xdotool windowsize $WINDOW $WIDTH $HEIGHT |
|
|
|
|
xdotool windowsize $WINDOW $W $H |
|
|
|
|
xdotool windowmove $WINDOW $X $Y |
|
|
|
|
if [ $activate_window == "true" ]; then xdotool windowactivate $WINDOW; fi |
|
|
|
|