Fix dashboard opening over files via emacsclient

Fixes #119
This commit is contained in:
Henrik Lissner 2017-06-25 01:59:58 +02:00
parent 383d7dbddb
commit e595f20cd0
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -21,6 +21,8 @@
(defvar +doom-dashboard--old-fringe-indicator fringe-indicator-alist)
(defvar +doom-dashboard--old-modeline nil)
(setq doom-fallback-buffer +doom-dashboard-name)
;;
(map! :map +doom-dashboard-mode-map
@ -62,22 +64,31 @@
;;
(setq doom-fallback-buffer +doom-dashboard-name)
(defun +doom-dashboard|init ()
"Initialize doom-dashboard and set up its hooks; possibly open the dashboard
if in a GUI/non-daemon session."
(add-hook 'window-configuration-change-hook #'+doom-dashboard-reload)
(add-hook 'kill-buffer-query-functions #'+doom-dashboard|kill-buffer-query-fn)
(when (and (display-graphic-p) (not (daemonp)))
(+doom-dashboard/open (selected-frame))))
(defun +doom-dashboard|kill-buffer-query-fn ()
(or (not (+doom-dashboard-p))
(ignore (ignore-errors (+doom-dashboard-reload))
(bury-buffer))))
(defun +doom-dashboard|init (&rest _)
(unless noninteractive
(add-hook 'after-make-frame-functions #'+doom-dashboard-deferred-reload)
(add-hook 'window-configuration-change-hook #'+doom-dashboard-reload)
(add-hook 'kill-buffer-query-functions #'+doom-dashboard|kill-buffer-query-fn)
(unless (daemonp)
(+doom-dashboard/open t))))
(defun +doom-dashboard|make-frame (frame)
"Reload the dashboard after a brief pause. This is necessary for new frames,
whose dimensions may not be fully initialized by the time this is run."
(run-with-timer 0.1 nil #'+doom-dashboard/open frame))
(add-hook 'doom-post-init-hook #'+doom-dashboard|init)
(add-hook 'window-setup-hook #'+doom-dashboard|init)
(add-hook 'after-make-frame-functions #'+doom-dashboard|make-frame)
(defun +doom-dashboard|server-visit (&rest _)
"Inhibit dashboard refresh when opening files via emacsclient."
(setq +doom-dashboard-inhibit-refresh t))
(add-hook 'server-visit-hook #'+doom-dashboard|server-visit)
;; Compatibility with `midnight-mode' and `clean-buffer-list'
(after! midnight-mode
@ -85,14 +96,13 @@
(push "^\\s-*\\*doom.+" clean-buffer-list-kill-never-regexps))
;;
(defun +doom-dashboard/open (&optional startup)
"Open the dashboard buffer."
(interactive)
(when (or (not startup)
(one-window-p t)
(eq (buffer-name (window-buffer (car (window-list)))) "*scratch*"))
(+doom-dashboard-reload)
(switch-to-buffer (doom-fallback-buffer))))
(defun +doom-dashboard/open (frame)
(interactive (list (selected-frame)))
(unless +doom-dashboard-inhibit-refresh
(with-selected-frame frame
(switch-to-buffer (doom-fallback-buffer))
(+doom-dashboard-reload)))
(setq +doom-dashboard-inhibit-refresh nil))
(defun +doom-dashboard-p (&optional buffer)
"Returns t if BUFFER is the dashboard buffer."
@ -112,8 +122,8 @@ whose dimensions may not be fully initialized by the time this is run."
(defun +doom-dashboard-reload (&optional dir)
"Update the DOOM scratch buffer (or create it, if it doesn't exist)."
(when (and (not +doom-dashboard-inhibit-refresh)
(not (minibuffer-window-active-p (minibuffer-window)))
(get-buffer-window-list (doom-fallback-buffer)))
(not (window-minibuffer-p (frame-selected-window)))
(get-buffer-window (doom-fallback-buffer)))
(unless +doom-dashboard-modeline
(setq +doom-dashboard--old-modeline mode-line-format)
(setq +doom-dashboard-modeline