-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
helm-themes.el
79 lines (63 loc) · 2.67 KB
/
helm-themes.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
;;; helm-themes.el --- Color theme selection with helm interface -*- lexical-binding: t; -*-
;; Copyright (C) 2016 by Syohei YOSHIDA
;; Author: Syohei YOSHIDA <syohex@gmail.com>
;; URL: https://github.com/syohex/emacs-helm-themes
;; Version: 0.05
;; Package-Requires: ((helm-core "3.6.0") (emacs "24.4"))
;; 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-core)
;; Loading mutiple themes makes Emacs too slow
(defsubst helm-themes--delete-theme ()
"Delete theme."
(mapc 'disable-theme custom-enabled-themes))
(defun helm-themes--load-theme (theme-str)
"Load the theme by THEME-STR."
(helm-themes--delete-theme)
(if (string= theme-str "default")
t
(load-theme (intern theme-str) t)))
(defun helm-themes--candidates ()
"Return a list of themes."
(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)
"Helm source for themes selection.")
;;;###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
(when (helm :prompt (format "pattern (current theme: %s): "
(if (null custom-enabled-themes)
'default
(symbol-name orig-theme)))
:preselect (format "%s$" (symbol-name orig-theme))
: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