Subject: bug#64143: closed (Re: bug#64143: 29.0.60; find-function-search-for-symbol truncates library path)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 20 Jun 2023 13:37:02 +0000

Your bug report

#64143: 29.0.60; find-function-search-for-symbol truncates library path

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
64143: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=64143
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#64143: 29.0.60; find-function-search-for-symbol truncates library path
From: Eli Zaretskii <[email-masked]>
To: Troy Brown <[email-masked]>
Cc: [email-masked]
Date: Tue, 20 Jun 2023 16:36:52 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

> From: Troy Brown <[email-masked]>
> Date: Sun, 18 Jun 2023 13:39:05 -0400
> Cc: [email-masked]
> 
> > Does the patch below fix this problem?
> >
> 
> Indeed, it does.

Thanks, installed on the emacs-29 branch, and closing the bug.

Subject: 29.0.60; find-function-search-for-symbol truncates library path
From: Troy Brown <[email-masked]>
To: [email-masked]
Date: Sun, 18 Jun 2023 00:45:12 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

When user-emacs-directory contains "emacs.el" in it's path (e.g.,
"~/.emacs.elpa"), which is much easier these days with the availability
of --init-directory, the find-function-search-for-symbol truncates the
library path after "emacs".

I was experimenting with a different user directory (i.e.,
"--init-directory=~/.emacs.elpa") and was surprised to find out that the
Help system was breaking when using this path.  When looking up a symbol
in the Help system (e.g., "C-h f company-mode RET") and then attempting
to visit the source file from the help window (i.e., help-view-source),
if the symbol belongs to an installed package (where the source is
under the "elpa" directory beneath user-emacs-directory), it will
generate the following error message:

  Can't find library: /home/troy/.emacs

Toggling "debug-on-error" and repeating the above, I can generate a
backtrace for this as follows:

Debugger entered--Lisp error: (file-error "Can't find library"
"/home/troy/.emacs")
  find-library-name("/home/troy/.emacs")
  #<subr find-function-search-for-symbol>(company-mode nil
"/home/troy/.emacs.elpa/elpa/company-20230416.2034/company.el")
  ad-Advice-find-function-search-for-symbol(#<subr
find-function-search-for-symbol> company-mode nil
"/home/troy/.emacs.elpa/elpa/company-20230416.2034/company.el")
  apply(ad-Advice-find-function-search-for-symbol #<subr
find-function-search-for-symbol> (company-mode nil
"/home/troy/.emacs.elpa/elpa/company-20230416.2034/company.el"))
  find-function-search-for-symbol(company-mode nil
"/home/troy/.emacs.elpa/elpa/company-20230416.2034/company.el")
  help-function-def--button-function(company-mode
"/home/troy/.emacs.elpa/elpa/company-20230416.2034/company.el" nil)
  help-view-source()
  funcall-interactively(help-view-source)
  call-interactively(help-view-source nil nil)
  command-execute(help-view-source)

I believe the following snippet of code in
find-function-search-for-symbol is to blame for this:

    (when (string-match "\\.emacs\\(.el\\)" library)
      (setq library (substring library 0 (match-beginning 1))))

The regex likely should be improved to only match .emacs or .emacs.el at
the end of the path, not in the middle of it.