managing e-mail addresses with bbdb





BBDB, the Insidious Big Brother Database is an Emacs addressbook application
that works particularly well with e-mail. It's one of the classic emacs
packages, written in 1991 by Jamie Zawinski.




Personally, I do not use BBDB as a general address book. Instead, I use it to
harvest the e-mail addresses of the people that send me mail, so that the next
time I'd like to send e-mail, I can auto-complete the names / e-mail
addresses. If you're not using some emacs-based email client, BBDB might not
be that useful in practice.



Note that other people are using BBDB for much more, see the Emacswiki-entry
for some examples of that. Here, I just give some basics to get you started;
please refer to the fine manual for all the details.







configuration






So, after you've installed bbdb (just follow the instructions; alternatively
Ubuntu/Debian users can simply install the bbdb package), we can add the
following to .emacs to set it up:





(setq bbdb-file "~/.emacs.d/bbdb")           ;; keep ~/ clean; set before loading
(require 'bbdb)
(bbdb-initialize)
(setq
bbdb-offer-save 1 ;; 1 means save-without-asking


bbdb-use-pop-up t ;; allow popups for addresses
bbdb-electric-p t ;; be disposable with SPC
bbdb-popup-target-lines 1 ;; very small

bbdb-dwim-net-address-allow-redundancy t ;; always use full name
bbdb-quiet-about-name-mismatches 2 ;; show name-mismatches 2 secs

bbdb-always-add-address t ;; add new addresses to existing...
;; ...contacts automatically
bbdb-canonicalize-redundant-nets-p t ;; x@foo.bar.cx => x@bar.cx

bbdb-completion-type nil ;; complete on anything

bbdb-complete-name-allow-cycling t ;; cycle through matches
;; this only works partially

bbbd-message-caching-enabled t ;; be fast
bbdb-use-alternate-names t ;; use AKA


bbdb-elided-display t ;; single-line addresses

;; auto-create addresses from mail
bbdb/mail-auto-create-p 'bbdb-ignore-some-messages-hook
bbdb-ignore-some-messages-alist ;; don't ask about fake addresses
;; NOTE: there can be only one entry per header (such as To, From)
;; http://flex.ee.uec.ac.jp/texi/bbdb/bbdb_11.html

'(( "From" . "no.?reply\\|DAEMON\\|daemon\\|facebookmail\\|twitter")))
)







This will set up BBDB for you. I have commented the various settings; you can
of course get more information for each of them by putting your cursor on them
(in emacs) and issuing C-h v.







integration with e-mail clients







Another important part is the integration with e-mail - which is why I am
using BBDB in the first place.



As I mentioned before, I am using the wonderful Wanderlust e-mail client for
emacs, and you can easily integrate it with BBDB by putting the following in
your .wl-file:




(require 'bbdb-wl)
(bbdb-wl-setup)

;; i don't want to store addresses from my mailing folders
(setq
bbdb-wl-folder-regexp ;; get addresses only from these folders
"^\.inbox$\\|^.sent") ;;


(define-key wl-draft-mode-map (kbd "<C-tab>") 'bbdb-complete-name)






For gnus, you'd use something like:



(add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)





(I am not using gnus myself, feel free to add you setup in the comments)



The BBDB-manual has the details for some other mail clients as well.







Use






So, we have everything set up now – but how does it work? Well, whenever you
read e-mails, BBDB stores the various e-mail addresses. Whenever you write an
e-mail, you can complete the names with M-x bbdb-complete-name, by default
bound to M-TAB. This keybinding conflicts with many window managers, which
already use M-TAB (Alt-TAB) for window switching. So, it's useful to
rebind it to something else, for example C-TAB (I already did that for
Wanderlust, in the example above).



I don't use BBDB too much directly, but you can manipulate the address; first
display one with M-x bbdb-display-address, they you can edit a field by
pressing 'e', 'd' for deleting the field or record, C-o for adding a new
field and so on – see the whole list.



interview with Chong Yidong and Stefan Monnier





Earlier this year, Chong Yidong and Stefan Monnier took over Emacs
maintainership from Richard Stallman, and they successfully completed the

Emacs 23.1 release. I asked them a couple of questions about the process,
Emacs-development and some of the plans for the future.



I'd like to thank Chong (CYD) and Stefan (SM) to take the time to answer my
(djcb) questions and even more so for doing an excellent job bringing us
Emacs 23!










djcb: First of all, could you tell us a bit about yourself? For example,
what you do when not hacking on Emacs?



CYD: I'm a postdoc in theoretical physics, specializing in photonic crystals
and other optical phenomena.



SM: I'm a professor at the University of Montréal, teaching and researching
theory of computer languages. More specifically, I design new type systems
and try and abuse existing type systems for "type based formal methods"
purposes.






djcb: Earlier this year, the two of you took over the maintainership of Emacs from
Richard Stallman. How did you get involved in hacking on Emacs? How has the
transition gone?




CYD: My first involvement in Emacs-related development was around 2004 or
2005—very recent by Emacs hacker standards—when I found myself with some
free time on my hands after college. At that time, I wrote wikipedia-mode, a
major mode for editing Wikipedia articles, plus some word-wrapping code that
eventually became longlines-mode, and patches to emacs-devel fixing a few
minor bugs. My level of involvement gradually grew, until eventually I was
helping Richard to roll the pretest tarballs for the Emacs 22 release.



Because I was quite active in the Emacs 22 release process, I've been
pretty comfortable with my role in Emacs 23. It helps, of course, that
many parts of Emacs have their own dedicated and experienced
maintainers, e.g. the major Lisp packages such as CC-mode, Gnus, and
Org-mode.




SM: I started hacking on Emacs a fairly long time ago when I was waiting to
start my PhD, but it only got more serious during my PhD when I decided that
PCL-CVS was a neat idea but unusable as it stood (for lack of
maintainership). It all went downhill from there.



The transition to maintainership happened very smoothly. I had already
considered maintaining Emacs when Gerd [ Gerd Moellmann ] left (i.e. when
21.1 was released; at which point Richard ended up regaining maintainership
for lack of any other volunteer), but it was a pretty busy time for me, so I
decided not to. This time Richard kept a very active role, which coupled with
the help of Chong made it very pleasant.



There's a fair bit of pressure, of course, because it's a very old package, so
people have a lot invested in it, making some changes terribly delicate. As a
maintainer, I did get to steer the direction of Emacs development, tho mostly
by my own contributions and by imposing some contentious new defaults. The
role of a maintainer as I see it is mostly to make sure the package keeps its
integrity.



But I have to say, that while Chong started maybe a bit more of a "rookie
maintainer" than I, he quickly took over and he deserves much of the credit
for 23.1, while I was too busy with my work to do much good.







djcb: Talking about Emacs development: there are of course many people
involved. Can you give a estimate of how many?



CYD: There are about 120 people who have commit access to the code
repository; of these, I think around 20 contribute regularly. This does
not count the packages that are maintained separately from Emacs.



Additionally, we do of course receive a steady stream of small patches
from various users.






Emacs 23 has just been released (on July 29 2009), congratulations, a great
accomplishment indeed! From your perspective, what are the most important
improvements in Emacs 23 for end-users? And what about the internals? Are
there any big changes in the way Emacs operates?



CYD: I'd describe the Emacs 23 release cycle as dominated by internals
changes, in contrast with Emacs 22, where most of the major improvements
occurred at the Lisp level. There are two fundamental changes. First, the
internal character representation is now Unicode-based, which simplifies
various aspects of multilingual editing. Second, the font engine has been
revamped, and, among other things, we now support anti-aliasing on X. Both
these changes are due largely to Kenichi Handa, who deserves a huge amount
of credit for patiently developing the code a period of years.



One other major internals change is a restructuring of the terminal
interaction code, by Károly Lőrentey, which allows a single Emacs process to
display on X and text terminals simultaneously. Building on this "multi-tty"
code, Dan Nicolescu implemented a small but clever hack, allowing Emacs to
run as a daemon serving emacsclient connections.



There are several Lisp-level changes, large and small. For instance, Stefan
revamped the minibuffer completion code, which is now more sophisticated about
generating completions. And there are, as usual, new modes and packages:
Doc-view mode, Ruby mode, nXml mode, etc.



SM: Better support for Unicode, and better support for fonts, multi-tty
support, plus lots of new modes as always. Of course, I'm very happy with my
new completion code, which makes partial-completion-mode obsolete (and
enabled by default).




The new support for Unicode and for fonts required significant changes. Big
thanks to Kenichi Handa for most of that.






djcb: Are there any features that you would have liked to add, but that were somehow
not yet ready?



CYD: One feature that I'd have liked to include into 23.1 is CEDET, a set of
packages by Eric Ludlum (the author of Speedbar), which turns Emacs into an
IDE. There was no time to merge it for 23.1, but hopefully it will be
included in 23.2.



SM: Several packages were planned for inclusion, but didn't make it.
Support for GNUstep was planned (and is actually in there) but doesn't work.
Also I hoped the new VC code would be developed further, but it sadly stayed
at the stage where it mostly provides the same features as the old one (with
all kinds of improvements in the way it supports them, tho).






djcb: There is always a bit of tension in Emacs between keeping things as they are,
and changing things to be more like other programs - for example when thinking
about key bindings and various defaults. What is your take on this? Should
Emacs try to accommodate new users, or instead try to keep things as they are?



CYD: My impression is that I'm a little more conservative than Stefan with
regards to changes, though I'm not sure what he thinks ;-) That said, we seem
to arrive at the same conclusions with surprising frequency.



SM: Emacs standard key bindings (like C-x and C-c prefixes) clash badly
with "standard" key bindings of other apps, so I don't think there's much hope
to make Emacs like other applications. But yes, I generally believe that, all
things being equal, it's better to be like others than to be different in this
respect. But since changing bindings (or behaviors) is disruptive, I only
consider it worthwhile if I believe the new default is really superior (not
just for new users).






djcb: For example, in Emacs 23, transient-mark-mode is the default, but

delete-selection-mode is not. How do you decide such things?



CYD: Typically, we try not to make flashy changes. The transient mark mode
change is the exception that proves the rule: transient-mark-mode is so
useful, and is so widely used (even Richard uses it), that it doesn't make
sense to leave it off by default. But the rule of thumb is to improve Emacs
on Emacs' own terms; for instance, CUA mode will not become the default
anytime soon, I think.



SM: transient-mark-mode is an enabler: it allows some commands to behave
differently depending on the activation state of the region. So it's a clear
improvement. delete-selection-mode is not as important in this regard. We
may see something along the lines of delete-selection-mode at some point,
tho probably something more minor that only caters to the few cases where

delete-selection-mode is more than just a way to avoid hitting C-w.






djcb: How do you see the competition with other text editors? Do you look for
ideas elsewhere? Is there any other editor you would be using if Emacs did not
exist?



CYD: I'm afraid I don't pay much attention to other editors.




SM: I used Zmacs, XEmacs, and Epoch at some point. That's about it. I do
like structured editors, and I think Emacs should and will move in this
direction (with more parsing going on).






djcb: It's a bit premature of course, but it's always interesting to
speculate a bit about the future. Do you have any particular post-Emacs-23
plans? Obviously, this all depends on what people come up with, but are there
any directions you would like Emacs to go?



CYD: The present plan is for Emacs 23.2 to contain a small number of new
features, in addition to bugfixes. As mentioned above, I'd like to try to
include CEDET. In general, I hope to move to shorter, more disciplined
release cycles. Emacs 23 was a good step in that direction, as it was shorter
than the previous cycle.



SM: My main goal for Emacs-23 was to shorten the release cycle. Hopefully,
the quality has not been reduced accordingly. For 23.N there are several
improvements planned (or even done), mostly about inclusion of packages like
js2-mode and CEDET. In the longer term, the main goals for me are the
integration of the lexical-scoped branch, the support for bidirectional
display, and adding more parsing technology (basically replace syntax-tables
with something like lex & yacc, maybe).





Thanks a lot Stefan and Chong!


Followers

Popular Posts