You can load a given file more than once in an Emacs session. For example, after you have rewritten and reinstalled a function definition by editing it in a buffer, you may wish to return to the original version; you can do this by reloading the file it came from.
When you load or reload files, bear in mind that the load
and
load-library
functions automatically load a byte-compiled file
rather than a non-compiled file of similar name. If you rewrite a file
that you intend to save and reinstall, you need to byte-compile the new
version; otherwise Emacs will load the older, byte-compiled file instead
of your newer, non-compiled file! If that happens, the message
displayed when loading the file includes, `(compiled; note, source is
newer)', to remind you to recompile it.
When writing the forms in a Lisp library file, keep in mind that the
file might be loaded more than once. For example, think about whether
each variable should be reinitialized when you reload the library;
defvar
does not change the value if the variable is already
initialized. (See section Defining Global Variables.)
The simplest way to add an element to an alist is like this:
(setq minor-mode-alist (cons '(leif-mode " Leif") minor-mode-alist))
But this would add multiple elements if the library is reloaded. To avoid the problem, write this:
(or (assq 'leif-mode minor-mode-alist) (setq minor-mode-alist (cons '(leif-mode " Leif") minor-mode-alist)))
To add an element to a list just once, you can also use add-to-list
(see section How to Alter a Variable Value).
Occasionally you will want to test explicitly whether a library has already been loaded. Here's one way to test, in a library, whether it has been loaded before:
(defvar foo-was-loaded nil) (unless foo-was-loaded execute-first-time-only (setq foo-was-loaded t))
If the library uses provide
to provide a named feature, you can
use featurep
earlier in the file to test whether the
provide
call has been executed before.
Go to the first, previous, next, last section, table of contents.