core-popups: add :autoclose property + apply to message & help buffers
This commit is contained in:
parent
1b32aac0a5
commit
9be87b3235
2 changed files with 36 additions and 15 deletions
|
@ -75,14 +75,23 @@ real files, they will be restored. Special buffers or buffers with non-nil
|
||||||
(delete-window window))))
|
(delete-window window))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun doom/popup-close-all ()
|
(defun doom/popup-close-all (&optional force-p)
|
||||||
"Closes all open popups."
|
"Closes all open popups. If FORCE-P is non-nil, or this function is called
|
||||||
|
interactively, it will close all popups without question. Otherwise, it will
|
||||||
|
only close popups that have an :autoclose property in their rule (see
|
||||||
|
`shackle-rules')."
|
||||||
(interactive)
|
(interactive)
|
||||||
(let ((orig-win (selected-window)))
|
(let ((orig-win (selected-window)))
|
||||||
(when-let (popups (doom-popup-windows))
|
(when-let (popups (doom-popup-windows))
|
||||||
(setq doom-popup-history (mapcar 'doom--popup-data popups))
|
(setq doom-popup-history (mapcar 'doom--popup-data popups))
|
||||||
(let (doom-popup-remember-history)
|
(let (doom-popup-remember-history)
|
||||||
(mapc 'delete-window popups)))))
|
(dolist (window popups)
|
||||||
|
(let ((rules (window-parameter window 'popup)))
|
||||||
|
(when (or force-p
|
||||||
|
(called-interactively-p 'interactive)
|
||||||
|
(and (plist-member rules :autoclose)
|
||||||
|
(plist-get rules :autoclose)))
|
||||||
|
(delete-window window))))))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun doom/popup-close-maybe ()
|
(defun doom/popup-close-maybe ()
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
(defvar-local doom-popup-rules nil
|
(defvar-local doom-popup-rules nil
|
||||||
"The shackle rule that caused this buffer to be recognized as a popup.")
|
"The shackle rule that caused this buffer to be recognized as a popup.")
|
||||||
|
|
||||||
(defvar doom-popup-window-parameters '(:noesc :modeline :autokill)
|
(defvar doom-popup-window-parameters '(:noesc :modeline :autokill :autoclose)
|
||||||
"A list of window parameters that are set (and cleared) when `doom-popup-mode
|
"A list of window parameters that are set (and cleared) when `doom-popup-mode
|
||||||
is enabled/disabled.'")
|
is enabled/disabled.'")
|
||||||
|
|
||||||
|
@ -46,15 +46,18 @@ is enabled/disabled.'")
|
||||||
:init
|
:init
|
||||||
(setq shackle-default-alignment 'below
|
(setq shackle-default-alignment 'below
|
||||||
;;; Baseline popup-window rules
|
;;; Baseline popup-window rules
|
||||||
;; :noesc, :modeline and :autokill are custom settings and are not part
|
;; Several custom properties have been added that are not part of
|
||||||
;; of shackle:
|
;; shackle and are used by doom's popup system. They are:
|
||||||
;; :noesc determines if pressing ESC in this popup will close it.
|
;;
|
||||||
;; Used by `doom/popup-close-maybe'.
|
;; :noesc Determines if pressing ESC *inside* the popup should
|
||||||
;; :modeline By default, mode-lines are hidden in popups unless this is
|
;; close it. Used by `doom/popup-close-maybe'.
|
||||||
;; non-nil. If it is a symbol, it'll use `doom-modeline' to
|
;; :modeline By default, mode-lines are hidden in popups unless this
|
||||||
;; fetch a modeline config. Set in `doom-popup-mode'.
|
;; is non-nil. If it is a symbol, it'll use `doom-modeline'
|
||||||
;; :autokill If non-nil, the buffer in these popups will be killed when
|
;; to fetch a modeline config. Set in `doom-popup-mode'.
|
||||||
;; their popup is closed. Used in `doom*delete-popup-window'
|
;; :autokill If non-nil, the buffer in these popups will be killed
|
||||||
|
;; when their popup is closed. Used by
|
||||||
|
;; `doom*delete-popup-window'
|
||||||
|
;; :autoclose If non-nil, close popup if ESC is pressed from any buffer.
|
||||||
shackle-rules
|
shackle-rules
|
||||||
'(("^ ?\\*doom:.+\\*$" :size 40 :modeline t :regexp t)
|
'(("^ ?\\*doom:.+\\*$" :size 40 :modeline t :regexp t)
|
||||||
("^ ?\\*doom .+\\*$" :size 30 :noselect t :regexp t)
|
("^ ?\\*doom .+\\*$" :size 30 :noselect t :regexp t)
|
||||||
|
@ -64,8 +67,8 @@ is enabled/disabled.'")
|
||||||
("*Pp Eval Output*" :size 16 :noselect t :autokill t)
|
("*Pp Eval Output*" :size 16 :noselect t :autokill t)
|
||||||
("*Apropos*" :size 0.3)
|
("*Apropos*" :size 0.3)
|
||||||
("*Backtrace*" :size 25 :noselect t)
|
("*Backtrace*" :size 25 :noselect t)
|
||||||
("*Help*" :size 16)
|
("*Help*" :size 16 :autoclose t)
|
||||||
("*Messages*" :size 10)
|
("*Messages*" :size 10 :noselect t :autoclose t)
|
||||||
("*Warnings*" :size 10 :noselect t :autokill t)
|
("*Warnings*" :size 10 :noselect t :autokill t)
|
||||||
("*command-log*" :size 28 :noselect t :align right)
|
("*command-log*" :size 28 :noselect t :align right)
|
||||||
("*Shell Command Output*" :size 20 :noselect t :autokill t)
|
("*Shell Command Output*" :size 20 :noselect t :autokill t)
|
||||||
|
@ -226,6 +229,15 @@ properties."
|
||||||
(define-key map [remap evil-window-vsplit] 'ignore)
|
(define-key map [remap evil-window-vsplit] 'ignore)
|
||||||
(define-key map [remap evil-force-normal-state] 'doom/popup-close-maybe))
|
(define-key map [remap evil-force-normal-state] 'doom/popup-close-maybe))
|
||||||
|
|
||||||
|
(defun doom*popup-close-all-maybe ()
|
||||||
|
"Close popups with an :autoclose property when pressing ESC from normal
|
||||||
|
mode in any evil-mode buffer."
|
||||||
|
(unless (or (minibuffer-window-active-p (minibuffer-window))
|
||||||
|
(and (bound-and-true-p evil-mode)
|
||||||
|
(evil-ex-hl-active-p 'evil-ex-search)))
|
||||||
|
(doom/popup-close-all)))
|
||||||
|
(advice-add 'evil-force-normal-state :after 'doom*popup-close-all-maybe)
|
||||||
|
|
||||||
;; Make evil-mode cooperate with popups
|
;; Make evil-mode cooperate with popups
|
||||||
(advice-add 'evil-command-window :override 'doom*popup-evil-command-window)
|
(advice-add 'evil-command-window :override 'doom*popup-evil-command-window)
|
||||||
(advice-add 'evil-command-window-execute :override 'doom*popup-evil-command-window-execute)
|
(advice-add 'evil-command-window-execute :override 'doom*popup-evil-command-window-execute)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue