Add doom/switch-theme; a more sensible load-theme

load-theme doesn't disable previously enabled themes before switching.
doom/switch-theme does.

This remaps any keys bound to load-theme to doom/switch-theme.
This commit is contained in:
Henrik Lissner 2018-08-11 00:33:23 +02:00
parent 3b4fd56cac
commit 43e0314e86
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 24 additions and 3 deletions

View file

@ -103,3 +103,20 @@ presentations."
(mapc #'disable-theme custom-enabled-themes)) (mapc #'disable-theme custom-enabled-themes))
(doom|init-theme) (doom|init-theme)
(doom|init-fonts))) (doom|init-fonts)))
;;;###autoload
(defun doom/switch-theme (theme)
"Like `load-theme', but will unload currently loaded themes before switching
to a new one."
(interactive
(list (completing-read
"Load theme: "
(mapcar #'symbol-name
(custom-available-themes)))))
(condition-case nil
(progn
(mapc #'disable-theme custom-enabled-themes)
(load-theme (intern theme) t)
(when (fboundp 'powerline-reset)
(powerline-reset)))
(error "Problem loading theme %s" x)))

View file

@ -540,14 +540,18 @@ frame's window-system, the theme will be reloaded.")
(setq frame-title-format '("%b Doom Emacs")) (setq frame-title-format '("%b Doom Emacs"))
;; draw me like one of your French editors ;; draw me like one of your French editors
(tooltip-mode -1) ; relegate tooltips to echo area only (tooltip-mode -1) ; relegate tooltips to echo area only
;; prompts the user for confirmation when deleting a non-empty frame
(define-key global-map [remap delete-frame] #'doom/delete-frame)
;; a good indicator that Emacs isn't frozen ;; a good indicator that Emacs isn't frozen
(add-hook 'doom-init-ui-hook #'blink-cursor-mode) (add-hook 'doom-init-ui-hook #'blink-cursor-mode)
;; line numbers in most modes ;; line numbers in most modes
(add-hook! (prog-mode text-mode conf-mode) #'doom|enable-line-numbers) (add-hook! (prog-mode text-mode conf-mode) #'doom|enable-line-numbers)
;; More sensibile replacements for default commands
(define-key! 'global
;; prompts the user for confirmation when deleting a non-empty frame
[remap delete-frame] #'doom/delete-frame
;; a more sensible load-theme, that disables previous themes first
[remap load-theme] #'doom/switch-theme)
(defun doom*fix-whitespace-mode-in-childframes (orig-fn &rest args) (defun doom*fix-whitespace-mode-in-childframes (orig-fn &rest args)
(let ((frame (apply orig-fn args))) (let ((frame (apply orig-fn args)))
(with-selected-frame frame (with-selected-frame frame