This awk script processes the events generated by `event-gen' and outputs the text of the bar for dzen2. It needs some variable to be defined on the command line, see `panel'.
BEGIN { visible = true } /^tag/ { cmd = sprintf("herbstclient tag_status %s", monitor) cmd | getline for (i = 1; i <= NF; i++) { tags[i] = $i } close(cmd) } /^date/ { $1 = "" date = substr($0, 2) } /^quit_panel/ { exit 0 } /^reload/ { exit 0 } /^focus_changed/ || /^window_title_changed/ { $1 = "" $2 = "" windowtitle = substr($0, 3) } /^play/ || /^next/ || /^prev/ { cmd = "amused status" cmd | getline $1 = "" file = substr($0, 2) close(cmd) # poor man basename player = gensub(".*/", "", 1, file) # and strip out the extension player = gensub("\.[A-Za-z0-9]+$", "", 1, player) } { for (i = 1; i <= length(tags); i++) { t = tags[i] if (t ~ "^#") { printf("^bg(%s)^fg(%s)", selbg, selfg) } else if (t ~ "^\\+") { printf "^bg(#9CA668)^fg(#141414)" } else if (t ~ "^:") { printf "^bg()^fg(#222222)" } else if (t ~ "^!") { printf "^bg(#FF0675)^fg(#141414)" } else { printf "^bg()^fg(#d6d6d6)" } printf(" %s ^bg()^fg()", substr(t, 2)) } printf("| %s ", date); if (player != "") { printf("| %s ", player); } printf("| %s ", windowtitle) printf("\n", right) fflush() next }