#! /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