#! /bin/sh
# $Id: xmhprint,v 1.6 92/07/25 07:12:47 jerry book2 $
### xmhprint - print command for xmh
### Usage (in X resource): xmh*PrintCommand: xmhprint [-cmd_num]
##
## THE PRINTER SUPPORT WITH xmh ISN'T VERY GOOD.
## IT HANDS ALL YOUR MESSAGE FILES TO A PRINTER COMMAND AT ONCE.
## IT DOESN'T FILTER THEM TO REMOVE UNINTERESTING HEADER LINES.
## YOU CAN'T USE A PIPE AS PART OF THE PRINTER COMMAND BECAUSE xmh
## PUTS THE MESSAGE FILENAMES AT THE END OF THE PRINTER COMMAND LINE.
##
## THIS PROGRAM, xmhprint, TAKES MESSAGE FILENAMES(S) FROM THE
## COMMAND LINE, AS WELL AS (MAYBE) ONE OPTION.
## THE SHELL SCRIPT GETS THE MESSAGE FILENAMES FROM xmh, AND IT CAN
## PROCESS THEM ANY WAY YOU WANT IT TO.
## THE OPTIONS LET YOU CHANGE YOUR PRINT SETUP EASILY--INSTEAD OF
## STORING A COMPLICATED xmh*PrintCommand IN THE RESOURCE MANAGER,
## JUST CHANGE THE OPTION ON THE xmhprint COMMAND LINE LIKE THIS:
## xmh*PrintCommand: xmhprint -p2
##
## YOU CAN CUSTOMIZE THIS SCRIPT TO FIT YOUR NEEDS.
## ADD mhl(1) TO CLEAN UP THE MESSAGE HEADERS, USE OTHER PRINTERS,
## USE A POSTSCRIPT FILTER... GO WILD!
##
## SET YOUR SYSTEM PRINTER IN THE printcmd VARIABLE. STORE ANY
## $printcmd OPTIONS THERE, TOO -- OR SET AN ENVIRONMENT VARIABLE LIKE
## $PRINTER (IF YOUR SYSTEM HAS THAT) BEFORE STARTING xmh.
##
## lpr AND lp PRINT ERROR MESSAGES TO THE STANDARD OUTPUT INSTEAD
## OF THE STANDARD ERROR ON SOME VERSIONS OF UNIX! xmh R4 AND R5
## WILL SHOW YOU stderr MESSAGES IN A DIALOG BOX. SO, TO MAKE THAT
## WORK RIGHT WITH $printcmd, THE SCRIPT USES $printcmd 1>&2
## TO MERGE ALL PRINTER stdout ONTO stderr.
##
## NOTE TO HACKERS: TABSTOPS ARE SET AT 4 IN THIS CODE
errsubj="xmh*PrintCommand print ERROR" # FOR MAILED ERRORS
printcmd="/usr/ucb/lpr" # CAN ADD OPTIONS INSIDE QUOTES
# IN xmh RELEASE 3, MUST REDIRECT ALL OUTPUT AWAY FROM xmh.
# IN RELEASE 4 AND 5, STDERR (FD 2) GOES TO ERROR DIALOG BOX.
# UNCOMMENT THIS TO APPEND ALL OUTPUT TO FILE:
# errfile=$HOME/.xmh_printerrs
# exec >> $errfile 2>&1
# GET OPTION (xmh ALWAYS PUTS FILENAMES LAST):
case "$1" in
-p1) # JUST pr; PUTS PATHNAME IN HEADER. NOTHING FANCY:
shift
pr "$@" | $printcmd 1>&2
;;
-p2) # SHOW SUBJECT IN pr HEADER OF EACH MESSAGE:
shift
for f
do
pr -h "`sed -n '/^[sS]ubject: / {
s///p
q
}' $f`" $f
done | $printcmd 1>&2
;;
"") echo "No filenames or command line arguments!?!" |
mail -s "$errsubj" $USER
exit 1 # xmh IGNORES THIS :-(
;;
*) # DEFAULT: SEND ALL OPTIONS AND FILENAMES TO lpr:
$printcmd "$@" 1>&2
;;
esac
[Table of Contents] [Index] [Return to Explanation of xmhprint]
This file is from the third edition of the book MH & xmh: Email for Users & Programmers, ISBN 1-56592-093-7, by Jerry Peek. Copyright © 1991, 1992, 1995 by O'Reilly & Associates, Inc. This file is freely-available; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. For more information, see the file copying.htm.
Suggestions are welcome: Jerry Peek <jerry@ora.com>