I am in the process of rebooting my GTD workflow. Since I do most of my work in Emacs, I decided it was also time to refactor and improve my Emacs configuration. What was wrong with my configuration?
- I was living in the past (Emacs 23) and wanted to live in the future (Emacs 24).
- My configuration file was not under version control. And, because of the differences between Fedora and OS X, the configuration on my work laptop and personal laptop had drifted significantly.
.emacsfile was poorly structured and easily broken.
I’ve documented my work on my Emacs configuration here, mostly as a means of reminding my future self what I did. Overall the experience was pleasant. Emacs 24 brings many long-needed features to Emacs.
The end result can be seen below.
Installing Emacs 24:
On Fedora, I installed directly from git:
1 2 3 4 5 6 7 8 9 10 11 12
On my Mac, I installed Emacs 24 via Homebrew:
1 2 3
Rebuilding My Emacs Configuration
A number of high-quality, pre-built Emacs configurations are available online, including:
A few Opscoders use configurations based around Emacs Starter Kit. However, since I have fairly simple configuration needs, I decided to borrow a few ideas from each and forge ahead on my own. The result can be found in my emacs-config repository. It is still very much a work in progress.
I’ve structured my new
.emacs.d directory as follows:
. |-- init.el |-- modules/ |-- snippets/ |-- themes/ `-- vendor/
init.el: The main entry point of the Emacs configuration. I’ve taken a bit of code from the README of Emacs Starter Kit that automatically installs packages from ELPA.
modules/: This is the heart of my emacs config. Any
.elfiles in this directory are automatically loaded.
snippets/: Used to store snippets for yasnippet. Currently empty.
themes/: Color themes.
vendor/: Any 3rd party Emacs packages that are not yet distributed via ELPA.
The auto-installation of packages is great for sharing my configuration between workstations; but, it can be brutally slow the first time you run it.
The majority of my emacs configuration consists of minor customizations to popular, pre-built packages. The following are the packages that I use on a daily basis:
ido-mode: I honestly don’t know how I used Emacs before discovering ido-mode.
org-mode: Org-mode is my go-to application anytime I need to take notes in a meeting, outline a new project, or author a simple document.
auctex: AucTeX provides a number a features useful to those who love LaTeX. If you haven’t fallen in love with LaTeX yet, I highly recommend trying it!
In addition to the tried-and-true packages above and a handful of popular programming modes, I added the following packages to my standard configuration:
Gist: I use Github’s gists all the time; I can’t believe I didn’t look for this before.
Deft: Deft allows you quickly create, edit, and view plain-text notes. I’ve configured it to use org-mode as its default text-mode and hope to use it to easily collect tasks throughout the day.
hippie-expand: I previously used predictive-mode extensively, but eventually found it too slow to use productively. So far, hippie-expand has been filling the auto-completion void that I’ve been feeling since remove predictive-mode.
All of these packages are either shipped with Emacs or available as packages using the new package management features in Emacs 24. I was initially skeptical of the package management features. However, I’ve found that a large amount of the complexity in managing my previous configuration was the result of manually managing packages. With this complexity removed, moving to Emacs 24 was relatively painless.
I was also pleased to see improvements to clipboard integration. My
.emacs file had a number of ugly workarounds for properly
interacting with the clipboard on multiple platforms. I’ve found this
completely unnecessary in Emacs 24.
The only problem I encountered during this transition was finding a suitable color theme. Low-contrast color themes such as zenburn seem to be in vogue at the moment. I prefer higher-contrast themes. In Emacs 23, I used dark-laptop, but it appears that this theme has not yet been ported to Emacs 24’s built-in color theme support. My current theme is a small color theme based heavily on dark-laptop.
I’ve deployed my new configuration to all of my workstations via a
git pull. My hope is that a few weeks of real-world use will
find the rough edges that remain. Comments and suggestions welcome!