]> git.eshelyaron.com Git - emacs.git/commitdiff
Make sure the binding shown by echo-keystrokes-help is not shadowed
authorDmitry Gutov <dmitry@gutov.dev>
Sun, 11 Feb 2024 20:32:44 +0000 (22:32 +0200)
committerEshel Yaron <me@eshelyaron.com>
Mon, 12 Feb 2024 07:01:56 +0000 (08:01 +0100)
And choose just one binding to display rather than two together.
(https://lists.gnu.org/archive/html/emacs-devel/2024-02/msg00311.html)

* lisp/help.el (help--append-keystrokes-help): New function.

* src/keyboard.c (syms_of_keyboard): Add a symbol for it.
(echo_dash): Use them here.

(cherry picked from commit c0f656617d6848b94413b79b390788565d338fcd)

lisp/help.el
src/keyboard.c

index 72a4f8a800dc7790a0c3dfba7a25bd6ec8c143f8..07eed2861c27cdc3a900c67eaa1fc3661ae64c48 100644 (file)
@@ -2253,6 +2253,27 @@ The `temp-buffer-window-setup-hook' hook is called."
        (with-output-to-temp-buffer " *Char Help*"
          (princ msg)))))
 
+(defun help--append-keystrokes-help (str)
+  (let* ((keys (this-single-command-keys))
+         (bindings (delete nil
+                           (mapcar (lambda (map) (lookup-key map keys t))
+                                   (current-active-maps t)))))
+    (catch 'res
+      (dolist (val help-event-list)
+        (let ((key (vector (if (eql val 'help)
+                               help-char
+                             val))))
+          (unless (seq-find (lambda (map) (and (keymapp map) (lookup-key map key)))
+                            bindings)
+            (throw 'res
+                   (concat
+                    str
+                    (substitute-command-keys
+                     (format
+                      " (\\`%s' for help)"
+                      (key-description key))))))))
+      str)))
+
 \f
 (defun help--docstring-quote (string)
   "Return a doc string that represents STRING.
index 10cdef67348b42cf61473e0beb6ebc6d2e753d46..4b5e20fb24cbe1127b967929eb0719bed2dc39f3 100644 (file)
@@ -594,14 +594,9 @@ echo_dash (void)
                    concat2 (KVAR (current_kboard, echo_string), dash));
 
   if (echo_keystrokes_help)
-    {
-      Lisp_Object help;
-
-      help = build_string (" (\\`C-h' or \\`<f1>' for help)");
-      kset_echo_string (current_kboard,
-                       concat2 (KVAR (current_kboard, echo_string),
-                                calln (Qsubstitute_command_keys, help)));
-    }
+    kset_echo_string (current_kboard,
+                     calln (Qhelp__append_keystrokes_help,
+                            KVAR (current_kboard, echo_string)));
 
   echo_now ();
 }
@@ -12962,6 +12957,8 @@ syms_of_keyboard (void)
 
   DEFSYM (Qhelp_key_binding, "help-key-binding");
 
+  DEFSYM (Qhelp__append_keystrokes_help, "help--append-keystrokes-help");
+
   DEFSYM (Qecho_keystrokes, "echo-keystrokes");
 
   Fset (Qinput_method_exit_on_first_char, Qnil);