changeset 44911:0edc2b27187b

(custom-load-symbol): Moved from cus-edit.el. (custom-load-recursion): Likewise.
author Richard M. Stallman <rms@gnu.org>
date Sun, 28 Apr 2002 03:23:52 +0000
parents 5b9979baa758
children 4600e8f9fcdf
files lisp/custom.el
diffstat 1 files changed, 41 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/custom.el	Sun Apr 28 03:18:29 2002 +0000
+++ b/lisp/custom.el	Sun Apr 28 03:23:52 2002 +0000
@@ -457,6 +457,47 @@
     (unless (member load loads)
       (put symbol 'custom-loads (cons (purecopy load) loads)))))
 
+;;; Loading files needed to customize a symbol.
+;;; This is in custom.el because menu-bar.el needs it for toggle cmds.
+
+(defvar custom-load-recursion nil
+  "Hack to avoid recursive dependencies.")
+
+(defun custom-load-symbol (symbol)
+  "Load all dependencies for SYMBOL."
+  (unless custom-load-recursion
+    (let ((custom-load-recursion t)
+	  (loads (get symbol 'custom-loads))
+	  load)
+      (while loads
+	(setq load (car loads)
+	      loads (cdr loads))
+	(cond ((symbolp load)
+	       (condition-case nil
+		   (require load)
+		 (error nil)))
+	      ;; Don't reload a file already loaded.
+	      ((and (boundp 'preloaded-file-list)
+		    (member load preloaded-file-list)))
+	      ((assoc load load-history))
+	      ;; This was just (assoc (locate-library load) load-history)
+	      ;; but has been optimized not to load locate-library
+	      ;; if not necessary.
+	      ((let (found (regexp (regexp-quote load)))
+		 (dolist (loaded load-history)
+		   (and (string-match regexp (car loaded))
+			(eq (locate-library load) (car loaded))
+			(setq found t)))
+		 found))
+	      ;; Without this, we would load cus-edit recursively.
+	      ;; We are still loading it when we call this,
+	      ;; and it is not in load-history yet.
+	      ((equal load "cus-edit"))
+	      (t
+	       (condition-case nil
+		   (load-library load)
+		 (error nil))))))))
+
 ;;; Initializing.
 
 (defvar custom-local-buffer nil