#! /bin/sh # # Example panel for dzen2 font_family='sans-serif' font_size=11 . panel_colors adaptive_centering=0 screen_width=$(sres -W) NORMIFS=$IFS FIELDIFS=':' PADDING=' ' while getopts 'af:s:' opt ; do case "$opt" in a) adaptive_centering=1 ;; f) font_family=$OPTARG ;; s) font_size=$OPTARG ;; esac done shift $((OPTIND - 1)) while read -r line ; do case $line in S*) # system informations sys_infos="^fg($COLOR_STATUS_FG)^bg($COLOR_STATUS_BG)^ca(1, bspc toggle_visibility)${PADDING}${line#?}${PADDING}^ca()^fg()^bg()${PADDING}" ;; T*) # focused window title title="^fg($COLOR_TITLE_FG)^bg($COLOR_TITLE_BG)^ca(1, bspc toggle_floating)^ca(2, bspc toggle_locked)^ca(3, bspc close)${PADDING}${line#?}${PADDING}^ca()^ca()^ca()" ;; W*) # window manager informations wm_infos="$PADDING" IFS=$FIELDIFS set - ${line#?} while [ $# -gt 0 ] ; do item=$1 case $item in [DdEUu]*) # desktops name=${item#?} case $item in u*) # urgent (inactive) desktop FG=$COLOR_URGENT_FG BG=$COLOR_URGENT_BG ;; [DU]*) # active desktop FG=$COLOR_ACTIVE_FG BG=$COLOR_ACTIVE_BG ;; d*) # inactive desktop FG=$COLOR_INACTIVE_FG BG=$COLOR_INACTIVE_BG ;; E*) # empty desktop FG=$COLOR_EMPTY_FG BG=$COLOR_EMPTY_BG ;; esac wm_infos="${wm_infos}^fg(${FG})^bg(${BG})^ca(1, bspc use ${name})^ca(2, bspc send_to ${name})^ca(3, bspc send_to ${name} --follow)${PADDING}${name}${PADDING}^ca()^ca()^ca()" ;; L*) # layout layout=$(printf "%s" "${item#?}" | sed 's/^\(.\).*/\U\1/') wm_infos="${wm_infos}^fg()^bg()${PADDING}${PADDING}^fg($COLOR_LAYOUT_FG)^bg($COLOR_LAYOUT_BG)^ca(1, bspc cycle_layout)^ca(2, bspc balance)${PADDING}$layout${PADDING}^ca()^ca()" ;; esac shift done IFS=$NORMIFS ;; esac set - $(printf '%s\0%s\0%s' "$wm_infos" "$title" "$sys_infos" | sed 's/\^[a-z]\+([^)]*)//g' | xargs -0 txtw -f "$font_family" -s "$font_size") left_width=$1 center_width=$2 right_width=$3 left_indent=0 right_indent=$((screen_width - right_width)) available_center=$((screen_width - (left_width + right_width))) if [ $available_center -lt $center_width ] ; then center_indent=$((left_indent + left_width)) else if [ $adaptive_centering -eq 1 ] ; then center_indent=$((left_width + (available_center - center_width) / 2)) else center_indent=$(( (screen_width - center_width) / 2 )) fi fi printf "%s\n" "^pa($center_indent)$title^pa($left_indent)$wm_infos^pa($right_indent)$sys_infos" done