about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
authorClint Adams <clint@users.sourceforge.net>2002-05-31 20:29:40 +0000
committerClint Adams <clint@users.sourceforge.net>2002-05-31 20:29:40 +0000
commit7f7f6ca1bac49513b403e604e66853ee61f8d626 (patch)
tree953326f485a7b2026ce11d4278d6d25f1408c3a6 /Completion
parentdef39b7cb78355cd855d858f204126c577b49b0e (diff)
downloadzsh-7f7f6ca1bac49513b403e604e66853ee61f8d626.tar.gz
zsh-7f7f6ca1bac49513b403e604e66853ee61f8d626.tar.xz
zsh-7f7f6ca1bac49513b403e604e66853ee61f8d626.zip
unposted: get rid of evil -Wno-implicit in CFLAGS.
16426: allow manual pages to be shown separated by section with new
separate-sections style

17266: check `manpath` even when $MANPATH is set.

users/4157 (plus workers/15674): Better handling of section numbers.
Diffstat (limited to 'Completion')
-rw-r--r--Completion/Unix/Command/_man59
-rw-r--r--Completion/Zsh/Command/_zstyle1
2 files changed, 48 insertions, 12 deletions
diff --git a/Completion/Unix/Command/_man b/Completion/Unix/Command/_man
index 0bdd8db8b..a7b014d1b 100644
--- a/Completion/Unix/Command/_man
+++ b/Completion/Unix/Command/_man
@@ -7,30 +7,65 @@ _man() {
     _files || return 0
   fi
 
-  if (( ! $#manpath )); then
+  if (( ! $#_manpath )); then
     local mp
-    mp=($(manpath 2>/dev/null))
+    mp=( ${(s.:.)$(manpath 2>/dev/null)} )
     [[ "$mp" == *:* ]] && mp=( ${(s.:.)mp} )
-    manpath=( $mp )
+    if (( $#mp )); then
+      _manpath=( $mp )
+    elif (( $#manpath )); then
+      _manpath=( $manpath )
+    fi
   fi
 
-  (( $#manpath )) || manpath=( ${(s.:.)$(manpath 2>/dev/null)} ) ||
-      manpath=( /usr/man(-/) /(opt|usr)/(dt|share|X11R6|local)/(cat|)man(-/) )
+  (( $#_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))
+  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 [[ $words[2] = (<->*|1M|l|n) ]]; then
-    dirs=( $^manpath/(sman|man|cat)${words[2]}/ )
-    awk="\$2 == \"$words[2]\" {print \$1}"
+  if [[ $sect = (<->*|1M|l|n) || $sect = \(*\|*\) ]]; then
+    dirs=( $^_manpath/(sman|man|cat)${~sect}/ )
+    awk="\$2 == \"$sect\" {print \$1}"
   else
-    dirs=( $^manpath/(sman|man|cat)*/ )
+    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
 
-  _wanted manuals expl 'manual page' _man_pages
+    _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() {
@@ -45,7 +80,7 @@ _man_pages() {
     matcher=
   fi
 
-  pages=( $dirs )
+  pages=( ${(M)dirs:#*$sect/} )
   compfiles -p pages '' '' "$matcher" '' dummy '*'
   pages=( ${^~pages}(N:t:r) )
 
diff --git a/Completion/Zsh/Command/_zstyle b/Completion/Zsh/Command/_zstyle
index 37590f0d9..9f961416a 100644
--- a/Completion/Zsh/Command/_zstyle
+++ b/Completion/Zsh/Command/_zstyle
@@ -82,6 +82,7 @@ styles=(
   remove-all-dups	 c:bool
   select-prompt          c:
   select-scroll          c:
+  separate-sections      c:bool
   single-ignored         c:single-ignored
   sort			 c:bool
   special-dirs		 c:sdirs