diff options
author | Clint Adams <clint@users.sourceforge.net> | 2005-11-25 15:28:43 +0000 |
---|---|---|
committer | Clint Adams <clint@users.sourceforge.net> | 2005-11-25 15:28:43 +0000 |
commit | 4aad4ad3492f003c1cfbbb0fa243cda6c92c30ad (patch) | |
tree | 1d6ab513422ee71acb67630205d4148c9cb5470e /Completion/Unix/Command/_man | |
parent | 59e1574eaae5bf95c28eb1f1eb7b9f76b9f4ef5a (diff) | |
download | zsh-4aad4ad3492f003c1cfbbb0fa243cda6c92c30ad.tar.gz zsh-4aad4ad3492f003c1cfbbb0fa243cda6c92c30ad.tar.xz zsh-4aad4ad3492f003c1cfbbb0fa243cda6c92c30ad.zip |
update dput, baz, getconf, gpg, iconv, man, ssh, xmlsoft, gv from HEAD
Diffstat (limited to 'Completion/Unix/Command/_man')
-rw-r--r-- | Completion/Unix/Command/_man | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_man b/Completion/Unix/Command/_man new file mode 100644 index 000000000..4b7669010 --- /dev/null +++ b/Completion/Unix/Command/_man @@ -0,0 +1,96 @@ +#compdef man apropos whatis + +_man() { + local dirs expl mrd awk + + if [[ $service == man ]] && (( $words[(I)-l] + $words[(I)--local-file] )); then + _files || return 0 + fi + + if (( ! $#_manpath )); then + local mp + mp=( ${(s.:.)$(manpath 2>/dev/null)} ) + [[ "$mp" == *:* ]] && mp=( ${(s.:.)mp} ) + if (( $#mp )); then + _manpath=( $mp ) + elif (( $#manpath )); then + _manpath=( $manpath ) + fi + fi + + (( $#_manpath )) || + _manpath=( /usr/man(-/) /(opt|usr)/(dt|share|X11R6|local)/(cat|)man(-/) ) + + # `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)) + + local sect + if [[ $OSTYPE = solaris* ]]; then + sect=$words[$words[(i)-s]+1] + elif [[ -n ${sect:=$words[$words[(i)-S]+1]} || -n ${sect:=$MANSECT} ]]; then + if [[ $sect != ${sect::="${sect//:/|}"} ]]; then + sect="($sect)" + fi + elif (( CURRENT > 2 )); then + sect=$words[2] + fi + + if [[ $sect = (<->*|1M|l|n) || $sect = \(*\|*\) ]]; then + dirs=( $^_manpath/(sman|man|cat)${~sect}/ ) + awk="\$2 == \"$sect\" {print \$1}" + else + dirs=( $^_manpath/(sman|man|cat)*/ ) + awk='{print $1}' + fi + if zstyle -t ":completion:${curcontext}:manuals" separate-sections; then + typeset -U sects + local ret=1 + + sects=( ${(o)${dirs##*(man|cat)}%/} ) + + (( $#sects )) || return 1 + + _tags manuals.${^sects} + while _tags; do + for sect in $sects; do + _requested manuals.$sect expl "manual page, section $sect" _man_pages && + ret=0 + done + (( ret )) || return 0 + done + + return 1 + else + sect= + _wanted manuals expl 'manual page' _man_pages + fi +} + +_man_pages() { + local matcher pages dummy + + zparseopts -E M+:=matcher + + if (( $#matcher )); then + matcher=( ${matcher:#-M} ) + matcher="$matcher" + else + matcher= + fi + + pages=( ${(M)dirs:#*$sect/} ) + compfiles -p pages '' '' "$matcher" '' dummy '*' + pages=( ${^~pages}(N:t) ) + + (($#mrd)) && pages[$#pages+1]=($(awk $awk $mrd)) + + # Remove any compression suffix, then remove the minimum possible string + # beginning with .<->: that handles problem cases like files called + # `POSIX.1.5'. + + compadd "$@" - ${pages%.(?|<->*(|.gz|.bz2|.Z))} +} + +_man "$@" |