# HG changeset patch # User Eli Zaretskii # Date 1076953178 0 # Node ID 2e361a295c268e0dec68be0b88ab17382f9d7f41 # Parent d45c69658d148e9ad5fa53f1f92d5cf3b56c2a63 (unload-feature): Doc fix. Rename flist to unload-hook-features-list. diff -r d45c69658d14 -r 2e361a295c26 lisp/loadhist.el --- a/lisp/loadhist.el Mon Feb 16 17:18:58 2004 +0000 +++ b/lisp/loadhist.el Mon Feb 16 17:39:38 2004 +0000 @@ -120,7 +120,17 @@ (defun unload-feature (feature &optional force) "Unload the library that provided FEATURE, restoring all its autoloads. If the feature is required by any other loaded code, and prefix arg FORCE -is nil, raise an error." +is nil, raise an error. + +This function tries to undo modifications made by the package to +hooks. Packages may define a hook FEATURE-unload-hook that is called +instead of the normal heuristics for doing this. 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 normally-ill-advised, +such as redefining an Emacs function." (interactive (list (read-feature "Feature: ") current-prefix-arg)) (if (not (featurep feature)) (error "%s is not a currently loaded feature" (symbol-name feature))) @@ -130,8 +140,8 @@ (if dependents (error "Loaded libraries %s depend on %s" (prin1-to-string dependents) file)))) - (let* ((flist (feature-symbols feature)) - (file (car flist)) + (let* ((unload-hook-features-list (feature-symbols feature)) + (file (car unload-hook-features-list)) (unload-hook (intern-soft (concat (symbol-name feature) "-unload-hook")))) ;; Try to avoid losing badly when hooks installed in critical @@ -155,10 +165,10 @@ (string-match "-hooks?\\'" (symbol-name x))) (and (boundp x) ; Known abnormal hooks etc. (memq x unload-feature-special-hooks))) - (dolist (y (cdr flist)) + (dolist (y (cdr unload-hook-features-list)) (remove-hook x y)))))) (if (fboundp 'elp-restore-function) ; remove ELP stuff first - (dolist (elt (cdr flist)) + (dolist (elt (cdr unload-hook-features-list)) (if (symbolp elt) (elp-restore-function elt)))) (mapc @@ -183,7 +193,7 @@ (fmakunbound x) (let ((aload (get x 'autoload))) (if aload (fset x (cons 'autoload aload)))))))) - (cdr flist)) + (cdr unload-hook-features-list)) ;; Delete the load-history element for this file. (let ((elt (assoc file load-history))) (setq load-history (delq elt load-history)))))