65 lines
2.5 KiB
Bash
65 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Multi monitor support. Needs MONITOR environment variable to be set for each instance of polybar
|
|
# If MONITOR environment variable is not set this will default to monitor 0
|
|
# Check https://github.com/polybar/polybar/issues/763
|
|
MON_IDX="0"
|
|
mapfile -t MONITOR_LIST < <(polybar --list-monitors | cut -d":" -f1)
|
|
for (( i=0; i<$((${#MONITOR_LIST[@]})); i++ )); do
|
|
[[ ${MONITOR_LIST[${i}]} == "$MONITOR" ]] && MON_IDX="$i"
|
|
done;
|
|
|
|
herbstclient --idle "tag_*" 2>/dev/null | {
|
|
|
|
while true; do
|
|
# Read tags into $tags as array
|
|
IFS=$'\t' read -ra tags <<< "$(herbstclient tag_status "${MON_IDX}")"
|
|
{
|
|
for i in "${tags[@]}" ; do
|
|
# Read the prefix from each tag and render them according to that prefix
|
|
case ${i:0:1} in
|
|
'.')
|
|
# the tag is empty
|
|
# TODO Add your formatting tags
|
|
;;
|
|
':')
|
|
# the tag is not empty
|
|
# TODO Add your formatting tags
|
|
;;
|
|
'+')
|
|
# the tag is viewed on the specified MONITOR, but this monitor is not focused.
|
|
# TODO Add your formatting tags
|
|
;;
|
|
'#')
|
|
# the tag is viewed on the specified MONITOR and it is focused.
|
|
# TODO Add your formatting tags
|
|
;;
|
|
'-')
|
|
# the tag is viewed on a different MONITOR, but this monitor is not focused.
|
|
# TODO Add your formatting tags
|
|
;;
|
|
'%')
|
|
# the tag is viewed on a different MONITOR and it is focused.
|
|
# TODO Add your formatting tags
|
|
;;
|
|
'!')
|
|
# the tag contains an urgent window
|
|
# TODO Add your formatting tags
|
|
;;
|
|
esac
|
|
|
|
# focus the monitor of the current bar before switching tags
|
|
echo "%{A1:herbstclient focus_monitor ${MON_IDX}; herbstclient use ${i:1}:} ${i:1} %{A -u -o F- B-}"
|
|
done
|
|
|
|
# reset foreground and background color to default
|
|
echo "%{F-}%{B-}"
|
|
} | tr -d "\n"
|
|
|
|
echo
|
|
|
|
# wait for next event from herbstclient --idle
|
|
read -r || break
|
|
done
|
|
} 2>/dev/null
|