If your .emacs file is longer than a page YOU ARE DOING IT WRONG.
Why? Well. Unless you are a casual Emacs user, your .emacs should not be regarded as a configuration file. Rather, the .emacs file is actually the entry point to the source repository of your own version of Emacs. In effect, when you configure Emacs you create a fork, which has it's own source that you need to maintain. This is not configuration. This is programming and you should approach it like you do all programming. What does that mean? Modularization. Clean code. Code comments. Source control. Tests. But modularization and source control are the ones that are most important for my Emacs configuration. I have loads of files in ~/emacs and every kind of extension I do has it's own kind of file or directory to put it in. The ~/emacs directory is checked out from source control, and has got customizations for different platforms. That's why my .emacs file is 4-5 lines long. Two for setting customizations that are specific to this computer, and the rest to load the stuff inside of ~/emacs. And that's all.
So how do you handle modularization of Emacs Lisp code? This won't be a tutorial. Just a few advices that might make things easier.
In no specific order:
- (load "file.el") will allow you to just load another file.
- (require 'cl) will give you lots of nice functionality from Common Lisp
- I recommend you have one place where you add all your load paths. Mine look something like this:
(labels ((add-path (p)
(concat emacs-root p))))
(add-path "emacs/own") ;; Personal elisp code
(add-path "emacs/lisp") ;; Various elisp code, just dumped here
- Why do it like this? Well, it gives you an easier way to add full paths to your load path without repeating lots of stuff. This depends on you defining emacs-root somewhere - do define it, it can be highly useful.
- Set custom-file. (The custom-file is the file where Emacs saves customizations. If you don't set a specific file for this, you will end up getting all customizations saved into .emacs which you really don't want.) The code for this is simple. Just do (setq custom-file "the-file-name.el")
- Use hooks and advice liberally. They allow you to attach new functionality without monkey patching.
- If you ever edit XML, NEVER use Emacs builtin XML editor. Instead download the excellent NXML package.
- Learn how to use Info and customizations
- Use Ido mode
Addendum: As Phil just pointed out (and which was part of my plan from the beginning) is that Autoloads should be used as much as possible. Also, make sure to bytecompile as much as possible.