When Emacs loads a Lisp library, it searches for the library
in a list of directories specified by the variable load-path
.
load
. Each element is a string (which must be
a directory name) or nil
(which stands for the current working
directory).
The value of load-path
is initialized from the environment
variable EMACSLOADPATH
, if that exists; otherwise its default
value is specified in `emacs/src/paths.h' when Emacs is built.
Then the list is expanded by adding subdirectories of the directories
in the list.
The syntax of EMACSLOADPATH
is the same as used for PATH
;
`:' (or `;', according to the operating system) separates
directory names, and `.' is used for the current default directory.
Here is an example of how to set your EMACSLOADPATH
variable from
a csh
`.login' file:
setenv EMACSLOADPATH .:/user/bil/emacs:/usr/local/share/emacs/20.3/lisp
Here is how to set it using sh
:
export EMACSLOADPATH EMACSLOADPATH=.:/user/bil/emacs:/usr/local/share/emacs/20.3/lisp
Here is an example of code you can place in a `.emacs' file to add
several directories to the front of your default load-path
:
(setq load-path (append (list nil "/user/bil/emacs" "/usr/local/lisplib" "~/emacs") load-path))
In this example, the path searches the current working directory first, followed then by the `/user/bil/emacs' directory, the `/usr/local/lisplib' directory, and the `~/emacs' directory, which are then followed by the standard directories for Lisp code.
Dumping Emacs uses a special value of load-path
. If the value of
load-path
at the end of dumping is unchanged (that is, still the
same special value), the dumped Emacs switches to the ordinary
load-path
value when it starts up, as described above. But if
load-path
has any other value at the end of dumping, that value
is used for execution of the dumped Emacs also.
Therefore, if you want to change load-path
temporarily for
loading a few libraries in `site-init.el' or `site-load.el',
you should bind load-path
locally with let
around the
calls to load
.
The default value of load-path
, when running an Emacs which has
been installed on the system, includes two special directories (and
their subdirectories as well):
"/usr/local/share/emacs/version/site-lisp"
and
"/usr/local/share/emacs/site-lisp"
The first one is for locally installed packages for a particular Emacs version; the second is for locally installed packages meant for use with all installed Emacs versions.
There are several reasons why a Lisp package that works well in one Emacs version can cause trouble in another. Sometimes packages need updating for incompatible changes in Emacs; sometimes they depend on undocumented internal Emacs data that can change without notice; sometimes a newer Emacs version incorporates a version of the package, and should be used only with that version.
Emacs finds these directories' subdirectories and adds them to
load-path
when it starts up. Both immediate subdirectories and
subdirectories multiple levels down are added to load-path
.
Not all subdirectories are included, though. Subdirectories whose names do not start with a letter or digit are excluded. Subdirectories named `RCS' are excluded. Also, a subdirectory which contains a file named `.nosearch' is excluded. You can use these methods to prevent certain subdirectories of the `site-lisp' directories from being searched.
If you run Emacs from the directory where it was built--that is, an
executable that has not been formally installed--then load-path
normally contains two additional directories. These are the lisp
and site-lisp
subdirectories of the main build directory. (Both
are represented as absolute file names.)
load
does, and the
argument nosuffix has the same meaning as in load
: don't
add suffixes `.elc' or `.el' to the specified name
library.
If the path is non-nil
, that list of directories is used
instead of load-path
.
When locate-library
is called from a program, it returns the file
name as a string. When the user runs locate-library
interactively, the argument interactive-call is t
, and this
tells locate-library
to display the file name in the echo area.
Go to the first, previous, next, last section, table of contents.