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.

Reply via email to