* custom.el (defcustom, custom-handle-keyword): Add :package-version

keyword.
(custom-add-package-version): New function. Sets value of new property
'custom-package-version from :package-version keyword.

* cus-edit.el (customize-package-emacs-version-alist): New variable.
(customize-changed-options): Add check for custom-package-version.
(customize-package-emacs-version): New function to look up Emacs
version corresponding to the given package version.
This commit is contained in:
Bill Wohler 2006-04-10 23:43:34 +00:00
parent 1d22fabd46
commit 4e9c705e50
3 changed files with 67 additions and 2 deletions

View file

@ -786,7 +786,7 @@ when the action is chosen.")
(if (or (and (= 1 (length children))
(memq (widget-type (car children))
'(custom-variable custom-face)))
(y-or-n-p "Reset all settings' buffer text to show current values? "))
(y-or-n-p "Reset all settings' buffer text to show current values? "))
(mapc (lambda (widget)
(if (memq (widget-get widget :custom-state)
'(modified changed))
@ -1079,6 +1079,18 @@ Show the buffer in another window, but don't select it."
(defvar customize-changed-options-previous-release "21.1"
"Version for `customize-changed-options' to refer back to by default.")
;; Packages will update this variable, so make it available.
;;;###autoload
(defvar customize-package-emacs-version-alist nil
"Alist that maps packages to alists of package to Emacs versions.
The value alists map all package versions used with
the :package-version keyword to Emacs versions. Packages are
symbols and versions are strings.
For example:
'((MH-E (\"7.4\" \"22.1\") (\"8.0\" \"22.1\"))
(Gnus (\"5.11\" \"22.1\")))")
;;;###autoload
(defalias 'customize-changed 'customize-changed-options)
@ -1119,7 +1131,12 @@ that were added or redefined since that version."
(let (found)
(mapatoms
(lambda (symbol)
(let ((version (get symbol 'custom-version)))
(let* ((package-version (get symbol 'custom-package-version))
(version
(or (and package-version
(customize-package-emacs-version symbol
package-version))
(get symbol 'custom-version))))
(if version
(when (customize-version-lessp since-version version)
(if (or (get symbol 'custom-group)
@ -1135,6 +1152,31 @@ that were added or redefined since that version."
(error "No user option defaults have been changed since Emacs %s"
since-version))))
(defun customize-package-emacs-version (symbol package-version)
"Return Emacs version of SYMBOL.
PACKAGE-VERSION has the form (PACKAGE VERSION). The VERSION of
PACKAGE is looked up in the associated list
`customize-package-emacs-version-alist' to find the version of
Emacs that is associated with it."
(let (package-versions emacs-version)
;; Use message instead of error since we want user to be able to
;; see the rest of the symbols even if a package author has
;; botched things up.
(cond ((not (listp package-version))
(message "Invalid package-version value for %s" symbol))
((setq package-versions (assq (car package-version)
customize-package-emacs-version-alist))
(setq emacs-version
(cadr (assoc (cadr package-version) package-versions)))
(unless emacs-version
(message "Package version of %s not found in %s" symbol
"customize-package-emacs-version-alist")))
(t
(message "Package %s neglected to update %s"
(car package-version)
"customize-package-emacs-version-alist")))
emacs-version))
(defun customize-version-lessp (version1 version2)
;; Why are the versions strings, and given that they are, why aren't
;; they converted to numbers and compared as such here? -- fx