#compdef man apropos whatis local rep expl mrd if [[ $service == man ]] && (( $words[(I)-l] + $words[(I)--local-file] )); then _files || return 0 fi if (( ! $#manpath )); then local mp mp=($(manpath 2>/dev/null)) [[ "$mp" == *:* ]] && mp=( ${(s.:.)mp} ) manpath=( $mp ) (( $#manpath )) || manpath=( ${(s.:.)$(manpath 2>/dev/null)} ) || manpath=( /usr/man(-/) /(opt|usr)/(dt|share|X11R6|local)/(cat|)man(-/) ) fi if (( _matcher_num < 2 )); then # `sman' is the SGML manual directory for Solaris 7. # 1M is system administrator commands on SVR4 mrd=(${^manpath/\%L/${LANG:-En_US.ASCII}}/mandb(N)) if [[ $words[2] = (<->*|1M|l|n) ]]; then rep=( $manpath/(sman|man|cat)${words[2]}/*.*(:t) ) (($#mrd)) && rep[$#rep+1]=($(awk "\$2 == \"$words[2]\" {print \$1}" $mrd)) else rep=( $manpath/(sman|man|cat)*/*.*(:t) ) (($#mrd)) && rep[$#rep+1]=($(awk '{print $1}' $mrd)) fi # Remove any compression suffix, then remove the minimum possible string # beginning with .<->: that handles problem cases like files called # `POSIX.1.5'. rep=(${${rep%%.(bz2|z|gz|Z)}%.<->*}) mrd=( ${(q)rep} ) eval "_man_cached() { rep=( $mrd ) }" else _man_cached fi (( $#rep )) && _wanted manuals expl 'manual page' compadd -M "$_matcher" -a rep