(unload-feature): Don't remove a function from hooks if it is about to

be restored to an autoload .  Remove functions that will become
unbound from auto-mode-alist.  Simplify the code.
This commit is contained in:
Lute Kamstra 2005-04-21 21:36:24 +00:00
parent 3972533765
commit bd0f9535ce

View file

@ -188,27 +188,34 @@ such as redefining an Emacs function."
(string-match "-hooks?\\'" (symbol-name x))) (string-match "-hooks?\\'" (symbol-name x)))
(memq x unload-feature-special-hooks))) ; Known abnormal hooks etc. (memq x unload-feature-special-hooks))) ; Known abnormal hooks etc.
(dolist (y unload-hook-features-list) (dolist (y unload-hook-features-list)
(when (eq (car-safe y) 'defun) (when (and (eq (car-safe y) 'defun)
(remove-hook x (cdr y)))))))) (not (get (cdr y) 'autoload)))
(remove-hook x (cdr y)))))))
;; Remove any feature-symbols from auto-mode-alist as well.
(dolist (y unload-hook-features-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 (when (fboundp 'elp-restore-function) ; remove ELP stuff first
(dolist (elt unload-hook-features-list) (dolist (elt unload-hook-features-list)
(when (symbolp elt) (when (symbolp elt)
(elp-restore-function elt)))) (elp-restore-function elt))))
(dolist (x unload-hook-features-list) (dolist (x unload-hook-features-list)
(if (consp x) (if (consp x)
(progn (cond
;; Remove any feature names that this file provided. ;; Remove any feature names that this file provided.
(when (eq (car x) 'provide) ((eq (car x) 'provide)
(setq features (delq (cdr x) features))) (setq features (delq (cdr x) features)))
(when (eq (car x) 'defun) ((eq (car x) 'defun)
(let ((fun (cdr x))) (let ((fun (cdr x)))
(when (fboundp fun) (when (fboundp fun)
(when (fboundp 'ad-unadvise) (when (fboundp 'ad-unadvise)
(ad-unadvise fun)) (ad-unadvise fun))
(fmakunbound fun) (fmakunbound fun)
(let ((aload (get fun 'autoload))) (let ((aload (get fun 'autoload)))
(when aload (when aload
(fset fun (cons 'autoload aload)))))))) (fset fun (cons 'autoload aload))))))))
;; Kill local values as much as possible. ;; Kill local values as much as possible.
(dolist (buf (buffer-list)) (dolist (buf (buffer-list))
(with-current-buffer buf (with-current-buffer buf
@ -217,8 +224,7 @@ such as redefining an Emacs function."
(unless (local-variable-if-set-p x) (unless (local-variable-if-set-p x)
(makunbound x)))) (makunbound x))))
;; Delete the load-history element for this file. ;; Delete the load-history element for this file.
(let ((elt (assoc file load-history))) (setq load-history (delq (assoc file load-history) load-history))))
(setq load-history (delq elt load-history)))))
(provide 'loadhist) (provide 'loadhist)