Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm
Precedence: bulk
X-No-Archive: yes
List-Id: Zsh Workers List <zsh-workers.zsh.org>
List-Post: <mailto:zsh-workers@zsh.org>
List-Help: <mailto:zsh-workers-help@zsh.org>
X-Qmail-Scanner-Diagnostics: from hermes.apache.org by f.primenet.com.au (envelope-from <danielsh@apache.org>, uid 7791) with qmail-scanner-2.11 
 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1.  
 Clear:RC:0(140.211.11.3):SA:0(-1.3/5.0):. 
 Processed in 0.232393 secs); 31 Jul 2016 16:23:25 -0000
X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au
X-Spam-Level: 
X-Spam-Status: No, score=-1.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,
	RP_MATCHES_RCVD autolearn=unavailable autolearn_force=no version=3.4.1
X-Envelope-From: danielsh@apache.org
X-Qmail-Scanner-Mime-Attachments: |
X-Qmail-Scanner-Zip-Files: |
Received-SPF: none (ns1.primenet.com.au: domain at apache.org does not designate permitted sender hosts)
Date: Sun, 31 Jul 2016 16:23:21 +0000
From: Daniel Shahaf <d.s@daniel.shahaf.name>
To: zsh-workers@zsh.org
Subject: Re: [patch] _man: Support directories with suffixes
Message-ID: <20160731162321.GA26612@tarsus.local2>
References: <20160519050725.GD94229@CptOrmolo.darkstar>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="CE+1k2dSO48ffgeK"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20160519050725.GD94229@CptOrmolo.darkstar>
User-Agent: Mutt/1.5.23 (2014-03-12)
X-Seq: zsh-workers 38981

--CE+1k2dSO48ffgeK
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

This hasn't been committed.

Matthew Martin wrote on Thu, May 19, 2016 at 00:07:25 -0500:
> I couldn't figure out what was the purpose for using $~sect, so I just
> dropped the tilde.

I found it:

       -S list, -s list, --sections=list
              List is a colon- or comma-separated list of `order specific'
              manual sections to search.  This option overrides the $MANSECT
              environment variable.  (The -s spelling is for compatibility
              with System V.)

That's on linux; the 'else if' branch just above the diff context
implements that syntax.

896f43c broke that syntax too: the new %% causes a pattern syntax
error.  Your patch doesn't fix this problem (since it keeps the %%).

I'm therefore attaching an alternative patch which I believe will fix
both that issue and the issue you originally saw:

> 896f43c broke completion for man 3p <tab> on OpenBSD because those man
> pages are in /usr/share/man/man3p.

Testing on various OSes would be appreciated.

Thanks,

Daniel

> 
> 
> diff --git a/Completion/Unix/Command/_man b/Completion/Unix/Command/_man
> index 0534db7..9aec833 100644
> --- a/Completion/Unix/Command/_man
> +++ b/Completion/Unix/Command/_man
> @@ -52,7 +52,7 @@ _man() {
>    fi
>  
>    if [[ $sect = (<->*|1M|l|n) || $sect = \(*\|*\) ]]; then
> -    dirs=( $^_manpath/(sman|man|cat)${~sect%%[^0-9]#}/ )
> +    dirs=( $^_manpath/(sman|man|cat)($sect|${sect%%[^0-9]#})/ )
>      awk="\$2 == \"$sect\" {print \$1}"
>    else
>      dirs=( $^_manpath/(sman|man|cat)*/ )
> 

--CE+1k2dSO48ffgeK
Content-Type: text/x-diff; charset=utf-8
Content-Disposition: attachment; filename="0001-_man-Followup-to-37634-unbreak-OpenBSD-man-3p-and-Li.patch"

>From 6d635d29d6378c4b320a5c1561f5a2d0630e1932 Mon Sep 17 00:00:00 2001
From: Daniel Shahaf <d.s@daniel.shahaf.name>
Date: Sun, 31 Jul 2016 12:36:55 +0000
Subject: [PATCH] _man: Followup to 37634: unbreak OpenBSD 'man 3p' and Linux
 $MANSECT.

The breakage was reported in 38516.
---
 Completion/Unix/Command/_man | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/Completion/Unix/Command/_man b/Completion/Unix/Command/_man
index 5ace087..0b427d2 100644
--- a/Completion/Unix/Command/_man
+++ b/Completion/Unix/Command/_man
@@ -44,15 +44,21 @@ _man() {
   if [[ $OSTYPE = solaris* ]]; then
     sect=${${words[(R)-s*]#-s}:-$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
+    sect="${sect//:/|}"
+    sect="${sect//,/|}"
   elif (( CURRENT > 2 )); then
     sect=$words[2]
   fi
 
-  if [[ $sect = (<->*|1M|l|n) || $sect = \(*\|*\) ]]; then
-    dirs=( $^_manpath/(sman|man|cat)${~sect%%[^0-9]#}/ )
+  if [[ $sect = (<->*|1M|l|n) || $sect = *\|* ]]; then
+    () {
+      local -a sects=( ${(s.|.)sect} )
+      if [[ $sect != (l|n) ]]; then
+        sects=( ${sects%%[^0-9]#} )
+      fi
+      dirs=( $^_manpath/(sman|man|cat)${^sects}*/ )
+    }
+    if [[ $sect == *\|* ]]; then sect="($sect)"; fi
     awk="\$2 == \"$sect\" {print \$1}"
   else
     dirs=( $^_manpath/(sman|man|cat)*/ )

--CE+1k2dSO48ffgeK--

