feature/popup: major refactor
+ Defer replacement of 'size attribute in ALIST until popup opening (makes :popup definitions a little faster). + Define/use +popup-define helper function (for internal use only!)
This commit is contained in:
parent
6e51dd249a
commit
db2e2b0642
2 changed files with 46 additions and 30 deletions
|
@ -94,6 +94,15 @@ and enables `+popup-buffer-mode'."
|
||||||
(params (map-merge 'list
|
(params (map-merge 'list
|
||||||
+popup-default-parameters
|
+popup-default-parameters
|
||||||
(cdr (assq 'window-parameters alist)))))
|
(cdr (assq 'window-parameters alist)))))
|
||||||
|
;; translate side => window-(width|height)
|
||||||
|
(when-let* ((size (cdr (assq 'size alist)))
|
||||||
|
(side (or (cdr (assq 'side alist)) 'bottom)))
|
||||||
|
(map-delete alist 'size)
|
||||||
|
(map-put alist (if (memq side '(left right))
|
||||||
|
'window-width
|
||||||
|
'window-height)
|
||||||
|
size))
|
||||||
|
;;
|
||||||
(map-put alist 'window-parameters params)
|
(map-put alist 'window-parameters params)
|
||||||
(nreverse alist))))
|
(nreverse alist))))
|
||||||
|
|
||||||
|
|
|
@ -108,6 +108,17 @@ deleted.")
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
(defun +popup-define (condition &optional alist parameters)
|
||||||
|
"TODO"
|
||||||
|
(declare (indent 1))
|
||||||
|
(push (if (eq alist :ignore)
|
||||||
|
(list condition nil)
|
||||||
|
`(,condition
|
||||||
|
(+popup-buffer)
|
||||||
|
,@alist
|
||||||
|
(window-parameters ,@parameters)))
|
||||||
|
+popup--display-buffer-alist))
|
||||||
|
|
||||||
(def-setting! :popup (condition &optional alist parameters)
|
(def-setting! :popup (condition &optional alist parameters)
|
||||||
"Register a popup rule.
|
"Register a popup rule.
|
||||||
|
|
||||||
|
@ -119,26 +130,14 @@ module.
|
||||||
|
|
||||||
ALIST supports one custom parameter: `size', which will resolve to
|
ALIST supports one custom parameter: `size', which will resolve to
|
||||||
`window-height' or `window-width' depending on `side'."
|
`window-height' or `window-width' depending on `side'."
|
||||||
`(let ((alist ,alist)
|
`(progn
|
||||||
(parameters ,parameters))
|
(+popup-define ,condition ,alist ,parameters)
|
||||||
(if (eq alist :ignore)
|
|
||||||
(push (list ,condition nil) +popup--display-buffer-alist)
|
|
||||||
,(when alist
|
|
||||||
`(when-let* ((size (cdr (assq 'size alist)))
|
|
||||||
(side (or (cdr (assq 'side (append alist +popup-default-alist)))
|
|
||||||
'bottom)))
|
|
||||||
(map-delete alist 'size)
|
|
||||||
(map-put alist (if (memq side '(left right))
|
|
||||||
'window-width
|
|
||||||
'window-height)
|
|
||||||
size)))
|
|
||||||
(prog1 (push (append (list ,condition '(+popup-buffer))
|
|
||||||
alist
|
|
||||||
(list (cons 'window-parameters parameters)))
|
|
||||||
+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))
|
+popup--display-buffer-alist))
|
||||||
|
(when (bound-and-true-p +popup-mode)
|
||||||
|
(setq display-buffer-alist +popup--display-buffer-alist))
|
||||||
|
+popup--display-buffer-alist))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
@ -146,24 +145,32 @@ ALIST supports one custom parameter: `size', which will resolve to
|
||||||
;;
|
;;
|
||||||
|
|
||||||
(when (featurep! +all)
|
(when (featurep! +all)
|
||||||
(set! :popup "^ \\*" '((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit)))
|
(+popup-define "^ \\*" '((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit)))
|
||||||
(set! :popup "^\\*" '((slot . 1) (vslot . -1)) '((select . t))))
|
(+popup-define "^\\*" '((slot . 1) (vslot . -1)) '((select . t))))
|
||||||
|
|
||||||
(when (featurep! +defaults)
|
(when (featurep! +defaults)
|
||||||
(set! :popup "^\\*Completions" '((slot . -1) (vslot . -2)) '((transient . 0)))
|
(+popup-define "^\\*Completions"
|
||||||
(set! :popup "^\\*Compil\\(ation\\|e-Log\\)" '((size . 0.3)) '((transient . 0) (quit . t)))
|
'((slot . -1) (vslot . -2))
|
||||||
(set! :popup "^\\*\\(?:scratch\\|Messages\\)" nil '((transient)))
|
'((transient . 0)))
|
||||||
(set! :popup "^\\*[Hh]elp"
|
(+popup-define "^\\*Compil\\(ation\\|e-Log\\)"
|
||||||
'((slot . 2) (vslot . 2) (size . 0.2))
|
'((size . 0.3))
|
||||||
'((select . t)))
|
'((transient . 0) (quit . t)))
|
||||||
(set! :popup "^\\*doom \\(?:term\\|eshell\\)"
|
(+popup-define "^\\*\\(?:scratch\\|Messages\\)"
|
||||||
|
nil
|
||||||
|
'((transient)))
|
||||||
|
(+popup-define "^\\*doom \\(?:term\\|eshell\\)"
|
||||||
'((size . 0.25))
|
'((size . 0.25))
|
||||||
'((quit) (transient . 0)))
|
'((quit) (transient . 0)))
|
||||||
(set! :popup "^\\*doom:"
|
(+popup-define "^\\*doom:"
|
||||||
'((size . 0.35) (side . bottom))
|
'((size . 0.35) (side . bottom))
|
||||||
'((select . t) (modeline . t) (quit) (transient . t)))
|
'((select . t) (modeline . t) (quit) (transient . t)))
|
||||||
(set! :popup "^\\*\\(?:\\(?:Pp E\\|doom e\\)val\\)"
|
(+popup-define "^\\*\\(?:\\(?:Pp E\\|doom e\\)val\\)"
|
||||||
'((size . +popup-shrink-to-fit)) '((transient . 0) (select . ignore))))
|
'((size . +popup-shrink-to-fit)) '((transient . 0) (select . ignore)))
|
||||||
|
|
||||||
|
;; `help-mode', `helpful-mode'
|
||||||
|
(+popup-define "^\\*[Hh]elp"
|
||||||
|
'((slot . 2) (vslot . 2) (size . 0.2))
|
||||||
|
'((select . t))))
|
||||||
|
|
||||||
(add-hook 'doom-init-ui-hook #'+popup-mode)
|
(add-hook 'doom-init-ui-hook #'+popup-mode)
|
||||||
(add-hook! '+popup-buffer-mode-hook
|
(add-hook! '+popup-buffer-mode-hook
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue