Make sure the binding shown by echo-keystrokes-help is not shadowed

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.
This commit is contained in:
Dmitry Gutov 2024-02-11 22:32:44 +02:00
parent faa46eb866
commit c0f656617d
2 changed files with 26 additions and 8 deletions

View 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)))
(defun help--docstring-quote (string)
"Return a doc string that represents STRING.

View 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);