dot/gnus-local.el.distorted: Collect and use the `odin.gg' mapping table.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 15 Apr 2020 17:03:47 +0000 (18:03 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Wed, 15 Apr 2020 17:07:34 +0000 (18:07 +0100)
An awful hack, but it seems to work.

dot/gnus-local.el.distorted

index f2eb140..cbb9c26 100644 (file)
         (address "distorted.mdw@gmail.com")
         ("X-mdw-Send-Mail" "gmail-smtp"))))
 
+(defvar mdw-odin-parse-regexp
+  (concat "^"
+         "\\S-+" "\\s-+"               ; time limit
+         "\\(" "\\S-+" "\\)" "\\s-+"   ; local part
+         "\\S-+" "\\s-+"               ; recipient email address
+         "=" "\\(" "\\S-+" "\\)"       ; mailbox tag
+         "\\(" "$" "\\|" "\\s-" "\\)"))
+
+(defun mdw-odin-splits ()
+  (let ((list 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))
+                 list)))
+       (forward-line)))
+    (nreverse list)))
+
 ;; The actual splitting rules.
 (setq nnmail-split-fancy
-      '(|
+      `(|
          ;; Administrative boxes.
          (to "\\<\\(root\\|postgres\\|ca\\|noc\\)@" "admin.misc" t)
          (to "\\<\\(jukebox\\|nobody\\|darchive\\)@" "admin.misc" t)
          (to "\\<mdw-nospam-\\([^@]+\\)@" "crap.\\1" t)
          (to "\\<mdw-nopspam-\\([^@]+\\)@" "crap.\\1" t)
 
+         (to "\\(markw\\|mdw\\|mw\\)@odin\\.gg" "mail.misc")
+         ,@(mdw-odin-splits)
+         (to "\\([a-z0-9]+\\)@odin\\.gg" "crap.odin-misc")
+
          ;; Regular nags.
          (from "\\(sealbot\\|cardbot\\)@ncipher\\.com" "nag.cardbot")
          (from "\\<mailman-owner@" "nag.mailman" t)