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