Subject: bug#77510: closed (Re: bug#77510: 31.0.50; help-customize fails with multiply defined symbols)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 14 Apr 2025 00:39:03 +0000

Your bug report

#77510: 31.0.50; help-customize fails with multiply defined symbols

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].

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

Subject: Re: bug#77510: 31.0.50; help-customize fails with multiply defined symbols
From: Dmitry Gutov <[email-masked]>
To: Stephen Berman <[email-masked]>
Cc: [email-masked]
Date: Mon, 14 Apr 2025 03:38:44 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

On 13/04/2025 11:59, Stephen Berman wrote:
>> Like this:
>>
>> diff --git a/lisp/help-fns.el b/lisp/help-fns.el
>> index 6c4c3f4da97..fa7241d3e9d 100644
>> --- a/lisp/help-fns.el
>> +++ b/lisp/help-fns.el
>> @@ -1965,7 +1965,8 @@ describe-symbol
>>            (unless single
>>              ;; Don't record the `describe-variable' item in the stack.
>>              (setq help-xref-stack-item nil)
>> -          (help-setup-xref (list #'describe-symbol symbol) nil))
>> +          (let ((help-mode--current-data help-mode--current-data))
>> +            (help-setup-xref (list #'describe-symbol symbol) nil)))
>>            (goto-char (point-max))
>>            (help-xref--navigation-buttons)
>>            (goto-char (point-min))))))
> I confirm this fixes the issue I reported, so if my patch is
> problematical, I'm fine with yours.  Thanks!

Great! I've pushed this patch to master, thanks for testing.

We can return to other options if some other drawbacks are reported.

Subject: 31.0.50; help-customize fails with multiply defined symbols
From: Stephen Berman <[email-masked]>
To: [email-masked]
Date: Fri, 04 Apr 2025 00:16:45 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

0. emacs -Q
1. Type `C-h o fringe-mode RET' to pop up a *Help* buffer displaying
   help for both the function fringe-mode and the variable fringe-mode.
2. In the *Help* buffer type `c'.
=> Emacs dings and displays the message "No variable or face to customize"

When executing this recipe in emacs-30, after step 2 Emacs switches to a
*Customize* buffer for the variable fringe-mode, which is the expected
behavior after typing `c' (help-customize) in *Help*.  This is broken in
master.  The breakage is due to this commit:

commit e776df2a3eae0454ea85287e15ebba649bf8e918
Author:     Dmitry Gutov <[email-masked]>
Commit:     Dmitry Gutov <[email-masked]>
CommitDate: Sun Oct 6 04:32:00 2024 +0300

    help-setup-xref: Keep the local values only of some variables

    * lisp/help-mode.el (help-setup-xref): Kill all local variables,
    saving ones that are known to need to be preserved (bug#73637).

and the breakage remained after the two followup commits, which is the
current code state.

According to my debugging, calling help-setup-xref at the end of
describe-symbol after the function definition help has been added to the
*Help* buffer nullifies the property list of help-mode--current-data
(this happens on evaluating `(funcall major-mode)' in help-setup-xref
when the value of major-mode is 'help-mode), which renders
help-customize a noop.  The following patch fixes the breakage according
to my brief testing, though I'm not sure it doesn't have unwanted
side-effects (but at least I get the same test results on running make
check with the patch as without it).

diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index 7f272de790e..102c92fbb04 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -506,7 +506,7 @@ help-setup-xref
 restore it properly when going back."
   (with-current-buffer (help-buffer)
     ;; Re-enable major mode, killing all unrelated local vars.
-    (funcall major-mode)
+    (unless (eq major-mode 'help-mode) (funcall major-mode))
     (when help-xref-stack-item
       (push (cons (point) help-xref-stack-item) help-xref-stack)
       (setq help-xref-forward-stack nil))

In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.49, cairo version 1.18.4) of 2025-04-04 built on strobelfs2
Repository revision: 37262eac0525562ac03fe84e6f657de908808245
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101016
System Description: Linux From Scratch r12.3-10

Configured using:
 'configure -C 'CFLAGS=-Og -g3' PKG_CONFIG_PATH=/opt/qt6/lib/pkgconfig'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG
RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER
WEBP X11 XDBE XIM XINERAMA XINPUT2 XPM XRANDR GTK3 ZLIB