I've updated the IMAP utility that I mentioned previously, which has now been given the name sift. It will accept, and process, a much simpler configuration file format keeping state as it goes.
Here's my updated sample file:
username: blah.bah password: pas.word # # Comments are fine. # folder:livejournal status:new subject:temp mark:read exec:~/bin/notify folder:foo status:new mark:read folder:bar status:old exec:/usr/local/bin/record delete
Each line consists of a set of tokens, split by whitespace, which is "executed" in order.
So the first line selects the folder "livejournal", finds messages which are "new", then each message containing "temp" in the subject is marked as read, and the program "notify" is executed once for each match.
Essentially we keep a list of messages as "current" as we process each line, that list of messages is then refined as we move through the line. (When a folder is opened all messages are selected by default.)
As a simple example to delete all the messages contained in a folder we'd use this:
To refine that to only delete messages from "fred" we'd say:
folder:foo from:fred delete
(If there were no matches the "delete" action wouldn't occur.)
Consider each line of input a collection of filters each operating on the previous result. Simple to understand, simple to extend with more operations, and simple for me to code!
TODO: Add a "move:xxx" to move a message to folder "xxx", and a bit more polish, then release.