#! /bin/sh # $Header: /home/jerry/.bin/RCS/pickthis,v 1.6 92/08/10 10:56:17 jerry mh_contrib $ ### pickthis - search messages (default: all) for one with same subject ### Usage: pickthis [+folder|@folder] [msgs to search] ## ## pickthis GRABS THE Subject: HEADER FROM THE CURRENT MESSAGE, ## STRIPS OFF ANY Re:, RE:, ETC. FROM THE FRONT OF THE SUBJECT, ## THEN SEARCHES FOR OTHER MESSAGES WITH THAT SUBJECT. ## IT STORES THE LIST OF MESSAGES IN THE SEQUENCE NAMED picked ## (SO YOU CAN USE THEM LATER); IT scanS THE SEQUENCE BEFORE IT QUITS. ## ## BY DEFAULT, pickthis SEARCHES ALL MESSAGES IN THE CURRENT FOLDER. ## IF YOU GIVE IT A LIST OF MESSAGES OR A FOLDER NAME, IT'LL SEARCH THOSE. # # NOTE TO HACKERS: TABSTOPS SET AT 4 IN THIS CODE # # 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 myname="`basename $0`" # GET SUBJECT OF THIS MESSAGE WITHOUT ANY Re: ON FRONT. # ESCAPE METACHARACTERS LIKE [, ], ETC.: if subj="`scan -width 300 -format '%{subject}' cur`" then subj=`echo "$subj" | sed -e ' /^[Rr][Ee]:/ { :rezap s/^[Rr][Ee]: *// /^[Rr][Ee]:/b rezap } s/\*/\\\\*/g s/\./\\\\./g s/\\$/\\\\$/g s/\]/\\\\]/g s/\[/\\\\[/g'` else echo 1>&2 "$myname quitting: can't find subject of current message: $subj" exit 1 fi for arg do case "$arg" in [+@]*) case "$gotfdr" in "") gotfdr=yes ;; *) echo "$myname quitting: '$arg': only one folder at a time!" 1>&2 exit ;; esac # MAKE SURE FOLDER EXISTS SO folder WON'T ASK "create?" (GRRRR...): if [ -d `mhpath $arg` ] then if folder -push $arg > /dev/null then # SET trap TO POP FOLDER STACK: trap 'folder -pop >/dev/null; exit' 0 trap 'echo $myname: Interrupt! Cleaning up...' 1 2 15 else echo "$myname quitting: can't push folder $arg onto stack?" 1>&2 exit 1 fi else echo "$myname quitting: folder '${arg}' doesn't exist?" exit 1 fi ;; *) range="$range $arg" ;; esac done # SEARCH FOR MESSAGE AND scan IF WE FOUND ANY. DEFAULT TO all MSGS IN FOLDER: if pick -subject "$subj" $range -seq picked then # THIS exitS WITH scan'S EXIT STATUS: scan picked exit else exit 1 fi