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