79 lines
2.3 KiB
EmacsLisp
79 lines
2.3 KiB
EmacsLisp
|
;;; theme.el --- Colors and stuff -*- lexical-binding: t -*-
|
||
|
|
||
|
;; Author: William Carroll <wpcarro@gmail.com>
|
||
|
;; Version: 0.0.1
|
||
|
;; Package-Requires: ((emacs "24.3"))
|
||
|
|
||
|
;;; Commentary:
|
||
|
;;
|
||
|
;; Cycle through a whitelist of themes.
|
||
|
|
||
|
;;; Code:
|
||
|
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
;; Dependencies
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
|
||
|
(require 'cycle)
|
||
|
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
;; Library
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
|
||
|
(defgroup theme nil
|
||
|
"Customization options for `theme'."
|
||
|
:group 'theme)
|
||
|
|
||
|
(defcustom theme-whitelist
|
||
|
(cycle-from-list (custom-available-themes))
|
||
|
"The whitelist of themes through which to cycle."
|
||
|
:type '(cycle symbol)
|
||
|
:group 'theme)
|
||
|
|
||
|
(defcustom theme-after-change
|
||
|
nil
|
||
|
"Hook invoked after a new theme is loaded"
|
||
|
:type 'hook
|
||
|
:group 'theme)
|
||
|
|
||
|
(defun theme-whitelist-set (theme)
|
||
|
"Focus the THEME in the `theme-whitelist' cycle."
|
||
|
(cycle-focus! (lambda (x) (equal x theme)) theme-whitelist)
|
||
|
(theme--set (cycle-current theme-whitelist)))
|
||
|
|
||
|
(defun theme-select ()
|
||
|
"Load a theme using `completing-read'."
|
||
|
(interactive)
|
||
|
(let ((theme (completing-read "Theme: " (cycle-to-list theme-whitelist))))
|
||
|
(theme--disable-all)
|
||
|
(theme--set (intern theme))))
|
||
|
|
||
|
(defun theme-next ()
|
||
|
"Disable the currently active theme and load the next theme."
|
||
|
(interactive)
|
||
|
(disable-theme (cycle-current theme-whitelist))
|
||
|
(theme--set (cycle-next! theme-whitelist))
|
||
|
(message (format "Active theme: %s" (cycle-current theme-whitelist))))
|
||
|
|
||
|
(defun theme-prev ()
|
||
|
"Disable the currently active theme and load the previous theme."
|
||
|
(interactive)
|
||
|
(disable-theme (cycle-current theme-whitelist))
|
||
|
(theme--set (cycle-prev! theme-whitelist))
|
||
|
(message (format "Active theme: %s" (cycle-current theme-whitelist))))
|
||
|
|
||
|
(defun theme--disable-all ()
|
||
|
"Disable all currently enabled themes."
|
||
|
(interactive)
|
||
|
(dolist (x custom-enabled-themes)
|
||
|
(disable-theme x)))
|
||
|
|
||
|
(defun theme--set (theme)
|
||
|
"Call `load-theme' with `THEME', ensuring that the line numbers are bright.
|
||
|
There is no hook that I'm aware of to handle this more elegantly."
|
||
|
(load-theme theme t)
|
||
|
(run-hooks 'theme-after-change))
|
||
|
|
||
|
(provide 'theme)
|
||
|
;;; theme.el ends here
|