diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..8d4c7e0
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,8 @@
+## Changelog
+
+### 4.05.2021
+- handle undecorated windows
+- handle gap
+
+### 3.05.2021
+- initial "quick and dirty" version
diff --git a/README.md b/README.md
index f7e40ed..83aa1e2 100644
--- a/README.md
+++ b/README.md
@@ -2,12 +2,14 @@
clicksnap for Openbox - click on the appropriate area of the window to snap it in a given direction.
Works with active and inactive windows.
+Configurable gap between windows.
*(Far from perfection, but imho already enough good to use)*
## Requirements
- wmctrl
- xdotool
+- xwininfo
## Installation
wget https://git.maboxlinux.org/napcok/clicksnap/raw/branch/master/clicksnap
@@ -22,9 +24,13 @@ Add this mousebind action to context Frame:
+
## Usage
clicksnap is binded to Ctrl + Left Mouse Click
Click inside window you like to move.
There are 9 areas ... see screenshot :)
![clicksnap](clicksnap.png "clicksnap areas")
+
+## Configuration
+
diff --git a/clicksnap b/clicksnap
index 5bb14e8..5d8459e 100755
--- a/clicksnap
+++ b/clicksnap
@@ -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
+# 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