I finally decided to take a wack at a bbdb to org-contacts converter. I'm attaching the file below. It should prompt for a file and insert all your existing bbdb records into the file using the formats and fields that I decided was appropriate ;-)
(require 'bbdb-to-org-contacts) M-x bbdb-to-org-contacts Now... I've been using bbdb for a very very long time. That means that I have a lot of records. That means that this was a good chance to find out how well org-contacts scales. The sad news is that it doesn't. Once I point org-contacts at my newly generated file containing 831 records it make org-contacts really really slow down. I wouldn't care about the normal record searching process for just looking something up, but it makes loading a message in gnus unusable (5 second delay per message). So... I need to filter down to "current ones I need to keep" or we need to optimize the contacts a bit to cache file points where a record for a given email address is stored or something. -- Wes Hardaker My Pictures: http://capturedonearth.com/ My Thoughts: http://pontifications.hardakers.net/
(require 'bbdb) (require 'bbdb-com) (defvar bbdb-to-org-contacts-record-prefix "***") (defvar bbdb-to-org-contacts-record-blanks " ") (defun bbdb-to-org-contacts (to-file) "outputs a org-contacts file" (interactive (list (read-file-name "Save in file: "))) (let* ((filename (expand-file-name to-file)) (records (bbdb-records))) (find-file filename) (while records (bbdb-record-to-org-record (car records)) (setq records (cdr records))) )) (defun bbdb-record-to-org-record (record) "converts a single record" (let* ( (name (bbdb-record-name record)) (company (bbdb-record-company record)) (net (bbdb-record-net record)) (aka (bbdb-record-aka record)) (phone (bbdb-record-phones record)) (address (bbdb-record-addresses record)) (notes (bbdb-record-notes record)) ) (insert (format "%s %s\n" bbdb-to-org-contacts-record-prefix name)) (insert (format "%s :PROPERTIES:\n" bbdb-to-org-contacts-record-blanks)) (when aka (insert (format "%s :AKA:\t%s\n" bbdb-to-org-contacts-record-blanks (mapconcat (function (lambda(str) str)) aka ", ")))) (when net (insert (format "%s :EMAIL:\t%s\n" bbdb-to-org-contacts-record-blanks (mapconcat (function (lambda(str) str)) net " ")))) (when company (insert (format "%s :COMPANY:\t%s\n" bbdb-to-org-contacts-record-blanks company))) (when phone (insert (mapconcat (function (lambda(rec) (if (stringp (elt rec 1)) (format "%s :PHONE_%s:\t%s" bbdb-to-org-contacts-record-blanks (upcase (elt rec 0)) (elt rec 1)) (let ((len (length rec)) (count 2) (output (format "%d" (elt rec 1)))) (while (< count (1- len)) (setq output (concat output (format "-%d" (elt rec count)))) (setq count (1+ count))) (format "%s :PHONE_%s:\t%s" bbdb-to-org-contacts-record-blanks (upcase (elt rec 0)) output))))) phone "\n")) (insert "\n")) (when notes (insert (format "%s :NOTES:\t%s\n" bbdb-to-org-contacts-record-blanks notes))) (insert (format "%s :END:\n" bbdb-to-org-contacts-record-blanks)) )) (provide 'bbdb-to-org-contacts)