changeset 37575:cbc7ca823734

(help-xref-symbol-regexp): Recognize "source of" and friends, meaning make a link to the source file. (help-make-xrefs): Handle "source of" and friends by constructing a link that visits the source file.
author Richard M. Stallman <rms@gnu.org>
date Sat, 05 May 2001 22:31:41 +0000
parents 281b6f31eed1
children 083715958fc6
files lisp/help.el
diffstat 1 files changed, 21 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/help.el	Sat May 05 22:31:30 2001 +0000
+++ b/lisp/help.el	Sat May 05 22:31:41 2001 +0000
@@ -1072,7 +1072,8 @@
   (purecopy (concat "\\(\\<\\(\\(variable\\|option\\)\\|"
 		    "\\(function\\|command\\)\\|"
 		    "\\(face\\)\\|"
-		    "\\(symbol\\)\\)\\s-+\\)?"
+		    "\\(symbol\\)\\|"
+		    "\\(source \\(?:code \\)?\\(?:of\\|for\\)\\)\\)\\s-+\\)?"
 		    ;; Note starting with word-syntax character:
 		    "`\\(\\sw\\(\\sw\\|\\s_\\)+\\)'"))
   "Regexp matching doc string references to symbols.
@@ -1187,7 +1188,7 @@
               ;; Quoted symbols
               (save-excursion
                 (while (re-search-forward help-xref-symbol-regexp nil t)
-                  (let* ((data (match-string 7))
+                  (let* ((data (match-string 8))
                          (sym (intern-soft data)))
                     (if sym
                         (cond
@@ -1195,35 +1196,45 @@
                           (and (boundp sym) ; `variable' doesn't ensure
                                         ; it's actually bound
                                (help-xref-button
-				7 #'describe-variable sym
+				8 #'describe-variable sym
 				"mouse-2, RET: describe this variable")))
                          ((match-string 4) ; `function' &c
                           (and (fboundp sym) ; similarly
                                (help-xref-button
-				7 #'describe-function sym
+				8 #'describe-function sym
 				"mouse-2, RET: describe this function")))
 			 ((match-string 5) ; `face'
 			  (and (facep sym)
-			       (help-xref-button 7 #'describe-face sym
+			       (help-xref-button 8 #'describe-face sym
 				"mouse-2, RET: describe this face")))
-                         ((match-string 6)) ; nothing for symbol
+                         ((match-string 6)) ; nothing for `symbol'
+			 ((match-string 7)
+			  (help-xref-button
+			   8
+			   #'(lambda (arg)
+			       (let ((location
+				      (find-function-noselect arg)))
+				 (pop-to-buffer (car location))
+				 (goto-char (cdr location))))
+			   sym
+			   "mouse-2, RET: find function's definition"))
                          ((and (boundp sym) (fboundp sym))
                           ;; We can't intuit whether to use the
                           ;; variable or function doc -- supply both.
                           (help-xref-button
-			   7 #'help-xref-interned sym
+			   8 #'help-xref-interned sym
 			   "mouse-2, RET: describe this symbol"))
                          ((boundp sym)
 			  (help-xref-button
-			   7 #'describe-variable sym
+			   8 #'describe-variable sym
 			   "mouse-2, RET: describe this variable"))
 			 ((fboundp sym)
 			  (help-xref-button
-			   7 #'describe-function sym
+			   8 #'describe-function sym
 			   "mouse-2, RET: describe this function"))
 			 ((facep sym)
 			  (help-xref-button
-			   7 #'describe-face sym)))))))
+			   8 #'describe-face sym)))))))
               ;; An obvious case of a key substitution:
               (save-excursion
                 (while (re-search-forward