#! /bin/sh module_name="$(basename "$0")" align="left" color() { sed "$1!d" ../colors } background="$(color 1)" foreground="$(color 2)" trap "echo "$module_name//!DEAD" && trap - TERM && kill -- -$$" INT TERM EXIT loop() { echo "$module_name/$align!$background!$foreground/" if [ ! -z "$clickFunc" ]; then trap "$clickFunc" 10 prefix="%{A:kill -10 $$:}" suffix="%{A}" fi while :; do data="$($1)" if [ "$?" = "1" ]; then sleep 0.01 continue fi echo "$module_name//$prefix$data$suffix" $waitFunc & wait $! done } wait_for() { [ "$1" = "" ] && exit if [ "$2" = "" ]; then herbstclient --wait $1 > /dev/null & wait else list="" for arg in $@; do list="$list|$arg" done herbstclient --wait "$list" > /dev/null & wait fi } kickoff() { if [ "$2" = "" ]; then while :; do $1 done else while :; do $1 sleep $2 done fi } pad() { len="$(echo -n "$1" | wc -c)" padding="$(expr $2 - $len)" if [ "$padding" -lt 1 ]; then echo "$1" return fi printf "$1%*s\n" $padding '' } trim() { len="$(echo -n "$1" | wc -c)" echo "$1" | colrm $2 [ "$len" -gt "$2" ] && return 3 } toggle() { eval "[ \"\$$1\" = \"true\" ] && $1=false || $1=true" } atomic_write() { cat - > "$1.atom" mv "$1.atom" "$1" }