From: Wes Hardaker <wjhns209@hardakers.net>
To: emacs-orgmode@gnu.org
Subject: org-contacts from bbdb: a starting solution
Date: Tue, 08 Mar 2011 12:51:38 -0800 [thread overview]
Message-ID: <sdy64pfi91.fsf@wjh.hardakers.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 1153 bytes --]
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/
[-- Attachment #2: bbdb-to-org-contacts.el --]
[-- Type: text/plain, Size: 2304 bytes --]
(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)
next reply other threads:[~2011-03-08 20:51 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-08 20:51 Wes Hardaker [this message]
2011-03-09 11:46 ` org-contacts from bbdb: a starting solution Eric S Fraga
2011-03-09 15:18 ` Wes Hardaker
2011-03-10 13:07 ` Eric S Fraga
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=sdy64pfi91.fsf@wjh.hardakers.net \
--to=wjhns209@hardakers.net \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).