load-path
and the exec-path
. The load-path
is a list of
directories that should be used to look for load files. The
exec-path
is 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).
The
exec-path
is 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.
The
load-path
controls what directories are searched for load
,
load-library
, and require
. The directories in load-path
are
used in order of their appearance in that variable. So if there's two
entries in load-path
, ("~/foo" "~/bar")
, and they both have a file
baz.el
, a (require 'baz)
will load the one in ~/foo
. Most
people add to the load-path
with the elisp add-to-list
command,
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-path
contains 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.d
to 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-path
that 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-list
to add them.
No comments:
Post a Comment