emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/loadhist.el,v


From: Juanma Barranquero
Subject: [Emacs-diffs] Changes to emacs/lisp/loadhist.el,v
Date: Fri, 19 Oct 2007 09:04:57 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Juanma Barranquero <lektu>      07/10/19 09:04:56

Index: loadhist.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/loadhist.el,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -b -r1.50 -r1.51
--- loadhist.el 17 Oct 2007 23:03:55 -0000      1.50
+++ loadhist.el 19 Oct 2007 09:04:56 -0000      1.51
@@ -137,11 +137,13 @@
 `-hook' or `-hooks', from which `unload-feature' tries to remove
 pertinent symbols.")
 
-(defvar unload-hook-features-list nil
+(defvar unload-function-features-list nil
   "List of features of the package being unloaded.
 
-This is meant to be used by FEATURE-unload-hook hooks, 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")
 
 ;;;###autoload
 (defun unload-feature (feature &optional force)
@@ -172,19 +174,25 @@
       (when dependents
        (error "Loaded libraries %s depend on %s"
               (prin1-to-string dependents) file))))
-  (let* ((unload-hook-features-list (feature-symbols feature))
-         (file (pop unload-hook-features-list))
+  (let* ((unload-function-features-list (feature-symbols feature))
+         (file (pop unload-function-features-list))
         ;; If non-nil, this is a symbol for which we should
         ;; restore a previous autoload if possible.
         restore-autoload
-         (unload-hook (intern-soft (concat (symbol-name feature)
-                                           "-unload-hook"))))
+        (name (symbol-name feature))
+         (unload-hook (intern-soft (concat name "-unload-hook")))
+        (unload-func (intern-soft (concat name "-unload-function"))))
+    ;; If FEATURE-unload-function is defined and returns non-nil,
+    ;; don't try to do anything more; otherwise proceed normally.
+    (unless (and (bound-and-true-p unload-func)
+                (funcall unload-func))
     ;; Try to avoid losing badly when hooks installed in critical
     ;; places go away.  (Some packages install things on
     ;; `kill-buffer-hook', `activate-menubar-hook' and the like.)
+      (if unload-hook
     ;; First off, provide a clean way for package FOO to arrange
     ;; this by adding hooks on the variable `FOO-unload-hook'.
-    (if unload-hook
+         ;; This is obsolete; FEATURE-unload-function should be used now.
         (run-hooks unload-hook)
       ;; Otherwise, do our best.  Look through the obarray for symbols
       ;; which seem to be hook variables or special hook functions and
@@ -199,22 +207,22 @@
                    (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-hook-features-list)
+            (dolist (y unload-function-features-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-hook-features-list)
+       (dolist (y unload-function-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
-      (dolist (elt unload-hook-features-list)
+       (dolist (elt unload-function-features-list)
        (when (symbolp elt)
          (elp-restore-function elt))))
 
-    (dolist (x unload-hook-features-list)
+      (dolist (x unload-function-features-list)
       (if (consp x)
          (case (car x)
           ;; Remove any feature names that this file provided.
@@ -247,7 +255,7 @@
        (unless (local-variable-if-set-p x)
          (makunbound x))))
     ;; Delete the load-history element for this file.
-    (setq load-history (delq (assoc file load-history) load-history)))
+      (setq load-history (delq (assoc file load-history) load-history))))
   ;; Don't return load-history, it is not useful.
   nil)
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]