Next: , Previous: , Up: Loading   [Contents][Index]


20.3 Repeated Loading

You may load one file more than once in a SXEmacs 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, remember to byte-compile it if necessary; otherwise you may find yourself inadvertently reloading the older, byte-compiled file instead of your newer, non-compiled file!

When writing the forms in a Lisp library file, keep in mind that the file might be loaded more than once. For example, the choice of defvar vs. defconst for defining a variable depends on whether it is desirable to reinitialize the variable if the library is reloaded: defconst does so, and defvar does not. (See Defining 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, use add-to-list (see Setting Variables).

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)

(if (not (boundp '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 to test whether the library has been loaded.


Next: , Previous: , Up: Loading   [Contents][Index]