64 lines
2.1 KiB
Plaintext
64 lines
2.1 KiB
Plaintext
|
#!/bin/bash
|
||
|
#===================================================================================
|
||
|
# AUTOSNAP
|
||
|
# FILE: autosnap
|
||
|
# USAGE: autosnap
|
||
|
# DESCRIPTION: Snap current windows according the mouse position
|
||
|
# REQUIREMENTS: xdotool, xrandr
|
||
|
# AUTHOR: Leonardo Marco
|
||
|
# VERSION: 1.0
|
||
|
# CREATED: 12.10.2017
|
||
|
# LAST-UPDATE: 12.10.2017
|
||
|
#===================================================================================
|
||
|
|
||
|
# Key combinations in openbox (same as configured in rc.xml)
|
||
|
topleft_key="super+KP_Home"
|
||
|
top_key="super+KP_Up"
|
||
|
topright_key="super+KP_Prior"
|
||
|
left_key="super+KP_Left"
|
||
|
center_key="super+KP_Begin"
|
||
|
right_key="super+KP_Right"
|
||
|
bottomleft_key="super+KP_End"
|
||
|
bottom_key="super+KP_Down"
|
||
|
bottomright_key="super+KP_Next"
|
||
|
|
||
|
# Format xrandr output
|
||
|
xrandr="$(xrandr | grep -w "connected" | grep -o "[0-9]\+x[0-9]\++[0-9]\++[0-9]\+" | tr "x+" " " | sort -nk 4)"
|
||
|
# Get num of monitors
|
||
|
num_screens=$(echo "$xrandr" | wc -l)
|
||
|
[ "$num_screens" -gt 2 ] && echo "Script cannot deal with more than 2 monitors" >&2 && exit 1
|
||
|
# Get screen resolution
|
||
|
screen_left=($(echo "$xrandr" | head -1))
|
||
|
[ "$num_screens" -gt 1 ] && screen_right=($(echo "$xrandr" | tail -1))
|
||
|
|
||
|
# Get current mouse position
|
||
|
out="$(xdotool getmouselocation)"
|
||
|
out=(${out//[^0-9 ]/})
|
||
|
current_x="${out[0]}"
|
||
|
current_y="${out[1]}"
|
||
|
|
||
|
# Calculate current monitor and relative position to this monitor
|
||
|
if [ "$num_screens" -gt 1 ] && [ "$current_x" -gt "${screen_right[2]}" ]; then
|
||
|
current_screen=(${screen_right[*]})
|
||
|
current_x=$(($current_x-${screen_right[2]}))
|
||
|
else
|
||
|
current_screen=(${screen_left[*]})
|
||
|
fi
|
||
|
|
||
|
# Check zone-position
|
||
|
if [ "$current_y" -lt "$((${current_screen[1]}*1/3))" ]; then # IN-TOP
|
||
|
var_key="top"
|
||
|
elif [ "$current_y" -gt "$((${current_screen[1]}*2/3))" ]; then # IN-BOTTOM
|
||
|
var_key="bottom"
|
||
|
fi
|
||
|
if [ "$current_x" -lt "$((${current_screen[0]}*1/3))" ]; then # IN-LEFT
|
||
|
var_key="${var_key}left"
|
||
|
elif [ "$current_x" -gt "$((${current_screen[0]}*2/3))" ]; then # IN-RIGHT
|
||
|
var_key="${var_key}right"
|
||
|
fi
|
||
|
[ ! "$var_key" ] && var_key="center"
|
||
|
var_key="${var_key}_key"
|
||
|
|
||
|
# Press openbox snap combination according position
|
||
|
xdotool key "${!var_key}"
|