<<< Date Index >>>     <<< Thread Index >>>

Re: multi-hook send-hooks



* On 2006.05.03, in <20060503153619.GE22406@xxxxxxxxxxxx>,
*   "Eric Smith" <es@xxxxxxxxxxxx> wrote:
> Is it possible to read all the email addresses I want to hook
> from a file or list rather than this awkard and difficult to
> maintain notation:
> 
> send-hook "~C (dsdf@xxxxxxxxxx\\|another@xxxxxxxxx\\|...) set whatever

In general, you can do this with a script that generates the muttrc
commands:
    source "the_script |"


I have such a script that I used for generating tag patterns for junk
mail.  I call it "killfile.pl" because it essentially generates (live,
from an on-disk source list) a set of patterns that I want to kill.
But you can use it for your purpose, too.

Here's a killfile.pl input file:
    [send-hook "%p" set whatever]
    ~C dsdf@xxxxxxxxxx
    ~C another@xxxxxxxxx
    ~C more@xxxxxxxxxxx

I name that "~/.mutt/killfile.test", and then put this in my .muttrc:
    source "killfile.pl test |"

Killfile.pl munges the killfile.test file into:
    send-hook "(~C dsdf@xxxxxxxxxx) | (~C another@xxxxxxxxx) | (~C 
more@xxxxxxxxxxx)" set whatever

... which is functionally equivalent to what you asked about above.


Details:

Lines in a killfile.foo file that are [enclosed in square brackets]
indicate a template for upcoming lines.  Other lines are valid and
complete mutt patterns, like "~C dsdf@xxxxxxxxxx" or "~y logs ~s
cron".  Killfile.pl's role is to combine as many of these patterns
as possible into a single instance of the "template" line, where the
pattern represented by %p is a compound OR expression that includes all
the patterns.  If you have a lot of patterns, killfile.pl might generate
multiple lines of the template, because muttrc lines can only be 1024
characters long.


For a set of send-hooks, you probably want to put
    source "killfile.pl hooks |"
in your .muttrc directly.  But for other purposes, it might be more
useful to bind that to a macro.  For example, my killfile pattern file
looks like this:

    [push "<tag-pattern>%p<enter>"]
    ~t MAILER-DAEMON@
    ~f krypton              ~s 'Output from .cron. command'
    ~f mailman-owner        ~s '^(Illegal|Listhost)'
    ~f news                 ~s '^okaybye|^control.pl'
    ~f root                 ~s '^Accounting'
    ...

And I have the source command in a macro:

macro index \;j "<enter-command>source '$HOME/.mutt/killfile.pl junk |'<enter>" 
"Delete junk mail."

-- 
 -D.    dgc@xxxxxxxxxxxx        NSIT    University of Chicago

Attachment: killfile.pl
Description: Perl program