diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index d1ff4d5b8..09cf9b1f4 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -39,6 +39,7 @@ (add-hook! 'org-load-hook #'(org-crypt-use-before-save-magic +org|setup-ui + +org|setup-popups-rules +org|setup-agenda +org|setup-keybinds +org|setup-hacks)) @@ -130,6 +131,22 @@ unfold to point on startup." org-agenda-start-on-weekday nil org-agenda-start-day "-3d")) +(defun +org|setup-popups-rules () + "Defines popup rules for org-mode (does nothing if :ui popup is disabled)." + (set! :popups + '("^\\*\\(?:Agenda Com\\|Calendar\\|Org \\(?:Links\\|Export Dispatcher\\|Select\\)\\)" + ((slot . -1) (vslot . -1) (size . +popup-shrink-to-fit)) + ((transient . 0))) + '("^\\*Org Agenda" + ((size . 0.35)) + ((select . t) (transient))) + '("^\\*Org Src" + ((size . 0.3)) + ((quit) (select . t))) + '("^CAPTURE.*\\.org$" + ((size . 0.2)) + ((quit) (select . t))))) + (defun +org|setup-ui () "Configures the UI for `org-mode'." (setq-default diff --git a/modules/ui/popup/autoload.el b/modules/ui/popup/autoload.el index 71459fe67..ddb4995c9 100644 --- a/modules/ui/popup/autoload.el +++ b/modules/ui/popup/autoload.el @@ -27,7 +27,8 @@ will be tested against CONDITION, which is either a) a regexp string (which is matched against the buffer's name) or b) a function that takes no arguments and returns a boolean." `(progn - (+popup-define ,condition ,alist ,parameters) + (push (+popup--rule (list ,condition ,alist ,parameters)) + +popup--display-buffer-alist) (when (bound-and-true-p +popup-mode) (setq display-buffer-alist +popup--display-buffer-alist)) +popup--display-buffer-alist)) @@ -41,21 +42,21 @@ each individual rule. (\"^ \\*\" '((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit))) (\"^\\*\" '((slot . 1) (vslot . -1)) '((select . t))))" `(progn - ,@(cl-loop for rule in rules collect `(+popup-define ,@rule)) + (dolist (rule (nreverse (list ,@rules))) + (push (+popup--rule rule) +popup--display-buffer-alist)) (when (bound-and-true-p +popup-mode) (setq display-buffer-alist +popup--display-buffer-alist)) +popup--display-buffer-alist)) ;;;###autoload -(defsubst +popup-define (condition &optional alist parameters) +(defsubst +popup--rule (args) (declare (indent 1)) - (push (if (eq alist :ignore) - (list condition nil) - `(,condition - (+popup-buffer) - ,@alist - (window-parameters ,@parameters))) - +popup--display-buffer-alist)) + (cl-destructuring-bind (condition &optional alist parameters) args + (if (eq alist :ignore) + (list condition nil) + `(,condition (+popup-buffer) + ,@alist + (window-parameters ,@parameters))))) ;; diff --git a/modules/ui/popup/config.el b/modules/ui/popup/config.el index d83c8d708..68a006653 100644 --- a/modules/ui/popup/config.el +++ b/modules/ui/popup/config.el @@ -103,60 +103,44 @@ deleted.") ;; (when (featurep! +all) - (+popup-define "^ \\*" '((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit))) - (+popup-define "^\\*" '((slot . 1) (vslot . -1)) '((select . t)))) + (set! :popups + '("^ \\*" ((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit))) + '("^\\*" ((slot . 1) (vslot . -1)) ((select . t))))) (when (featurep! +defaults) - (+popup-define "^\\*Completions" - '((slot . -1) (vslot . -2)) - '((transient . 0))) - (+popup-define "^\\*Compil\\(?:ation\\|e-Log\\)" - '((size . 0.3)) - '((transient . 0) (quit . t))) - (+popup-define "^\\*\\(?:scratch\\|Messages\\)" - nil - '((autosave . t) (transient))) - (+popup-define "^\\*doom \\(?:term\\|eshell\\)" - '((size . 0.25) (vslot . -10)) - '((select . t) (quit) (transient . 0))) - (+popup-define "^\\*doom:" - '((size . 0.35) (side . bottom)) - '((autosave . t) (select . t) (modeline . t) (quit) (transient . t))) - (+popup-define "^\\*\\(?:\\(?:Pp E\\|doom e\\)val\\)" - '((size . +popup-shrink-to-fit)) - '((transient . 0) (select . ignore))) - (+popup-define "^\\*Customize" - '((slot . 2) (side . right)) - '((modeline . nil) (select . t) (quit . t))) - (+popup-define "^ \\*undo-tree\\*" - '((slot . 2) (side . left) (size . 20)) - '((modeline . nil) (select . t) (quit . t))) - - ;; `help-mode', `helpful-mode' - (+popup-define "^\\*[Hh]elp" - '((slot . 2) (vslot . 2) (size . 0.25)) - '((select . t))) - ;; `Info-mode' - (+popup-define "^\\*info\\*$" - '((slot . 2) (vslot . 2) (size . 0.35)) - '((select . t))) - - ;; `org-mode' - ;; Use org-load-hook instead of `after!' because the hook runs sooner, - ;; allowing users to override these later. - (add-hook! 'org-load-hook - (+popup-define "^\\*\\(?:Agenda Com\\|Calendar\\|Org \\(?:Links\\|Export Dispatcher\\|Select\\)\\)" - '((slot . -1) (vslot . -1) (size . +popup-shrink-to-fit)) - '((transient . 0))) - (+popup-define "^\\*Org Agenda" - '((size . 0.35)) - '((select . t) (transient))) - (+popup-define "^\\*Org Src" - '((size . 0.3)) - '((quit) (select . t))) - (+popup-define "^CAPTURE.*\\.org$" - '((size . 0.2)) - '((quit) (select . t))))) + (set! :popups + '("^\\*Completions" + ((slot . -1) (vslot . -2)) + ((transient . 0))) + '("^\\*Compil\\(?:ation\\|e-Log\\)" + ((size . 0.3)) + ((transient . 0) (quit . t))) + '("^\\*\\(?:scratch\\|Messages\\)" + nil + ((autosave . t) (transient))) + '("^\\*doom \\(?:term\\|eshell\\)" + ((size . 0.25) (vslot . -10)) + ((select . t) (quit) (transient . 0))) + '("^\\*doom:" + ((size . 0.35) (side . bottom)) + ((autosave . t) (select . t) (modeline . t) (quit) (transient . t))) + '("^\\*\\(?:\\(?:Pp E\\|doom e\\)val\\)" + ((size . +popup-shrink-to-fit)) + ((transient . 0) (select . ignore))) + '("^\\*Customize" + ((slot . 2) (side . right)) + ((modeline . nil) (select . t) (quit . t))) + '("^ \\*undo-tree\\*" + ((slot . 2) (side . left) (size . 20)) + ((modeline . nil) (select . t) (quit . t))) + ;; `help-mode', `helpful-mode' + '("^\\*[Hh]elp" + ((slot . 2) (vslot . 2) (size . 0.25)) + ((select . t))) + ;; `Info-mode' + '("^\\*info\\*$" + ((slot . 2) (vslot . 2) (size . 0.35)) + ((select . t))))) (add-hook 'doom-init-ui-hook #'+popup-mode) (add-hook! '+popup-buffer-mode-hook