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