summaryrefslogtreecommitdiff
path: root/lisp/help.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2001-05-05 22:31:41 +0000
committerRichard M. Stallman <rms@gnu.org>2001-05-05 22:31:41 +0000
commit9bc4554a03a09c44295260db519f88e8046276a1 (patch)
treef99add754644ee0339cf999e9c48393f22d5bd27 /lisp/help.el
parent05be3833f3e04c01e325362948c4c70bc17f564d (diff)
downloademacs-9bc4554a03a09c44295260db519f88e8046276a1.tar.gz
(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.
Diffstat (limited to 'lisp/help.el')
-rw-r--r--lisp/help.el31
1 files changed, 21 insertions, 10 deletions
diff --git a/lisp/help.el b/lisp/help.el
index 2fab9422aea..3cf53d21227 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -1072,7 +1072,8 @@ Must be previously-defined."
(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 @@ that."
;; 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 @@ that."
(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