From 6fd6bfb28d0068385e75d78749a37977d2a7c025 Mon Sep 17 00:00:00 2001 From: Lin Jian Date: Sat, 6 Jun 2026 19:38:20 +0800 Subject: [PATCH 1/2] emacs: test upstream bug#81105 in the withPackages test Currently, the test only passes on Emacs < 31. We have to work around it before upstream fixes the bug (if they decide to fix it). https://debbugs.gnu.org/cgi/bugreport.cgi?bug=81105 --- .../editors/emacs/build-support/wrapper-test.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkgs/applications/editors/emacs/build-support/wrapper-test.nix b/pkgs/applications/editors/emacs/build-support/wrapper-test.nix index e782bc5d50b6..6ba33006ce64 100644 --- a/pkgs/applications/editors/emacs/build-support/wrapper-test.nix +++ b/pkgs/applications/editors/emacs/build-support/wrapper-test.nix @@ -15,6 +15,10 @@ runCommand "test-emacs-withPackages-wrapper" )) git # needed by magit ]; + env = { + # emulate a default NixOS env where INFOPATH is set like this (not ending with a ":") + INFOPATH = "/fake-info-dir1:/fake-info-dir2"; + }; } '' emacs --batch --eval="(require 'magit)" @@ -23,5 +27,9 @@ runCommand "test-emacs-withPackages-wrapper" # transitive dependencies should be made available # https://github.com/NixOS/nixpkgs/issues/388829 emacs --batch --eval="(require 'flx)" + + # test that https://debbugs.gnu.org/cgi/bugreport.cgi?bug=81105 is fixed or worked around + emacs --batch --eval='(progn (package-activate-all) (info "(magit)Top"))' + touch $out '' From 553af601e92ae7a90a4761e8024c283a7442dcd5 Mon Sep 17 00:00:00 2001 From: Lin Jian Date: Thu, 11 Jun 2026 00:31:12 +0800 Subject: [PATCH 2/2] emacs: work around upstream Emacs bug#81105[1] for Emacs 31 Emacs 31 changes[3] the behavior of extending info path for installed elisp pkgs at startup. Previously, it called function `info-initialize' and extended `Info-directory-list'. Now, it does not call function `info-initialize' and instead extends `Info-default-directory-list' in most cases. The new behavior does not work if Emacs is started with an environment variable INFOPATH without a trailing ":". This is tracked in upstream Emacs bug#81105[1]. Also note that Emacs 31 changes the order of startup operations[2] to this: 1. load site-start.el 2. load early-init.el 3. active packages 4. load init.el 5. load default.el 6. handle CLI args such as --eval This patch works around bug#81105[1] by adding a trailing ":" to INFOPATH when needed in site-start.el. An alternative workaround is to call function `info-initialize' in site-start.el, which basically (not 100%, due to the startup order changes) keeps the old behavior of Emacs 30. Both workarounds invalidate part of `Info-directory-list' docstring. The workaround used in this patch makes users unable to ignore default info path items[4] like `Info-default-directory-list' when initializing `Info-directory-list'. The alternative one basically always ignores `Info-default-directory-list' when initializing `Info-directory-list' because `info-initialize` is called too early and `Info-default-directory-list' has no value yet. Note that the alternative workaround does allow users to decide if they want other default info path items[4] such as `configure-info-directory'. In addition, the workaround used in this patch should be faster than the alternative one. Both workarounds can be undone by users. To undo the one used in this patch, users can removed the added ":" of INFOPATH in early-init.el. For the alternative workaround, users need to re-initialize info path after package activation like this: (progn (setq Info-directory-list nil) (info-initialize)). [1]: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=81105 [2]: see the `command-line' function in startup.el [3]: 7c22a7d312c7a3f3b6b511df5e6334ad8b2795b1 [4]: see the `Info-default-dirs' function in info.el --- pkgs/applications/editors/emacs/site-start.el | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkgs/applications/editors/emacs/site-start.el b/pkgs/applications/editors/emacs/site-start.el index 8c7ea3dfc913..06e13c756759 100644 --- a/pkgs/applications/editors/emacs/site-start.el +++ b/pkgs/applications/editors/emacs/site-start.el @@ -72,6 +72,14 @@ least specific (the system profile)" (nix--profile-paths)) woman-manpath))) +;;; Make info manuals of installed elisp pkgs available (work around Emacs bug#81105) +(when-let* ((path (getenv "INFOPATH"))) + ;; Normally, Emacs 31 extends `Info-default-directory-list' when activating elisp pkgs. + ;; We add a trailing path-separator ":" to INFOPATH when needed + ;; to ensure `Info-default-directory-list' is used to initialize `Info-directory-list'. + (unless (string-suffix-p path-separator path) + (setenv "INFOPATH" (concat path path-separator)))) + ;;; Make tramp work for remote NixOS machines (defvar tramp-remote-path) (eval-after-load 'tramp