A package for switching themes in Emacs interactively.
Note: Breaking changes in version 2
Emacs 24 and later comes with a set of pre-installed color-themes that can be enabled by a simple command like:
M-x load-theme RET wombat
The above command enables (rather activates) 'wombat' theme. However, when you get lazy as I did, you need something like theme-looper.el. So, if you have a list of your favorite color-themes and you want to cycle through them with simple keystrokes, you've come to the right place.
Save the file 'theme-looper.el' to disk and add the directory containing it to 'load-path' using a command in your '.emacs' file like:
(add-to-list 'load-path "~/.emacs.d/")
The above line assumes that you've placed the file into the Emacs directory '.emacs.d'.
Start the package with:
(require 'theme-looper)
If you have MELPA-Stable, MELPA or Marmalade added as a repository to your Emacs, you can just install theme-looper with
M-x package-install theme-looper RET
(global-set-key (kbd "C-}") 'theme-looper-enable-next-theme)
(global-set-key (kbd "C-{") 'theme-looper-enable-previous-theme)
(global-set-key (kbd "C-\\") 'theme-looper-enable-random-theme)
(global-set-key (kbd "C-|") 'theme-looper-select-theme)
(global-set-key (kbd "C-M-|") 'theme-looper-select-theme-from-all)
By the name, functions theme-looper-enable-next-theme
and theme-looper-enable-previous-theme
let you move through the list of your favorite color themes. When you have no clue for which theme you would like to be loaded or want to see a random theme every time you start Emacs, you can use theme-looper-enable-random-theme
.
theme-looper-select-theme
provides a list of themes to select from through a completion interface using either ivy or otherwise ido. It also tries to provide live feedback according to themes being highlighted, even before one is selected from the list. If you feel like exploring themes outside of the collection of your favorite themes, you can use theme-looper-select-theme-from-all
and select one from all available themes.
By specifying a particular set of themes
(theme-looper-set-favorite-themes '(wombat tango-dark wheatgrass))
or using a regular expression
(theme-looper-set-favorite-themes-regexp "dark")
The special symbol `default' represents Emacs defaults (no theme)
(theme-looper-set-favorite-themes '(cobalt wheatgrass *default*))
By specifying a particular set of themes
(theme-looper-set-ignored-themes '(cobalt))
or using a regular expression
(theme-looper-set-ignored-themes-regexp "green")
In this case, only the favorite themes that are not among the ones to be ignored are used.
If you want to reset your color-theme preferences, simply use
(theme-looper-reset-themes-selection)
In order to reload the currently activated color-theme, you can use
(theme-looper-reload-current-theme)
You can set hook functions to be run after every theme switch
(add-hook 'theme-looper-post-switch-hook 'my-func)
Thanks to the following people for their valuable feedback, suggestions and help for enhancements and fixes (in chronological order of their contributions):