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