feature/popup: add +popup-enable-*-rules options & delay init

Initialization of the popup rules now happens later (on
doom-init-ui-hook). The two new options are:

+ +popup-enable-fallback-rules: the popup module defines two catch-all
  fallback rules for buffers that match "^ \\*" and "^\\*". By setting
  this option to nil, you can disable that behavior, in case you want to
  set them yourself.
+ +popup-enable-default-rules: setting this to nil disable all default
  popup rules for various essential Emacs and Doom buffers that should be
  treated as popups.
This commit is contained in:
Henrik Lissner 2018-01-30 22:01:19 -05:00
parent 14080a1781
commit 1ab7301a1d
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -81,6 +81,15 @@ a brief description of some native window parameters that Emacs uses:
(select . ignore)) (select . ignore))
"The default window parameters.") "The default window parameters.")
(defvar +popup-enable-fallback-rules t
"If non-nil, feature/popup will declare fallback rules for any special buffer
that falls through all other rules. A special buffer starts with optional
whitespace and an asterix.")
(defvar +popup-enable-default-rules t
"If non-nil, feature/popup will declare a set of default rules for various
core Emacs and Doom buffers that should be treated as popups.")
(defvar +popup-ttl 10 (defvar +popup-ttl 10
"The default time-to-live for transient buffers whose popup buffers have been "The default time-to-live for transient buffers whose popup buffers have been
deleted.") deleted.")
@ -137,18 +146,23 @@ ALIST supports one custom parameter: `size', which will resolve to
(list (cons 'window-parameters parameters))) (list (cons 'window-parameters parameters)))
+popup--display-buffer-alist))) +popup--display-buffer-alist)))
(when (bound-and-true-p +popup-mode) (when (bound-and-true-p +popup-mode)
(setq display-buffer-alist +popup--display-buffer-alist)))) (setq display-buffer-alist +popup--display-buffer-alist))
nil))
;; ;;
;; Default popup rules & bootstrap ;; Default popup rules & bootstrap
;; ;;
(eval-when-compile (defun +popup|init ()
(eval-when-compile
(when +popup-enable-fallback-rules
(set! :popup "^ \\*" '((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit))) (set! :popup "^ \\*" '((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit)))
(set! :popup "^\\*" '((slot . 1) (vslot . -1)) '((select . t))) (set! :popup "^\\*" '((slot . 1) (vslot . -1)) '((select . t))))
(when +popup-enable-default-rules
(set! :popup "^\\*Completions" '((slot . -1) (vslot . -2)) '((transient . 0))) (set! :popup "^\\*Completions" '((slot . -1) (vslot . -2)) '((transient . 0)))
(set! :popup "^\\*Compilation" nil '((transient . 0) (quit . t))) (set! :popup "^\\*Compil\\(ation\\|e-Log\\)" nil '((transient . 0) (quit . t)))
(set! :popup "^\\*\\(?:scratch\\|Messages\\)" nil '((transient))) (set! :popup "^\\*\\(?:scratch\\|Messages\\)" nil '((transient)))
(set! :popup "^\\*[Hh]elp" (set! :popup "^\\*[Hh]elp"
'((slot . 2) (vslot . 2) (size . 0.2)) '((slot . 2) (vslot . 2) (size . 0.2))
@ -158,11 +172,15 @@ ALIST supports one custom parameter: `size', which will resolve to
'((quit) (transient . 0))) '((quit) (transient . 0)))
(set! :popup "^\\*doom:" (set! :popup "^\\*doom:"
'((size . 0.35) (side . top)) '((size . 0.35) (side . top))
'((select . t) (modeline . t) (quit) (transient)))) '((select . t) (modeline . t) (quit) (transient)))
(set! :popup "^\\*\\(?:\\(?:Pp E\\|doom e\\)val\\)"
'((size . +popup-shrink-to-fit)) '((transient . 0) (select . ignore))))
nil)
(setq +popup--display-buffer-alist (eval-when-compile +popup--display-buffer-alist)) (setq +popup--display-buffer-alist (eval-when-compile +popup--display-buffer-alist))
(add-hook 'doom-init-ui-hook #'+popup-mode) (+popup-mode +1))
(add-hook 'doom-init-ui-hook #'+popup|init)
(add-hook! '+popup-buffer-mode-hook #'(+popup|adjust-fringes +popup|set-modeline)) (add-hook! '+popup-buffer-mode-hook #'(+popup|adjust-fringes +popup|set-modeline))