-
-
Notifications
You must be signed in to change notification settings - Fork 40
/
shellevents
executable file
·94 lines (84 loc) · 3.7 KB
/
shellevents
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
#!/bin/sh
## shellevents - run shell functions in response to Hyprland event
#
# the event string is parsed, splitting the data into indivual arguments
# for each event recevied, a function with the name event_<eventname> is invoked
# when invoked, the data is passed as named arguments
#
#
# load the default (empty) event implementations
# shellcheck disable=SC1091
. "$(dirname "$(realpath "$0")")"/shellevents_default.sh
PFS=$IFS
load_events() {
IFS=$PFS
for f in $event_files; do
# shellcheck disable=SC1090
if . "$f"; then
printf >&2 'loaded event file: %s\n' "$f"
else
printf >&2 'failed sourcing event file: %s\n' "$f"
exit 2
fi
done
}
verbose=
case "$1" in
-v) verbose=1 && shift ;;
esac
event_files="$*"
load_events
trap 'load_events; continue' USR1
while true; do
if read -r event_data; then
event="${event_data%%>>*}"
edata="${event_data#"$event">>}"
IFS=','
# shellcheck disable=SC2086 # splitting is intended
set -- $edata
IFS=$PFS
if [ -n "$verbose" ]; then
printf >&2 '[%s] 1:%s 2:%s 3:%s 4:%s\n' "$event" "$1" "$2" "$3" "$4"
fi
case "$event" in
"workspace") WORKSPACENAME="$1" event_workspace ;;
"workspacev2") WORKSPACEID="$1" WORKSPACENAME="$2" event_workspacev2 ;;
"focusedmon") MONNAME="$1" WORKSPACENAME="$2" event_focusedmon ;;
"activewindow") WINDOWCLASS="$1" WINDOWTITLE="$2" event_activewindow ;;
"activewindowv2") WINDOWADDRESS="$1" event_activewindowv2 ;;
"fullscreen") ENTER="$1" event_fullscreen ;;
"monitorremoved") MONITORNAME="$1" event_monitorremoved ;;
"monitoradded") MONITORNAME="$1" event_monitoradded ;;
"monitoraddedv2") MONITORID="$1" MONITORNAME="$2" MONITORDESCRIPTION="$3" event_monitoraddedv2 ;;
"createworkspace") WORKSPACENAME="$1" event_createworkspace ;;
"createworkspacev2") WORKSPACEID="$1" WORKSPACENAME="$2" event_createworkspacev2 ;;
"destroyworkspace") WORKSPACENAME="$1" event_destroyworkspace ;;
"destroyworkspacev2") WORKSPACEID="$1" WORKSPACENAME="$2" event_destroyworkspacev2 ;;
"moveworkspace") WORKSPACENAME="$1" MONNAME="$2" event_moveworkspace ;;
"moveworkspacev2") WORKSPACEID="$1" WORKSPACENAME="$2" MONNAME="$3" event_moveworkspacev2 ;;
"renameworkspace") WORKSPACEID="$1" NEWNAME="$2" event_renameworkspace ;;
"activespecial") WORKSPACENAME="$1" MONNAME="$2" event_activespecial ;;
"activelayout") KEYBOARDNAME="$1" LAYOUTNAME="$2" event_activelayout ;;
"openwindow") WINDOWADDRESS="$1" WORKSPACENAME="$2" WINDOWCLASS="$3" WINDOWTITLE="$4" event_openwindow ;;
"closewindow") WINDOWADDRESS="$1" event_closewindow ;;
"movewindow") WINDOWADDRESS="$1" WORKSPACENAME="$2" event_movewindow ;;
"movewindowv2") WINDOWADDRESS="$1" WORKSPACEID="$2" WORKSPACENAME="$3" event_movewindowv2 ;;
"windowtitle") WINDOWADDRESS="$1" event_windowtitle ;;
"openlayer") NAMESPACE="$1" event_openlayer ;;
"closelayer") NAMESPACE="$1" event_closelayer ;;
"submap") SUBMAPNAME="$1" event_submap ;;
"changefloatingmode") WINDOWADDRESS="$1" FLOATING="$2" event_changefloatingmode ;;
"urgent") WINDOWADDRESS="$1" event_urgent ;;
"minimize") WINDOWADDRESS="$1" MINIMIZED="$2" event_minimize ;;
"screencast") STATE="$1" OWNER="$2" event_screencast ;;
"togglegroup") STATE="$1" WINDOWADDRESSSES=${@:2} event_togglegroup ;;
"moveintogroup") WINDOWADDRESS="$1" event_moveintogroup ;;
"moveoutofgroup") WINDOWADDRESS="$1" event_moveoutofgroup ;;
"ignoregrouplock") STATE="$1" event_ignoregrouplock ;;
"lockgroups") STATE="$1" event_lockgroups ;;
"configreloaded") event_configreloaded ;;
"pin") WINDOWADDRESS="$1" PINSTATE="$2" event_pin ;;
*) printf >&2 'Unknown event: %s\n' "$event" ;;
esac
fi
done