I'd feel guilty if I let a release cycle go by without making at least
one contribution.

I use 'man mh-chart' pretty often when I'm trying to remember the name
of a seldom-used command.  The other day I couldn't remember the name
of the mh-format man page, and was surprised when mh-chart didn't
have all of the section 5 and 7 nmh pages listed.

I could have just added their names to "SEE ALSO", but that wouldn't
have gotten me descriptions, which is sort of the point of mh-chart.

So I have a patch to mh-chart-gen.sh which auto-generates the SEE ALSO
section.  The results look like this (bolding removed for email).

SEE ALSO
       mh-alias(5)
              format of nmh email-address alias files
       mh-draft(5)
              draft folder facility for nmh message system
       mh-folders(5)
              storage format used by nmh message system
       mh-format(5)
              formatting language for nmh message system
       mh-mail(5)
              message format for nmh message system
       mh-profile, mh_profile(5)
              user customization for nmh message handler
       mh-sequence(5)
              sequence specification for nmh message system
       mh-tailor, mts.conf(5)
              mail transport configuration for nmh message handler
       mh-mime(7)
              overview of nmh MIME message composition and display
       nmh(7)
              overview of the new MH message system

I believe my script changes are "old shell" compatible, if not
"ancient shell" compatible.  I get the same output if I run it with
either "bash --posix" or "ash".

I'll attach the new script.  I'm happy to tweak it, but I might prefer
doing it after the initial copy is in git.

In addition to the changes to mh-chart-gen.sh itself, there were three
small changes to man pages to make mh-chart look and work a little
better:
    - added "overview of the" to the description in nmh(7)
    - added "mh_profile" as a synonym name in mh-profile(5)/mh_profile(5)
    - changed "mh\-mime" to "mh-mime" in the NAME block of mh-mime(7). 
        None of the other mh-* man pages have that hyphen, and my
        script changes were doubling it up.

paul
=----------------------
 paul fox, p...@foxharp.boston.ma.us (arlington, ma, where it's 59.9 degrees)

#!/bin/sh
#
# Generates mh-chart.man from other .man files that have a SYNOPSIS
# section.
#
# This code is Copyright (c) 2012, by the authors of nmh.
# See the COPYRIGHT file in the root directory of the nmh
# distribution for complete copyright information.

nmhmandir=`dirname $0`

# The following ensures the generated date field in the manpage is divorced
# from the local build environment when building distribution packages.
LC_TIME=C; export LC_TIME
unset LANG
datestamp=`date +%Y-%m-%d`

cat <<__HOOPY_FROOD
.TH MH-CHART %manext7% "${datestamp}" "%nmhversion%"
.
.\" %nmhwarning%
.
.SH NAME
mh-chart \- chart of nmh commands and their options
.SH SYNOPSIS
.na
__HOOPY_FROOD

for i in $nmhmandir/*.man; do
  case $i in
    */mh-chart.man) ;;
    *) if grep '^\.SH SYNOPSIS' "$i" >/dev/null; then
         #### Extract lines from just after .SH SYNOPSIS to just before .ad.
         #### Filter out the "typical usage:" section in pick.man.
         awk '/.SH SYNOPSIS/,/^(\.ad|typical usage:)/ {
                if ($0 !~ /^(\.SH SYNOPSIS|\.na|\.ad|typical usage:)/) print
              }' "$i"
         echo
       elif sed 1p $i | grep '^\.so man'  >/dev/null
       then  
	 : skip one-line pages that just include others
       else
	 # pages without SYNOPSIS are section 5 and 7
	 see_also="$see_also $i"
       fi ;;
  esac
done

echo '.SH "SEE ALSO"'
for i in $see_also
do
    # extract the section number from the first (.TH) line
    section=`sed -n '1s/.*manext\([1-7]\).*/\1/p' $i`

    # get the name and description.
    name_desc=`grep -A1 '^\.SH NAME' "$i" | grep -v '^\.SH NAME'`

    # isolate the name(s) (note:  some pages (mh_tailor/mts.conf) have
    # two names, so everything up to the \- is name(s)
    name=`echo $name_desc | sed -n 's/\(.*\) \\\\-.*/\1/p'`
    # escape spaces and hyphens, since this will come after .IR
    name=`echo $name | sed 's/[- ]/\\\\&/g'`

    # everything after the \- is description
    desc=`echo $name_desc | sed -n 's/.*\\\\- \(.*\)/\1/p'`

    # sort first by section, then by name
    echo "$section.IR $name ($section)XYZZY$desc"
done | sort | sed -e 's/^[1-7]//' -e 's/XYZZY\(.*\)/\
.RS\
\1\
.RE/'

Reply via email to