# HG changeset patch # User Stefan Monnier # Date 1017717806 0 # Node ID bdf6c2baa447e54c407baa93e4b7a51ec269fcf2 # Parent 5a8965629f0277c48273aaf4a4105164e1ddd930 (help-key-description): New fun. (describe-key-briefly, describe-key): Use it and this-single-command-raw-keys plus new arg `untranslated'. diff -r 5a8965629f02 -r bdf6c2baa447 lisp/help.el --- a/lisp/help.el Mon Apr 01 23:33:40 2002 +0000 +++ b/lisp/help.el Tue Apr 02 03:23:26 2002 +0000 @@ -350,12 +350,10 @@ (interactive) (help-setup-xref (list #'view-lossage) (interactive-p)) (with-output-to-temp-buffer (help-buffer) - (princ (mapconcat (function (lambda (key) - (if (or (integerp key) - (symbolp key) - (listp key)) - (single-key-description key) - (prin1-to-string key nil)))) + (princ (mapconcat (lambda (key) + (if (or (integerp key) (symbolp key) (listp key)) + (single-key-description key) + (prin1-to-string key nil))) (recent-keys) " ")) (with-current-buffer standard-output @@ -450,10 +448,24 @@ (setq defn (and local-map (lookup-key local-map key))))) defn)) -(defun describe-key-briefly (key &optional insert) +(defun help-key-description (key untranslated) + (let ((string (key-description key))) + (if (or (not untranslated) (eq (aref untranslated 0) ?\e)) + string + (let ((otherstring (key-description untranslated))) + (if (equal string otherstring) + string + (format "%s (translated from %s)" string otherstring)))))) + +(defun describe-key-briefly (key &optional insert untranslated) "Print the name of the function KEY invokes. KEY is a string. -If INSERT (the prefix arg) is non-nil, insert the message in the buffer." - (interactive "kDescribe key briefly: \nP") +If INSERT (the prefix arg) is non-nil, insert the message in the buffer. +If non-nil UNTRANSLATED is a vector of the untranslated events. +It can also be a number in which case the untranslated events from +the last key hit are used." + (interactive "kDescribe key briefly: \nP\np") + (if (numberp untranslated) + (setq untranslated (this-single-command-raw-keys))) (save-excursion (let ((modifiers (event-modifiers (aref key 0))) (standard-output (if insert (current-buffer) t)) @@ -472,7 +484,7 @@ ;; Ok, now look up the key and name the command. (let ((defn (or (string-key-binding key) (key-binding key))) - (key-desc (key-description key))) + (key-desc (help-key-description key untranslated))) (if (or (null defn) (integerp defn) (equal defn 'undefined)) (princ (format "%s is undefined" key-desc)) (princ (format (if (windowp window) @@ -482,11 +494,16 @@ (if (symbolp defn) defn (prin1-to-string defn))))))))) -(defun describe-key (key) +(defun describe-key (key &optional untranslated) "Display documentation of the function invoked by KEY. KEY should be a key sequence--when calling from a program, -pass a string or a vector." - (interactive "kDescribe key: ") +pass a string or a vector. +If non-nil UNTRANSLATED is a vector of the untranslated events. +It can also be a number in which case the untranslated events from +the last key hit are used." + (interactive "kDescribe key: \np") + (if (numberp untranslated) + (setq untranslated (this-single-command-raw-keys))) (save-excursion (let ((modifiers (event-modifiers (aref key 0))) window position) @@ -502,10 +519,10 @@ (goto-char position)) (let ((defn (or (string-key-binding key) (key-binding key)))) (if (or (null defn) (integerp defn) (equal defn 'undefined)) - (message "%s is undefined" (key-description key)) + (message "%s is undefined" (help-key-description key untranslated)) (help-setup-xref (list #'describe-function defn) (interactive-p)) (with-output-to-temp-buffer (help-buffer) - (princ (key-description key)) + (princ (help-key-description key untranslated)) (if (windowp window) (princ " at that spot")) (princ " runs the command ")