#!/bin/rc
#
# Move the message shown in the Acme or o/live window
# where it runs, or messages named in std. input.
rfork e
if(~ $#file 0 && ~ $#winid 0 ){
echo must run under o/live or acme >[1=2]
exit fail
}
if(~ $#* 0){
echo usage: Mvmesg char ... >[1=2]
exit usage
}
chr=$1 ; shift
if(! ~$#* 0){
for(f in $*)
echo $f | $0 $chr >/dev/null
exit ''
}
if(~ $#file 0)
file = `{cat /mnt/acme/$winid/tag | sed 's/ .*//'}
if not
file=`{echo $file | sed 's/\[(.*)[\] ] ?.*/\1/'}
switch($file){
case */text
d=`{echo $file | sed 's,/text,,'}
if (! test -d $d || ! ~ $d /mail/box/$user/* ) {
echo $d is not a mail directory
exit not
}
dd=`{basename -d $d}
dn=`{basename $d}
# touch "text" to let other programs know this file is new
# e.g., let content search tools re-index the file for this new path
mv $dd/$dn $dd/$chr.$dn && touch $dd/$chr.$dn/text >[2]/dev/null
if(! ~ $#winid 0){
echo clean >/mnt/acme/$winid/ctl
echo del >/mnt/acme/$winid/ctl
}
case /mail/box/$user/*
d=`{pwd}
tee /tmp/mvmesg.$pid | \
sed 's,(.* )?(20[0-9][0-9][0-9][0-9])/([^0-9]?\.?)([0-9]*)/text.*,mv \2/\3\4 \2/'^$chr^'.\4,' | \
rc >[2]/dev/null
cat /tmp/mvmesg.$pid | sed 'sx([0-9])/[a-z]?\.?([0-9])x\1/'^$chr^'.\2x'
mv /tmp/mvmesg.$pid /tmp/mvmesg.$user # in case we want to undo...
case *
echo Mail command in a strange place?
echo file was $file
}
# plumb a mail event so mail list is updated
# for those not running mailplumb.
if(! ~ $#winid 0)
plumb -s plumb -d seemail -t text \
-a 'filetype=vwhois mailtype=delete sender=any' /mail/box/$user/msgs
exit ''
|