commit 405b666060e19233b82d27b95b39d02047a6b0e9 from: Omar Polo date: Tue Feb 22 13:50:21 2022 UTC add more herbstluftwm stuff commit - c0109344e9d48ed692362837c6e1839a16250817 commit + 405b666060e19233b82d27b95b39d02047a6b0e9 blob - 26f4f8e55d42727ae395a0e8598a3d7e3af9d642 blob + e5bc5e50c77a6ac273d69b906a6e082ce03bb861 --- config/herbstluftwm/autostart.lp +++ config/herbstluftwm/autostart.lp @@ -86,25 +86,25 @@ resizing frames and floating clients add the tags - hc rename default "0" || true + hc rename default "1" || true addtag() { hc add $1 if [ ! -z "$2" ]; then - hc keybind "$Mod-$2" use_index $1 - hc keybind "$Mod-Shift-$2" move_index $1 + hc keybind "$Mod-$2" use $1 + hc keybind "$Mod-Shift-$2" move $1 fi } - addtag 0 ampersand - addtag 1 braceleft - addtag 2 bracketleft - addtag 3 parenleft - addtag 4 equal - addtag 5 plus - addtag 6 parenright - addtag 7 bracketright - addtag 8 braceright - addtag 9 exclam + addtag 1 ampersand + addtag 2 braceleft + addtag 3 bracketleft + addtag 4 parenleft + addtag 5 equal + addtag 6 plus + addtag 7 parenright + addtag 8 bracketright + addtag 9 braceright + addtag 0 exclam cycle through tags @@ -135,7 +135,7 @@ layout is skipped. mouse bindings hc mouseunbind --all - hc mousebind $Mod-Button1 move + hc mousebind $Mod-Button1 move hc mousebind $Mod-Button2 zoom hc mousebind $Mod-Button3 resize @@ -222,10 +222,10 @@ incredibly easy herbstclient set_monitors $((1920-100))x$((1080-100))+50+50 # hc detect_monitors -Finally launche the panel on each screen +Finally launche the panel on each screen. I rewrote the original +script for the monitor in a mix of rc (the plan9 shell) and awk. - panel=~/.config/herbstluftwm/panel.sh - [ -x "$panel" ] || panel=/etc/xdg/herbstluftwm/panel.sh + cd ~/.config/herbstluftwm for monitor in $(hc list_monitors | cut -d: -f1) ; do - "$panel" "$monitor" & + ./panel "$monitor" & done blob - /dev/null blob + 306b7aebd772814ceac89d1859e238b26994cb9a (mode 644) --- /dev/null +++ config/herbstluftwm/event-gen.lp @@ -0,0 +1,56 @@ +# event-gen + +This script is the event generator for the bar. The ideas is that +it sits waiting for stuff to happen (window focus, date change, +music player, ...) + + #!/usr/bin/env rc + + . ./lib + +Kill the player monitor and the date subshell upon exit + + fn quit { + kill $datepid + kill $playerpid + } + + fn siguhp { quit } + fn sigint { quit } + +The idea behind `uniq_linebuffered' is to avoid refreshing the bar +every tick if the state doesn't change. It doesn't work for some +reason however... + + # XXX: for some reasons this don't work + fn uniq_linebuffered { + awk '$0 != l { print ; l=$0 ; fflush(); }' + } + +Simulate the tag and play event at the start to force the process +to update the tags and music info. + + echo tag + echo play + +Date event generator: + + while () { + date=`{date +'%H:%M, %Y-%m-%d'} + printf 'date\t%s\n' $"date + sleep 10 || break + } | uniq_linebuffered & + datepid=$apid + +Music player event generator: + + amused monitor | egrep --line-buffered '(play|next|prev)' & + playerpid=$apid + +Window manager event generator: + + hc --idle + +Kill everything upon exit + + quit blob - /dev/null blob + 368b611a84c0d701e8551458537a2c323d4a8e94 (mode 644) --- /dev/null +++ config/herbstluftwm/lib.lp @@ -0,0 +1,31 @@ +# lib + +This are some common stuff that needs to be shared between panel +and event-gen. + + fn hc { herbstclient $* } + + if (~ $"monitor '') + monitor=0 + + geometry=`{hc monitor_rect $"monitor} + if (test -z $"geometry) { + echo invalid monitor $monitor + exit 1 + } + + x=$geometry(1) + y=$geometry(2) + panel_width=$geometry(3) + panel_height=16 + + font='-*-fixed-medium-*-*-*-12-*-*-*-*-*-*-*' + + fn omit-alpha { + sed 's,^\(\#[0-9a-f]\{6\}\)[0-9a-f]\{2\}$,\1,' + } + + # extract colors from hlwm and omit alpha-value + bgcolor=`{hc get frame_border_normal_color | omit-alpha} + selbg=`{hc get window_border_active_color | omit-alpha} + selfg='#101010' blob - /dev/null blob + abd2555aef69cc850bd6d421d7699e1a2a55c731 (mode 644) --- /dev/null +++ config/herbstluftwm/panel.lp @@ -0,0 +1,27 @@ +# panel + +This is the scripts that creates the bar in my herbstluftwm setup. +It's written in rc (the plan9 shell) because why not. + + #!/usr/bin/env rc + + monitor=$1 + + . ./lib + + hc pad $monitor $panel_height + + fn process { + awk -f process.awk \ + -v selbg=$"selbg \ + -v selfg=$"selfg \ + -v font=$"font \ + -v monitor=$"monitor + } + + fn render { + dzen2 -w $panel_width -x $x -y $y -h $panel_height \ + -fn $"font -ta l -bg $"bgcolor -fg '#222222' + } + + ./event-gen $"monitor | process | render >[2] /dev/null blob - /dev/null blob + c72d405f9d005b8c233a453f7acab2194a4ccc71 (mode 644) --- /dev/null +++ config/herbstluftwm/process.awk.lp @@ -0,0 +1,81 @@ +# process.awk + +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 + } blob - b0289dd28a773e281b2a92c63b2f789dccb7b2c1 blob + 009134c7148a334e646334b841942b290d88bff9 --- gen +++ gen @@ -56,6 +56,10 @@ pair bin/browser bin/browser.lp +x pair bin/sshot bin/sshot.lp +x pair .config/herbstluftwm/autostart config/herbstluftwm/autostart.lp +pair .config/herbstluftwm/panel config/herbstluftwm/panel.lp +x +pair .config/herbstluftwm/process.awk config/herbstluftwm/process.awk.lp +pair .config/herbstluftwm/lib config/herbstluftwm/lib.lp +pair .config/herbstluftwm/event-gen config/herbstluftwm/event-gen.lp conv index index.lp for file in $files; do