From 077ad61cf82241450fd11d80b348a171a031d447 Mon Sep 17 00:00:00 2001 From: Luc Teirlinck Date: Sat, 2 Jul 2005 22:53:04 +0000 Subject: [PATCH] (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. --- lisp/cus-theme.el | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el index 41240303037..a40b40aabf2 100644 --- a/lisp/cus-theme.el +++ b/lisp/cus-theme.el @@ -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. -- 2.39.2