summaryrefslogtreecommitdiff
path: root/lisp/loadhist.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2007-10-24 08:12:40 +0000
committerRichard M. Stallman <rms@gnu.org>2007-10-24 08:12:40 +0000
commit8ed7fe5cf40becaa68d3bcdffe1c167c13c4918a (patch)
tree7a2caa58fb5a8cfe9753b6e45596a9cbe8bdc874 /lisp/loadhist.el
parentcaadec436df8b452370bd24187ef56b90bf55918 (diff)
downloademacs-8ed7fe5cf40becaa68d3bcdffe1c167c13c4918a.tar.gz
(unload-function-defs-list): Renamed from unload-function-features-list.
(unload-feature-special-hooks, unload-feature): Doc fixes.
Diffstat (limited to 'lisp/loadhist.el')
-rw-r--r--lisp/loadhist.el53
1 files changed, 30 insertions, 23 deletions
diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index 5d92f84e9fb..8f21e683a19 100644
--- a/lisp/loadhist.el
+++ b/lisp/loadhist.el
@@ -142,35 +142,42 @@ from a file."
write-region-annotate-functions)
"A list of special hooks from Info node `(elisp)Standard Hooks'.
-These are symbols with hook-type values whose names don't end in
-`-hook' or `-hooks', from which `unload-feature' tries to remove
+These are symbols with hooklike values whose names don't end in
+`-hook' or `-hooks', from which `unload-feature' should try to remove
pertinent symbols.")
-(defvar unload-function-features-list nil
- "List of features of the package being unloaded.
+(defvar unload-function-defs-list nil
+ "List of defintions in the Lisp library being unloaded.
-This is meant to be used by FEATURE-unload-function, see the
+This is meant to be used by `FEATURE-unload-function'; see the
documentation of `unload-feature' for details.")
(define-obsolete-variable-alias 'unload-hook-features-list
- 'unload-function-features-list "22.2")
+ 'unload-function-defs-list "22.2")
;;;###autoload
(defun unload-feature (feature &optional force)
- "Unload the library that provided FEATURE, restoring all its autoloads.
+ "Unload the library that provided FEATURE.
If the feature is required by any other loaded code, and prefix arg FORCE
is nil, raise an error.
-This function tries to undo any modifications that the package has
-made to hook values in Emacs. Normally it does this using heuristics.
-The packages may define a hook `FEATURE-unload-hook'; if that exists,
-it is called instead of the normal heuristics.
+Standard unloading activities include restoring old autoloads for
+functions defined by the library, undoing any additions that the
+library has made to hook variables or to `auto-mode-alist', undoing
+ELP profiling of functions in that library, unproviding any features
+provided by the library, and canceling timers held in variables
+defined by the library.
-Such a hook should undo all the relevant global state changes that may
-have been made by loading the package or executing functions in it.
-It has access to the package's feature list (before anything is unbound)
-in the variable `unload-hook-features-list' and could remove features
-from it in the event that the package has done something strange,
-such as redefining an Emacs function."
+If a function `FEATURE-unload-function' is defined, this function
+calls it with no arguments, before doing anything else. That function
+can do whatever is appropriate to undo the loading of the library. If
+`FEATURE-unload-function' returns non-nil, that suppresses the
+standard unloading of the library. Otherwise the standard unloading
+proceeds.
+
+`FEATURE-unload-function' has access to the package's list of
+definitions in the variable `unload-function-defs-list' and could
+remove symbols from it in the event that the package has done
+something strange, such as redefining an Emacs function."
(interactive
(list
(read-feature "Unload feature: " t)
@@ -183,8 +190,8 @@ such as redefining an Emacs function."
(when dependents
(error "Loaded libraries %s depend on %s"
(prin1-to-string dependents) file))))
- (let* ((unload-function-features-list (feature-symbols feature))
- (file (pop unload-function-features-list))
+ (let* ((unload-function-defs-list (feature-symbols feature))
+ (file (pop unload-function-defs-list))
;; If non-nil, this is a symbol for which we should
;; restore a previous autoload if possible.
restore-autoload
@@ -216,22 +223,22 @@ such as redefining an Emacs function."
(or (and (consp (symbol-value x)) ; Random hooks.
(string-match "-hooks?\\'" (symbol-name x)))
(memq x unload-feature-special-hooks))) ; Known abnormal hooks etc.
- (dolist (y unload-function-features-list)
+ (dolist (y unload-function-defs-list)
(when (and (eq (car-safe y) 'defun)
(not (get (cdr y) 'autoload)))
(remove-hook x (cdr y)))))))
;; Remove any feature-symbols from auto-mode-alist as well.
- (dolist (y unload-function-features-list)
+ (dolist (y unload-function-defs-list)
(when (and (eq (car-safe y) 'defun)
(not (get (cdr y) 'autoload)))
(setq auto-mode-alist
(rassq-delete-all (cdr y) auto-mode-alist)))))
(when (fboundp 'elp-restore-function) ; remove ELP stuff first
- (dolist (elt unload-function-features-list)
+ (dolist (elt unload-function-defs-list)
(when (symbolp elt)
(elp-restore-function elt))))
- (dolist (x unload-function-features-list)
+ (dolist (x unload-function-defs-list)
(if (consp x)
(case (car x)
;; Remove any feature names that this file provided.