From 803e9440a6ac75e1fbc20212793ebb379d07948e Mon Sep 17 00:00:00 2001 From: Robert Pluim Date: Fri, 7 Jun 2024 12:21:11 +0200 Subject: [PATCH] Show character names when describing translations This implements Bug#71411. * lisp/help.el (help-key-description): Use 'char-to-name' to show the Unicode name of translated keys. (help--describe-command): And here. * etc/NEWS: Announce the change. (cherry picked from commit e3078994d89adb6e8e004094817faa3862f6d8ab) --- etc/NEWS | 20 ++++++++++++++++++++ lisp/help.el | 9 +++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index d9352f25212..75dc93e1d94 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -163,6 +163,26 @@ This user option controls outline visibility in the output buffer of *** 'C-h m' ('describe-mode') uses outlining by default. Set 'describe-mode-outline' to nil to get back the old behavior. +*** 'C-h k' ('describe-key') shows Unicode name. +For keybindings which produce single characters via translation or input +methods, 'C-h k' now shows the Unicode name of the produced character in +addition to the character itself, e.g. + +'C-h k C-x 8 E' => + + € 'EURO SIGN' (translated from C-x 8 E) + +*** 'C-h b' ('describe-bindings') shows Unicode names. +For keybindings which produce single characters via translation (such as +those using the 'C-x 8' or 'A-' prefix, or 'dead-acute', 'dead-grave', +etc), the Unicode names will now be shown in addition to the character +itself, i.e. + + A-! ¡ INVERTED EXCLAMATION MARK + A-$ ¤ CURRENCY SIGN + +and so on. + ** Emacs now comes with Org v9.7. See the file "etc/ORG-NEWS" for user-visible changes in Org. diff --git a/lisp/help.el b/lisp/help.el index ac35621d1e2..bcb8a2d9eca 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -1020,7 +1020,9 @@ If INSERT (the prefix arg) is non-nil, insert the message in the buffer." (let ((otherstring (help--key-description-fontified untranslated))) (if (equal string otherstring) string - (format "%s (translated from %s)" string otherstring)))))) + (if-let ((char-name (char-to-name (aref string 0)))) + (format "%s '%s' (translated from %s)" string char-name otherstring) + (format "%s (translated from %s)" string otherstring))))))) (defun help--binding-undefined-p (defn) (or (null defn) (integerp defn) (equal defn #'undefined))) @@ -1790,7 +1792,10 @@ Return nil if the key sequence is too long." (defun help--describe-command (definition &optional translation) (cond ((or (stringp definition) (vectorp definition)) (if translation - (insert (key-description definition nil) "\n") + (insert (concat (key-description definition nil) + (when-let ((char-name (char-to-name (aref definition 0)))) + (format "\t%s" char-name)) + "\n")) ;; These should be rare nowadays, replaced by `kmacro's. (insert "Keyboard Macro\n"))) ((keymapp definition) -- 2.39.5