diff --git a/core/core-modules.el b/core/core-modules.el index 890fdbb45..3bd05ccd6 100644 --- a/core/core-modules.el +++ b/core/core-modules.el @@ -357,7 +357,7 @@ omitted. eg. (featurep! +flag1)" ;; -;; Cross-module configuration +;; Cross-module configuration (DEPRECATED) ;; ;; I needed a way to reliably cross-configure modules without littering my @@ -375,8 +375,16 @@ Do not use this for configuring Doom core." (declare (indent defun) (doc-string 3)) (or (keywordp keyword) (signal 'wrong-type-argument (list 'keywordp keyword))) - `(fset ',(intern (format "doom--set%s" keyword)) - (lambda ,arglist ,docstring ,@forms))) + (let ((alias (plist-get forms :obsolete))) + (when alias + (setq forms (plist-put forms :obsolete 'nil))) + `(fset ',(intern (format "doom--set%s" keyword)) + (lambda ,arglist ,docstring + (prog1 (progn ,@forms) + ,(when alias + `(unless noninteractive + (message ,(format "The `%s' setting is deprecated, use `%s' instead" + keyword alias))))))))) (defmacro set! (keyword &rest values) "Set an option defined by `def-setting!'. Skip if doesn't exist. See diff --git a/modules/app/regex/config.el b/modules/app/regex/config.el index ba3912e35..539297e46 100644 --- a/modules/app/regex/config.el +++ b/modules/app/regex/config.el @@ -46,8 +46,11 @@ http://regexr.com/foo.html?q=bar https://mediatemple.net" "TODO") -(set! :popup "^\\*doom-regex\\*$" '((size . 4)) '((quit))) -(set! :popup "^\\*doom-regex-groups" - '((side . left) (size . 28)) - '((select) (quit))) +(set-popup-rules! + '(("^\\*doom-regex\\*$" + ((size . 4)) + ((quit))) + ("^\\*doom-regex-groups" + ((side . left) (size . 28)) + ((select) (quit))))) diff --git a/modules/app/rss/config.el b/modules/app/rss/config.el index 2dd134aa1..4710079e5 100644 --- a/modules/app/rss/config.el +++ b/modules/app/rss/config.el @@ -26,7 +26,7 @@ absolute paths.") elfeed-show-entry-delete #'+rss/delete-pane shr-max-image-proportion 0.6) - (set! :popup "^\\*elfeed-entry" + (set-popup-rule! "^\\*elfeed-entry" '((size . 0.75) (side . bottom)) '((select . t) (quit) (transient . t))) diff --git a/modules/app/twitter/config.el b/modules/app/twitter/config.el index 4238172e0..ed7075592 100644 --- a/modules/app/twitter/config.el +++ b/modules/app/twitter/config.el @@ -25,7 +25,7 @@ twittering-initial-timeline-spec-string '(":home" ":mentions" ":direct_messages")) - (set! :popup "^\\*twittering-edit" + (set-popup-rule! "^\\*twittering-edit" '((size . 15)) '((transient) (quit) (select . t))) diff --git a/modules/completion/company/autoload.el b/modules/completion/company/autoload.el index ac35aa3e5..9ab318d44 100644 --- a/modules/completion/company/autoload.el +++ b/modules/completion/company/autoload.el @@ -1,23 +1,30 @@ ;;; completion/company/autoload.el -*- lexical-binding: t; -*- +;;;###autodef +(defun set-company-backend! (modes &rest backends) + "Prepends BACKENDS to `company-backends' in major MODES. + +MODES should be one major-mode symbol or a list of them." + (cl-loop for mode in modes + for def-name = (intern (format "doom--init-company-%s" mode)) + do + (fset def-name + (lambda () (when (or (eq major-mode mode) + (and (boundp mode) (symbol-value mode))) + (require 'company) + (make-variable-buffer-local 'company-backends) + (dolist (backend backends) + (cl-pushnew backend company-backends :test #'equal))))) + and do (add-hook (intern (format "%s-hook" mode)) def-name))) + +;; FIXME obsolete :company-backend ;;;###autoload (def-setting! :company-backend (modes &rest backends) "Prepends BACKENDS to `company-backends' in major MODES. MODES should be one major-mode symbol or a list of them." - `(progn - ,@(cl-loop for mode in (doom-enlist (doom-unquote modes)) - for def-name = (intern (format "doom--init-company-%s" mode)) - collect - `(defun ,def-name () - (when (and (or (eq major-mode ',mode) - (bound-and-true-p ,mode)) - ,(not (eq backends '(nil)))) - (require 'company) - (make-variable-buffer-local 'company-backends) - (dolist (backend (list ,@(reverse backends))) - (cl-pushnew backend company-backends :test #'equal)))) - collect `(add-hook! ,mode #',def-name)))) + :obsolete set-company-backend! + `(set-company-backend! ,modes ,@backends)) ;;;###autoload (defun +company/toggle-auto-completion () diff --git a/modules/completion/helm/config.el b/modules/completion/helm/config.el index 7d137e6d9..ae0b5b5c1 100644 --- a/modules/completion/helm/config.el +++ b/modules/completion/helm/config.el @@ -117,7 +117,7 @@ ;; `helm-ag' (after! helm-ag (define-key helm-ag-edit-map [remap quit-window] #'helm-ag--edit-abort) - (set! :popup "^\\*helm-ag-edit" + (set-popup-rule! "^\\*helm-ag-edit" '((size . 0.35)) '((transient . 0) (quit)))) diff --git a/modules/completion/ivy/config.el b/modules/completion/ivy/config.el index b616f7da2..b2d697f49 100644 --- a/modules/completion/ivy/config.el +++ b/modules/completion/ivy/config.el @@ -86,7 +86,7 @@ immediately runs it on the current candidate (ending the ivy session)." [remap swiper] #'counsel-grep-or-swiper) :config - (set! :popup "^\\*ivy-occur" '((size . 0.35)) '((transient . 0) (quit))) + (set-popup-rule! "^\\*ivy-occur" '((size . 0.35)) '((transient . 0) (quit))) (setq counsel-find-file-ignore-regexp "\\(?:^[#.]\\)\\|\\(?:[#~]$\\)\\|\\(?:^Icon?\\)" ;; Add smart-casing and compressed archive searching (-zS) to default diff --git a/modules/emacs/imenu/config.el b/modules/emacs/imenu/config.el index 4aff311db..37cd79361 100644 --- a/modules/emacs/imenu/config.el +++ b/modules/emacs/imenu/config.el @@ -7,7 +7,7 @@ (after! imenu-list (setq imenu-list-idle-update-delay 0.5) - (set! :popup "^\\*Ilist" + (set-popup-rule! "^\\*Ilist" '((side . right) (size . 35)) '((quit . current) (select) (transient . 0))) diff --git a/modules/feature/debugger/config.el b/modules/feature/debugger/config.el index 78660ffa8..77d0858e2 100644 --- a/modules/feature/debugger/config.el +++ b/modules/feature/debugger/config.el @@ -3,7 +3,7 @@ (def-package! realgud :commands (realgud:gdb realgud:trepanjs realgud:bashdb realgud:zshdb) :config - (set! :popup "^\\*\\(?trepanjs:\\(?:g\\|zsh\\|bash\\)db\\)" + (set-popup-rule! "^\\*\\(?trepanjs:\\(?:g\\|zsh\\|bash\\)db\\)" '((size . 20))) ;; TODO Temporary Ex commands for the debugger diff --git a/modules/feature/eval/config.el b/modules/feature/eval/config.el index 1549eacb8..53545e4f0 100644 --- a/modules/feature/eval/config.el +++ b/modules/feature/eval/config.el @@ -17,7 +17,7 @@ :config (setq quickrun-focus-p nil) - (set! :popup "^\\*quickrun" '((size . 0.3)) '((transient . 0))) + (set-popup-rule! "^\\*quickrun" '((size . 0.3)) '((transient . 0))) (defun +eval*quickrun-auto-close (&rest _) "Allows us to silently re-run quickrun from within the quickrun buffer." diff --git a/modules/feature/evil/autoload/evil.el b/modules/feature/evil/autoload/evil.el index 20fd27355..42fda391a 100644 --- a/modules/feature/evil/autoload/evil.el +++ b/modules/feature/evil/autoload/evil.el @@ -1,15 +1,21 @@ ;; feature/evil/autoload/evil.el -*- lexical-binding: t; -*- ;;;###if (featurep! :feature evil) +;;;###autodef +(defun set-evil-initial-state! (modes state) + "Set the initialize STATE of MODE using `evil-set-initial-state'." + (after! evil + (if (listp modes) + (dolist (mode modes) + (evil-set-initial-state mode state)) + (evil-set-initial-state modes state)))) + +;; FIXME obsolete :evil-state ;;;###autoload (def-setting! :evil-state (modes state) "Set the initialize STATE of MODE using `evil-set-initial-state'." - (let ((unquoted-modes (doom-unquote modes))) - (if (listp unquoted-modes) - `(progn - ,@(cl-loop for mode in unquoted-modes - collect `(evil-set-initial-state ',mode ,state))) - `(evil-set-initial-state ,modes ,state)))) + :obsolete set-evil-initial-state! + `(set-evil-initial-state! ,modes ,state)) ;; diff --git a/modules/feature/evil/config.el b/modules/feature/evil/config.el index 48038f748..5b932d71f 100644 --- a/modules/feature/evil/config.el +++ b/modules/feature/evil/config.el @@ -66,8 +66,9 @@ variable for an explanation of the defaults (in comments). See (put 'evil-define-key* 'lisp-indent-function 'defun) - (set! :popup "^\\*evil-registers" '((size . 0.3))) - (set! :popup "^\\*Command Line" '((size . 8))) + (set-popup-rules! + '(("^\\*evil-registers" ((size . 0.3))) + ("^\\*Command Line" ((size . 8))))) ;; Change the cursor color in emacs mode (defvar +evil--default-cursor-color "#ffffff") diff --git a/modules/feature/file-templates/autoload.el b/modules/feature/file-templates/autoload.el index 649801d02..4cd82e4ff 100644 --- a/modules/feature/file-templates/autoload.el +++ b/modules/feature/file-templates/autoload.el @@ -1,7 +1,7 @@ ;;; feature/file-templates/autoload.el -*- lexical-binding: t; -*- -;;;###autoload -(def-setting! :file-template (pred &rest plist) +;;;###autodef +(defun set-file-template! (pred &rest plist) "Register a file template. PRED can either be a regexp string or a major mode symbol. PLIST may contain @@ -24,11 +24,23 @@ these properties: file template rule against this buffer." `(push (list ,pred ,@plist) +file-templates-alist)) -;;;###autoload -(def-setting! :file-templates (&rest templates) +;;;###autodef +(defun set-file-templates! (&rest templates) "Like `doom--set:file-template', but register many file templates at once." `(setq +file-templates-alist (append (list ,@templates) +file-templates-alist))) +;; FIXME obsolete :file-template +;;;###autoload +(def-setting! :file-template (pred &rest plist) + :obsolete set-file-template! + `(set-file-template! ,pred ,@plist)) + +;; FIXME obsolete :file-templates +;;;###autoload +(def-setting! :file-templates (&rest templates) + :obsolete set-file-templates! + `(set-file-templates! ,@templates)) + ;; ;; Library diff --git a/modules/feature/version-control/+git.el b/modules/feature/version-control/+git.el index b61708d5f..534649369 100644 --- a/modules/feature/version-control/+git.el +++ b/modules/feature/version-control/+git.el @@ -20,7 +20,7 @@ (git-gutter-mode +1))) (add-hook! (text-mode prog-mode conf-mode) #'+version-control|git-gutter-maybe) :config - (set! :popup "^\\*git-gutter" nil '((select))) + (set-popup-rule! "^\\*git-gutter" nil '((select))) ;; Update git-gutter on focus (in case I was using git externally) (add-hook 'focus-in-hook #'git-gutter:update-all-windows) diff --git a/modules/feature/version-control/config.el b/modules/feature/version-control/config.el index 646517675..353daedbd 100644 --- a/modules/feature/version-control/config.el +++ b/modules/feature/version-control/config.el @@ -11,11 +11,12 @@ (after! vc-annotate - (set! :popup "^\\vc-d" nil '((select))) ; *vc-diff* - (set! :popup "^\\vc-c" nil '((select . t))) ; *vc-change-log* - - (set! :evil-state 'vc-annotate-mode 'normal) - (set! :evil-state 'vc-git-log-view-mode 'normal)) + (set-popup-rules! + '(("^\\vc-d" nil ((select))) ; *vc-diff* + ("^\\vc-c" nil ((select . t))))) ; *vc-change-log* + (set-evil-initial-state! + '(vc-annotate-mode vc-git-log-view-mode) + 'normal)) (def-package! smerge-mode :hook (find-file . +vcs|enable-smerge-mode-maybe) diff --git a/modules/lang/cc/config.el b/modules/lang/cc/config.el index db232e707..3d4d4684c 100644 --- a/modules/lang/cc/config.el +++ b/modules/lang/cc/config.el @@ -156,7 +156,7 @@ compilation database is present in the project.") (def-package! company-irony :when (featurep! :completion company) :init - (set! :company-backend + (set-company-backend! '(c-mode c++-mode objc-mode) '(:separate company-irony-c-headers company-irony)) :config @@ -168,7 +168,8 @@ compilation database is present in the project.") ;; ;; `cmake-mode' -(set! :company-backend 'cmake-mode '(company-cmake company-yasnippet)) +(after! cmake-mode + (set-company-backend! 'cmake-mode '(company-cmake company-yasnippet))) (def-package! company-cmake :when (featurep! :completion company) @@ -183,7 +184,7 @@ compilation database is present in the project.") (def-package! company-glsl :when (featurep! :completion company) :after glsl-mode - :config (set! :company-backend 'glsl-mode '(company-glsl))) + :config (set-company-backend! 'glsl-mode '(company-glsl))) ;; diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index 30b93c398..729fc7b8c 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -30,7 +30,7 @@ (figwheel-sidecar.repl-api/start-figwheel!) (figwheel-sidecar.repl-api/cljs-repl))") - (set! :popup "^\\*cider-repl" nil '((quit) (select))) + (set-popup-rule! "^\\*cider-repl" nil '((quit) (select))) (set! :repl 'clojure-mode #'+clojure/repl) (set! :eval 'clojure-mode #'cider-eval-region) (set! :lookup 'clojure-mode diff --git a/modules/lang/csharp/config.el b/modules/lang/csharp/config.el index ef54fe1c1..322cd3d8d 100644 --- a/modules/lang/csharp/config.el +++ b/modules/lang/csharp/config.el @@ -18,7 +18,7 @@ (omnisharp-stop-server))) (add-hook! csharp-mode (add-hook 'kill-buffer-hook #'omnisharp-stop-server nil t)) - (set! :company-backend 'csharp-mode '(company-omnisharp)) + (set-company-backend! 'csharp-mode '(company-omnisharp)) (set! :lookup 'csharp-mode :definition #'omnisharp-go-to-definition diff --git a/modules/lang/data/config.el b/modules/lang/data/config.el index a7a8424f8..d7f448334 100644 --- a/modules/lang/data/config.el +++ b/modules/lang/data/config.el @@ -6,7 +6,8 @@ ("\\.plist\\'" . nxml-mode))) (map-put auto-mode-alist (car spec) (cdr spec))) -(set! :company-backend 'nxml-mode '(company-nxml company-yasnippet)) +(after! nxml-mode + (set-company-backend! 'nxml-mode '(company-nxml company-yasnippet))) ;; diff --git a/modules/lang/elixir/config.el b/modules/lang/elixir/config.el index 6afd25471..b5184ba2d 100644 --- a/modules/lang/elixir/config.el +++ b/modules/lang/elixir/config.el @@ -12,7 +12,19 @@ :skip-match 'sp-elixir-skip-def-p :post-handlers '("||\n[i]")) (sp-local-pair "do " " end" :unless '(sp-in-comment-p sp-in-string-p)) - (sp-local-pair "fn " " end" :unless '(sp-in-comment-p sp-in-string-p))))) + (sp-local-pair "fn " " end" :unless '(sp-in-comment-p sp-in-string-p)))) + + (def-package! alchemist-company + :when (featurep! :completion company) + :commands alchemist-company + :init + (set-company-backend! 'elixir-mode '(alchemist-company company-yasnippet)) + :config + ;; Alchemist doesn't use hook symbols to add these backends, so we have to use + ;; the entire closure to get rid of it. + (let ((fn (byte-compile (lambda () (add-to-list (make-local-variable 'company-backends) 'alchemist-company))))) + (remove-hook 'alchemist-mode-hook fn) + (remove-hook 'alchemist-iex-mode-hook fn)))) (def-package! alchemist @@ -24,16 +36,3 @@ (set! :eval 'elixir-mode #'alchemist-eval-region) (set! :repl 'elixir-mode #'alchemist-iex-project-run)) - -(def-package! alchemist-company - :when (featurep! :completion company) - :commands alchemist-company - :init - (set! :company-backend 'elixir-mode '(alchemist-company company-yasnippet)) - :config - ;; Alchemist doesn't use hook symbols to add these backends, so we have to use - ;; the entire closure to get rid of it. - (let ((fn (byte-compile (lambda () (add-to-list (make-local-variable 'company-backends) 'alchemist-company))))) - (remove-hook 'alchemist-mode-hook fn) - (remove-hook 'alchemist-iex-mode-hook fn))) - diff --git a/modules/lang/elm/config.el b/modules/lang/elm/config.el index bd845f842..68d30c3c8 100644 --- a/modules/lang/elm/config.el +++ b/modules/lang/elm/config.el @@ -5,7 +5,7 @@ (after! elm-mode (add-hook! 'elm-mode-hook #'(flycheck-mode rainbow-delimiters-mode)) - (set! :company-backend 'elm-mode 'company-elm) + (set-company-backend! 'elm-mode 'company-elm) (set! :repl 'elm-mode #'run-elm-interactive)) diff --git a/modules/lang/go/config.el b/modules/lang/go/config.el index 1089d5905..0c75e67db 100644 --- a/modules/lang/go/config.el +++ b/modules/lang/go/config.el @@ -78,5 +78,5 @@ :when (featurep! :completion company) :after go-mode :config - (set! :company-backend 'go-mode 'company-go) + (set-company-backend! 'go-mode 'company-go) (setq company-go-show-annotation t)) diff --git a/modules/lang/haskell/+dante.el b/modules/lang/haskell/+dante.el index 93ab83bbc..c388d0150 100644 --- a/modules/lang/haskell/+dante.el +++ b/modules/lang/haskell/+dante.el @@ -16,4 +16,4 @@ (add-hook 'haskell-mode-hook #'ghc-comp-init) :config (setq company-ghc-show-info 'oneline) - (set! :company-backend 'haskell-mode #'company-ghc)) + (set-company-backend! 'haskell-mode #'company-ghc)) diff --git a/modules/lang/hy/config.el b/modules/lang/hy/config.el index bd24be0da..bee40e479 100644 --- a/modules/lang/hy/config.el +++ b/modules/lang/hy/config.el @@ -5,4 +5,4 @@ :interpreter "hy" :config (set! :repl 'hy-mode #'hy-shell-start-or-switch-to-shell) - (set! :company-backend 'hy-mode 'company-hy)) + (set-company-backend! 'hy-mode 'company-hy)) diff --git a/modules/lang/java/+eclim.el b/modules/lang/java/+eclim.el index f44a4dcba..6f07ab0ef 100644 --- a/modules/lang/java/+eclim.el +++ b/modules/lang/java/+eclim.el @@ -55,4 +55,4 @@ :when (featurep! :completion company) :after java-mode :config - (set! :company-backend 'java-mode '(company-emacs-eclim))) + (set-company-backend! 'java-mode '(company-emacs-eclim))) diff --git a/modules/lang/javascript/config.el b/modules/lang/javascript/config.el index 58e89c416..195d0e62a 100644 --- a/modules/lang/javascript/config.el +++ b/modules/lang/javascript/config.el @@ -94,7 +94,7 @@ ;; tide affects the global `company-backends', undo this so doom can handle ;; it buffer-locally (setq-default company-backends (delq 'company-tide (default-value 'company-backends)))) - (set! :company-backend 'tide-mode 'company-tide) + (set-company-backend! 'tide-mode 'company-tide) ;; navigation (set! :lookup 'tide-mode diff --git a/modules/lang/latex/config.el b/modules/lang/latex/config.el index 7668cec12..bc9e1dc11 100644 --- a/modules/lang/latex/config.el +++ b/modules/lang/latex/config.el @@ -33,7 +33,7 @@ font-latex-fontify-sectioning 1.15) (setq-default TeX-master nil) ;; Display the output of the latex commands in a popup. - (set! :popup " output\\*$" '((size . 15))) + (set-popup-rule! " output\\*$" '((size . 15))) ;; TeX Font Styling ;; (def-package! tex-style :defer t) @@ -200,7 +200,7 @@ :when (featurep! :completion company) :commands (company-auctex-init) :init - ;; We can't use the (set! :company-backend ...) because Auctex reports its + ;; We can't use the (set-company-backend! ...) because Auctex reports its ;; major-mode as `latex-mode', but uses LaTeX-mode-hook for its mode, which is ;; not anticipated by :company-backend (and shouldn't have to!) (add-hook! LaTeX-mode diff --git a/modules/lang/lua/config.el b/modules/lang/lua/config.el index d8557f3b3..9696267c1 100644 --- a/modules/lang/lua/config.el +++ b/modules/lang/lua/config.el @@ -6,7 +6,7 @@ (set! :lookup 'lua-mode :documentation 'lua-search-documentation) (set! :electric 'lua-mode :words '("else" "end")) (set! :repl 'lua-mode #'+lua/repl) - (set! :company-backend 'lua-mode '(company-lua company-yasnippet)) + (set-company-backend! 'lua-mode '(company-lua company-yasnippet)) (def-menu! +lua/build-menu "Build/compilation commands for `lua-mode' buffers." diff --git a/modules/lang/ocaml/config.el b/modules/lang/ocaml/config.el index 5902dd181..409e0dbef 100644 --- a/modules/lang/ocaml/config.el +++ b/modules/lang/ocaml/config.el @@ -8,6 +8,6 @@ :after tuareg :hook (tuareg-mode . merlin-mode) :config - (set! :company-backend 'tuareg-mode 'merlin-company-backend) + (set-company-backend! 'tuareg-mode 'merlin-company-backend) (after! company (remove-hook 'company-backends 'merlin-company-backend))) diff --git a/modules/lang/org/+babel.el b/modules/lang/org/+babel.el index 909695e77..39dd2222a 100644 --- a/modules/lang/org/+babel.el +++ b/modules/lang/org/+babel.el @@ -71,19 +71,19 @@ string). Stops at the first function to return non-nil.") (require 'ob-ipython nil t))) (add-hook '+org-babel-load-functions #'+org|babel-load-ipython) :config - (set! :popups - '("^\\*Org Src" - ((size . 100) (side . right) (slot . -1) (window-height . 0.6)) - ((quit) (select . t) (modeline))) - '("^\\*Python" - ((slot . 0) (side . right) (size . 100)) - ((select) (quit) (transient))) - '("\\*ob-ipython.*" - ((slot . 2) (side . right) (size . 100) (window-height . 0.2)) - ((select) (quit) (transient))) - '("\\*Python:.*" - ((slot . 0) (side . right) (size . 100)) - ((select) (quit) (transient)))) + (set-popup-rules! + '(("^\\*Org Src" + ((size . 100) (side . right) (slot . -1) (window-height . 0.6)) + ((quit) (select . t) (modeline))) + ("^\\*Python" + ((slot . 0) (side . right) (size . 100)) + ((select) (quit) (transient))) + ("\\*ob-ipython.*" + ((slot . 2) (side . right) (size . 100) (window-height . 0.2)) + ((select) (quit) (transient))) + ("\\*Python:.*" + ((slot . 0) (side . right) (size . 100)) + ((select) (quit) (transient))))) ;; TODO Add more popup styles ;; advices for remote kernel and org-src-edit diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index 37e4fe4dd..3a351a229 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -137,19 +137,19 @@ unfold to point on startup." (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))))) + (set-popup-rules! + '(("^\\*\\(?: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'." diff --git a/modules/lang/php/config.el b/modules/lang/php/config.el index 8485d9521..7022e03e5 100644 --- a/modules/lang/php/config.el +++ b/modules/lang/php/config.el @@ -3,7 +3,7 @@ ;; (def-package! hack-mode ;; :mode "\\.hh$" ;; :config -;; (set! :company-backend 'hack-mode '(company-capf))) +;; (set-company-backend! 'hack-mode '(company-capf))) (def-package! php-mode @@ -22,7 +22,7 @@ ;; ac-php provides custom autocompletion, php-extras provides autocompletion ;; for built-in libraries - (set! :company-backend 'php-mode '(company-ac-php-backend php-extras-company)) + (set-company-backend! 'php-mode '(company-ac-php-backend php-extras-company)) ;; default is 10; this optimizes `smartparens' performance, but limits sp ;; pairs to 6 characters. diff --git a/modules/lang/plantuml/config.el b/modules/lang/plantuml/config.el index a60b92e92..a798870ad 100644 --- a/modules/lang/plantuml/config.el +++ b/modules/lang/plantuml/config.el @@ -6,7 +6,7 @@ (setq plantuml-jar-path (concat doom-etc-dir "plantuml.jar") org-plantuml-jar-path plantuml-jar-path) :config - (set! :popup "^\\*PLANTUML" '((size . 0.4)) '((select) (transient . 0)))) + (set-popup-rule! "^\\*PLANTUML" '((size . 0.4)) '((select) (transient . 0)))) (def-package! flycheck-plantuml diff --git a/modules/lang/python/config.el b/modules/lang/python/config.el index e51b513a7..734cea5ea 100644 --- a/modules/lang/python/config.el +++ b/modules/lang/python/config.el @@ -79,8 +79,8 @@ environment variables." :config (add-hook 'python-mode-hook #'anaconda-mode) (add-hook 'anaconda-mode-hook #'anaconda-eldoc-mode) - (set! :company-backend 'python-mode '(company-anaconda)) - (set! :popup "^\\*anaconda-mode" nil '((select))) + (set-company-backend! 'python-mode '(company-anaconda)) + (set-popup-rule! "^\\*anaconda-mode" nil '((select))) (set! :lookup 'python-mode :definition #'anaconda-mode-find-definitions :references #'anaconda-mode-find-references @@ -112,7 +112,7 @@ environment variables." :init (associate! nose-mode :match "/test_.+\\.py$" :modes (python-mode)) :config - (set! :popup "^\\*nosetests" '((size . 0.4)) '((select))) + (set-popup-rule! "^\\*nosetests" '((size . 0.4)) '((select))) (set! :yas-minor-mode 'nose-mode) (map! :map nose-mode-map :localleader diff --git a/modules/lang/rest/config.el b/modules/lang/rest/config.el index 117908050..2114e2015 100644 --- a/modules/lang/rest/config.el +++ b/modules/lang/rest/config.el @@ -3,7 +3,7 @@ (def-package! restclient :mode ("\\.http\\'" . restclient-mode) :config - (set! :popup "^\\*HTTP Response" '((size . 0.4)) '((quit . other))) + (set-popup-rule! "^\\*HTTP Response" '((size . 0.4)) '((quit . other))) (map! :mode restclient-mode :n [M-return] 'restclient-http-send-current :localleader @@ -15,4 +15,4 @@ (def-package! company-restclient :when (featurep! :completion company) :after restclient - :config (set! :company-backend 'restclient-mode 'company-restclient)) + :config (set-company-backend! 'restclient-mode 'company-restclient)) diff --git a/modules/lang/ruby/config.el b/modules/lang/ruby/config.el index cce232a60..61f89ae6d 100644 --- a/modules/lang/ruby/config.el +++ b/modules/lang/ruby/config.el @@ -14,7 +14,7 @@ (def-package! ruby-mode :mode "\\.\\(?:pry\\|irb\\)rc\\'" :config - (set! :company-backend 'ruby-mode 'company-dabbrev-code) + (set-company-backend! 'ruby-mode 'company-dabbrev-code) (set! :electric 'ruby-mode :words '("else" "end" "elseif")) (set! :env "RBENV_ROOT") (set! :repl 'ruby-mode #'inf-ruby) ; `inf-ruby' @@ -104,7 +104,7 @@ environment variables." (def-package! company-inf-ruby :when (featurep! :completion company) :after inf-ruby - :config (set! :company-backend 'inf-ruby-mode 'company-inf-ruby)) + :config (set-company-backend! 'inf-ruby-mode 'company-inf-ruby)) ;; `rake' diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index cd216273f..65dfdfd9d 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -29,7 +29,7 @@ (def-package! company-racer :when (featurep! :completion company) :after racer - :config (set! :company-backend 'rust-mode '(company-racer))) + :config (set-company-backend! 'rust-mode '(company-racer))) (def-package! flycheck-rust diff --git a/modules/lang/scala/config.el b/modules/lang/scala/config.el index 44a39ced9..cbea665f1 100644 --- a/modules/lang/scala/config.el +++ b/modules/lang/scala/config.el @@ -12,7 +12,7 @@ ;; let DOOM handle company setup ensime-completion-style nil) - (set! :company-backend 'scala-mode '(ensime-company company-yasnippet)) + (set-company-backend! 'scala-mode '(ensime-company company-yasnippet)) ;; Fix void-variable imenu-auto-rescan error caused by `ensime--setup-imenu' ;; trying to make imenu variables buffer local before imenu is loaded. diff --git a/modules/lang/sh/config.el b/modules/lang/sh/config.el index d705509da..a9390745a 100644 --- a/modules/lang/sh/config.el +++ b/modules/lang/sh/config.el @@ -59,6 +59,6 @@ :when (featurep! :completion company) :after sh-script :config - (set! :company-backend 'sh-mode '(company-shell company-files)) + (set-company-backend! 'sh-mode '(company-shell company-files)) (setq company-shell-delete-duplicates t)) diff --git a/modules/lang/solidity/config.el b/modules/lang/solidity/config.el index 860997c7f..b7b130b8f 100644 --- a/modules/lang/solidity/config.el +++ b/modules/lang/solidity/config.el @@ -25,4 +25,4 @@ :after solidity-mode :config (setq company-backends (delq 'company-solidity company-backends)) - (set! :company-backends 'solidity-mode 'company-solidity)) + (set-company-backend! 'solidity-mode 'company-solidity)) diff --git a/modules/lang/swift/config.el b/modules/lang/swift/config.el index 6ba19cf0e..cd371e88c 100644 --- a/modules/lang/swift/config.el +++ b/modules/lang/swift/config.el @@ -15,5 +15,5 @@ :when (featurep! :completion company) :after swift-mode :config - (set! :company-backend 'swift-mode '(company-sourcekit company-yasnippet))) + (set-company-backend! 'swift-mode '(company-sourcekit company-yasnippet))) diff --git a/modules/lang/web/+css.el b/modules/lang/web/+css.el index 834a2ae6e..cd2175c0e 100644 --- a/modules/lang/web/+css.el +++ b/modules/lang/web/+css.el @@ -42,7 +42,7 @@ (set! :docset 'scss-mode "Sass") (unless EMACS26+ ;; css-mode's built in completion is superior - (set! :company-backend '(css-mode scss-mode) 'company-css)) + (set-company-backend! '(css-mode scss-mode) 'company-css)) (map! :map scss-mode-map :localleader :n "b" #'+css/scss-build)) @@ -50,6 +50,6 @@ :defer t :config (set! :docset 'sass-mode "Sass") - (set! :company-backend 'sass-mode 'company-css) + (set-company-backend! 'sass-mode 'company-css) (map! :map scss-mode-map :localleader :n "b" #'+css/sass-build)) diff --git a/modules/lang/web/+html.el b/modules/lang/web/+html.el index 8e58e55b2..c25b2b4d6 100644 --- a/modules/lang/web/+html.el +++ b/modules/lang/web/+html.el @@ -92,6 +92,9 @@ ;; -(set! :company-backend 'pug-mode 'company-web-jade) -(set! :company-backend 'web-mode 'company-web-html) -(set! :company-backend 'slim-mode 'company-web-slim) +(after! pug-mode + (set-company-backend! 'pug-mode 'company-web-jade)) +(after! web-mode + (set-company-backend! 'web-mode 'company-web-html)) +(after! slim-mode + (set-company-backend! 'slim-mode 'company-web-slim)) diff --git a/modules/tools/ein/config.el b/modules/tools/ein/config.el index c2e290cec..dda5acd71 100644 --- a/modules/tools/ein/config.el +++ b/modules/tools/ein/config.el @@ -16,18 +16,19 @@ ;; Slice images into rows; easier to navigate around images ein:slice-image t) - (set! :popup "\\*ein: .*" :ignore) - (set! :popup "\\*ein:tb .*" - '((side . bottom) (size . 0.3)) - '((quit . t) (transient) (select))) - (set! :popup "\\*ein:notebooklist *" - '((side . left) (size . 50)) - '((select))) + (set-popup-rules! + '(("\\*ein: .*" :ignore t) + ("\\*ein:tb .*" + ((side . bottom) (size . 0.3)) + ((quit . t) (transient) (select))) + ("\\*ein:notebooklist *" + ((side . left) (size . 50)) + ((select))))) (when (featurep! :completion company) ;; Code completion with company (setq ein:completion-backend 'ein:use-company-backend) - (set! :company-backend '(ein:notebook-multilang-mode + (set-company-backend! '(ein:notebook-multilang-mode ein:notebook-python-mode ein:notebook-plain-mode) 'ein:company-backend)) diff --git a/modules/tools/gist/config.el b/modules/tools/gist/config.el index 3e563de26..9fa0e730d 100644 --- a/modules/tools/gist/config.el +++ b/modules/tools/gist/config.el @@ -5,7 +5,7 @@ ;; Emacs. (after! gist - (set! :evil-state 'gist-list-mode 'normal) + (set-evil-initial-state! 'gist-list-mode 'normal) (defun +gist*list-render (orig-fn &rest args) (funcall orig-fn (car args) t) diff --git a/modules/tools/magit/config.el b/modules/tools/magit/config.el index 031c87200..d309068d7 100644 --- a/modules/tools/magit/config.el +++ b/modules/tools/magit/config.el @@ -25,7 +25,7 @@ load everything.") magit-diff-refine-hunk t ;; Show word-granularity on the currently selected hunk magit-display-buffer-function #'+magit-display-buffer-fullscreen) - (set! :popup "^\\(?:\\*magit\\|magit:\\)" :ignore) + (set-popup-rule! "^\\(?:\\*magit\\|magit:\\)" :ignore) ;; Consider magit buffers real (so they can switched to) (add-hook 'magit-mode-hook #'doom|mark-buffer-as-real) ;; no mode-line in magit popups diff --git a/modules/tools/password-store/config.el b/modules/tools/password-store/config.el index e05bf4b73..3f4da27ac 100644 --- a/modules/tools/password-store/config.el +++ b/modules/tools/password-store/config.el @@ -27,8 +27,8 @@ ;; `pass' (after! pass (set! :env "PASSWORD_STORE_DIR") - (set! :evil-state 'pass-mode 'emacs) - (set! :popup "^\\*Password-Store" + (set-evil-initial-state! 'pass-mode 'emacs) + (set-popup-rule! "^\\*Password-Store" '((side . left) (size . 0.25)) '((quit))) (define-key! pass-mode-map diff --git a/modules/tools/pdf/config.el b/modules/tools/pdf/config.el index edd277624..412238da4 100644 --- a/modules/tools/pdf/config.el +++ b/modules/tools/pdf/config.el @@ -18,9 +18,9 @@ (load! "+modeline") (add-hook! 'pdf-tools-enabled-hook (doom-set-modeline 'pdf-tools-modeline))) ;; Handle PDF-tools related popups better - (set! :popup "^\\*Outline*" '((side . right) (size . 40)) '((select))) + (set-popup-rule! "^\\*Outline*" '((side . right) (size . 40)) '((select))) ;; TODO: Add additional important windows that should be handled differently ;; TODO: These two next rules don't work (they should), investigate - ;; (set! :popup "\\*Contents\\*" '((side . right) (size . 40)) nil) - ;; (set! :popup "* annots\\*$" '((side . left) (size . 40)) '((select))) + ;; (set-popup-rule! "\\*Contents\\*" '((side . right) (size . 40)) nil) + ;; (set-popup-rule! "* annots\\*$" '((side . left) (size . 40)) '((select))) ) diff --git a/modules/tools/prodigy/config.el b/modules/tools/prodigy/config.el index b06d7278a..76f8b1078 100644 --- a/modules/tools/prodigy/config.el +++ b/modules/tools/prodigy/config.el @@ -1,7 +1,7 @@ ;;; tools/prodigy/config.el -*- lexical-binding: t; -*- (after! prodigy - (set! :evil-state 'prodigy-mode 'emacs) + (set-evil-initial-state! 'prodigy-mode 'emacs) ;; Make services, etc persistent between Emacs sessions (doom-cache-persist diff --git a/modules/ui/neotree/config.el b/modules/ui/neotree/config.el index f7c8847db..dca65e7c4 100644 --- a/modules/ui/neotree/config.el +++ b/modules/ui/neotree/config.el @@ -35,7 +35,7 @@ "~$" "^#.*#$")) - (set! :popup "^ ?\\*NeoTree" + (set-popup-rule! "^ ?\\*NeoTree" `((side . ,neo-window-position) (size . ,neo-window-width)) '((quit . current) (select . t))) diff --git a/modules/ui/popup/+hacks.el b/modules/ui/popup/+hacks.el index beb11988a..881b4d2b4 100644 --- a/modules/ui/popup/+hacks.el +++ b/modules/ui/popup/+hacks.el @@ -263,7 +263,7 @@ instead of switch-to-buffer-*." (inhibit-same-window . t))) (add-hook 'pdf-annot-list-mode-hook #'hide-mode-line-mode) - (set! :popup "\\(^\\*Contents\\|'s annots\\*$\\)" :ignore t)) + (set-popup-rule! "\\(^\\*Contents\\|'s annots\\*$\\)" :ignore t)) ;; `wgrep' diff --git a/modules/ui/popup/autoload.el b/modules/ui/popup/autoload/popup.el similarity index 91% rename from modules/ui/popup/autoload.el rename to modules/ui/popup/autoload/popup.el index 2d8f54777..428dd3633 100644 --- a/modules/ui/popup/autoload.el +++ b/modules/ui/popup/autoload/popup.el @@ -1,72 +1,4 @@ -;;; ui/popup/autoload.el -*- lexical-binding: t; -*- - -;;;###autoload -(defvar +popup--display-buffer-alist nil) - -;;;###autoload -(def-setting! :popup (condition &optional alist parameters) - "Define a popup rule. - -CONDITION can be a regexp string or a function. - -For ALIST, see `display-buffer' and `display-buffer-alist' for a list of -possible entries, which instruct the display system how to initialize the popup -window. - -ALIST also supports the `size' parameter, which will be translated to -`window-width' or `window-height' depending on `side'. - -PARAMETERS is an alist of window parameters. See `+popup-window-parameters' for -a list of custom parameters provided by the popup module. If certain -attributes/parameters are omitted, the ones from `+popup-default-alist' and -`+popup-default-parameters' will be used. - -The buffers of new windows displayed by `pop-to-buffer' and `display-buffer' -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 - (when after-init-time - (setq +popup--display-buffer-alist - (map-delete +popup--display-buffer-alist ,condition))) - (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)) - -;;;###autoload -(def-setting! :popups (&rest rules) - "Define multiple popup rules. See `doom--set:popup' for the specifications of -each individual rule. - - (set! :popups - '(\"^ \\*\" ((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit))) - '(\"^\\*\" ((slot . 1) (vslot . -1)) ((select . t))))" - `(progn - (dolist (rule (nreverse (list ,@rules))) - (when after-init-time - (setq +popup--display-buffer-alist - (map-delete +popup--display-buffer-alist (car rule)))) - (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--rule (args) - (declare (indent 1)) - (cl-destructuring-bind (condition &optional alist parameters) args - (if (eq alist :ignore) - (list condition nil) - `(,condition (+popup-buffer) - ,@alist - (window-parameters ,@parameters))))) - - -;; -;; Library -;; +;;; ui/popup/autoload/popup.el -*- lexical-binding: t; -*- (defvar +popup--populate-wparams (not EMACS26+)) (defvar +popup--inhibit-transient nil) @@ -135,6 +67,7 @@ and enables `+popup-buffer-mode'." `transient' window parameter (see `+popup-window-parameters'). + And finally deletes the window!" (let ((buffer (window-buffer window)) + (inhibit-quit t) ttl) (when (and (buffer-file-name buffer) (buffer-modified-p buffer) @@ -490,7 +423,7 @@ should match the arguments of `+popup-define' or the :popup setting." (declare (indent defun)) `(let ((+popup--display-buffer-alist +popup--old-display-buffer-alist) display-buffer-alist) - ,@(cl-loop for rule in rules collect `(set! :popup ,@rule)) + ,@(cl-loop for rule in rules collect `(set-popup-rule! ,@rule)) (when (bound-and-true-p +popup-mode) (setq display-buffer-alist +popup--display-buffer-alist)) ,@body)) diff --git a/modules/ui/popup/autoload/settings.el b/modules/ui/popup/autoload/settings.el new file mode 100644 index 000000000..40ebdece0 --- /dev/null +++ b/modules/ui/popup/autoload/settings.el @@ -0,0 +1,107 @@ +;;; ui/popup/autoload/settings.el -*- lexical-binding: t; -*- + +(defvar +popup--display-buffer-alist nil) + +(defsubst +popup--rule (args) + (cl-destructuring-bind (condition &optional alist parameters) args + (if (eq alist :ignore) + (list condition nil) + `(,condition (+popup-buffer) + ,@alist + (window-parameters ,@parameters))))) + +(defun +popup--define (condition &optional alist parameters) + (when after-init-time + (setq +popup--display-buffer-alist + (map-delete +popup--display-buffer-alist condition))) + (push (+popup--rule (list condition alist parameters)) + +popup--display-buffer-alist)) + +;;;###autodef +(defun set-popup-rule! (condition &optional alist parameters) + "Define a popup rule. + +CONDITION can be a regexp string or a function. + +For ALIST, see `display-buffer' and `display-buffer-alist' for a list of +possible entries, which instruct the display system how to initialize the popup +window. + +ALIST also supports the `size' parameter, which will be translated to +`window-width' or `window-height' depending on `side'. + +PARAMETERS is an alist of window parameters. See `+popup-window-parameters' for +a list of custom parameters provided by the popup module. If certain +attributes/parameters are omitted, the ones from `+popup-default-alist' and +`+popup-default-parameters' will be used. + +The buffers of new windows displayed by `pop-to-buffer' and `display-buffer' +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. + +See `def-popups!' for defining multiple rules in bulk." + (+popup--define condition alist parameters) + (when (bound-and-true-p +popup-mode) + (setq display-buffer-alist +popup--display-buffer-alist)) + +popup--display-buffer-alist) + +;;;###autodef +(defun set-popup-rules! (&rest rulesets) + "Define multiple popup rules. See `def-popup!' for the specifications of each +individual rule. + + (set-popup-rules! + '((\"^ \\*\" ((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit))) + (\"^\\*\" ((slot . 1) (vslot . -1)) ((select . t)))))" + (dolist (ruleset rulesets) + (dolist (rule ruleset) + (apply #'+popup--define rule))) + (when (bound-and-true-p +popup-mode) + (setq display-buffer-alist +popup--display-buffer-alist)) + +popup--display-buffer-alist) + + +;; +;; Obsolete +;; + +;; FIXME obsolete :popup +;;;###autoload +(def-setting! :popup (condition &optional alist parameters) + "Define a popup rule. + +CONDITION can be a regexp string or a function. + +For ALIST, see `display-buffer' and `display-buffer-alist' for a list of +possible entries, which instruct the display system how to initialize the popup +window. + +ALIST also supports the `size' parameter, which will be translated to +`window-width' or `window-height' depending on `side'. + +PARAMETERS is an alist of window parameters. See `+popup-window-parameters' for +a list of custom parameters provided by the popup module. If certain +attributes/parameters are omitted, the ones from `+popup-default-alist' and +`+popup-default-parameters' will be used. + +The buffers of new windows displayed by `pop-to-buffer' and `display-buffer' +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. + +See `def-popups!' for defining multiple rules in bulk." + :obsolete set-popup-rule! + `(set-popup-rule! ,condition ,alist ,parameters)) + +;; FIXME obsolete :popups +;;;###autoload +(def-setting! :popups (&rest rulesets) + "Define multiple popup rules. See `def-popup!' for the specifications of each +individual rule. + + (set-popup-rules! + '((\"^ \\*\" ((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit))) + (\"^\\*\" ((slot . 1) (vslot . -1)) ((select . t)))))" + :obsolete set-popup-rules! + `(set-popup-rules! ,@rulesets)) diff --git a/modules/ui/popup/config.el b/modules/ui/popup/config.el index 0c964c4f0..0ceae160b 100644 --- a/modules/ui/popup/config.el +++ b/modules/ui/popup/config.el @@ -102,45 +102,43 @@ deleted.") ;; Default popup rules & bootstrap ;; -(when (featurep! +all) - (set! :popups - '("^ \\*" ((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit))) - '("^\\*" ((slot . 1) (vslot . -1)) ((select . t))))) - -(when (featurep! +defaults) - (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.45)) - ((select . t))))) +(set-popup-rules! + (when (featurep! +all) + '(("^\\*" ((slot . 1) (vslot . -1)) ((select . t))) + ("^ \\*" ((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit))))) + (when (featurep! +defaults) + '(("^\\*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.45)) + ((select . t)))))) (add-hook 'doom-init-ui-hook #'+popup-mode) (add-hook! '+popup-buffer-mode-hook