#! /bin/bash

## 
## Usage: %PROG% [OPTIONS] [PAGE[(SECTION)]]
## 
##   Manual page viewer
## 
## Options:
##   -c            Center the window
##   -f COLOUR     Foreground colour
##   -b COLOUR     Background colour
##   -g GEOMETRY   Window size (e.g. 800x600)
##   -s FONT       Message font or style (e.g. 'serif 14')
## 
# trm 2006-11-16

# I, the Copyright holder of this work, hereby release it into the Public
# Domain. This applies worldwide. In case this is not legally possible, I
# grant anyone the right to use this work for any purpose, without any
# conditions, unless such conditions are required by law.
#
# 2009 Timothy Richard Musson <trmusson@gmail.com>


PROG=$(basename $0)
TMPFILE=${TMPDIR:-/tmp}/$$.$PROG
EX_USAGE=64

MSG_TITLE=$PROG
MSG_FONT=monospace
MSG_FG=
MSG_BG=
MSG_GEOM=


trap 'rm -f "$TMPFILE"' EXIT


invocationError ()
{
  echo "Try '$PROG -h'" >&2
  exit $EX_USAGE
}


showUsage ()
{
  sed -n '/^##/s/^## //p' $0 | sed -e "s#%PROG%#${PROG}#g"
  exit
}


while getopts 'b:cf:g:hs:' Option
do
  case $Option in
  b) MSG_BG=$OPTARG ;;
  c) CENTER=yes ;;
  f) MSG_FG=$OPTARG ;;
  g) MSG_GEOM=$OPTARG ;;
  h) showUsage ;;
  s) MSG_FONT=$OPTARG ;;
  *) invocationError ;;
  esac
done
shift $(($OPTIND - 1))
[ $# -gt 1 ] && invocationError

page=$1

[ -z "$page" ] && cat <<-EOF > "$TMPFILE"
	Type the name of a manual page into the box below, then
	press ENTER. To specify a manual from a particular section,
	give the section in backets. For example: printf(3)
	
	To quit, leave the box empty or press ESC.
	EOF

while :
do

  if [ -n "$page" ]
  then
    i=$(expr index "$page" '\(')
    if [ "$i" -gt 0 ]
    then
      temp=${page#*(}
      sect=${temp%)*}
      page=${page%(*}
    else
      sect=
    fi
    man $sect "$page" 2>&1 | col -b > "$TMPFILE"
  fi

  page=$(gxmessage ${MSG_FONT:+-fn "$MSG_FONT"}   \
                   ${MSG_FG:+-fg "$MSG_FG"}       \
                   ${MSG_BG:+-bg "$MSG_BG"}       \
                   ${MSG_GEOM:+-geom "$MSG_GEOM"} \
                   ${CENTER:+-center}             \
                   -title "$MSG_TITLE"            \
                   -entrytext "$word"             \
                   -buttons ""                    \
                   -file "$TMPFILE")

  [ $? -eq 1 -o -z "$page" ] && exit

done

