From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6740 invoked from network); 21 Jun 2001 12:52:58 -0000 Received: from sunsite.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 21 Jun 2001 12:52:58 -0000 Received: (qmail 20476 invoked by alias); 21 Jun 2001 12:52:16 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 15029 Received: (qmail 20461 invoked from network); 21 Jun 2001 12:52:15 -0000 From: Sven Wischnowsky Date: Thu, 21 Jun 2001 14:51:03 +0200 (MET DST) Message-Id: <200106211251.OAA13962@beta.informatik.hu-berlin.de> To: zsh-workers@sunsite.dk Subject: Re: Commit those _man patches? In-Reply-To: <1010620180154.ZM8776@candle.brasslantern.com> Bart Schaefer wrote: > Sven sent a patch for an improvement to _man in 14633, with a follow-up in > 14659. I just noticed that they've never been committed. I had completely forgotten about those. I'm going to commit them to the development branch now. If nobody sees any bad side effects we can consider applying them to 4.0.2, too. Bye Sven Index: Completion/Unix/Command/_man =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_man,v retrieving revision 1.1 diff -u -r1.1 _man --- Completion/Unix/Command/_man 2001/04/02 11:57:04 1.1 +++ Completion/Unix/Command/_man 2001/06/21 12:51:32 @@ -1,47 +1,62 @@ #compdef man apropos whatis -local rep expl star approx mrd +_man() { + local dirs expl mrd awk -if [[ $service == man ]] && (( $words[(I)-l] + $words[(I)--local-file] )); then - _files || return 0 -fi - -if [[ $compstate[pattern_match] != [^*] ]]; then - # If a string other than *, we just want correction, so no `*'. - star='*' -fi - -if [[ -n $_comp_correct ]]; then - # If this is set, we are correcting with this many approximations. - approx="(#a${_comp_correct})" -fi - -if (( ! $#manpath )); then - local mp - mp=($(manpath 2>/dev/null)) - [[ "$mp" == *:* ]] && mp=( ${(s.:.)mp} ) - manpath=( $mp ) -fi - -(( $#manpath )) || manpath=( ${(s.:.)$(manpath 2>/dev/null)} ) || - 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)) -if [[ $words[2] = (<->*|1M|l|n) ]]; then - rep=( - $manpath/(sman|man|cat)${words[2]}/${~approx}$PREFIX${~star}$SUFFIX.*(:t) ) - (($#mrd)) && rep[$#rep+1]=($(awk "\$2 == \"$words[2]\" {print \$1}" $mrd)) -else - rep=( $manpath/(sman|man|cat)*/${~approx}$PREFIX${~star}$SUFFIX.*(: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 )) && _wanted manuals expl 'manual page' \ - compadd - ${${rep%%.(bz2|z|gz|Z)}%.<->*} + 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 ) + fi + + (( $#manpath )) || manpath=( ${(s.:.)$(manpath 2>/dev/null)} ) || + 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)) + + if [[ $words[2] = (<->*|1M|l|n) ]]; then + dirs=( $^manpath/(sman|man|cat)${words[2]}/ ) + awk="\$2 == \"$words[2]\" {print \$1}" + else + dirs=( $^manpath/(sman|man|cat)*/ ) + awk='{print $1}' + fi + + _wanted manuals expl 'manual page' _man_pages +} + +_man_pages() { + local matcher pages dummy + + zparseopts -E M+:=matcher + + if (( $#matcher )); then + matcher=( ${matcher:#-M} ) + matcher="$matcher" + else + matcher= + fi + + pages=( $dirs ) + compfiles -p pages '' '' "$matcher" '' dummy '*' + + pages=( $~pages(:t:r) ) + + (($#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%.<->*} +} + +_man "$@" -- Sven Wischnowsky wischnow@informatik.hu-berlin.de