43 lines
1.1 KiB
Bash
Executable File
43 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Checks if a list ($1) contains an element ($2)
|
|
contains() {
|
|
for e in $1; do
|
|
[[ "$e" -eq "$2" ]] && echo 1 && return
|
|
done
|
|
echo 0
|
|
}
|
|
|
|
print_workspaces() {
|
|
local buf=""
|
|
local desktops=$(bspc query -D --names)
|
|
local focused_desktop=$(bspc query -D -d focused --names)
|
|
local occupied_desktops=$(bspc query -D -d .occupied --names)
|
|
|
|
for d in $desktops; do
|
|
if [[ "$(contains "$focused_desktop" "$d")" -eq 1 ]]; then
|
|
local ws=$d
|
|
local icon=""
|
|
local class="workspace-focused"
|
|
elif [[ "$(contains "$occupied_desktops" "$d")" -eq 1 ]]; then
|
|
local ws=$d
|
|
local icon=""
|
|
local class="workspace-occupied"
|
|
else
|
|
local ws="$d"
|
|
local icon=""
|
|
local class="workspace-empty"
|
|
fi
|
|
|
|
local buf+="(eventbox :cursor \"pointer\" (button :class \"$class\" :onclick \"bspc desktop -f $ws\" \"$icon\"))"
|
|
done
|
|
|
|
echo "(box :orientation \"h\" :class \"works\" :halign \"center\" :halign \"center\" :hexpand true :vexpand true $buf)"
|
|
}
|
|
|
|
# Listen to bspwm changes
|
|
print_workspaces
|
|
bspc subscribe desktop node_transfer | while read -r _; do
|
|
print_workspaces &
|
|
done
|