(File Local Variables): Minor cleanup.
[bpt/emacs.git] / lispref / loading.texi
CommitLineData
83ac6b45
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
fd897522 3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999
177c0ea7 4@c Free Software Foundation, Inc.
83ac6b45
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/loading
f9f59935 7@node Loading, Byte Compilation, Customization, Top
83ac6b45
RS
8@chapter Loading
9@cindex loading
10@cindex library
11@cindex Lisp library
12
13 Loading a file of Lisp code means bringing its contents into the Lisp
14environment in the form of Lisp objects. Emacs finds and opens the
15file, reads the text, evaluates each form, and then closes the file.
16
17 The load functions evaluate all the expressions in a file just
18as the @code{eval-current-buffer} function evaluates all the
19expressions in a buffer. The difference is that the load functions
20read and evaluate the text in the file as found on disk, not the text
21in an Emacs buffer.
22
23@cindex top-level form
24 The loaded file must contain Lisp expressions, either as source code
78c71a98
RS
25or as byte-compiled code. Each form in the file is called a
26@dfn{top-level form}. There is no special format for the forms in a
83ac6b45
RS
27loadable file; any form in a file may equally well be typed directly
28into a buffer and evaluated there. (Indeed, most code is tested this
29way.) Most often, the forms are function definitions and variable
30definitions.
31
32 A file containing Lisp code is often called a @dfn{library}. Thus,
33the ``Rmail library'' is a file containing code for Rmail mode.
34Similarly, a ``Lisp library directory'' is a directory of files
35containing Lisp code.
36
37@menu
38* How Programs Do Loading:: The @code{load} function and others.
a9f0a989 39* Library Search:: Finding a library to load.
ad800164 40* Loading Non-ASCII:: Non-@acronym{ASCII} characters in Emacs Lisp files.
83ac6b45
RS
41* Autoload:: Setting up a function to autoload.
42* Repeated Loading:: Precautions about loading a file twice.
bfe721d1 43* Named Features:: Loading a library if it isn't already loaded.
83ac6b45
RS
44* Unloading:: How to ``unload'' a library that was loaded.
45* Hooks for Loading:: Providing code to be run when
46 particular libraries are loaded.
47@end menu
48
49@node How Programs Do Loading
50@section How Programs Do Loading
51
52 Emacs Lisp has several interfaces for loading. For example,
f9f59935
RS
53@code{autoload} creates a placeholder object for a function defined in a
54file; trying to call the autoloading function loads the file to get the
83ac6b45 55function's real definition (@pxref{Autoload}). @code{require} loads a
f9f59935
RS
56file if it isn't already loaded (@pxref{Named Features}). Ultimately,
57all these facilities call the @code{load} function to do the work.
83ac6b45 58
a9f0a989 59@defun load filename &optional missing-ok nomessage nosuffix must-suffix
83ac6b45
RS
60This function finds and opens a file of Lisp code, evaluates all the
61forms in it, and closes the file.
62
63To find the file, @code{load} first looks for a file named
64@file{@var{filename}.elc}, that is, for a file whose name is
65@var{filename} with @samp{.elc} appended. If such a file exists, it is
66loaded. If there is no file by that name, then @code{load} looks for a
78c71a98 67file named @file{@var{filename}.el}. If that file exists, it is loaded.
83ac6b45
RS
68Finally, if neither of those names is found, @code{load} looks for a
69file named @var{filename} with nothing appended, and loads it if it
70exists. (The @code{load} function is not clever about looking at
71@var{filename}. In the perverse case of a file named @file{foo.el.el},
72evaluation of @code{(load "foo.el")} will indeed find it.)
73
74If the optional argument @var{nosuffix} is non-@code{nil}, then the
75suffixes @samp{.elc} and @samp{.el} are not tried. In this case, you
f9f59935
RS
76must specify the precise file name you want. By specifying the precise
77file name and using @code{t} for @var{nosuffix}, you can prevent
78perverse file names such as @file{foo.el.el} from being tried.
83ac6b45 79
a9f0a989
RS
80If the optional argument @var{must-suffix} is non-@code{nil}, then
81@code{load} insists that the file name used must end in either
82@samp{.el} or @samp{.elc}, unless it contains an explicit directory
83name. If @var{filename} does not contain an explicit directory name,
84and does not end in a suffix, then @code{load} insists on adding one.
85
83ac6b45
RS
86If @var{filename} is a relative file name, such as @file{foo} or
87@file{baz/foo.bar}, @code{load} searches for the file using the variable
88@code{load-path}. It appends @var{filename} to each of the directories
89listed in @code{load-path}, and loads the first file it finds whose name
90matches. The current default directory is tried only if it is specified
91in @code{load-path}, where @code{nil} stands for the default directory.
92@code{load} tries all three possible suffixes in the first directory in
93@code{load-path}, then all three suffixes in the second directory, and
a9f0a989 94so on. @xref{Library Search}.
83ac6b45
RS
95
96If you get a warning that @file{foo.elc} is older than @file{foo.el}, it
97means you should consider recompiling @file{foo.el}. @xref{Byte
98Compilation}.
99
969fe9b5
RS
100When loading a source file (not compiled), @code{load} performs
101character set translation just as Emacs would do when visiting the file.
102@xref{Coding Systems}.
103
83ac6b45
RS
104Messages like @samp{Loading foo...} and @samp{Loading foo...done} appear
105in the echo area during loading unless @var{nomessage} is
106non-@code{nil}.
107
108@cindex load errors
109Any unhandled errors while loading a file terminate loading. If the
78c71a98
RS
110load was done for the sake of @code{autoload}, any function definitions
111made during the loading are undone.
83ac6b45
RS
112
113@kindex file-error
114If @code{load} can't find the file to load, then normally it signals the
115error @code{file-error} (with @samp{Cannot open load file
116@var{filename}}). But if @var{missing-ok} is non-@code{nil}, then
117@code{load} just returns @code{nil}.
118
22697dac
KH
119You can use the variable @code{load-read-function} to specify a function
120for @code{load} to use instead of @code{read} for reading expressions.
121See below.
122
83ac6b45
RS
123@code{load} returns @code{t} if the file loads successfully.
124@end defun
125
83ac6b45 126@deffn Command load-file filename
f9f59935
RS
127This command loads the file @var{filename}. If @var{filename} is a
128relative file name, then the current default directory is assumed.
129@code{load-path} is not used, and suffixes are not appended. Use this
a9f0a989 130command if you wish to specify precisely the file name to load.
83ac6b45
RS
131@end deffn
132
133@deffn Command load-library library
f9f59935
RS
134This command loads the library named @var{library}. It is equivalent to
135@code{load}, except in how it reads its argument interactively.
83ac6b45 136@end deffn
83ac6b45 137
a9f0a989
RS
138@defvar load-in-progress
139This variable is non-@code{nil} if Emacs is in the process of loading a
140file, and it is @code{nil} otherwise.
141@end defvar
142
da9f5ab2 143@anchor{Definition of load-read-function}
a9f0a989
RS
144@defvar load-read-function
145This variable specifies an alternate expression-reading function for
146@code{load} and @code{eval-region} to use instead of @code{read}.
147The function should accept one argument, just as @code{read} does.
148
149Normally, the variable's value is @code{nil}, which means those
150functions should use @code{read}.
55607887 151
6142d1d0
RS
152Instead of using this variable, it is cleaner to use another, newer
153feature: to pass the function as the @var{read-function} argument to
da9f5ab2 154@code{eval-region}. @xref{Definition of eval-region,, Eval}.
a9f0a989
RS
155@end defvar
156
1911e6e5
RS
157 For information about how @code{load} is used in building Emacs, see
158@ref{Building Emacs}.
a9f0a989
RS
159
160@node Library Search
161@section Library Search
162
163 When Emacs loads a Lisp library, it searches for the library
164in a list of directories specified by the variable @code{load-path}.
165
83ac6b45
RS
166@defopt load-path
167@cindex @code{EMACSLOADPATH} environment variable
168The value of this variable is a list of directories to search when
169loading files with @code{load}. Each element is a string (which must be
170a directory name) or @code{nil} (which stands for the current working
a9f0a989
RS
171directory).
172@end defopt
173
174 The value of @code{load-path} is initialized from the environment
175variable @code{EMACSLOADPATH}, if that exists; otherwise its default
cf11ad96 176value is specified in @file{emacs/src/epaths.h} when Emacs is built.
a9f0a989
RS
177Then the list is expanded by adding subdirectories of the directories
178in the list.
83ac6b45 179
a9f0a989 180 The syntax of @code{EMACSLOADPATH} is the same as used for @code{PATH};
bfe721d1
KH
181@samp{:} (or @samp{;}, according to the operating system) separates
182directory names, and @samp{.} is used for the current default directory.
183Here is an example of how to set your @code{EMACSLOADPATH} variable from
184a @code{csh} @file{.login} file:
83ac6b45 185
83ac6b45 186@smallexample
f1e2c45e 187setenv EMACSLOADPATH .:/user/bil/emacs:/usr/local/share/emacs/20.3/lisp
83ac6b45
RS
188@end smallexample
189
a9f0a989 190 Here is how to set it using @code{sh}:
83ac6b45
RS
191
192@smallexample
193export EMACSLOADPATH
f1e2c45e 194EMACSLOADPATH=.:/user/bil/emacs:/usr/local/share/emacs/20.3/lisp
83ac6b45
RS
195@end smallexample
196
a40d4712
PR
197 Here is an example of code you can place in your init file (@pxref{Init
198File}) to add several directories to the front of your default
199@code{load-path}:
83ac6b45
RS
200
201@smallexample
bda144f4 202@group
83ac6b45
RS
203(setq load-path
204 (append (list nil "/user/bil/emacs"
205 "/usr/local/lisplib"
5e41cf03 206 "~/emacs")
83ac6b45 207 load-path))
bda144f4 208@end group
83ac6b45
RS
209@end smallexample
210
211@c Wordy to rid us of an overfull hbox. --rjc 15mar92
212@noindent
213In this example, the path searches the current working directory first,
5e41cf03
RS
214followed then by the @file{/user/bil/emacs} directory, the
215@file{/usr/local/lisplib} directory, and the @file{~/emacs} directory,
83ac6b45
RS
216which are then followed by the standard directories for Lisp code.
217
a9f0a989 218 Dumping Emacs uses a special value of @code{load-path}. If the value of
c642171c
RS
219@code{load-path} at the end of dumping is unchanged (that is, still the
220same special value), the dumped Emacs switches to the ordinary
cc8c51f1 221@code{load-path} value when it starts up, as described above. But if
c642171c
RS
222@code{load-path} has any other value at the end of dumping, that value
223is used for execution of the dumped Emacs also.
224
a9f0a989 225 Therefore, if you want to change @code{load-path} temporarily for
c642171c
RS
226loading a few libraries in @file{site-init.el} or @file{site-load.el},
227you should bind @code{load-path} locally with @code{let} around the
228calls to @code{load}.
83ac6b45 229
089e089d 230 The default value of @code{load-path}, when running an Emacs which has
a9f0a989
RS
231been installed on the system, includes two special directories (and
232their subdirectories as well):
089e089d
RS
233
234@smallexample
a9f0a989 235"/usr/local/share/emacs/@var{version}/site-lisp"
089e089d
RS
236@end smallexample
237
a9f0a989
RS
238@noindent
239and
240
241@smallexample
242"/usr/local/share/emacs/site-lisp"
243@end smallexample
244
245@noindent
246The first one is for locally installed packages for a particular Emacs
247version; the second is for locally installed packages meant for use with
248all installed Emacs versions.
089e089d
RS
249
250 There are several reasons why a Lisp package that works well in one
251Emacs version can cause trouble in another. Sometimes packages need
252updating for incompatible changes in Emacs; sometimes they depend on
253undocumented internal Emacs data that can change without notice;
254sometimes a newer Emacs version incorporates a version of the package,
255and should be used only with that version.
256
a9f0a989
RS
257 Emacs finds these directories' subdirectories and adds them to
258@code{load-path} when it starts up. Both immediate subdirectories and
259subdirectories multiple levels down are added to @code{load-path}.
260
261 Not all subdirectories are included, though. Subdirectories whose
262names do not start with a letter or digit are excluded. Subdirectories
8241495d
RS
263named @file{RCS} or @file{CVS} are excluded. Also, a subdirectory which
264contains a file named @file{.nosearch} is excluded. You can use these
265methods to prevent certain subdirectories of the @file{site-lisp}
266directories from being searched.
a9f0a989 267
089e089d
RS
268 If you run Emacs from the directory where it was built---that is, an
269executable that has not been formally installed---then @code{load-path}
270normally contains two additional directories. These are the @code{lisp}
271and @code{site-lisp} subdirectories of the main build directory. (Both
272are represented as absolute file names.)
273
f9f59935
RS
274@deffn Command locate-library library &optional nosuffix path interactive-call
275This command finds the precise file name for library @var{library}. It
276searches for the library in the same way @code{load} does, and the
277argument @var{nosuffix} has the same meaning as in @code{load}: don't
278add suffixes @samp{.elc} or @samp{.el} to the specified name
279@var{library}.
280
281If the @var{path} is non-@code{nil}, that list of directories is used
282instead of @code{load-path}.
283
284When @code{locate-library} is called from a program, it returns the file
285name as a string. When the user runs @code{locate-library}
286interactively, the argument @var{interactive-call} is @code{t}, and this
287tells @code{locate-library} to display the file name in the echo area.
288@end deffn
289
cee6bbce
RS
290@defvar load-suffixes
291This variable is a list of suffixes (strings) that @code{load} should
292try adding to the specified file name. The default value is
b7ebcab7 293@code{(".elc" ".el")}. There is no need to include the null suffix.
cee6bbce
RS
294@end defvar
295
a9f0a989 296@node Loading Non-ASCII
ad800164 297@section Loading Non-@acronym{ASCII} Characters
a9f0a989 298
ad800164 299 When Emacs Lisp programs contain string constants with non-@acronym{ASCII}
a9f0a989
RS
300characters, these can be represented within Emacs either as unibyte
301strings or as multibyte strings (@pxref{Text Representations}). Which
302representation is used depends on how the file is read into Emacs. If
303it is read with decoding into multibyte representation, the text of the
304Lisp program will be multibyte text, and its string constants will be
305multibyte strings. If a file containing Latin-1 characters (for
306example) is read without decoding, the text of the program will be
307unibyte text, and its string constants will be unibyte strings.
308@xref{Coding Systems}.
309
310 To make the results more predictable, Emacs always performs decoding
311into the multibyte representation when loading Lisp files, even if it
312was started with the @samp{--unibyte} option. This means that string
ad800164 313constants with non-@acronym{ASCII} characters translate into multibyte
a9f0a989
RS
314strings. The only exception is when a particular file specifies no
315decoding.
316
317 The reason Emacs is designed this way is so that Lisp programs give
318predictable results, regardless of how Emacs was started. In addition,
319this enables programs that depend on using multibyte text to work even
320in a unibyte Emacs. Of course, such programs should be designed to
321notice whether the user prefers unibyte or multibyte text, by checking
322@code{default-enable-multibyte-characters}, and convert representations
323appropriately.
324
ad800164 325 In most Emacs Lisp programs, the fact that non-@acronym{ASCII} strings are
a9f0a989
RS
326multibyte strings should not be noticeable, since inserting them in
327unibyte buffers converts them to unibyte automatically. However, if
328this does make a difference, you can force a particular Lisp file to be
430f8c73 329interpreted as unibyte by writing @samp{-*-unibyte: t;-*-} in a
a9f0a989 330comment on the file's first line. With that designator, the file will
8241495d 331unconditionally be interpreted as unibyte, even in an ordinary
6824708b 332multibyte Emacs session. This can matter when making keybindings to
ad800164 333non-@acronym{ASCII} characters written as @code{?v@var{literal}}.
a9f0a989 334
83ac6b45
RS
335@node Autoload
336@section Autoload
337@cindex autoload
338
339 The @dfn{autoload} facility allows you to make a function or macro
bfe721d1
KH
340known in Lisp, but put off loading the file that defines it. The first
341call to the function automatically reads the proper file to install the
342real definition and other associated code, then runs the real definition
83ac6b45
RS
343as if it had been loaded all along.
344
345 There are two ways to set up an autoloaded function: by calling
346@code{autoload}, and by writing a special ``magic'' comment in the
347source before the real definition. @code{autoload} is the low-level
348primitive for autoloading; any Lisp program can call @code{autoload} at
969fe9b5 349any time. Magic comments are the most convenient way to make a function
a9f0a989
RS
350autoload, for packages installed along with Emacs. These comments do
351nothing on their own, but they serve as a guide for the command
969fe9b5
RS
352@code{update-file-autoloads}, which constructs calls to @code{autoload}
353and arranges to execute them when Emacs is built.
83ac6b45 354
78c71a98
RS
355@defun autoload function filename &optional docstring interactive type
356This function defines the function (or macro) named @var{function} so as
83ac6b45
RS
357to load automatically from @var{filename}. The string @var{filename}
358specifies the file to load to get the real definition of @var{function}.
359
f9f59935
RS
360If @var{filename} does not contain either a directory name, or the
361suffix @code{.el} or @code{.elc}, then @code{autoload} insists on adding
362one of these suffixes, and it will not load from a file whose name is
363just @var{filename} with no added suffix.
364
83ac6b45 365The argument @var{docstring} is the documentation string for the
f9f59935 366function. Normally, this should be identical to the documentation string
83ac6b45
RS
367in the function definition itself. Specifying the documentation string
368in the call to @code{autoload} makes it possible to look at the
369documentation without loading the function's real definition.
370
969fe9b5
RS
371If @var{interactive} is non-@code{nil}, that says @var{function} can be
372called interactively. This lets completion in @kbd{M-x} work without
a9f0a989
RS
373loading @var{function}'s real definition. The complete interactive
374specification is not given here; it's not needed unless the user
375actually calls @var{function}, and when that happens, it's time to load
376the real definition.
83ac6b45
RS
377
378You can autoload macros and keymaps as well as ordinary functions.
379Specify @var{type} as @code{macro} if @var{function} is really a macro.
380Specify @var{type} as @code{keymap} if @var{function} is really a
381keymap. Various parts of Emacs need to know this information without
382loading the real definition.
383
bda144f4
MW
384An autoloaded keymap loads automatically during key lookup when a prefix
385key's binding is the symbol @var{function}. Autoloading does not occur
386for other kinds of access to the keymap. In particular, it does not
387happen when a Lisp program gets the keymap from the value of a variable
388and calls @code{define-key}; not even if the variable name is the same
389symbol @var{function}.
390
83ac6b45 391@cindex function cell in autoload
78c71a98 392If @var{function} already has a non-void function definition that is not
83ac6b45 393an autoload object, @code{autoload} does nothing and returns @code{nil}.
78c71a98 394If the function cell of @var{function} is void, or is already an autoload
83ac6b45
RS
395object, then it is defined as an autoload object like this:
396
397@example
398(autoload @var{filename} @var{docstring} @var{interactive} @var{type})
399@end example
400
177c0ea7 401For example,
83ac6b45
RS
402
403@example
bda144f4 404@group
83ac6b45
RS
405(symbol-function 'run-prolog)
406 @result{} (autoload "prolog" 169681 t nil)
bda144f4 407@end group
83ac6b45
RS
408@end example
409
410@noindent
411In this case, @code{"prolog"} is the name of the file to load, 169681
f9f59935
RS
412refers to the documentation string in the
413@file{emacs/etc/DOC-@var{version}} file (@pxref{Documentation Basics}),
414@code{t} means the function is interactive, and @code{nil} that it is
415not a macro or a keymap.
83ac6b45
RS
416@end defun
417
418@cindex autoload errors
419 The autoloaded file usually contains other definitions and may require
420or provide one or more features. If the file is not completely loaded
421(due to an error in the evaluation of its contents), any function
422definitions or @code{provide} calls that occurred during the load are
423undone. This is to ensure that the next attempt to call any function
424autoloading from this file will try again to load the file. If not for
a9f0a989
RS
425this, then some of the functions in the file might be defined by the
426aborted load, but fail to work properly for the lack of certain
427subroutines not loaded successfully because they come later in the file.
83ac6b45
RS
428
429 If the autoloaded file fails to define the desired Lisp function or
430macro, then an error is signaled with data @code{"Autoloading failed to
431define function @var{function-name}"}.
432
433@findex update-file-autoloads
434@findex update-directory-autoloads
a9f0a989 435 A magic autoload comment consists of @samp{;;;###autoload}, on a line
83ac6b45
RS
436by itself, just before the real definition of the function in its
437autoloadable source file. The command @kbd{M-x update-file-autoloads}
438writes a corresponding @code{autoload} call into @file{loaddefs.el}.
439Building Emacs loads @file{loaddefs.el} and thus calls @code{autoload}.
440@kbd{M-x update-directory-autoloads} is even more powerful; it updates
441autoloads for all files in the current directory.
442
443 The same magic comment can copy any kind of form into
444@file{loaddefs.el}. If the form following the magic comment is not a
8241495d
RS
445function-defining form or a @code{defcustom} form, it is copied
446verbatim. ``Function-defining forms'' include @code{define-skeleton},
447@code{define-derived-mode}, @code{define-generic-mode} and
5858d11f 448@code{define-minor-mode} as well as @code{defun} and
8241495d
RS
449@code{defmacro}. To save space, a @code{defcustom} form is converted to
450a @code{defvar} in @file{loaddefs.el}, with some additional information
451if it uses @code{:require}.
452
453 You can also use a magic comment to execute a form at build time
454@emph{without} executing it when the file itself is loaded. To do this,
455write the form @emph{on the same line} as the magic comment. Since it
456is in a comment, it does nothing when you load the source file; but
457@kbd{M-x update-file-autoloads} copies it to @file{loaddefs.el}, where
458it is executed while building Emacs.
83ac6b45
RS
459
460 The following example shows how @code{doctor} is prepared for
461autoloading with a magic comment:
462
463@smallexample
464;;;###autoload
465(defun doctor ()
466 "Switch to *doctor* buffer and start giving psychotherapy."
467 (interactive)
468 (switch-to-buffer "*doctor*")
469 (doctor-mode))
470@end smallexample
471
472@noindent
473Here's what that produces in @file{loaddefs.el}:
474
475@smallexample
8241495d 476(autoload 'doctor "doctor" "\
83ac6b45
RS
477Switch to *doctor* buffer and start giving psychotherapy."
478 t)
479@end smallexample
480
481@noindent
482The backslash and newline immediately following the double-quote are a
8241495d 483convention used only in the preloaded uncompiled Lisp files such as
83ac6b45
RS
484@file{loaddefs.el}; they tell @code{make-docfile} to put the
485documentation string in the @file{etc/DOC} file. @xref{Building Emacs}.
8241495d 486See also the commentary in @file{lib-src/make-docfile.c}.
83ac6b45 487
7f551e47
RS
488 If you write a function definition with an unusual macro that is not
489one of the known and recognized function definition methods, use of an
490ordinary magic autoload comment would copy the whole definition into
491@code{loaddefs.el}. That is not desirable. You can put the desired
492@code{autoload} call into @code{loaddefs.el} instead by writing this:
493
494@smallexample
495;;;###autoload (autoload 'foo "myfile")
496(mydefunmacro foo
497 ...)
498@end smallexample
499
83ac6b45 500@node Repeated Loading
83ac6b45
RS
501@section Repeated Loading
502@cindex repeated loading
503
a9f0a989 504 You can load a given file more than once in an Emacs session. For
83ac6b45
RS
505example, after you have rewritten and reinstalled a function definition
506by editing it in a buffer, you may wish to return to the original
507version; you can do this by reloading the file it came from.
508
509 When you load or reload files, bear in mind that the @code{load} and
510@code{load-library} functions automatically load a byte-compiled file
511rather than a non-compiled file of similar name. If you rewrite a file
f9f59935
RS
512that you intend to save and reinstall, you need to byte-compile the new
513version; otherwise Emacs will load the older, byte-compiled file instead
514of your newer, non-compiled file! If that happens, the message
a9f0a989 515displayed when loading the file includes, @samp{(compiled; note, source is
969fe9b5 516newer)}, to remind you to recompile it.
83ac6b45
RS
517
518 When writing the forms in a Lisp library file, keep in mind that the
f9f59935
RS
519file might be loaded more than once. For example, think about whether
520each variable should be reinitialized when you reload the library;
521@code{defvar} does not change the value if the variable is already
522initialized. (@xref{Defining Variables}.)
83ac6b45
RS
523
524 The simplest way to add an element to an alist is like this:
525
526@example
527(setq minor-mode-alist
528 (cons '(leif-mode " Leif") minor-mode-alist))
529@end example
530
531@noindent
532But this would add multiple elements if the library is reloaded.
533To avoid the problem, write this:
534
535@example
536(or (assq 'leif-mode minor-mode-alist)
537 (setq minor-mode-alist
538 (cons '(leif-mode " Leif") minor-mode-alist)))
539@end example
540
a9f0a989 541 To add an element to a list just once, you can also use @code{add-to-list}
bfe721d1
KH
542(@pxref{Setting Variables}).
543
83ac6b45
RS
544 Occasionally you will want to test explicitly whether a library has
545already been loaded. Here's one way to test, in a library, whether it
546has been loaded before:
547
548@example
969fe9b5 549(defvar foo-was-loaded nil)
bfe721d1 550
969fe9b5
RS
551(unless foo-was-loaded
552 @var{execute-first-time-only}
553 (setq foo-was-loaded t))
83ac6b45
RS
554@end example
555
556@noindent
557If the library uses @code{provide} to provide a named feature, you can
969fe9b5
RS
558use @code{featurep} earlier in the file to test whether the
559@code{provide} call has been executed before.
37680279 560@ifnottex
bfe721d1 561@xref{Named Features}.
37680279 562@end ifnottex
83ac6b45 563
bfe721d1 564@node Named Features
83ac6b45
RS
565@section Features
566@cindex features
567@cindex requiring features
568@cindex providing features
569
570 @code{provide} and @code{require} are an alternative to
571@code{autoload} for loading files automatically. They work in terms of
572named @dfn{features}. Autoloading is triggered by calling a specific
573function, but a feature is loaded the first time another program asks
574for it by name.
575
576 A feature name is a symbol that stands for a collection of functions,
577variables, etc. The file that defines them should @dfn{provide} the
578feature. Another program that uses them may ensure they are defined by
579@dfn{requiring} the feature. This loads the file of definitions if it
580hasn't been loaded already.
581
582 To require the presence of a feature, call @code{require} with the
583feature name as argument. @code{require} looks in the global variable
584@code{features} to see whether the desired feature has been provided
585already. If not, it loads the feature from the appropriate file. This
78c71a98 586file should call @code{provide} at the top level to add the feature to
83ac6b45
RS
587@code{features}; if it fails to do so, @code{require} signals an error.
588@cindex load error with require
589
177c0ea7 590 For example, in @file{emacs/lisp/prolog.el},
83ac6b45
RS
591the definition for @code{run-prolog} includes the following code:
592
593@smallexample
594(defun run-prolog ()
9e2b495b 595 "Run an inferior Prolog process, with I/O via buffer *prolog*."
83ac6b45
RS
596 (interactive)
597 (require 'comint)
598 (switch-to-buffer (make-comint "prolog" prolog-program-name))
599 (inferior-prolog-mode))
600@end smallexample
601
602@noindent
603The expression @code{(require 'comint)} loads the file @file{comint.el}
604if it has not yet been loaded. This ensures that @code{make-comint} is
969fe9b5
RS
605defined. Features are normally named after the files that provide them,
606so that @code{require} need not be given the file name.
83ac6b45
RS
607
608The @file{comint.el} file contains the following top-level expression:
609
610@smallexample
611(provide 'comint)
612@end smallexample
613
614@noindent
615This adds @code{comint} to the global @code{features} list, so that
616@code{(require 'comint)} will henceforth know that nothing needs to be
617done.
618
619@cindex byte-compiling @code{require}
78c71a98 620 When @code{require} is used at top level in a file, it takes effect
83ac6b45
RS
621when you byte-compile that file (@pxref{Byte Compilation}) as well as
622when you load it. This is in case the required package contains macros
8241495d
RS
623that the byte compiler must know about. It also avoids byte-compiler
624warnings for functions and variables defined in the file loaded with
625@code{require}.
83ac6b45
RS
626
627 Although top-level calls to @code{require} are evaluated during
628byte compilation, @code{provide} calls are not. Therefore, you can
629ensure that a file of definitions is loaded before it is byte-compiled
630by including a @code{provide} followed by a @code{require} for the same
631feature, as in the following example.
632
633@smallexample
634@group
635(provide 'my-feature) ; @r{Ignored by byte compiler,}
636 ; @r{evaluated by @code{load}.}
637(require 'my-feature) ; @r{Evaluated by byte compiler.}
638@end group
639@end smallexample
640
78c71a98
RS
641@noindent
642The compiler ignores the @code{provide}, then processes the
643@code{require} by loading the file in question. Loading the file does
644execute the @code{provide} call, so the subsequent @code{require} call
969fe9b5 645does nothing when the file is loaded.
78c71a98 646
f2aa473a 647@defun provide feature &optional subfeatures
83ac6b45
RS
648This function announces that @var{feature} is now loaded, or being
649loaded, into the current Emacs session. This means that the facilities
650associated with @var{feature} are or will be available for other Lisp
651programs.
652
653The direct effect of calling @code{provide} is to add @var{feature} to
654the front of the list @code{features} if it is not already in the list.
655The argument @var{feature} must be a symbol. @code{provide} returns
656@var{feature}.
657
f2aa473a
SM
658If provided, @var{subfeatures} should be a list of symbols indicating
659a set of specific subfeatures provided by this version of @var{feature}.
0373c25e 660You can test the presence of a subfeature using @code{featurep}.
f2aa473a 661
83ac6b45
RS
662@smallexample
663features
664 @result{} (bar bish)
665
666(provide 'foo)
667 @result{} foo
668features
669 @result{} (foo bar bish)
670@end smallexample
671
bfe721d1 672When a file is loaded to satisfy an autoload, and it stops due to an
b7ebcab7 673error in the evaluation of its contents, any function definitions or
bfe721d1
KH
674@code{provide} calls that occurred during the load are undone.
675@xref{Autoload}.
83ac6b45
RS
676@end defun
677
b6954afd 678@defun require feature &optional filename noerror
83ac6b45 679This function checks whether @var{feature} is present in the current
f9f59935
RS
680Emacs session (using @code{(featurep @var{feature})}; see below). The
681argument @var{feature} must be a symbol.
682
683If the feature is not present, then @code{require} loads @var{filename}
684with @code{load}. If @var{filename} is not supplied, then the name of
685the symbol @var{feature} is used as the base file name to load.
686However, in this case, @code{require} insists on finding @var{feature}
687with an added suffix; a file whose name is just @var{feature} won't be
688used.
83ac6b45
RS
689
690If loading the file fails to provide @var{feature}, @code{require}
691signals an error, @samp{Required feature @var{feature} was not
b6954afd 692provided}, unless @var{noerror} is non-@code{nil}.
83ac6b45
RS
693@end defun
694
f2aa473a 695@defun featurep feature &optional subfeature
15bc2f77
RS
696This function returns @code{t} if @var{feature} has been provided in
697the current Emacs session (i.e.@:, if @var{feature} is a member of
698@code{features}.) If @var{subfeature} is non-@code{nil}, then the
699function returns @code{t} only if that subfeature is provided as well
700(i.e.@: if @var{subfeature} is a member of the @code{subfeature}
701property of the @var{feature} symbol.)
83ac6b45
RS
702@end defun
703
704@defvar features
705The value of this variable is a list of symbols that are the features
706loaded in the current Emacs session. Each symbol was put in this list
707with a call to @code{provide}. The order of the elements in the
708@code{features} list is not significant.
709@end defvar
710
711@node Unloading
712@section Unloading
713@cindex unloading
714
715@c Emacs 19 feature
716 You can discard the functions and variables loaded by a library to
717reclaim memory for other Lisp objects. To do this, use the function
718@code{unload-feature}:
719
ee6bcc94 720@deffn Command unload-feature feature &optional force
83ac6b45 721This command unloads the library that provided feature @var{feature}.
78c71a98 722It undefines all functions, macros, and variables defined in that
969fe9b5
RS
723library with @code{defun}, @code{defalias}, @code{defsubst},
724@code{defmacro}, @code{defconst}, @code{defvar}, and @code{defcustom}.
725It then restores any autoloads formerly associated with those symbols.
726(Loading saves these in the @code{autoload} property of the symbol.)
ee6bcc94 727
0373c25e 728@vindex unload-feature-special-hooks
6582d61e
RS
729Before restoring the previous definitions, @code{unload-feature} runs
730@code{remove-hook} to remove functions in the library from certain
0373c25e
RS
731hooks. These hooks include variables whose names end in @samp{hook}
732or @samp{-hooks}, plus those listed in
733@code{unload-feature-special-hooks}. This is to prevent Emacs from
734ceasing to function because important hooks refer to functions that
735are no longer defined.
6582d61e
RS
736
737@vindex @var{feature}-unload-hook
738If these measures are not sufficient to prevent malfunction, a library
739can define an explicit unload hook. If @code{@var{feature}-unload-hook}
740is defined, it is run as a normal hook before restoring the previous
741definitions, @emph{instead of} the usual hook-removing actions. The
742unload hook ought to undo all the global state changes made by the
743library that might cease to work once the library is unloaded.
8241495d
RS
744@code{unload-feature} can cause problems with libraries that fail to do
745this, so it should be used with caution.
6582d61e 746
ee6bcc94
RS
747Ordinarily, @code{unload-feature} refuses to unload a library on which
748other loaded libraries depend. (A library @var{a} depends on library
749@var{b} if @var{a} contains a @code{require} for @var{b}.) If the
750optional argument @var{force} is non-@code{nil}, dependencies are
751ignored and you can unload any library.
83ac6b45
RS
752@end deffn
753
754 The @code{unload-feature} function is written in Lisp; its actions are
755based on the variable @code{load-history}.
756
757@defvar load-history
758This variable's value is an alist connecting library names with the
759names of functions and variables they define, the features they provide,
760and the features they require.
761
762Each element is a list and describes one library. The @sc{car} of the
c80d2280
RS
763list is the name of the library, as a string. The rest of the list
764elements have these forms:
765
766@table @code
767@item @var{fun}
768The function @var{fun} was defined by this library.
769@item (t . @var{fun})
770The function @var{fun} was previously an autoload before this library
771redefined it as a function. The following element is always the
772symbol @var{fun}, which signifies that the library defined @var{fun}
773as a function.
774@item (autoload . @var{fun})
775The function @var{fun} was defined as an autoload.
776@item (defvar . @var{var})
777The symbol @var{var} was defined as a variable.
778@item (require . @var{feature})
779The feature @var{feature} was required.
780@item (provide . @var{feature})
781The feature @var{feature} was provided.
5b1fc152 782@end table
83ac6b45
RS
783
784The value of @code{load-history} may have one element whose @sc{car} is
785@code{nil}. This element describes definitions made with
786@code{eval-buffer} on a buffer that is not visiting a file.
787@end defvar
788
789 The command @code{eval-region} updates @code{load-history}, but does so
790by adding the symbols defined to the element for the file being visited,
55607887 791rather than replacing that element. @xref{Eval}.
83ac6b45 792
cf11ad96 793@defvar unload-feature-special-hooks
6582d61e
RS
794This variable holds a list of hooks to be scanned before unloading a
795library, to remove functions defined in the library.
796@end defvar
797
83ac6b45
RS
798@node Hooks for Loading
799@section Hooks for Loading
800@cindex loading hooks
801@cindex hooks for loading
802
803You can ask for code to be executed if and when a particular library is
804loaded, by calling @code{eval-after-load}.
805
806@defun eval-after-load library form
807This function arranges to evaluate @var{form} at the end of loading the
d2e9ee06
RS
808library @var{library}, if and when @var{library} is loaded. If
809@var{library} is already loaded, it evaluates @var{form} right away.
83ac6b45 810
f2aa473a
SM
811If @var{library} is a string, it must exactly match the argument of
812@code{load} used to load the library. To get the proper results when an
813installed library is found by searching @code{load-path}, you should not
814include any directory names in @var{library}.
815
a28b5ba3 816@var{library} can also be a feature (i.e.@: a symbol), in which case
f2aa473a 817@var{form} is evaluated when @code{(provide @var{library})} is called.
83ac6b45
RS
818
819An error in @var{form} does not undo the load, but does prevent
820execution of the rest of @var{form}.
821@end defun
822
d2e9ee06
RS
823In general, well-designed Lisp programs should not use this feature.
824The clean and modular ways to interact with a Lisp library are (1)
825examine and set the library's variables (those which are meant for
cc8c51f1 826outside use), and (2) call the library's functions. If you wish to
d2e9ee06
RS
827do (1), you can do it immediately---there is no need to wait for when
828the library is loaded. To do (2), you must load the library (preferably
829with @code{require}).
830
969fe9b5
RS
831But it is OK to use @code{eval-after-load} in your personal
832customizations if you don't feel they must meet the design standards for
833programs meant for wider use.
d2e9ee06 834
83ac6b45 835@defvar after-load-alist
8241495d
RS
836This variable holds an alist of expressions to evaluate if and when
837particular libraries are loaded. Each element looks like this:
83ac6b45
RS
838
839@example
840(@var{filename} @var{forms}@dots{})
841@end example
842
843The function @code{load} checks @code{after-load-alist} in order to
844implement @code{eval-after-load}.
845@end defvar
846
847@c Emacs 19 feature
ab5796a9
MB
848
849@ignore
850 arch-tag: df731f89-0900-4389-a436-9105241b6f7a
851@end ignore