+;; Augment Gnus's built-in header-list abbreviations.
+(require 'nnmail)
+(setq nnmail-split-abbrev-alist
+ (mdw-uniquify-alist
+ `((to . ,(concat "to\\|cc\\|apparently-to\\|envelope-to\\|"
+ "resent-to\\|resent-cc"))
+ (any . ,(concat "from\\|sender\\|resent-from\\|"
+ "to\\|cc\\|apparently-to\\|envelope-to\\|"
+ "resent-to\\|resent-cc"))
+ ,@nnmail-split-abbrev-alist)))
+
+;; Find out about my `odin.gg' mappings.
+(defvar mdw-odin-parse-regexp
+ (concat "^"
+ "\\S-+" "\\s-+" ; time limit
+ "\\(" "\\S-+" "\\)" "\\s-+" ; local part
+ "\\S-+" "\\s-+" ; recipient email address
+ "=" "\\(" "\\S-+" "\\)" ; mailbox tag
+ "\\(" "$" "\\|" "\\s-" "\\)"))
+
+(defvar mdw-odin-splits nil)
+(defvar mdw-odin-sender-alist nil)
+
+(defun mdw-update-odin-info ()
+ (let ((splits nil) (senders nil))
+ (with-temp-buffer
+ (call-process "ssh" nil t nil
+ "stratocaster" "userv" "odin" "mail" "list")
+ (goto-char (point-min))
+ (while (< (point) (point-max))
+ (when (looking-at mdw-odin-parse-regexp)
+ (let ((local-part (match-string 1))
+ (tag (match-string 2)))
+ (push `(to ,(format "%s@odin\\.gg" local-part)
+ ,(format "crap.%s" tag))
+ splits)
+ (push (cons tag local-part) senders)))
+ (forward-line)))
+ (setq mdw-odin-splits (nreverse splits)
+ mdw-odin-sender-alist (nreverse senders))))
+(mdw-update-odin-info)
+