Refactor theme init across GUI, tty and daemon Emacs

This commit is contained in:
Henrik Lissner 2018-01-30 21:19:53 -05:00
parent 834e92c465
commit 23f914916e
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -434,6 +434,7 @@ character that looks like a space that `whitespace-mode' won't affect.")
(defun doom|init-theme (&optional frame) (defun doom|init-theme (&optional frame)
"Set the theme and load the font, in that order." "Set the theme and load the font, in that order."
(with-selected-frame (or frame (selected-frame))
(when doom-theme (when doom-theme
(load-theme doom-theme t)) (load-theme doom-theme t))
(condition-case-unless-debug ex (condition-case-unless-debug ex
@ -455,23 +456,25 @@ character that looks like a space that `whitespace-mode' won't affect.")
(lwarn 'doom-ui :error (lwarn 'doom-ui :error
"Unexpected error while initializing fonts: %s" "Unexpected error while initializing fonts: %s"
(error-message-string ex))))) (error-message-string ex)))))
(run-hooks 'doom-init-theme-hook)) (run-hooks 'doom-init-theme-hook)
(when frame
(remove-hook 'after-make-frame-functions #'doom|init-theme))))
;; Getting themes to remain consistent across GUI Emacs, terminal Emacs and ;; Getting themes to remain consistent across GUI Emacs, terminal Emacs and
;; daemon Emacs is hairy. ;; daemon Emacs is hairy. Running `doom|init-theme' sorts out the initial GUI
;; frame.
;; ;;
;; + Running `doom|init-theme' directly sorts out the initial GUI frame. ;; `doom|init-theme-in-frame' sorts out daemon and emacsclient frames by
;; + Attaching it to `after-make-frame-functions' sorts out daemon Emacs. ;; reloading the theme in those frame. However, if you open simultaneous
;; + Waiting for 0.1s in `doom|reload-ui-in-daemon' fixes daemon Emacs started ;; terminal and gui frames with emacsclient, you will get issues! There's always
;; with `server-start' in an interactive session of Emacs AND in tty Emacs. ;; `doom//reload-theme' if you need it.
(add-hook 'doom-init-ui-hook #'doom|init-theme)
(defun doom|reload-ui-in-daemon (frame) (defun doom|reload-ui-in-daemon (frame)
"Reload the theme (and font) in an daemon frame." "Reloads the theme in new daemon or tty frames."
(when (or (daemonp) (not (display-graphic-p))) (when (or (daemonp) (not (display-graphic-p)))
(with-selected-frame frame (doom|init-theme frame)))
(run-with-timer 0.1 nil #'doom|init-ui))))
(add-hook! 'after-make-frame-functions #'(doom|init-theme doom|reload-ui-in-daemon)) (add-hook 'doom-init-ui-hook #'doom|init-theme)
(add-hook 'after-make-frame-functions #'doom|reload-ui-in-daemon)
;; ;;