## 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 }