(find-source-lisp-file): New function.

(describe-function-1): Use find-source-lisp-file to find source
file in compile tree.
This commit is contained in:
Jan Djärv 2007-05-22 13:45:59 +00:00
parent c297055514
commit 2f041d6249
2 changed files with 27 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2007-05-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* help-fns.el (find-source-lisp-file): New function.
(describe-function-1): Use find-source-lisp-file to find source
file in compile tree.
2007-05-22 Eli Zaretskii <eliz@gnu.org>
* dos-w32.el (find-buffer-file-type-coding-system): Doc fix.

View file

@ -232,6 +232,23 @@ face (according to `face-differs-from-default-p')."
libname)
file))))
(defun find-source-lisp-file (file-name)
(let* ((elc-file (locate-file (concat file-name
(if (string-match "\\.el" file-name)
"c"
".elc"))
load-path))
(str (if (and elc-file (file-readable-p elc-file))
(with-temp-buffer
(insert-file-contents-literally elc-file nil 0 256)
(buffer-string))))
(src-file (and str
(string-match ";;; from file \\(.*\\.el\\)" str)
(match-string 1 str))))
(if (and src-file (file-readable-p src-file))
src-file
file-name)))
;;;###autoload
(defun describe-function-1 (function)
(let* ((def (if (symbolp function)
@ -309,6 +326,10 @@ face (according to `face-differs-from-default-p')."
;; but that's completely wrong when the user used load-file.
(princ (if (eq file-name 'C-source) "C source code" file-name))
(princ "'")
;; See if lisp files are present where they where installed from.
(if (not (eq file-name 'C-source))
(setq file-name (find-source-lisp-file file-name)))
;; Make a hyperlink to the library.
(with-current-buffer standard-output
(save-excursion