From e595f20cd0db3488cb0021647937023160c1d92f Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 25 Jun 2017 01:59:58 +0200 Subject: [PATCH] Fix dashboard opening over files via emacsclient Fixes #119 --- modules/ui/doom-dashboard/config.el | 48 +++++++++++++++++------------ 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/modules/ui/doom-dashboard/config.el b/modules/ui/doom-dashboard/config.el index 85cda17f9..4f25048a6 100644 --- a/modules/ui/doom-dashboard/config.el +++ b/modules/ui/doom-dashboard/config.el @@ -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