annotate lispref/loading.texi @ 17846:c427501449a1

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