: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)
(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.
(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 "
(custom-unlispify-tag-name group))))))
;;;###autoload
-(defun customize-group-other-window (symbol)
- "Customize SYMBOL, which must be a customization group."
- (interactive (list (completing-read "Customize group: (default emacs) "
- obarray
- (lambda (symbol)
- (get symbol 'custom-group))
- t)))
-
- (when (stringp symbol)
- (if (string-equal "" symbol)
- (setq symbol 'emacs)
- (setq symbol (intern symbol))))
- (custom-buffer-create-other-window
- (list (list symbol 'custom-group))
- (format "*Customize Group: %s*" (custom-unlispify-tag-name symbol))))
+(defun customize-group-other-window (group)
+ "Customize GROUP, which must be a customization group."
+ (interactive (list (let ((completion-ignore-case t))
+ (completing-read "Customize group: (default emacs) "
+ obarray
+ (lambda (symbol)
+ (or (get symbol 'custom-loads)
+ (get symbol 'custom-group)))
+ t))))
+ (when (stringp group)
+ (if (string-equal "" group)
+ (setq group 'emacs)
+ (setq group (intern group))))
+ (or (get group 'custom-group)
+ (custom-load-symbol group))
+ (let ((name (format "*Customize Group: %s*"
+ (custom-unlispify-tag-name group))))
+ (if (get-buffer name)
+ (let ((window (selected-window)))
+ (pop-to-buffer name)
+ (select-window window))
+ (custom-buffer-create-other-window
+ (list (list group 'custom-group))
+ name
+ (concat " for group "
+ (custom-unlispify-tag-name group))))))
;;;###autoload
(defalias 'customize-variable 'customize-option)
(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?
(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
(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)))
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
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)))
(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
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...")
(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
"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)