I've been re-reading RFC 2822 again over the weekend, for obvious reasons, and I'm amused I've not noticed this section in the past:
3.6.5. Informational fields
The informational fields are all optional. The "Keywords:" field contains a comma-separated list of one or more words or quoted-strings. The "Subject:" and "Comments:" fields are unstructured fields as defined in section 2.2.1, and therefore may contain text or folding white space.
subject = "Subject:" unstructured CRLF comments = "Comments:" unstructured CRLF keywords = "Keywords:" phrase *("," phrase) CRLF
Now we all know that emails have subjects, but how many people have ever used the Keywords: header, or the Comments: one?
It'd be nice if we could use these fields in mails - I can immediately think of "keywords" as tags, and I'm sure I'm not alone.
I've looked at multiple "tags for mutt" systems, but all of them fall down for the same reason. I can add tags to a mail, and limit a folder to those mails that contain a given tag. But I cannot do that for multiple folders and that makes them useless :(
Has anybody worked on a multi-folder tag system for Mutt? If so pointers welcome. If not I'd be tempted to create one.
I guess implementation would be very simple. There are three caeses:
- Adding a tag
- Deleting a tag
- Finding all messages with agiven tag.
The first two are easy. The second could be done by writing a cronjob to scan messages for Keyword: headers, and writing a simple index. That could then be used to populate an "~/Maildir/.tag-results" folder, via hardlinks, of all matching messages.
Better yet you could pre-populate ~/Maildir/.tag-$foo containing each message with a given tag. Then theres no searching required! (Although your cronjob would need to run often enough when the tag were added to a message it would appear there within a reasonable timeframe.
Update: I've written the indexer now. It works pretty quickly after the initial run, and is quite neat! tagging messages with mutt.
Thanks for the suggestion!
Noticing that Mutt has support for the X-Label header (and thats what every other mutt-tag system I've used has abused) I've updated my plans.
Now I've got a very hacky script which will create virtual mailboxes based on tags: index-tags-maildir.
It works for me, albeit a little slowly, but I think it proves the principle is sound. (I guess that was never in doubt).
If I can't make it much faster I'll look at the existing indexers in a while.
Also, there's a mailtags list: http://lists.madduck.net/listinfo/mailtags
Thanks for the pointers madduck, I knew I'd vaguely read them in the past.
As things stand I think that my tag indexer script will suffice for the moment (linked in the comment above). It indexes my mails in approximately 32 seconds with no cache and and 4 seconds with one present.
It doesn't solve your hierarchal needs, but I think it will work well for me. I can navigate to each folder with a particular tag, then use mutt's limit to do refined searches.
(In practise I tend to use tags sparingly "urgent", "todo", "march", etc. But I'm going to be adding tags to all incoming mails from certain people soon - and I'm hoping it will work out nicely.)
Thanks Kevin that does look neat. I think I've seen it before actually.
I'm not yet ready to remove my use of folders, and just want to augment them with tags at times, so I think I'm going to rule it out for them moment.