Go to the first, previous, next, last section, table of contents.


Repeated Loading

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.