(custom-new-theme-mode): New function.

(custom-theme-name, custom-theme-variables, custom-theme-faces)
(custom-theme-description): Add compiler defvars.
(customize-create-theme): Add doc to the "*New Custom Theme*"
buffer.  Use `custom-new-theme-mode'.
(custom-theme-write): Put the created buffer in emacs-lisp-mode
and save it to the `custom-theme-directory'.  Make this the
default directory of the buffer.
This commit is contained in:
Luc Teirlinck 2005-07-02 22:53:04 +00:00
parent 9c4b6e94bf
commit 077ad61cf8

View file

@ -31,6 +31,18 @@
(eval-when-compile
(require 'wid-edit))
(define-derived-mode custom-new-theme-mode nil "New-Theme"
"Major mode for the buffer created by `customize-create-theme'.
Do not call this mode function yourself. It is only meant for internal
use by `customize-create-theme'."
(set-keymap-parent custom-new-theme-mode-map widget-keymap))
(put 'custom-new-theme-mode 'mode-class 'special)
(defvar custom-theme-name)
(defvar custom-theme-variables)
(defvar custom-theme-faces)
(defvar custom-theme-description)
;;;###autoload
(defun customize-create-theme ()
"Create a custom theme."
@ -38,15 +50,23 @@
(if (get-buffer "*New Custom Theme*")
(kill-buffer "*New Custom Theme*"))
(switch-to-buffer "*New Custom Theme*")
(kill-all-local-variables)
(let ((inhibit-read-only t))
(erase-buffer))
(custom-new-theme-mode)
(make-local-variable 'custom-theme-name)
(make-local-variable 'custom-theme-variables)
(make-local-variable 'custom-theme-faces)
(make-local-variable 'custom-theme-description)
(let ((inhibit-read-only t))
(erase-buffer))
(widget-insert "This buffer helps you write a custom theme elisp file.
This will help you share your customizations with other people.\n\n")
This will help you share your customizations with other people.
Just insert the names of all variables and faces you want the theme
to include. Then clicking mouse-2 or pressing RET on the [Done] button
will write a theme file that sets all these variables and faces to their
current global values. It will write that file into the directory given
by the variable `custom-theme-directory', usually \"~/.emacs.d/\".
To undo all your edits to the buffer, use the [Reset] button.\n\n")
(widget-insert "Theme name: ")
(setq custom-theme-name
(widget-create 'editable-field
@ -81,7 +101,6 @@ This will help you share your customizations with other people.\n\n")
(bury-buffer))
"Bury Buffer")
(widget-insert "\n")
(use-local-map widget-keymap)
(widget-setup))
(defun custom-theme-write (&rest ignore)
@ -90,6 +109,10 @@ This will help you share your customizations with other people.\n\n")
(variables (widget-value custom-theme-variables))
(faces (widget-value custom-theme-faces)))
(switch-to-buffer (concat name "-theme.el"))
(emacs-lisp-mode)
(unless (file-exists-p custom-theme-directory)
(make-directory (file-name-as-directory custom-theme-directory) t))
(setq default-directory custom-theme-directory)
(setq buffer-file-name (expand-file-name (concat name "-theme.el")))
(let ((inhibit-read-only t))
(erase-buffer))
@ -100,7 +123,8 @@ This will help you share your customizations with other people.\n\n")
(insert ")\n")
(custom-theme-write-variables name variables)
(custom-theme-write-faces name faces)
(insert "\n(provide-theme '" name ")\n")))
(insert "\n(provide-theme '" name ")\n")
(save-buffer)))
(defun custom-theme-write-variables (theme vars)
"Write a `custom-theme-set-variables' command for THEME.