Mercurial > emacs
changeset 26831:ddaafb816c3e
(custom-handle-keyword): Add :set-after.
(custom-add-dependencies): New function.
(custom-set-variables): Take dependencies between args into
account.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Tue, 14 Dec 1999 12:56:36 +0000 |
parents | e0b76e95d7be |
children | 4a01a2762de5 |
files | lisp/custom.el |
diffstat | 1 files changed, 33 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/custom.el Tue Dec 14 10:46:48 1999 +0000 +++ b/lisp/custom.el Tue Dec 14 12:56:36 1999 +0000 @@ -353,9 +353,30 @@ (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 @@ 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)