Hi,
Just to post the solution I've finally adopted, in case anyone comes
across this and wants to cut and paste. Seems to work fine.
I actually now feed two different blacklists locally, because one is a
mailing list that moves a lot faster than the other stuff, so it makes
sense to crop that more often. Incidentally, I don't know what a
reasonable length to crop would be, given that procmail has to process
the recipe (I know I had to bump up LINEBUF). I just guessed.
I realized I need the References and not just the Message-ID if I want
to be able to ignore threads after a few messages have passed, and I
also need "References", not "In-reply-to" in the procmailrc to catch replies
after the
first one (duh, should have looked at Kyle's message more closely).
.muttrc:
folder-hook . 'macro index "I" "<pipe-message>/usr/bin/formail -c -z -x
References -x Message-ID | cut -d\">\" -f1 | tr -d \"<\" >>
~/.mutt/ignore_all<enter><delete-thread>" "ignore thread"'
folder-hook =isomerica/r-help 'macro index "I" "<pipe-message>/usr/bin/formail
-c -z -x References -x Message-ID | cut -d\">\" -f1 | tr -d \"<\" >>
~/.mutt/ignore_r<enter><delete-thread>" "ignore thread"'
Shell script that crops, sets flags, removes duplicates and if
necessary uploads changes to the server
#!/bin/bash
IGNOREFILE=$HOME/.mutt/ignorelist
RIGNORE=$HOME/.mutt/ignore_r
RFLAG=$HOME/.mutt/.ignoreflag_r
ALLIGNORE=$HOME/.mutt/ignore_all
ALLFLAG=$HOME/.mutt/.ignoreflag_all
SERVER=server.name.here
if [ "$RIGNORE" -nt "$RFLAG" ] || [ "$ALLIGNORE" -nt "$ALLFLAG" ]; then
ping -c1 $SERVER > /dev/null 2>&1
if [ $? != 0 ] ; then
exit 0
else
{ rm "$ALLIGNORE" && awk '!x[$0]++' > "$ALLIGNORE"; } < "$ALLIGNORE" ||
exit 1
while [ "$(wc -l $ALLIGNORE | cut -d ' ' -f 1)" -gt 40 ]; do
/bin/sed -i '1d' "$ALLIGNORE"
done
cat "$ALLIGNORE" > "$IGNOREFILE" || exit 1
{ rm "$RIGNORE" && awk '!x[$0]++' > "$RIGNORE"; } < "$RIGNORE" || exit 1
while [ "$(wc -l $RIGNORE | cut -d ' ' -f 1)" -gt 110 ]; do
/bin/sed -i '1d' "$RIGNORE"
done
cat "$RIGNORE" >> "$IGNOREFILE" || exit 1
rsync --times $IGNOREFILE $SERVER:.procmail/ignorelist && touch
"$RFLAG" && touch "$ALLFLAG"
fi
fi
.procmailrc:
IGNORETHREADLIST=cat $HOME/.procmail/ignorelist | tr -d " " | tr "\n" "|" | sed
's/|$//'
:0
* $ ^References:.*($IGNORETHREADLIST).*
*
!(^(To|Cc).*(my|email|adresses).*)
inbox/.ignored-threads/
Thanks again for your help,
m.