about summary refs log tree commit diff
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
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.
-rw-r--r--ChangeLog12
-rw-r--r--Completion/Unix/Command/_man59
-rw-r--r--Completion/Zsh/Command/_zstyle1
-rw-r--r--Doc/Zsh/compsys.yo9
4 files changed, 69 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 5a44b2750..671afac4e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,18 @@
         * unposted: zshconfig.ac: get rid of evil -Wno-implicit
         in CFLAGS.
 
+	* Sven: 16426: Completion/Unix/Command/_man,
+        Completion/Zsh/Command/_zstyle, Doc/Zsh/compsys.yo: allow
+        manual pages to be shown separated by section with new
+        separate-sections style
+
+	* 17266: Completion/Unix/Command/_man: check `manpath`
+        even when $MANPATH is set.
+
+        * Bart: users/4157 (plus workers/15674):
+	Completion/Unix/Command/_man: Better handling of section
+	numbers.
+
 2002-05-28  Clint Adams  <clint@zsh.org>
 
         * 17244: Completion/Debian/Command/_dpkg:
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
diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo
index 580b7c43c..61c153dca 100644
--- a/Doc/Zsh/compsys.yo
+++ b/Doc/Zsh/compsys.yo
@@ -1892,6 +1892,15 @@ negative number to scroll by the number of lines of the screen minus
 that number (or plus the number, since it is negative).  The default is to
 scroll by single lines.
 )
+kindex(separate-sections, completion style)
+item(tt(separate-sections))(
+This style is used with the tt(manuals) tag when completing names of
+manual pages.  If it is `true', entries for different sections are
+added separately using tag names of the form `tt(manual.)var(X)',
+where var(X) is the section number.  This means that it is possible to
+make pages from different sections be listed separately by setting the
+tt(group-name) style.  The default for this style is `false'.
+)
 kindex(single-ignored, completion style)
 item(tt(single-ignored))(
 This is used by the tt(_ignored) completer.  It specifies what