Sebastian Lipp <bacuh@riseup.net> writes: >Tomi Ollila <tomi.ollila@iki.fi> writes: >> On Tue, Apr 09 2013, David Bremner wrote: >>> There seems to be a few warnings: >>> >>> In notmuch-bbdb/snarf-from: >>> notmuch-address.el:116:26:Warning: reference to free variable >>> `bbdb-get-addresses-headers' >>> >>> In notmuch-bbdb/snarf-to: >>> notmuch-address.el:122:29:Warning: reference to free variable >>> `bbdb-get-addresses-headers' >>> >>> In end of data: >>> notmuch-address.el:143:1:Warning: the following functions are not known to be >>> defined: bbdb-get-addresses, bbdb-update-records, notmuch-show-get-header >>> >>> Do we need a few defvars? >> >> For the above set, something like: >> >> (defvar bbdb-get-addresses-headers) >> >> (declare-function notmuch-show-get-header "notmuch-show" (header &optional props)) >> >> (declare-function bbdb-get-addresses "bbdb-com" >> (only-first-address >> uninteresting-senders >> get-header-content-function >> &rest get-header-content-function-args)) >> >> (declare-function bbdb-update-records "bbdb-com" (addrs auto-create-p offer-to-create)) > >As I'd like to see this in notmuch I made the change. The patch is >attached. As it is my first contribution to notmuch at all: Just tell me >if I'm supposed to do it in any other way. I think your patch includes much more than just the above, though. (It helps to include a log message with the patch -- then people can see what you intended the code change to be, and compare that against the code change the patch actually makes.) >diff --git a/emacs/notmuch-address.el b/emacs/notmuch-address.el >index fa65cd5..ee7b169 100644 >--- a/emacs/notmuch-address.el >+++ b/emacs/notmuch-address.el >@@ -113,6 +113,59 @@ to know how address selection is made by default." > (when (notmuch-address-locate-command notmuch-address-command) > (notmuch-address-message-insinuate)) > >+;; functions to add sender / recipients to BBDB >+ >+(defvar bbdb-get-addresses-headers) I think it's good to include an initial value (even an invalid placeholder one, if the real initialization has not happened yet), and a doc string. C-h f defvar RET will say more about how to do that. (By the way, this isn't a user-customizeable variable, right? If it were, then `defcustom' would be better than `defvar'.) >+(declare-function notmuch-show-get-header "notmuch-show" (header &optional props)) >+ >+(declare-function bbdb-get-addresses "bbdb-com" >+ (only-first-address >+ uninteresting-senders >+ get-header-content-function >+ &rest get-header-content-function-args)) >+ >+(declare-function bbdb-update-records "bbdb-com" (addrs auto-create-p offer-to-create)) At this point, your patch has accomplished what Tomi originally suggested. But then the patch continues with what looks like substantive new code: >+(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)))) It looks like new code, but I suspect what actually happened is that this is just the original code, somehow mis-expressed as "+" lines in the patch. Is that what happened? Best, -Karl