From e3fdfee1c54b10d84c4cd87dab6c9eb8beab87e3 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Wed, 7 Aug 2024 13:42:14 -0400 Subject: [PATCH 1/4] feat(cli): add --aot option Allow ahead-of-time native-compilation during CLI operations that install or update packages. This will not retroactively native-compile already-installed packages, you'll need to use --rebuild to do so. (This is a stop-gap solution until the v3.0 release) Fix: #6811 --- lisp/cli/install.el | 7 ++++++- lisp/cli/sync.el | 10 +++++++++- lisp/cli/upgrade.el | 5 ++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lisp/cli/install.el b/lisp/cli/install.el index 3e1e4ef21..8eaec4abe 100644 --- a/lisp/cli/install.el +++ b/lisp/cli/install.el @@ -15,7 +15,8 @@ ;;; Commands (defcli! ((install i)) - (&flags + ((aot? ("--aot") "Enable ahead-of-time native-compilation (if available)") + &flags (config? ("--config" :yes) "Create `$DOOMDIR' or dummy files therein?") (envfile? ("--env" :yes) "(Re)generate an envvars file? (see `$ doom help env`)") (install? ("--install" :yes) "Auto-install packages?") @@ -91,6 +92,10 @@ Change `$DOOMDIR' with the `--doomdir' option, e.g. (when (or yes? (y-or-n-p "Generate an envvar file? (see `doom help env` for details)")) (call! '(env))))) + (when aot? + (after! straight + (setq straight--native-comp-available t))) + ;; Install Doom packages (if (eq install? :no) (print! (warn "Not installing plugins, as requested")) diff --git a/lisp/cli/sync.el b/lisp/cli/sync.el index ee18ccb54..b9877109e 100644 --- a/lisp/cli/sync.el +++ b/lisp/cli/sync.el @@ -28,6 +28,7 @@ (jobs ("-j" "--jobs" num) "How many threads to use for native compilation") (rebuild? ("-b" "--rebuild") "Rebuild all installed packages, unconditionally") (nobuild? ("-B") "Don't rebuild packages when hostname or Emacs version has changed") + (aot? ("--aot") "Natively compile packages ahead-of-time (if available)") &context context) "Synchronize your config with Doom Emacs. @@ -48,10 +49,17 @@ stale. OPTIONS: -j, --jobs Defaults to the maximum number of threads (or 1, if your CPU's threadcount - can't be determined)." + can't be determined). + --aot + Will only perform AOT native-compilation for packages updated/installed + during the execution of this command. Use --rebuild as well to do so for all + packages." :benchmark t (when (doom-profiles-bootloadable-p) (call! '(profiles sync "--reload"))) + (when aot? + (after! straight + (setq straight--native-comp-available t))) (when jobs (setq native-comp-async-jobs-number (truncate jobs))) (run-hooks 'doom-before-sync-hook) diff --git a/lisp/cli/upgrade.el b/lisp/cli/upgrade.el index 67f9f9897..e2eac21d2 100644 --- a/lisp/cli/upgrade.el +++ b/lisp/cli/upgrade.el @@ -19,7 +19,8 @@ ;;; Commands (defcli! ((upgrade up)) - ((packages? ("-p" "--packages") "Only upgrade packages, not Doom") + ((aot? ("--aot") "Natively compile packages ahead-of-time (if available)") + (packages? ("-p" "--packages") "Only upgrade packages, not Doom") (jobs ("-j" "--jobs" num) "How many CPUs to use for native compilation") (nobuild? ("-B") "Don't rebuild packages when hostname or Emacs version has changed") &context context) @@ -33,6 +34,7 @@ libraries. It is the equivalent of the following shell commands: $ doom sync -u" (let* ((force? (doom-cli-context-suppress-prompts-p context)) (sync-cmd (append '("sync" "-u") + (if aot? '("--aot")) (if nobuild? '("-B")) (if jobs `("-j" ,jobs))))) (cond @@ -57,6 +59,7 @@ libraries. It is the equivalent of the following shell commands: (print! (item "Reloading Doom Emacs")) (doom-cli-context-put context 'upgrading t) (exit! "doom" "upgrade" "-p" + (if aot? "--aot") (if nobuild? "-B") (if force? "--force") (if jobs (format "--jobs=%d" jobs)))) From b1b40754fe613e45d67e1295dd89f9f980de8152 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Wed, 7 Aug 2024 14:24:05 -0400 Subject: [PATCH 2/4] fix(org): don't optimize already-open agenda buffers `org-map-entries` uses `org-get-agenda-file-buffer` to visit agenda files, and Doom optimizes the latter to open those org buffers in a limited capacity (since buffers opened this way are rarely visible, and full initialization of them is very expensive), deferring their initialization until the user interactively switches to the buffer later. However, if an agenda buffer has already been visited, opening it with `org-get-agenda-file-buffer` with all these disabled initializations could have unpredictable effects on whatever the user is doing in their `org-map-entries` call. Since these optimizations aren't needed for agenda buffers that already exist, I'll no-op `+org--restart-mode-h` in those cases. Fix: #7979 --- modules/lang/org/config.el | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index e677e610d..13b0b504a 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -799,19 +799,22 @@ via an indirect buffer." `org-mode' when they're switched to so they can grow up to be fully-fledged org-mode buffers." :around #'org-get-agenda-file-buffer - (let ((recentf-exclude (list (lambda (_file) t))) - (doom-inhibit-large-file-detection t) - org-startup-indented - org-startup-folded - vc-handled-backends - org-mode-hook - find-file-hook) - (let ((buf (funcall fn file))) - (if buf - (with-current-buffer buf - (add-hook 'doom-switch-buffer-hook #'+org--restart-mode-h - nil 'local))) - buf))) + (if-let (buf (org-find-base-buffer-visiting file)) + buf + (let ((recentf-exclude (list (lambda (_file) t))) + (doom-inhibit-large-file-detection t) + org-startup-indented + org-startup-folded + vc-handled-backends + org-mode-hook + enable-local-variables + find-file-hook) + (let ((buf (funcall fn file))) + (when buf + (with-current-buffer buf + (add-hook 'doom-switch-buffer-hook #'+org--restart-mode-h + nil 'local))) + buf)))) (defadvice! +org--fix-inconsistent-uuidgen-case-a (uuid) "Ensure uuidgen is always lowercase (consistent) regardless of system. From a6df88a56a3fccf483ee992dc4801f5d9a1983c4 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Thu, 8 Aug 2024 16:44:22 -0400 Subject: [PATCH 3/4] feat(lib): doom-org-docs-mode: bind q to kill-current-buffer For consistency with other help modes. Fix: #7985 --- lisp/lib/docs.el | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lisp/lib/docs.el b/lisp/lib/docs.el index ff7218684..1f7d90d28 100644 --- a/lisp/lib/docs.el +++ b/lisp/lib/docs.el @@ -485,6 +485,13 @@ This primes `org-mode' for reading." ("" 'warning)))) "Extra font-lock keywords for Doom documentation.") +(defvar doom-docs-org-mode-map + (let ((map (make-sparse-keymap)) + (cmd (cmds! buffer-read-only #'kill-current-buffer))) + (define-key map "q" cmd) + (define-key map [remap evil-record-macro] cmd) + map)) + ;;;###autoload (define-derived-mode doom-docs-org-mode org-mode "Doom Docs" "A derivative of `org-mode' for Doom's documentation files. From 7f3412e3174d3f5bb721a140f67be3a5a055e31d Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Thu, 8 Aug 2024 17:05:29 -0400 Subject: [PATCH 4/4] bump: :ui Alexander-Miller/treemacs@54ef590b7621 -> Alexander-Miller/treemacs@202d7f01d613 Bad-ptr/persp-mode.el@345baaa520ab -> Bad-ptr/persp-mode.el@40e9993a9711 dgutov/diff-hl@57d9d4e3e173 -> dgutov/diff-hl@b80ff9b4a772 ema2159/centaur-tabs@d6009c295a43 -> ema2159/centaur-tabs@063534bd0038 emacs-lsp/lsp-treemacs@1d43e9e0307f -> emacs-lsp/lsp-treemacs@fb1a07ae0a3d emacs-straight/minimap@4898d277686c -> emacs-straight/minimap@5aa0df40bc0d seagle0128/doom-modeline@1505c13564b8 -> seagle0128/doom-modeline@9920ef511620 tarsius/hl-todo@dd46d426c050 -> tarsius/hl-todo@82eba6b8f7b5 --- modules/ui/hl-todo/packages.el | 2 +- modules/ui/minimap/packages.el | 2 +- modules/ui/modeline/packages.el | 2 +- modules/ui/tabs/packages.el | 2 +- modules/ui/treemacs/packages.el | 4 ++-- modules/ui/vc-gutter/packages.el | 2 +- modules/ui/workspaces/packages.el | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/ui/hl-todo/packages.el b/modules/ui/hl-todo/packages.el index 2aa75ea9c..eb5b47ae5 100644 --- a/modules/ui/hl-todo/packages.el +++ b/modules/ui/hl-todo/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/hl-todo/packages.el -(package! hl-todo :pin "dd46d426c0501b5e8ed976a834d3e54ae85731f7") +(package! hl-todo :pin "82eba6b8f7b5a4cbcf22436d5c5b88fb3134f57e") diff --git a/modules/ui/minimap/packages.el b/modules/ui/minimap/packages.el index 9c5fa0251..f2d2972a8 100644 --- a/modules/ui/minimap/packages.el +++ b/modules/ui/minimap/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/minimap/packages.el -(package! minimap :pin "4898d277686c2829c2e91416082f4252c1bb0ceb") +(package! minimap :pin "5aa0df40bc0d587dffd23adf2e0873d671b0bebf") diff --git a/modules/ui/modeline/packages.el b/modules/ui/modeline/packages.el index 80248db36..2dd48595e 100644 --- a/modules/ui/modeline/packages.el +++ b/modules/ui/modeline/packages.el @@ -2,7 +2,7 @@ ;;; ui/modeline/packages.el (unless (modulep! +light) - (package! doom-modeline :pin "1505c13564b83e44d3187611e326a48b742cad3a")) + (package! doom-modeline :pin "9920ef511620e9fa5599cb357e48487f758b1bb1")) (package! anzu :pin "26fb50b429ee968eb944b0615dd0aed1dd66172c") (when (modulep! :editor evil) (package! evil-anzu :pin "d1e98ee6976437164627542909a25c6946497899")) diff --git a/modules/ui/tabs/packages.el b/modules/ui/tabs/packages.el index c5c95f5f3..9cfc9e931 100644 --- a/modules/ui/tabs/packages.el +++ b/modules/ui/tabs/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/tabs/packages.el -(package! centaur-tabs :pin "d6009c295a4363930247ae9a4d1125aea4d3fd74") +(package! centaur-tabs :pin "063534bd003850816ccd620e105619948785977b") diff --git a/modules/ui/treemacs/packages.el b/modules/ui/treemacs/packages.el index 8406d4d80..475c62412 100644 --- a/modules/ui/treemacs/packages.el +++ b/modules/ui/treemacs/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/treemacs/packages.el -(package! treemacs :pin "54ef590b7621032a76f8f3e307032fc13c802371") +(package! treemacs :pin "202d7f01d61359bb4b2a775d8d8eeb726d91a086") (package! treemacs-nerd-icons :pin "9876cb478145a0ec4e36f64ff6583f3de7126216") ;; These packages have no :pin because they're in the same repo (when (modulep! :editor evil +everywhere) @@ -13,4 +13,4 @@ (package! treemacs-persp)) (when (and (modulep! +lsp) (not (modulep! :tools lsp +eglot))) - (package! lsp-treemacs :pin "1d43e9e0307f84496a4a7ddf9dba481000391dbd")) + (package! lsp-treemacs :pin "fb1a07ae0a3d781dea8ac78da2933e0173eb48a4")) diff --git a/modules/ui/vc-gutter/packages.el b/modules/ui/vc-gutter/packages.el index 256314351..b1c02e038 100644 --- a/modules/ui/vc-gutter/packages.el +++ b/modules/ui/vc-gutter/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/vc-gutter/packages.el -(package! diff-hl :pin "57d9d4e3e17397bf178c3aa5c369b5edd24523e0") +(package! diff-hl :pin "b80ff9b4a772f7ea000e86fbf88175104ddf9557") diff --git a/modules/ui/workspaces/packages.el b/modules/ui/workspaces/packages.el index 8ed2e3c33..2279bfac5 100644 --- a/modules/ui/workspaces/packages.el +++ b/modules/ui/workspaces/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/workspaces/packages.el -(package! persp-mode :pin "345baaa520ab2d62205f85cc5f29d57d6063c141") +(package! persp-mode :pin "40e9993a9711cba5fb56dfec81a507fabeba9668")