Subject: Add an option to restore C-h b "Prefix Command" output
From: Bob Rogers <[email-masked]>
To: [email-masked]
Date: Sun, 19 Mar 2023 12:26:46 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

Tags: patch

   Pursuant to the 'No more "Prefix Command" in C-h m' discussion in the
emacs-devel list.

					-- Bob Rogers
					   http://www.rgrjr.com/

In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.34, cairo version 1.16.0) of 2023-03-13 built on orion
Repository revision: a79d209748857c7d63ac48a7172a89e5ad1e752b
Repository branch: rgr-smtpmail-env-from
Windowing system distributor 'The X.Org Foundation', version 11.0.12003000
System Description: openSUSE Leap 15.4

Configured using:
 'configure --with-dbus=no --with-gsettings=no --with-gif=ifavailable
 --with-tiff=no --with-gnutls=yes --with-gconf=no'

Add an option to restore C-h b "Prefix Command" output

* lisp/help.el (describe-bindings-show-prefixes):  Option to enable prefixes.
(describe-map):  If true, restore "Prefix Command" output.
* etc/NEWS:  Describe the new option.

diff --git a/etc/NEWS b/etc/NEWS
index 3b02e85b691..5a4a038e953 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -61,6 +61,11 @@ This allows the user to customize the prompt that is appended by
 This is used for displaying the time and date components of
 'display-time-mode'.
 
+** New user option 'describe-bindings-show-prefixes'.
+If true (the default is false), restores the "Prefix Command" entries
+in 'describe-binding' ('C-h b') output for keys that are prefixes, the
+details of which are shown later (regardless of this option setting).
+
 
 * Editing Changes in Emacs 30.1
 
diff --git a/lisp/help.el b/lisp/help.el
index 83be85b1ee4..37a08718f9d 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -717,6 +717,12 @@ describe-bindings-outline
   :group 'help
   :version "29.1")
 
+(defcustom describe-bindings-show-prefixes nil
+  "Non-nil shows prefixes in the output buffer of `describe-bindings'."
+  :type 'boolean
+  :group 'help
+  :version "30.1")
+
 (declare-function outline-hide-subtree "outline")
 
 (defun describe-bindings (&optional prefix buffer)
@@ -1699,6 +1705,7 @@ describe-map
               (setq vect (cdr vect))
               (setq end (caar vect))))
           (when (or (not (eq start end))
+                    describe-bindings-show-prefixes
                     ;; Don't output keymap prefixes.
                     (not (keymapp definition)))
             (when first