]> git.eshelyaron.com Git - emacs.git/commitdiff
(custom-load-symbol): Moved from cus-edit.el.
authorRichard M. Stallman <rms@gnu.org>
Sun, 28 Apr 2002 03:23:52 +0000 (03:23 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sun, 28 Apr 2002 03:23:52 +0000 (03:23 +0000)
(custom-load-recursion): Likewise.

lisp/custom.el

index cae8450c968c568b33748ae5cf22872014553bc6..c12f3bec2e789885e78c6f39ae46ea5a68137f6b 100644 (file)
@@ -457,6 +457,47 @@ LOAD should be either a library file name, or a feature name."
     (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