;;; cus-theme.el -- custom theme creation user interface
;;
-;; Copyright (C) 2001-2012 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2016 Free Software Foundation, Inc.
;;
;; Author: Alex Schroeder <alex@gnu.org>
-;; Maintainer: FSF
+;; Maintainer: emacs-devel@gnu.org
;; Keywords: help, faces
;; Package: emacs
(defvar custom-new-theme-mode-map
(let ((map (make-keymap)))
- (set-keymap-parent map widget-keymap)
+ (set-keymap-parent map (make-composed-keymap widget-keymap
+ special-mode-map))
(suppress-keymap map)
(define-key map "\C-x\C-s" 'custom-theme-write)
+ (define-key map "q" 'Custom-buffer-done)
(define-key map "n" 'widget-forward)
(define-key map "p" 'widget-backward)
map)
(defun customize-create-theme (&optional theme buffer)
"Create or edit a custom theme.
THEME, if non-nil, should be an existing theme to edit. If THEME
-is `user', provide an option to remove these as custom settings.
+is `user', the resulting *Custom Theme* buffer also contains a
+checkbox for removing the theme settings specified in the buffer
+from the Custom save file.
BUFFER, if non-nil, should be a buffer to use; the default is
named *Custom Theme*."
(interactive)
(message "")))
(defun custom-theme-revert (_ignore-auto noconfirm)
+ "Revert the current *Custom Theme* buffer.
+This is the `revert-buffer-function' for `custom-new-theme-mode'."
(when (or noconfirm (y-or-n-p "Discard current changes? "))
(customize-create-theme custom-theme--save-name (current-buffer))))
(defun custom-theme-add-face (face &optional spec)
"Add a widget for FACE (a symbol) to the *New Custom Theme* buffer.
SPEC, if non-nil, should be a face spec to which to set the widget."
- (interactive (list (read-face-name "Face name" nil nil) nil))
+ (interactive (list (read-face-name "Face name" (face-at-point t))))
(unless (or (facep face) spec)
(error "`%s' has no face definition" face))
(let ((entry (assq face custom-theme-faces)))
(princ theme)
(princ "\n")
(dolist (spec faces)
+ ;; Insert the face iff the checkbox widget is checked.
(when (widget-get (nth 1 spec) :value)
(let* ((symbol (nth 0 spec))
(widget (nth 2 spec))
(value
- (if (car-safe (widget-get widget :children))
- (custom-face-widget-to-spec widget)
- ;; Child is null if the widget is closed (hidden).
- (widget-get widget :shown-value))))
+ (cond
+ ((car-safe (widget-get widget :children))
+ (custom-face-widget-to-spec widget))
+ ;; Child is null if the widget is closed (hidden).
+ ((widget-get widget :shown-value))
+ (t (custom-face-get-current-spec symbol)))))
(when (and (facep symbol) value)
(princ (if (bolp) " '(" "\n '("))
(prin1 symbol)
'("" "c")))
doc)
(when fn
- (princ " in `")
+ (princ (substitute-command-keys " in `"))
(help-insert-xref-button (file-name-nondirectory fn)
'help-theme-def fn)
- (princ "'"))
+ (princ (substitute-command-keys "'")))
(princ ".\n")
(if (custom-theme-p theme)
(progn
(setq doc (nth 2 sexp)))))))
(princ "\n\nDocumentation:\n")
(princ (if (stringp doc)
- doc
+ (substitute-command-keys doc)
"No documentation available.")))
(princ "\n\nYou can ")
(help-insert-xref-button "customize" 'help-theme-edit theme)
:follow-link 'mouse-face
:action (lambda (_widget &rest _ignore)
(describe-variable 'custom-theme-load-path)))
- (widget-insert "'.\n\n")
+ (widget-insert (substitute-command-keys "'.\n\n"))
;; If the user has made customizations, display a warning and
;; provide buttons to disable or convert them.