# HG changeset patch # User Dan Nicolaescu # Date 898481441 0 # Node ID 2649d061d3707b0d1cc35763262196a940303477 # Parent 7947a4ea28a8bbd69e77cbfb891fc879d68ef0f2 *** empty log message *** diff -r 7947a4ea28a8 -r 2649d061d370 lisp/cus-dep.el --- a/lisp/cus-dep.el Mon Jun 22 02:03:41 1998 +0000 +++ b/lisp/cus-dep.el Mon Jun 22 02:10:41 1998 +0000 @@ -27,6 +27,7 @@ (require 'cl) (require 'widget) (require 'cus-face) +(require 'autoload) (defun custom-make-dependencies () "Batch function to extract custom dependencies from .el files. @@ -40,7 +41,8 @@ (message "Directory %s" (car all-subdirs)) (let ((files (directory-files (car all-subdirs) nil "\\`[^=].*\\.el\\'")) (default-directory default-directory) - file) + file + is-autoloaded) (cd (car all-subdirs)) (while files (setq file (car files) @@ -54,11 +56,17 @@ (condition-case nil (while (re-search-forward "^(defcustom\\|^(defface\\|^(defgroup" nil t) + (setq is-autoloaded nil) (beginning-of-line) + (save-excursion + (forward-line -1) + (if (looking-at generate-autoload-cookie) + (setq is-autoloaded t))) (let ((expr (read (current-buffer)))) (condition-case nil (progn (eval expr) + (put (nth 1 expr) 'custom-autoloaded is-autoloaded) (put (nth 1 expr) 'custom-where name)) (error nil)))) (error nil))))) @@ -91,6 +99,66 @@ (when found (insert "))\n")))))) (insert "\ +;;; These are for handling :version. We need to have a minimum of +;;; information so `custom-changed-variables' could do its job. +;;; For both groups and variables we have to set `custom-version'. +;;; For variables we also set the `standard-value' and for groups +;;; `group-documentation' (which is shown in the customize buffer, so +;;; we don't have to load the file containing the group. + +;;; `custom-versions-load-alist' is an alist that has as car a version +;;; number and as elts the files that have variables that contain that +;;; version. These files should be loaded before showing the +;;; customization buffer that `customize-changed-options' generates. + + +;;; This macro is used so we don't modify the information about +;;; variables and groups if it's already set. (We don't know when +;;; cus-load.el is going to be loaded and at that time some of the +;;; files might be loaded and some others might not). +(defmacro custom-put-if-not (symbol propname value) + `(unless (get ,symbol ,propname) + (put ,symbol ,propname ,value))) + +") + (let ((version-alist nil)) + (mapatoms (lambda (symbol) + (let ((version (get symbol 'custom-version)) + where) + (when version + (setq where (get symbol 'custom-where)) + (when (and where + ;; Don't bother to do anything if it's + ;; autoloaded because we will have all + ;; this info when emacs is running + ;; anyway. + (not (get symbol 'custom-autoloaded))) + (insert "(custom-put-if-not '" (symbol-name symbol) + " 'custom-version ") + (prin1 version (current-buffer)) + (insert ")\n") + (insert "(put '" (symbol-name symbol)) + (if (get symbol 'standard-value) + ;; This means it's a variable + (progn + (insert " 'standard-value t)\n") + (if (assoc version version-alist) + (unless + (member where + (cdr (assoc version version-alist))) + (push where (cdr (assoc version version-alist)))) + (push (cons version (list where)) version-alist))) + ;; This is a group + (insert " 'group-documentation ") + (prin1 (get symbol 'group-documentation) (current-buffer)) + (insert ")\n"))))))) + + (insert "\n(defvar custom-versions-load-alist " + (if version-alist "'" "")) + (prin1 version-alist (current-buffer)) + (insert "\n \"For internal use by custom.\")\n")) + + (insert "\ \(provide 'cus-load) diff -r 7947a4ea28a8 -r 2649d061d370 lisp/cus-edit.el --- a/lisp/cus-edit.el Mon Jun 22 02:03:41 1998 +0000 +++ b/lisp/cus-edit.el Mon Jun 22 02:10:41 1998 +0000 @@ -880,9 +880,12 @@ (interactive "sCustomize options changed, since version (default all versions): ") (if (equal since-version "") (setq since-version nil)) - (let ((found nil)) + (let ((found nil) + (versions nil)) (mapatoms (lambda (symbol) (and (or (boundp symbol) + ;; For variables not yet loaded. + (get symbol 'standard-value) ;; For groups the previous test fails, this one ;; could be used to determine if symbol is a ;; group. Is there a better way for this? @@ -890,7 +893,11 @@ (let ((version (get symbol 'custom-version))) (and version (or (null since-version) - (customize-version-lessp since-version version)))) + (customize-version-lessp since-version version)) + (if (member version versions) + t + ;;; Collect all versions that we use. + (push version versions)))) (setq found ;; We have to set the right thing here, ;; depending if we have a group or a @@ -900,7 +907,23 @@ (cons (list symbol 'custom-variable) found)))))) (if (not found) (error "No user options have changed defaults in recent Emacs versions") - (custom-buffer-create (custom-sort-items found t nil) + (put 'custom-versions-load-alist 'custom-loads + ;; Get all the files that correspond to element from the + ;; VERSIONS list. This could use some simplification. + (let ((flist nil)) + (while versions + (push (copy-sequence + (cdr (assoc (car versions) custom-versions-load-alist))) + flist) + (setq versions (cdr versions))) + (apply 'nconc flist))) + ;; Because we set all the files needed to be loaded as a + ;; `custom-loads' property to `custom-versions-load-alist' this + ;; call will actually load them. + (custom-load-symbol 'custom-versions-load-alist) + ;; Clean up + (put 'custom-versions-load-alist 'custom-loads nil) + (custom-buffer-create (custom-sort-items found t 'first) "*Customize Changed Options*")))) (defun customize-version-lessp (version1 version2) @@ -1183,7 +1206,7 @@ (length (length options))) (mapcar (lambda (entry) (prog2 - (message "Creating customization items %2d%%..." + (message "Creating customization items ...%2d%%" (/ (* 100.0 count) length)) (widget-create (nth 1 entry) :tag (custom-unlispify-tag-name @@ -1196,7 +1219,7 @@ options)))) (unless (eq (preceding-char) ?\n) (widget-insert "\n")) - (message "Creating customization items %2d%%...done" 100) + (message "Creating customization items ...%2d%%done" 100) (unless (eq custom-buffer-style 'tree) (mapcar 'custom-magic-reset custom-options)) (message "Creating customization setup...") diff -r 7947a4ea28a8 -r 2649d061d370 lisp/midnight.el --- a/lisp/midnight.el Mon Jun 22 02:03:41 1998 +0000 +++ b/lisp/midnight.el Mon Jun 22 02:10:41 1998 +0000 @@ -40,7 +40,8 @@ (defgroup midnight nil "Run something every day at midnight." - :group 'calendar) + :group 'calendar + :version "20.3") (defcustom midnight-mode t "*Non-nil means run `midnight-hook' at midnight. @@ -49,7 +50,6 @@ :type 'boolean :group 'midnight :require 'midnight - :version "20.3" :set (lambda (symb val) (set symb val) (require 'midnight) (if val (timer-activate midnight-timer) @@ -83,8 +83,7 @@ matching `clean-buffer-list-kill-never-buffer-names' and `clean-buffer-list-kill-never-regexps' are excluded." :type 'integer - :group 'midnight - :version "20.3") + :group 'midnight) (defcustom clean-buffer-list-delay-special 3600 "*The number of seconds before some buffers become eligible for autokilling. @@ -92,8 +91,7 @@ `clean-buffer-list-kill-buffer-names' are killed if they were last displayed more than this many seconds ago." :type 'integer - :group 'midnight - :version "20.3") + :group 'midnight) (defcustom clean-buffer-list-kill-regexps nil "*List of regexps saying which buffers will be killed at midnight. @@ -106,8 +104,7 @@ `clean-buffer-list-kill-never-regexps' and `clean-buffer-list-kill-never-buffer-names'." :type 'list - :group 'midnight - :version "20.3") + :group 'midnight) (defcustom clean-buffer-list-kill-buffer-names '("*Help*" "*Apropos*" "*Man " "*Buffer List*" "*Compile-Log*" "*info*") @@ -121,8 +118,7 @@ `clean-buffer-list-kill-never-regexps' and `clean-buffer-list-kill-never-buffer-names'." :type 'list - :group 'midnight - :version "20.3") + :group 'midnight) (defcustom clean-buffer-list-kill-never-buffer-names '("*scratch*" "*Messages*") @@ -132,8 +128,8 @@ `clean-buffer-list-kill-buffer-names' so a buffer matching any of these two lists will NOT be killed if it is also present in this list." :type 'list - :group 'midnight - :version "20.3") + :group 'midnight) + (defcustom clean-buffer-list-kill-never-regexps '("^ \*Minibuf-.*\*$") "*List of regexp saying which buffers will never be killed at midnight. @@ -143,8 +139,7 @@ `clean-buffer-list-kill-buffer-names' so a buffer matching any of these two lists will NOT be killed if it also matches anything in this list." :type 'list - :group 'midnight - :version "20.3") + :group 'midnight) (defun midnight-find (el ls test &optional key) "A stopgap solution to the absence of `find' in ELisp." @@ -198,8 +193,7 @@ "The hook run `midnight-delay' seconds after midnight every day. The default value is `clean-buffer-list'." :type 'hook - :group 'midnight - :version "20.3") + :group 'midnight) (defun midnight-next () "Return the number of seconds till the next midnight." @@ -237,8 +231,7 @@ first argument to `run-at-time'." :type 'sexp :set 'midnight-delay-set - :group 'midnight - :version "20.3") + :group 'midnight) (provide 'midnight)