| 
#!/bin/rc
#TODO:
# make case folding (grep -i) optional.
# make what to search (from/to/cc/subject/body) optional?
rfork e
msgs=()
# find a text part of a multipart message (or punt)
fn findbody {
	for (subpart in `{walk | grep '/type$'}) {
		if (~ `{cat $subpart} text/*)
			multipart=($multipart `{basename -d $subpart}^/body)
	}
	if (~ $#multipart 0)
		echo body
	if not
		echo $multipart
}
# for each argument, find matching message numbers.
for (arg in $*)
	for (i in *) {
		body=body
		multipart=()
		if (~ `{cat $i/type >[2] /dev/null} multipart/*)
			body=`{cd $i && findbody}
		if (grep -is $arg $i/$body $i/subject >[2] /dev/null)
			msgs=($msgs $i)
	}
if (! ~ $#msgs 0) {
	plumb `{pwd}^/$msgs
}
 |