my-emacs-d/elpa/helm-themes-20151008.2321/helm-themes.el

72 lines
2.2 KiB
EmacsLisp

;;; helm-themes.el --- Color theme selection with helm interface -*- lexical-binding: t; -*-
;; Copyright (C) 2015 by Syohei YOSHIDA
;; Author: Syohei YOSHIDA <syohex@gmail.com>
;; URL: https://github.com/syohex/emacs-helm-themes
;; Package-Version: 20151008.2321
;; Version: 0.05
;; Package-Requires: ((helm-core "1.7.7"))
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; helm-themes.el provide theme selection with helm interface.
;; Its persistent action can set theme temporary.
;;
;;; Code:
(require 'helm)
;; Loading mutiple themes makes Emacs too slow
(defsubst helm-themes--delete-theme ()
(mapc 'disable-theme custom-enabled-themes))
(defun helm-themes--load-theme (theme-str)
(helm-themes--delete-theme)
(if (string= theme-str "default")
t
(load-theme (intern theme-str) t)))
(defun helm-themes--candidates ()
(cons 'default (custom-available-themes)))
(defvar helm-themes-source
(helm-build-sync-source "Selection Theme"
:candidates 'helm-themes--candidates
:action 'helm-themes--load-theme
:persistent-action 'helm-themes--load-theme))
;;;###autoload
(defun helm-themes ()
"Theme selection with helm interface"
(interactive)
(let ((changed nil)
(orig-theme (when custom-enabled-themes
(car custom-enabled-themes))))
(unwind-protect
(progn
(when (helm :sources helm-themes-source :buffer "*helm-themes*")
(setq changed t)))
(when (not changed)
(helm-themes--delete-theme)
(when orig-theme
(load-theme orig-theme t))))))
(provide 'helm-themes)
;;; helm-themes.el ends here