load-pathis a list of directories that should be used to look for load files. The
exec-pathis a list of directories that should be used to look for binary executables, the equivalent of the shell variable
$PATH(and is initialized from it).
exec-pathis the one that usually doesn't require any modification. If it is modified, it makes sense to do so by customizing the variable, which puts it in custom.el, which I've already recommended be local-only, and not checked into git.
load-pathcontrols what directories are searched for
require. The directories in
load-pathare used in order of their appearance in that variable. So if there's two entries in
("~/foo" "~/bar"), and they both have a file
(require 'baz)will load the one in
~/foo. Most people add to the
load-pathwith the elisp
add-to-listcommand, which will put the new entry in the front of the list, which will mean anything in that directory will override everything else. This is useful for using a more recent version of a library that comes bundled with emacs.
By default, the
load-pathcontains with the list of emacs directories that is part of the emacs standard set of elisp, such as (on my mac) "/Applications/Emacs.app/Contents/Resources/lisp/cedet", and many other similar directories. This variable used to frequently need customization, and I've long had something in my initialization that adds everything under
~/.emacs.dto my load-path:
;; We don't really want to specify every single directory... (let ((default-directory "~/.emacs.d")) (add-to-list 'load-path default-directory) (normal-top-level-add-subdirs-to-load-path))
This is the only way I've found to recursive add things to the
load-path. When I added this, I felt it was necessary to avoid having to specify directories for every package I downloaded. Some packages, like org, needed two directories to be put in the
load-path. It was annoying. But this is a heavy-handed solution to the problem. It adds a whopping 110 entries to my
load-path. That can't be good.
Furthermore, ELPA already handles adding things to the
load-path. I'm going to get rid of it under the theory that ELPA is handling everything I currently care about, and anything else can be dealt with as a special case. However, there is one directory I'd like to be on my
load-paththat isn't right now, and that's the
~/.emacs.d/directory itself. I'd like to be able to add other .elisp files in this directory as well. The following elisp accomplishes that:
(add-to-list 'load-path "~/.emacs.d/")
Today's lesson is a simple one: Using ELPA largely obviates the need for adding directories to
load-path. But if you do have special directories you'd like to add, then use
add-to-listto add them.