This fixes a regression introduced with 79cfe30f3 ("build-system: emacs: Use subdirectories again.") which caused the 'guix-emacs-autoload-packages' to no longer be able to autoload all packages.
* gnu/packages/aux-files/emacs/guix-emacs.el (guix-emacs-autoload-packages-called): New variable. (guix-emacs-autoload-packages): Reload subdirs.el files an all but the first call of this procedure. * doc/guix.texi (Application Setup): Document that 'guix-emacs-autoload-packages' can be invoked interactively to auto-reload newly installed Emacs packages. --- doc/guix.texi | 11 +++++++---- gnu/packages/aux-files/emacs/guix-emacs.el | 12 ++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index f82bb99069..66da4f9cd4 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -2167,12 +2167,15 @@ Application Setup Emacs through the @env{EMACSLOADPATH} environment variable, which is set when installing Emacs itself. +@cindex guix-emacs-autoload-packages, refreshing Emacs packages Additionally, autoload definitions are automatically evaluated at the initialization of Emacs, by the Guix-specific -@code{guix-emacs-autoload-packages} procedure. If, for some reason, you -want to avoid auto-loading the Emacs packages installed with Guix, you -can do so by running Emacs with the @option{--no-site-file} option -(@pxref{Init File,,, emacs, The GNU Emacs Manual}). +@code{guix-emacs-autoload-packages} procedure. This procedure can be +interactively invoked to have newly installed Emacs packages discovered, +without having to restart Emacs. If, for some reason, you want to avoid +auto-loading the Emacs packages installed with Guix, you can do so by +running Emacs with the @option{--no-site-file} option (@pxref{Init +File,,, emacs, The GNU Emacs Manual}). @quotation Note Emacs can now compile packages natively. Under the default diff --git a/gnu/packages/aux-files/emacs/guix-emacs.el b/gnu/packages/aux-files/emacs/guix-emacs.el index ed0c913163..b4a4fd1d91 100644 --- a/gnu/packages/aux-files/emacs/guix-emacs.el +++ b/gnu/packages/aux-files/emacs/guix-emacs.el @@ -54,6 +54,9 @@ The files in the list do not have extensions (.el, .elc)." (expand-file-name "subdirs.el" dir)) (guix-emacs--non-core-load-path)))) +(defvar guix-emacs-autoload-packages-called nil + "True if `guix-emacs-autoload-packages' was already run.") + ;;;###autoload (defun guix-emacs-autoload-packages () "Autoload Emacs packages found in EMACSLOADPATH. @@ -61,6 +64,15 @@ The files in the list do not have extensions (.el, .elc)." 'Autoload' means to load the 'autoloads' files matching `guix-emacs-autoloads-regexp'." (interactive) + ;; Reload the subdirs.el files such as the one generated by the Guix profile + ;; hook, so that newly installed Emacs packages located under + ;; sub-directories are put on the load-path without having to restart Emacs. + (if guix-emacs-autoload-packages-called + (progn + (mapc #'load-file (guix-emacs--subdirs-files)) + (setq load-path (delete-dups load-path))) + (setq guix-emacs-autoload-packages-called t)) + (let ((autoloads (mapcan #'guix-emacs-find-autoloads (guix-emacs--non-core-load-path)))) (mapc (lambda (f) -- 2.41.0