From 13b5da04463fb47706fb881760d8cb2b5a6ffada Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Tue, 14 Dec 1999 12:56:36 +0000 Subject: [PATCH] (custom-handle-keyword): Add :set-after. (custom-add-dependencies): New function. (custom-set-variables): Take dependencies between args into account. --- lisp/custom.el | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/lisp/custom.el b/lisp/custom.el index 88b03e51bf3..1d7bf311ea4 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -353,9 +353,30 @@ Fourth argument TYPE is the custom option type." (custom-add-load symbol value)) ((eq keyword :tag) (put symbol 'custom-tag value)) + ((eq keyword :set-after) + (custom-add-dependencies symbol value)) (t (error "Unknown keyword %s" keyword)))) +(defun custom-add-dependencies (symbol value) + "To the custom option SYMBOL, add dependencies specified by VALUE. +VALUE should be a list of symbols. For each symbol in that list, +this specifies that SYMBOL should be set after the specified symbol, if +both appear in constructs like `custom-set-variables'." + (unless (listp value) + (error "Invalid custom dependency `%s'" value)) + (let* ((deps (get symbol 'custom-dependencies)) + (new-deps deps)) + (while value + (let ((dep (car value))) + (unless (symbolp dep) + (error "Invalid custom dependency `%s'" dep)) + (unless (memq dep new-deps) + (setq new-deps (cons dep new-deps))) + (setq value (cdr value)))) + (unless (eq deps new-deps) + (put symbol 'custom-dependencies new-deps)))) + (defun custom-add-option (symbol option) "To the variable SYMBOL add OPTION. @@ -404,6 +425,18 @@ If NOW is present and non-nil, VALUE is also evaluated and bound as the default value for the SYMBOL. REQUEST is a list of features we must require for SYMBOL. COMMENT is a comment string about SYMBOL." + (setq args + (sort args + (lambda (a1 a2) + (let* ((sym1 (car a1)) + (sym2 (car a2)) + (1-then-2 (memq sym1 (get sym2 'custom-dependencies))) + (2-then-1 (memq sym2 (get sym1 'custom-dependencies)))) + (cond ((and 1-then-2 2-then-1) + (error "Circular custom dependency between `%s' and `%s'" + sym1 sym2)) + (2-then-1 nil) + (t t)))))) (while args (let ((entry (car args))) (if (listp entry) -- 2.39.5