changeset 13293:5270a0a465a7

(describe-key, describe-key-briefly): For a mouse click, go to its buffer and position before looking up the key.
author Richard M. Stallman <rms@gnu.org>
date Wed, 25 Oct 1995 19:30:19 +0000
parents b120ed4d324f
children 30565fdf5fe0
files lisp/help.el
diffstat 1 files changed, 54 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/help.el	Wed Oct 25 19:24:28 1995 +0000
+++ b/lisp/help.el	Wed Oct 25 19:30:19 1995 +0000
@@ -167,12 +167,29 @@
     (and (symbolp type)
 	 (memq 'down (event-modifiers type))
 	 (read-event)))
-  (let ((defn (key-binding key)))
-    (if (or (null defn) (integerp defn))
-        (message "%s is undefined" (key-description key))
-      (message "%s runs the command %s"
-	       (key-description key)
-	       (if (symbolp defn) defn (prin1-to-string defn))))))
+  (save-excursion
+    (let ((modifiers (event-modifiers (aref key 0)))
+	  window position)
+      ;; For a mouse button event, go to the button it applies to
+      ;; to get the right key bindings.  And go to the right place
+      ;; in case the keymap depends on where you clicked.
+      (if (or (memq 'click modifiers) (memq 'down modifiers)
+	      (memq 'drag modifiers))
+	  (setq window (posn-window (event-start (aref key 0)))
+		position (posn-point (event-start (aref key 0)))))
+      (if (windowp window)
+	  (progn
+	    (set-buffer (window-buffer window))
+	    (goto-char position)))
+      ;; Ok, now look up the key and name the command.
+      (let ((defn (key-binding key)))
+	(if (or (null defn) (integerp defn))
+	    (message "%s is undefined" (key-description key))
+	  (message (if (windowp window)
+		       "%s at that spot runs the command %s"
+		     "%s runs the command %s")
+		   (key-description key)
+		   (if (symbolp defn) defn (prin1-to-string defn))))))))
 
 (defun print-help-return-message (&optional function)
   "Display or return message saying how to restore windows after help command.
@@ -255,19 +272,37 @@
     (and (symbolp type)
 	 (memq 'down (event-modifiers type))
 	 (read-event)))
-  (let ((defn (key-binding key)))
-    (if (or (null defn) (integerp defn))
-        (message "%s is undefined" (key-description key))
-      (with-output-to-temp-buffer "*Help*"
-	(prin1 defn)
-	(princ ":\n")
-	(if (documentation defn)
-	    (princ (documentation defn))
-	  (princ "not documented"))
-	(save-excursion
-	  (set-buffer standard-output)
-	  (help-mode))
-	(print-help-return-message)))))
+  (save-excursion
+    (let ((modifiers (event-modifiers (aref key 0)))
+	  window position)
+      ;; For a mouse button event, go to the button it applies to
+      ;; to get the right key bindings.  And go to the right place
+      ;; in case the keymap depends on where you clicked.
+      (if (or (memq 'click modifiers) (memq 'down modifiers)
+	      (memq 'drag modifiers))
+	  (setq window (posn-window (event-start (aref key 0)))
+		position (posn-point (event-start (aref key 0)))))
+      (if (windowp window)
+	  (progn
+	    (set-buffer (window-buffer window))
+	    (goto-char position)))
+      (let ((defn (key-binding key)))
+	(if (or (null defn) (integerp defn))
+	    (message "%s is undefined" (key-description key))
+	  (with-output-to-temp-buffer "*Help*"
+	    (princ (key-description key))
+	    (if (windowp window)
+		(princ " at that spot"))
+	    (princ " runs the command ")
+	    (prin1 defn)
+	    (princ ":\n")
+	    (if (documentation defn)
+		(princ (documentation defn))
+	      (princ "not documented"))
+	    (save-excursion
+	      (set-buffer standard-output)
+	      (help-mode))
+	    (print-help-return-message)))))))
 
 (defun describe-mode ()
   "Display documentation of current major mode and minor modes.