feature/popup: make modeline-setting more reliable

Some popups may retain their mode-line. Especially popups whose buffers
are displayed before their mode or content is inserted (maybe
asynchronously). This change tries to tackle that; ensuring that
mode-line setting is more consistent.
This commit is contained in:
Henrik Lissner 2018-03-18 02:37:10 -04:00
parent 01cb16cf42
commit 4a32213b38
No known key found for this signature in database
GPG Key ID: 5F6C0EA160557395
2 changed files with 23 additions and 13 deletions

View File

@ -180,6 +180,7 @@ Uses `shrink-window-if-larger-than-buffer'."
(add-hook 'doom-unreal-buffer-functions #'+popup-buffer-p)
(add-hook 'doom-escape-hook #'+popup|close-on-escape t)
(add-hook 'doom-cleanup-hook #'+popup|cleanup-rules)
(add-hook 'after-change-major-mode-hook #'+popup|set-modeline-on-enable)
(setq +popup--old-display-buffer-alist display-buffer-alist
display-buffer-alist +popup--display-buffer-alist
window--sides-inhibit-check t)
@ -189,6 +190,7 @@ Uses `shrink-window-if-larger-than-buffer'."
(remove-hook 'doom-unreal-buffer-functions #'+popup-buffer-p)
(remove-hook 'doom-escape-hook #'+popup|close-on-escape)
(remove-hook 'doom-cleanup-hook #'+popup|cleanup-rules)
(remove-hook 'after-change-major-mode-hook #'+popup|set-modeline-on-enable)
(setq display-buffer-alist +popup--old-display-buffer-alist
window--sides-inhibit-check nil)
(+popup|cleanup-rules)
@ -221,7 +223,7 @@ disabled."
(set-window-fringes nil f f fringes-outside-margins)))
;;;###autoload
(defun +popup|set-modeline ()
(defun +popup|set-modeline-on-enable ()
"Don't show modeline in popup windows without a `modeline' window-parameter.
+ If one exists and it's a symbol, use `doom-modeline' to grab the format.
@ -229,17 +231,22 @@ disabled."
+ If nil (or omitted), then hide the modeline entirely (the default).
+ If a function, it takes the current buffer as its argument and must return one
of the above values."
(if +popup-buffer-mode
(let ((modeline (+popup-parameter-fn 'modeline nil (current-buffer))))
(cond ((eq modeline 't))
((or (eq modeline 'nil)
(not modeline))
(hide-mode-line-mode +1))
((symbolp modeline)
(when-let* ((hide-mode-line-format (doom-modeline modeline)))
(hide-mode-line-mode +1)))))
(when (bound-and-true-p hide-mode-line-mode)
(hide-mode-line-mode -1))))
(when +popup-buffer-mode
(let ((modeline (+popup-parameter-fn 'modeline nil (current-buffer))))
(cond ((eq modeline 't))
((or (eq modeline 'nil)
(null modeline))
(hide-mode-line-mode +1))
((symbolp modeline)
(when-let* ((hide-mode-line-format (doom-modeline modeline)))
(hide-mode-line-mode +1)))))))
;;;###autoload
(defun +popup|unset-modeline-on-disable ()
"Restore the modeline when `+popup-buffer-mode' is deactivated."
(when (and (not +popup-buffer-mode)
(bound-and-true-p hide-mode-line-mode))
(hide-mode-line-mode -1)))
;;;###autoload
(defun +popup|close-on-escape ()

View File

@ -166,7 +166,10 @@ ALIST supports one custom parameter: `size', which will resolve to
'((size . +popup-shrink-to-fit)) '((transient . 0) (select . ignore))))
(add-hook 'doom-init-ui-hook #'+popup-mode)
(add-hook! '+popup-buffer-mode-hook #'(+popup|adjust-fringes +popup|set-modeline))
(add-hook! '+popup-buffer-mode-hook
#'(+popup|adjust-fringes
+popup|set-modeline-on-enable
+popup|unset-modeline-on-disable))
;;