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