parent
6899f7b8bd
commit
925cf71b19
|
@ -0,0 +1,8 @@
|
|||
## Changelog
|
||||
|
||||
### 4.05.2021
|
||||
- handle undecorated windows
|
||||
- handle gap
|
||||
|
||||
### 3.05.2021
|
||||
- initial "quick and dirty" version
|
|
@ -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:
|
|||
</action>
|
||||
</mousebind>
|
||||
|
||||
|
||||
## Usage
|
||||
clicksnap is binded to <kbd>Ctrl</kbd> + <kbd>Left Mouse Click</kbd>
|
||||
Click inside window you like to move.
|
||||
There are 9 areas ... see screenshot :)
|
||||
|
||||
![clicksnap](clicksnap.png "clicksnap areas")
|
||||
|
||||
## Configuration
|
||||
|
||||
|
|
84
clicksnap
84
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 <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
|
||||
|
|
Loading…
Reference in New Issue