home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- # $Header: /home/jerry/.bin/RCS/nx,v 1.8 92/08/09 23:26:34 jerry mh_contrib $
- ### nx - remove current message after 1 minute; show next message now
- ### Usage: nx [-noverbose]
- ### mrm - remove current message after 1 minute
- ### Usage: mrm [-noverbose]
- ##
- ## IF YOU HAVE MH SET TO annoTATE A MESSAGE THAT YOU'RE REPLYING TO
- ## OR FORWARDING, AND YOU DO SOMETHING LIKE THIS:
- ## % repl
- ## ...do the reply...
- ## What now? push
- ## % rmm
- ## % next
- ## YOU CAN GET ERROR MESSAGES FROM THE BACKGROUND LIKE:
- ## Unable to rename 56 to ,56; continuing...
- ## OR WORSE.
- ##
- ## mrm AND nx WORK AROUND THIS PROBLEM BY KEEPING TRACK OF THE CURRENT
- ## MESSAGE NUMBER AND FOLDER -- IT STARTS A BACKGROUND JOB THAT DELETES
- ## THE MESSAGE AFTER A SET TIME (NOW, IT'S 60 SECONDS).
- ## nx ALSO DOES THE MH next COMMAND TO SHOW THE NEXT MESSAGE -- GOOD
- ## WHEN YOU'RE READING NEW MAIL MESSAGES.
- ##
- ## TO KEEP FROM MESSING UP THE CURRENT CONTEXT WHEN IT REMOVES THE
- ## MESSAGE, mrm & nx MAKE A NEW MH CONTEXT FILE IN /tmp BEFORE
- ## DROPPING ITSELF INTO THE BACKGROUND. THIS MEANS THAT mrm & nx CAN
- ## "REMEMBER" THE CURRENT FOLDER (IN THE NEW
- ## context FILE) AND REMOVE THE OLD MESSAGE ANY TIME THEY WANT,
- ## WITHOUT AFFECTING THE MH SYSTEM RUNNING UNDER THE REAL $HOME.
- #
- # TO INSTALL, PUT IN A FILE NAMED nx AND LINK mrm TO THAT FILE:
- # % ln nx mrm
- #
- # NOTE TO HACKERS: TABSTOPS IN THIS CODE ARE SET AT 4.
- #
- # USE AT YOUR OWN RISK. SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
- # PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
-
- mh=/usr/local/mh
- stime=60 # HOW LONG TO WAIT BEFORE REMOVING MESSAGE
-
- case "$0" in
- *mrm) ;;
- *nx) shownext=yep ;;
- *) echo "$0: Help! I don't know how to run myself!?!" 1>&2
- exit 1
- ;;
- esac
-
- case "$1" in
- -n*) shutup=yes ;;
- "") ;;
- *) echo "Usage: `basename $0` [-n(overbose)]" 1>&2 ; exit 1 ;;
- esac
-
- msgpath="`$mh/mhpath cur`"
- if test $? -ne 0 -o \( ! -f $msgpath \)
- then
- echo "`basename $0`: can't find message to remove." 1>&2
- exit 1
- fi
-
- case "$shutup" in
- "") echo "Removing $msgpath in background..." 1>&2 ;;
- esac
-
- # FOR FASTER RESPONSE, DO AS MUCH WORK AS WE CAN IN THE BACKGROUND...
- (temp=/tmp/NX.err$$
- exec 1> $temp 2>&1 # THROW ALL OUTPUT INTO $temp
-
- # DO THIS IN A LONG CHAIN OF ifS SO WE ALWAYS LEAVE IF SOMETHING BOMBS.
- # (I TRIED A trap, BUT THE SUB-SHELL exit DIDN'T SPRING IT.)
-
- # PUT FOLDER NAME IN $folder AND MESSAGE NUMBER IN $msg:
- eval `echo $msgpath | sed 's@^\(.*\)/\([1-9][0-9]*\)@folder=\1 msg=\2@'`
- # IF THAT WORKED, NOW SET OUR TEMPORARY CURRENT FOLDER & MESSAGE
- # NUMBER.
- if [ ! -d "$folder" -o ! -f "$folder/$msg" ]
- then
- # BARF ERROR INTO MAIL MESSAGE AND QUIT:
- echo "Quitting early: bad directory '$folder'
- and/or file '$msg'
- in $msgpath."
- else
- # MAKE TEMPORARY CONTEXT FILE:
- ctx=/tmp/NX$$
- echo "Current-Folder: $folder" >$ctx || exit 1
-
- sleep $stime
- MHCONTEXT=$ctx $mh/rmm $msg
- fi
-
- # IF $temp HAS ANYTHING IN IT, MAIL THE ERROR (UNDER 4.3BSD, WE CAN'T
- # JUST WRITE TO SCREEN; ANYWAY, USER MIGHT HAVE LOGGED OFF):
- test -s $temp && $mh/mhmail $USER -s "$0 ERROR rmm-ing $msgpath" <$temp
- /bin/rm -f $temp $ctx
- exit
- ) &
-
- case "$shownext" in
- yep) $mh/next ;;
- esac
-