#!/usr/bin/env bash MENU_CMD=dmenu "$@" [ "$XDG_SESSION_TYPE" = "wayland" ] && MENU_CMD=bemenu "$@" cachedir=${XDG_CACHE_HOME:-"$HOME/.cache"} if [ -d "$cachedir" ]; then cache=$cachedir/dmenu_run_man historyfile=$cachedir/dmenu_man_history else # if no xdg dir, fall back to dotfiles in ~ cache=$HOME/.dmenu_cache_man historyfile=$HOME/.dmenu_man_history fi #FONT="DejaVuSansMono Nerd Font Mono:pixelsize=16:antialias=true:autohint=true:style=book" # Generate a new cache if necessary if stest -dqr -n "$cache" /usr/share/man/**/*; then ls /usr/share/man/**/* \ | sed -Ee 's/^.*\///g;s/(\.gz)?//g;/:$/d;/^ *$/d;s/(.*)\.([0-9].*)$/\1 (\2)/g' \ | sort -u > $cache fi awk -v histfile=$historyfile ' BEGIN { while( (getline < histfile) > 0 ) { sub("^[0-9]+\t","") print x[$0]=1 } } !x[$0]++ ' "$cache" \ | $MENU_CMD \ | awk -v histfile=$historyfile ' BEGIN { FS=OFS="\t" while ( (getline < histfile) > 0 ) { count=$1 sub("^[0-9]+\t","") fname=$0 history[fname]=count } close(histfile) } { history[$0]++ print } END { if(!NR) exit for (f in history) print history[f],f | "sort -t '\t' -k1rn >" histfile } ' \ | while read MAN; do VERSION=$(echo $MAN | sed -Ee 's/.* \(([0-9].*)\)/\1/g') PAGE=$(echo $MAN | sed -Ee 's/(.*) \([0-9].*\)/\1/g') #echo "Man: $VERSION $PAGE" $TERM man $VERSION $PAGE done