Intermediate Emacs Hacking

Turn Emacs into your editor of choice with this easy customization tool.

The Speedbar

I explained how to automate turning on the speedbar in the discussion of
the Customize Emacs system. Speedbar is a separate frame (window) that
allows mouse-click navigation among Emacs buffers. As you can see from
the illustration, the speedbar allows for tree structures, like Emacs'
Info system. Click on the + to open subnodes, and click on the – to
close them (Figure 4).

Figure 4. Emacs' Speedbar Point-and-Click Browsing Interface

When you are editing in certain modes—Rmail, Info and GUD, for
example—the speedbar
shows other selections to be edited in that mode. For example, when you
are in Info mode, the speedbar displays nodes. Otherwise, it shows files
in the directory where the file in the current buffer is located.

If you have a lot of files open in Emacs, the speedbar is a useful
tool. I often have more than 30 files open simultaneously, and the
speedbar helps me manage and switch between them.

Emacs Is for E-mail

In the article “Getting Started with Emacs”,
LJ, March, 2003, I demonstrated
how to use Emacs as a server, letting programs like crontab and
mutt use Emacs for file editing. To carry this further, you can use Emacs as the editor
for any application that can call on an external editor, including mail
readers. However, Emacs has at least two mail modes and a powerful
newsreader called GNUS.

To send a message, Ctrl-X M (or M-X mail)
puts you in mail mode. Simply edit
a message and send it (Figure 5). As the screen capture
shows, you see a skeleton of an e-mail ready for you to fill in the
blanks. You can use control character sequences to move to (and create,
if necessary) additional headers, like FCC.
You can use tab completion in the headers. There, it looks at local
system users and the contents of any e-mail aliases you have defined in
your .emacs.

Figure 5. A Skeleton E-mail in Emacs' Mail Mode

You can insert your signature with Ctrl-C Ctrl-W, or you can have Emacs do
that for you by setting mail-signature to t in your
.emacs file.
If you want to get fancy and write a Lisp program to select a signature for you
based on, well, whatever you can write Lisp code to detect.

You can run a spell-checker on your message. Entering M-X
ispell-message
checks only the body of the message, skipping any quoted material.

Reading Mail

In Emacs, read and reply to your incoming mail with rmail mode (M-X
rmail) (Figure 6). One of the first things you may
wish to do is create a summary buffer or automate it by modifying the
rmail mode hook. This creates a buffer familiar to most users:
one line per message with the date, source e-mail address, data size
and subject in that line. As you can see in Figure 7,
the message in the rmail buffer is highlighted in green. The
normal Emacs navigation keys work in the summary buffer.

Figure 6. An E-mail Message in rmail Mode

Figure 7. rmail Mode with a Summary

Emacs mail operates in a somewhat convoluted way in order to accommodate
multiple operating systems. When you start an rmail buffer, it moves
mail from your inbox file, typically in /var/spool/mail on Linux, into a
file, ~/RMAIL. This is the file you normally edit. You can put e-mail into
~/RMAIL at any time with the G key. If you have a POP or IMAP account,
try using fetchmail to put your mail in the inbox.

Most mail readers use multiple mail files (directories, if they use
maildir mail format). Emacs can shift from one rmail file to another,
but you may not need to. Instead, you can create customized summaries
using regular expressions and other search patterns. You can specify
summaries based on recipients, a regular expression search within the
subject or labels.

You can have multiple rmail files and associate each one with one or
more inboxes. This means that folks with spam filters such as SpamAssassin, already running or using procmail recipes to deliver their e-mail to separate
files need not abandon that investment. Each time you visit an rmail file,
Emacs gets any new mail from the associated input files.

You can reply and forward e-mail in rmail mode. Either one opens up a
mail mode buffer with the e-mail headers already completed. You can use
Ctrl-C Ctrl-Y to yank in the message to which you are replying. If you want to
reply to multiple e-mails, switch to the rmail buffer, select a different
message, switch back and yank the new current message. To be RFC-compliant, you will have to set the quoting character by customizing
mail-yank-prefix to use the string >.