Skip to content

Instantly share code, notes, and snippets.

@atomicbird
Created October 4, 2011 15:39
Show Gist options
  • Save atomicbird/1261964 to your computer and use it in GitHub Desktop.
Save atomicbird/1261964 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Convert man pages to PDF and open them in the default PDF viewer.
# PDFs are cached when created.
# By Tom Harrington, tph at atomicbird dot com, 16 March 2005
# Directory to save cached PDFs in
# (if you don't want long-term caching, you could use /tmp/).
CACHEDIR=~/Library/Caches
# Command to read PS from stdin and write PDF to an output file.
PS2PDF_CMD="/usr/bin/pstopdf -i -o"
# Command to open the resulting PDF once it's created.
OPEN_CMD="/usr/bin/open"
# Path to "man", which is expected to take the -w, -S, and -t args.
MAN_CMD="/usr/bin/man"
CACHEDIR="$CACHEDIR/manpdf"
if [ ! -e $CACHEDIR ]; then
mkdir -p $CACHEDIR
fi
if [ $# -eq 1 ]
then
MANSECT=""
MANARG=$1
elif [ $# -eq 2 ]
then
MANSECT=$1
MANARG=$2
else
echo "Usage: " `basename $0` "[section] name"
exit
fi
if [ "$MANSECT" != "" ]; then
MANSECTARG="-S $MANSECT"
fi
# Look for the command's man page.
MANFILE=`$MAN_CMD $MANSECTARG -w $MANARG 2>/dev/null`
if [ -z $MANFILE ]; then
echo No manual entry for $MANARG
exit
fi
# OK, got the man page. Now get the name for the corresponding
# PDF. The goal here is to organize cached PDFs in CACHEDIR
# according to man-page section, similar to the way /usr/share/man
# is organized into "man1", "man3", etc.
echo file: $MANFILE
MANSECT=`echo "$MANFILE" | sed 's/.*\.\([0-9]\).*/\1/'`
MANPDF=$CACHEDIR/pdf$MANSECT/$MANARG.$MANSECT.pdf
FINALDIR=`dirname $MANPDF`
echo PDF: $MANPDF
# Create the PDF if it's not in the cache dir or if the cached version is obsolete.
CREATEPDF=0
if [ ! -e $MANPDF ]; then
echo Generating man page...
CREATEPDF=1
else
if [ $MANFILE -nt $MANPDF ]; then
echo Man page newer than PDF, regenerating...
CREATEPDF=1
fi
fi
if [ $CREATEPDF -eq 1 ]; then
mkdir -p $FINALDIR
$MAN_CMD $MANSECTARG -t $MANARG | $PS2PDF_CMD $MANPDF
else
echo Reading man page from cache...
fi
# Now open the PDF.
$OPEN_CMD $MANPDF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment