aboutsummaryrefslogtreecommitdiffhomepage
path: root/emacs/notmuch-address.el
diff options
context:
space:
mode:
authorGravatar Daniel Bergey <bergey@alum.mit.edu>2013-03-31 14:20:15 -0400
committerGravatar David Bremner <bremner@debian.org>2013-04-06 08:36:54 -0300
commit238bf4cb09423cac4efa968e70184daad39e2846 (patch)
tree09b9fefb3574a2bb39b9fc15477b4123612e0600 /emacs/notmuch-address.el
parent02cb7cf1523e82363a229924873464debf3328dc (diff)
emacs: functions to import sender or recipient into BBDB
From a show buffer, notmuch-bbdb/snarf-from imports the sender into bbdb. notmuch-bbdb/snarf-to imports all recipients. Newly imported contacts are reported in the minibuffer / Messages buffer. Both functions use the BBDB parser to recognize email address formats.
Diffstat (limited to 'emacs/notmuch-address.el')
-rw-r--r--emacs/notmuch-address.el41
1 files changed, 41 insertions, 0 deletions
diff --git a/emacs/notmuch-address.el b/emacs/notmuch-address.el
index 2bf762ba..32c84909 100644
--- a/emacs/notmuch-address.el
+++ b/emacs/notmuch-address.el
@@ -96,6 +96,47 @@ line."
(when (notmuch-address-locate-command notmuch-address-command)
(notmuch-address-message-insinuate))
+;; functions to add sender / recipients to BBDB
+
+(defun notmuch-bbdb/snarf-headers (headers)
+ ;; Helper function to avoid code duplication in the two below
+ ;; headers should have the same format as bbdb-get-addresses-headers
+
+ ;; bbdb-get-addresses reads these
+ ;; Ugh, pass-by-global
+ (let ((addrs (bbdb-get-addresses nil nil 'notmuch-bbdb/get-header-content))
+ (bbdb-get-addresses-headers headers) ; headers to read
+ (bbdb-gag-messages t)) ; suppress m/n processed message)
+ (bbdb-update-records addrs t t))
+
+ (defun notmuch-bbdb/snarf-from ()
+ "Import the sender of the current message into BBDB"
+ (interactive)
+ (notmuch-bbdb/snarf-headers
+ (list (assoc 'authors bbdb-get-addresses-headers))))
+
+(defun notmuch-bbdb/snarf-to ()
+ "Import all recipients of the current message into BBDB"
+ (interactive)
+ (notmuch-bbdb/snarf-headers
+ (list (assoc 'recipients bbdb-get-addresses-headers))))
+
+(defvar notmuch-bbdb/header-by-name
+ ;; both are case sensitive
+ '( ("From" . :From)
+ ("To" . :To)
+ ("CC" . :Cc)
+ ("BCC" . :Bcc)
+ ("Resent-From" . nil)
+ ("Reply-To" . nil)
+ ("Resent-To" . nil)
+ ("Resent-CC" . nil))
+ "Alist for dispatching header symbols as used by notmuch-show-get-header
+from strings as used by bbdb-get-addresses")
+
+(defun notmuch-bbdb/get-header-content (name)
+ (notmuch-show-get-header (cdr (assoc name notmuch-bbdb/header-by-name))))
+
;;
(provide 'notmuch-address)