Emacs Lisp has several interfaces for loading. For example,
autoload
creates a placeholder object for a function in a file;
trying to call the autoloading function loads the file to get the
function's real definition (see section Autoload). require
loads a
file if it isn't already loaded (see section Features). Ultimately, all
these facilities call the load
function to do the work.
To find the file, load
first looks for a file named
`filename.elc', that is, for a file whose name is
filename with `.elc' appended. If such a file exists, it is
loaded. If there is no file by that name, then load
looks for a
file named `filename.el'. If that file exists, it is loaded.
Finally, if neither of those names is found, load
looks for a
file named filename with nothing appended, and loads it if it
exists. (The load
function is not clever about looking at
filename. In the perverse case of a file named `foo.el.el',
evaluation of (load "foo.el")
will indeed find it.)
If the optional argument nosuffix is non-nil
, then the
suffixes `.elc' and `.el' are not tried. In this case, you
must specify the precise file name you want.
If filename is a relative file name, such as `foo' or
`baz/foo.bar', load
searches for the file using the variable
load-path
. It appends filename to each of the directories
listed in load-path
, and loads the first file it finds whose name
matches. The current default directory is tried only if it is specified
in load-path
, where nil
stands for the default directory.
load
tries all three possible suffixes in the first directory in
load-path
, then all three suffixes in the second directory, and
so on.
If you get a warning that `foo.elc' is older than `foo.el', it means you should consider recompiling `foo.el'. See section Byte Compilation.
Messages like `Loading foo...' and `Loading foo...done' appear
in the echo area during loading unless nomessage is
non-nil
.
Any unhandled errors while loading a file terminate loading. If the
load was done for the sake of autoload
, any function definitions
made during the loading are undone.
If load
can't find the file to load, then normally it signals the
error file-error
(with `Cannot open load file
filename'). But if missing-ok is non-nil
, then
load
just returns nil
.
You can use the variable load-read-function
to specify a function
for load
to use instead of read
for reading expressions.
See below.
load
returns t
if the file loads successfully.
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.
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/lib/emacs/lisp
Here is how to set it using sh
:
export EMACSLOADPATH EMACSLOADPATH=.:/user/bil/emacs:/usr/local/lib/emacs/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.
The command line options `-l' or `-load' specify a Lisp
library to load as part of Emacs startup. Since this file might be in
the current directory, Emacs 18 temporarily adds the current directory
to the front of load-path
so the file can be found there. Newer
Emacs versions also find such files in the current directory, but
without altering load-path
.
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, looks like this:
("/usr/local/share/emacs/version/site-lisp" "/usr/local/share/emacs/site-lisp" "/usr/local/share/emacs/version/lisp")
The last of these three directories is where the Lisp files of Emacs itself are installed; the first two are for additional Lisp packages installed at your site. The first directory is for locally installed packages that belong with a particular Emacs version; the second is for locally installed packages that can be used with any installed Emacs version.
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.
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.)
nil
if Emacs is in the process of loading a
file, and it is nil
otherwise.
load
and eval-region
to use instead of read
.
The function should accept one argument, just as read
does.
Normally, the variable's value is nil
, which means those
functions should use read
.
To learn how load
is used to build Emacs, see section Building Emacs.
Go to the first, previous, next, last section, table of contents.