[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[O] org-contacts from bbdb: a starting solution
From: |
Wes Hardaker |
Subject: |
[O] org-contacts from bbdb: a starting solution |
Date: |
Tue, 08 Mar 2011 12:51:38 -0800 |
User-agent: |
Gnus/5.110012 (No Gnus v0.12) Emacs/23.2 (gnu/linux) |
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)
- [O] org-contacts from bbdb: a starting solution,
Wes Hardaker <=