Fix theme/font init in daemon Emacs

Possibly addresses #399 and #400
This commit is contained in:
Henrik Lissner 2018-02-03 17:57:41 -05:00
parent 4ce521e26b
commit 76a1e8a279
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -433,18 +433,16 @@ character that looks like a space that `whitespace-mode' won't affect.")
;; Theme & font ;; Theme & font
;; ;;
(defun doom|init-theme (&optional frame) (defun doom|init-theme ()
"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 (and (not (daemonp)) (symbolp doom-theme))
(load-theme doom-theme t)) (load-theme doom-theme t))
(add-hook 'after-make-frame-functions #'doom|init-theme-in-daemon) (add-hook 'after-make-frame-functions #'doom|init-theme-in-frame)
(run-hooks 'doom-init-theme-hook))) (run-hooks 'doom-init-theme-hook))
(defun doom|init-fonts (&optional frame) (defun doom|init-fonts (&optional frame)
"Initialize fonts." "Initialize fonts."
(add-hook 'after-make-frame-functions #'doom|init-fonts) (add-hook 'after-make-frame-functions #'doom|init-fonts)
(if (not frame)
(when (fontp doom-font) (when (fontp doom-font)
(map-put default-frame-alist 'font (font-xlfd-name doom-font))) (map-put default-frame-alist 'font (font-xlfd-name doom-font)))
(when (display-graphic-p) (when (display-graphic-p)
@ -466,20 +464,20 @@ character that looks like a space that `whitespace-mode' won't affect.")
(font-get (caddr ex) :family)) (font-get (caddr ex) :family))
(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)))))))
;; 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. `doom|init-theme' sorts out the initial GUI frame. ;; daemon Emacs is hairy. `doom|init-theme' sorts out the initial GUI frame.
;; Attaching that hook to `after-make-frame-functions' sorts out daemon and ;; Attaching `doom|init-theme-in-frame' to `after-make-frame-functions' sorts
;; emacsclient frames. ;; out daemon and emacsclient frames.
;; ;;
;; There will still be issues with simultaneous gui and terminal (emacsclient) ;; There will still be issues with simultaneous gui and terminal (emacsclient)
;; frames, however. There's always `doom//reload-theme' if you need it! ;; frames, however. There's always `doom//reload-theme' if you need it!
(defun doom|init-theme-in-daemon (frame) (defun doom|init-theme-in-frame (frame)
"Reloads the theme in new daemon or tty frames." "Reloads the theme in new daemon or tty frames."
(when (or (daemonp) (not (display-graphic-p))) (when (or (daemonp) (not (display-graphic-p)))
(doom|init-theme frame) (with-selected-frame frame
(remove-hook 'after-make-frame-functions #'doom|init-theme-in-daemon))) (doom|init-theme))))
(add-hook! 'doom-init-ui-hook #'(doom|init-theme doom|init-fonts)) (add-hook! 'doom-init-ui-hook #'(doom|init-theme doom|init-fonts))