diff options
Diffstat (limited to '.local/bin/open_man')
| -rwxr-xr-x | .local/bin/open_man | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/.local/bin/open_man b/.local/bin/open_man new file mode 100755 index 0000000..f86f1f9 --- /dev/null +++ b/.local/bin/open_man @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +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" \ + | dmenu "$@" \ + | 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" + st -e man $VERSION $PAGE + done |
