X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/fd88fe732dd5335b371e8005b2e5e36db273112a..ae2777b77ab61c109b92e0b7fd00fc56f9afb61f:/lisp/cus-edit.el diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 444ab4524b..4d4fc08355 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -106,6 +106,10 @@ :group 'external :group 'development) +(defgroup convenience nil + "Convenience features for faster editing." + :group 'emacs) + (defgroup programming nil "Support for programming in other languages." :group 'emacs) @@ -607,6 +611,8 @@ If `last', order groups after non-groups." (const :tag "none" nil)) :group 'custom-menu) +;;;###autoload (add-hook 'same-window-regexps "\\`\\*Customiz.*\\*\\'") + (defun custom-sort-items (items sort-alphabetically order-groups) "Return a sorted copy of ITEMS. ITEMS should be a `custom-group' property. @@ -821,7 +827,7 @@ are shown; the contents of those subgroups are initially hidden." (let ((name (format "*Customize Group: %s*" (custom-unlispify-tag-name group)))) (if (get-buffer name) - (switch-to-buffer name) + (pop-to-buffer name) (custom-buffer-create (list (list group 'custom-group)) name (concat " for group " @@ -847,7 +853,7 @@ are shown; the contents of those subgroups are initially hidden." (custom-unlispify-tag-name group)))) (if (get-buffer name) (let ((window (selected-window))) - (switch-to-buffer-other-window name) + (pop-to-buffer name) (select-window window)) (custom-buffer-create-other-window (list (list group 'custom-group)) @@ -866,17 +872,31 @@ are shown; the contents of those subgroups are initially hidden." (format "*Customize Option: %s*" (custom-unlispify-tag-name symbol)))) +(defvar customize-changed-options-previous-release "20.2" + "Version for `customize-changed-options' to refer back to by default.") + ;;;###autoload (defun customize-changed-options (since-version) - "Customize all user option variables whose default values changed recently. -This means, in other words, variables and groups defined with a `:version' -option." + "Customize all user option variables changed in Emacs itself. +This includes new user option variables and faces, and new +customization groups, as well as older options and faces whose default +values have changed since the previous major Emacs release. + +With argument SINCE-VERSION (a string), customize all user option +variables that were added (or their meanings were changed) since that +version." + (interactive "sCustomize options changed, since version (default all versions): ") (if (equal since-version "") (setq since-version nil)) - (let ((found nil)) + (unless since-version + (setq since-version customize-changed-options-previous-release)) + (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? @@ -884,7 +904,11 @@ option." (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 @@ -893,11 +917,32 @@ option." (cons (list symbol 'custom-group) found) (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) + (error "No user option defaults have been changed since Emacs %s" + since-version) + (let ((flist nil)) + (while versions + (push (copy-sequence + (cdr (assoc (car versions) custom-versions-load-alist))) + flist) + (setq versions (cdr versions))) + (put 'custom-versions-load-alist 'custom-loads + ;; Get all the files that correspond to element from the + ;; VERSIONS list. This could use some simplification. + (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) + ;; In case someone made a mistake and left out the quotes + ;; in the :version value. + (if (numberp version2) + (setq version2 (prin1-to-string version2))) (let (major1 major2 minor1 minor2) (string-match "\\([0-9]+\\)[.]\\([0-9]+\\)" version1) (setq major1 (read (match-string 1 version1))) @@ -1068,7 +1113,7 @@ SYMBOL is a customization option, and WIDGET is a widget for editing that option." (unless name (setq name "*Customization*")) (kill-buffer (get-buffer-create name)) - (switch-to-buffer (get-buffer-create name)) + (pop-to-buffer (get-buffer-create name)) (custom-buffer-create-internal options description)) ;;;###autoload @@ -1080,8 +1125,13 @@ SYMBOL is a customization option, and WIDGET is a widget for editing that option." (unless name (setq name "*Customization*")) (kill-buffer (get-buffer-create name)) - (let ((window (selected-window))) - (switch-to-buffer-other-window (get-buffer-create name)) + (let ((window (selected-window)) + (pop-up-windows t) + (special-display-buffer-names nil) + (special-display-regexps nil) + (same-window-buffer-names nil) + (same-window-regexps nil)) + (pop-to-buffer (get-buffer-create name)) (custom-buffer-create-internal options description) (select-window window))) @@ -1172,7 +1222,7 @@ Reset all values in this buffer to their standard settings." (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 @@ -1185,7 +1235,7 @@ Reset all values in this buffer to their standard settings." 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...") @@ -1203,7 +1253,7 @@ Reset all values in this buffer to their standard settings." (setq group 'emacs)) (let ((name "*Customize Browser*")) (kill-buffer (get-buffer-create name)) - (switch-to-buffer (get-buffer-create name))) + (pop-to-buffer (get-buffer-create name))) (custom-mode) (widget-insert "\ Square brackets show active fields; type RET or click mouse-1 @@ -1440,8 +1490,8 @@ The list should be sorted most significant first.") "If non-nil, show textual description of the state. If `long', show a full-line description, not just one word." :type '(choice (const :tag "no" nil) - (const short) - (const long)) + (const long) + (other :tag "short" short)) :group 'custom-buffer) (defcustom custom-magic-show-hidden '(option face)