# HG changeset patch # User Richard M. Stallman # Date 989101901 0 # Node ID cbc7ca823734865f0eba32e4f1ad5b1332599ae9 # Parent 281b6f31eed131f4ddd68131f33ff8fe1a13ebda (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. diff -r 281b6f31eed1 -r cbc7ca823734 lisp/help.el --- 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