From 319fb2353d35f22bb67c09780260f0ab6eafc5b1 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Thu, 11 Oct 2012 21:28:01 +0200 Subject: .config/herbstluftwm/panel.sh --- .config/herbstluftwm/panel.sh | 150 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100755 .config/herbstluftwm/panel.sh (limited to '.config/herbstluftwm') diff --git a/.config/herbstluftwm/panel.sh b/.config/herbstluftwm/panel.sh new file mode 100755 index 0000000..22b46ae --- /dev/null +++ b/.config/herbstluftwm/panel.sh @@ -0,0 +1,150 @@ +#!/bin/bash + +monitor=${1:-0} +monitor2=1 +geometry=( $(herbstclient monitor_rect "$monitor") ) +if [ -z "$geometry" ] ;then + echo "Invalid monitor $monitor" + exit 1 +fi +# geometry has the format: WxH+X+Y +x=${geometry[0]} +width=${geometry[2]} +height=12 +y=0 #$(expr ${geometry[3]} - $height) +tag_width=40 +font="-misc-tamsyn-medium-r-normal-*-14-*-*-*-*-*-iso8859-*" + +selcolor='#24c6e0' +locolor='#657b83' +bgcolor='#002b36' +hicolor="#808080" +urcolor="#e0c625" + +function uniq_linebuffered() { + awk '$0 != l { print ; l=$0 ; fflush(); }' "$@" +} + +function print_tags() { + # draw tags + echo -n "$separator" + for i in "${TAGS[@]}" ; do + if [[ "${TAGS2[@]}" == *"#${i:1}"* ]]; then + echo -n "^bg($selcolor)^fg(#000000) ${i:1} ^fg()^bg()" + elif [[ "${TAGS2[@]}" == *"+${i:1}"* ]]; then + echo -n "^bg($locolor)^fg(#000000) ${i:1} ^fg()^bg()" + else + case ${i:0:1} in + '#') + echo -n "^bg($selcolor)^fg(#000000) ${i:1} ^fg()^bg()" + ;; + '+') + echo -n "^bg($locolor)^fg(#000000) ${i:1} ^fg()^bg()" + ;; + ':') + echo -n "^bg($hicolor)^fg(#000000) ${i:1} ^fg()^bg()" + ;; + '!') + echo -n "^bg($urcolor)^fg(#000000) ${i:1} ^fg()^bg()" + ;; + *) + echo -n "^bg($bgcolor)^fg(#ffffff) ${i:1} ^fg()^bg()" + ;; + esac + fi + echo -n "$separator" + done +} + +function print_mailboxes() { + declare -A mailnames + mailboxes=(ninthfloor gmail aethon ryuslash.org) + mailnames=( + [ninthfloor]="9f" + [gmail]="gm" + [aethon]="aet" + [ryuslash.org]="ryu") + mailtxt="" + for j in "${mailboxes[@]}"; do + mailfile="$HOME/documents/mail/$j/inbox/new/" + mailcnt=$(ls $mailfile | wc -l) + + if [ $mailcnt -gt 0 ]; then + mailsha1=$(echo $j | sha1sum) + mailcolor="#${mailsha1:0:6}" + else + mailcolor=$bgcolor + fi + + mailtxt="$mailtxt${separator}^bg($mailcolor)^fg(#ffffff) ${mailnames[$j]} ^fg()^bg()" + done + mailtxt_only=$(echo -n "$mailtxt" | sed 's.\^[^(]*([^)]*)..g') + let mailtxt_width=$(textwidth "$font" "$mailtxt_only")+10 + echo -n "^p(_RIGHT)^p(-$mailtxt_width)$mailtxt" +} + +function print_services() { + services=(emacs httpd mysqld dunst xbindkeys mpdscribble sshd mpd) + servicetxt="" + for j in "${services[@]}"; do + servicetxt="$servicetxt$separator$(status $j)" + done + servicetxt_only=$(echo -n "$servicetxt" | sed 's.\^[^(]*([^)]*)..g') + let servicetxt_width=($(textwidth "$font" "$servicetxt_only")+7)/2 + + echo -n "^p(_CENTER)^p(-$servicetxt_width)$servicetxt" +} + +function status() +{ + running=$(${1}_running 2>/dev/null || pidof $1) + + if [ -n "$running" ]; then + color="darkgreen" + else + color="darkred" + fi + + echo -n "^bg($color)^fg(#ffffff) $1 ^fg()^bg()" +} + +function emacs_running() +{ + ps ax | awk '{ print $5 " " $6 }' | grep -E "^emacs --daemon" +} + +{ + childpid=$! + herbstclient --idle + kill $childpid +} 2> /dev/null | { + TAGS=( $(herbstclient tag_status $monitor) ) + TAGS2=( $(herbstclient tag_status $monitor2) ) + + separator="^fg($bgcolor)^ro(1x$height)^fg()" + print_tags + print_services + print_mailboxes + + echo + # wait for next event + read line || break + cmd=( $line ) + # find out event origin + case "${cmd[0]}" in + tag*) + TAGS=( $(herbstclient tag_status $monitor) ) + TAGS2=( $(herbstclient tag_status $monitor2) ) + ;; + quit_panel) + exit + ;; + esac + + sleep 1s +} 2> /dev/null | dzen2 -w $width -x $x -y $y -fn "$font" -h $height \ + -ta l -bg "$bgcolor" + +# Local Variables: +# eval: (git-auto-commit-mode 1) +# End: -- cgit v1.2.3-54-g00ecf