blob: af7278c8e01ef7697aab5606f34289ea4e434b62 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#!/usr/bin/env bash
#
# Hotspots for Xorg
# - Corners: BL, BR, TL, TR
# - Edges: B, T, L, R
# - Events: onEnter, onExit
#
# Dependencies: xdotool
#
# TODO:
# - better multimonitor support
# hotspot size
SIZE=2
DELAY=0.7 # Adjust the delay time in seconds
# active hotspot dimensions (width, height)
B=(1100 140)
T=(700 "$SIZE")
L=(460 700)
R=(140 700)
BL=(400 400)
BR=("$SIZE" "$SIZE")
TL=(400 300)
TR=("$SIZE" "$SIZE")
## event handlers
#function cycleDesktops {
# # by resetting $ZONE the onEnter event will fire
# # repeatedly and no onExit event will be given
# ZONE=""
# ~/.scripts/show-desktop next
# sleep 0.3
#}
function onEnter {
ZONE=$1
case "$1" in
'T') sleep "$DELAY" && [ "$ZONE" == "T" ] && eww open status &>/dev/null ;;
'R') sleep "$DELAY" && [ "$ZONE" == "R" ] && eww open bar &>/dev/null ;;
esac
}
function onExit {
ZONE=''
case "$1" in
'T') eww close status &>/dev/null ;;
#'L') eww close panel &>/dev/null ;;
'R') eww close bar &>/dev/null ;;
#'TR') cycleDesktops ;;
esac
}
# get screen dimensions (returns: WIDTH, HEIGHT)
eval "$(xdotool getdisplaygeometry --shell)"
# calculate coordinates
BLY=$((HEIGHT - BL[1]))
BRX=$((WIDTH - BR[0]))
BRY=$((HEIGHT - BR[1]))
TRX=$((WIDTH - TR[0]))
BX1=$(((WIDTH - B[0]) / 2))
BX2=$(((WIDTH + B[0]) / 2))
BY=$((HEIGHT - B[1]))
LY1=$(((HEIGHT - L[1]) / 2))
LY2=$(((HEIGHT + L[1]) / 2))
RX=$((WIDTH - R[0]))
RY1=$(((HEIGHT - R[1]) / 2))
RY2=$(((HEIGHT + R[1]) / 2))
H=$((HEIGHT - SIZE))
W=$((WIDTH - SIZE))
# watch mouse
while :; do
sleep 0.1
# get mouse location (returns: X, Y)
eval "$(xdotool getmouselocation --shell)"
if [ "$ZONE" = "" ]; then
if [[ "$Y" -ge "$H" ]]; then
if [[ "$X" -lt "$SIZE" ]]; then
onEnter BL
elif [[ "$X" -gt "$BX1" && "$X" -lt "$BX2" ]]; then
onEnter B
elif [[ "$X" -gt "$W" ]]; then
onEnter BR
fi
elif [[ "$Y" -lt "$SIZE" && "$X" -gt $((WIDTH / 3)) && "$X" -lt $((2 * WIDTH / 3)) ]]; then
onEnter T
elif [[ "$X" -lt "$SIZE" && "$Y" -gt "$LY1" && "$Y" -lt "$LY2" ]]; then
onEnter L
elif [[ "$X" -gt "$W" && "$Y" -gt "$RY1" && "$Y" -lt "$RY2" ]]; then
onEnter R
fi
else
case "$ZONE" in
'B') [[ "$X" -lt "$BX1" || "$X" -gt "$BX2" || "$Y" -lt "$BY" ]] &&
onExit B ;;
'L') [[ "$X" -ge "${L[0]}" || "$Y" -lt "$LY1" || "$Y" -gt "$LY2" ]] &&
onExit L ;;
'R') [[ "$X" -le "$RX" || "$Y" -lt "$RY1" || "$Y" -gt "$RY2" ]] &&
onExit R ;;
'T') [[ "$X" -lt "$BX1" || "$X" -gt "$BX2" || "$Y" -gt "${T[1]}" ]] &&
onExit T ;;
'BL') [[ "$X" -ge "${BL[0]}" || "$Y" -lt "$BLY" ]] &&
onExit BL ;;
'BR') [[ "$X" -le "$BRX" || "$Y" -lt "$BRY" ]] &&
onExit BR ;;
'TL') [[ "$X" -ge "${TL[0]}" || "$Y" -ge "${TL[1]}" ]] &&
onExit TL ;;
'TR') [[ "$X" -le "$TRX" || "$Y" -ge "${TR[1]}" ]] &&
onExit TR ;;
esac
fi
done
|