## vim:ft=zsh ## wrapper around man, finfo, etc ## Usage: help typeset -a methods typeset method topic typeset -i found check_only all methods=(man zshfunction zshbuiltin apt) while [[ $1 == -* ]] { case $1 in -a|--all) all=1 ;; -c|--check-only) check_only=1 ;; -t|--topic) topic=$2; shift ;; -|--) shift; break ;; *) echo "unknown option: $1" ;; esac shift } function help_check_man { man -w $1 &> /dev/null } function help_check_zshfunction { whichf $1 &> /dev/null } function help_check_zshbuiltin { (( ${+builtins[$1]} )) } function help_check_apt { [[ $commands[$1] != ${HOME}* ]] && [[ -n $commands[$1] ]] && [[ -n $commands[apt-file ]] } function help_show_man { man $1 } function help_show_zshfunction { finfo $1 } function help_show_zshbuiltin { man zshbuiltins | less -p " $1" } function help_show_apt { apt-cache show ${(s/:/)$(apt-file search -F $commands[$1])[1]} } if [[ -z $1 ]] { echo "Usage: help " > /dev/stderr return 1 } for method in $methods; { if [[ -n $topic && $method != $topic ]] { continue } if help_check_$method $1; then ((found++)) if ((check_only)) { echo $method continue } help_show_$method $1 ((all)) || break fi } if ((found == 0)) { echo "Sorry, no clue." > /dev/stderr return 1 }