]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix display of menu-bar bindings of commands in *Help* buffers
authorEli Zaretskii <eliz@gnu.org>
Wed, 19 Apr 2023 17:46:40 +0000 (20:46 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 19 Apr 2023 17:46:40 +0000 (20:46 +0300)
* lisp/help-fns.el (help-fns--insert-menu-bindings): Propertize
with 'help-key-binding' face only the menu items, not the arrows
between successive items.  This is because 'char-displayable-p' is
unreliable when we propertize the character with an arbitrary
face: that face could specify a font which doesn't support the
character after all, while 'char-displayable-p' assumes there are
no restrictions on fonts that can be used for displaying the
character.  Also, make the code more efficient by avoiding the
call to 'char-displayable-p' inside the loop.

lisp/help-fns.el

index a1fc22675649407a1abda2318e39050ef1cdfbd6..be13d40cfa3105534be32d0147e24b2ab3806c30 100644 (file)
@@ -592,22 +592,22 @@ the C sources, too."
     ;; First collect all the printed representations of menus.
     (dolist (menu menus)
       (let ((map (lookup-key global-map (seq-take menu 1)))
-            (string nil))
+            (string nil)
+            (sep (if (char-displayable-p ?→) " → " " => ")))
         (seq-do-indexed
          (lambda (entry level)
            (when (symbolp map)
              (setq map (symbol-function map)))
            (when-let ((elem (assq entry (cdr map))))
              (when (> level 0)
-               (push (if (char-displayable-p ?→)
-                         " → "
-                       " => ")
-                     string))
+               (push sep string))
              (if (eq (nth 1 elem) 'menu-item)
                  (progn
-                   (push (nth 2 elem) string)
+                   (push (propertize (nth 2 elem) 'face 'help-key-binding)
+                         string)
                    (setq map (cadddr elem)))
-               (push (nth 1 elem) string)
+               (push (propertize (nth 1 elem) 'face 'help-key-binding)
+                     string)
                (setq map (cddr elem)))))
          (cdr (seq-into menu 'list)))
         (when string
@@ -622,8 +622,7 @@ the C sources, too."
           (cond ((zerop i) "")
                 ((= i (1- (length menus))) " and ")
                 (t ", "))
-          (propertize (string-join (nreverse string))
-                      'face 'help-key-binding)))
+          (string-join (nreverse string))))
        strings))))
 
 (defun help-fns--compiler-macro (function)