From: Jan Djärv Date: Tue, 22 May 2007 13:45:59 +0000 (+0000) Subject: (find-source-lisp-file): New function. X-Git-Tag: emacs-pretest-23.0.90~12580 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2f041d624968c64b1c8a06d78b761a4226ddaf11;p=emacs.git (find-source-lisp-file): New function. (describe-function-1): Use find-source-lisp-file to find source file in compile tree. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2ec6ae659e9..e36fed25413 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2007-05-22 Jan Dj,Ad(Brv + + * 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 * dos-w32.el (find-buffer-file-type-coding-system): Doc fix. diff --git a/lisp/help-fns.el b/lisp/help-fns.el index dab6bdb157c..92354624d88 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -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