From: "Jan Djärv" <jan.h.d@swipnet.se>
To: David Kastrup <dak@gnu.org>
Cc: Herbert Euler <herberteuler@hotmail.com>, emacs-devel@gnu.org
Subject: Re: A suggestion...
Date: Thu, 17 May 2007 16:28:20 +0200 [thread overview]
Message-ID: <464C6684.8010805@swipnet.se> (raw)
In-Reply-To: <85zm43zzuh.fsf@lola.goethe.zz>
[-- Attachment #1: Type: text/plain, Size: 2004 bytes --]
David Kastrup skrev:
> "Herbert Euler" <herberteuler@hotmail.com> writes:
>
>>> When doing something like C-h f for a function, one gets displayed a
>>> hyperlink to the corresponding source file.
>>>
>>> Now there is not rarely the situation that one actually wants not to
>>> go to the Elisp file in load-path, but rather the actual source file.
>>>
>>> It happens that .elc files have a header similar to the following:
>>>
>>> ;ELC.
>>> ;;; Compiled by dak@lola.quinscape.zz on Mon May 14 12:09:35 2007
>>> ;;; from file /rep/emacs/lisp/gnus/mml2015.el
>>> ;;; in Emacs version 23.0.51
>>> ;;; with all optimizations.
>>>
>>> The information is sufficient for determining whether the compilation
>>> happened on the current machine by the current user, and if so, what
>>> the actual source file has been.
>>>
>>> So in this particular case, I'd prefer if, without further
>>> configuration and ado, I'd be landed in the corresponding source file
>>> if it is still present on the given machine.
>>>
>>> Since I have several packages I build and install from the respective
>>> CVS source archives, having this work automatically would be quite
>>> nice.
>> I agree. M-. now always creates buffers like "subr.el<2>", which
>> is not good.
>
> I have in my own personal .emacs file the following which mitigates
> the problem but requires manual configuration for every package you
> work with. And at my Emacs at the workplace, I have not yet adapted
> .emacs, so I was annoyed again. All the info for an automatic
> solution is actually in-place in the compiled Lisp files. Even when
> some installation procedure copies _only_ the compiled files.
>
I want this feature as well. I came up with the following patch. It probably
don't work correctly with non-ascii file names, I think one should check file
coding there somewhere. Also I don't check user and machine since I share
installation and source directories with different user names (long story) on
different machines.
Jan D.
[-- Attachment #2: help-fns.diff --]
[-- Type: text/x-patch, Size: 1293 bytes --]
Index: lisp/help-fns.el
*** lisp/help-fns.el.~1.96.~ 2007-01-24 20:52:15.000000000 +0100
--- lisp/help-fns.el 2007-05-17 16:23:46.000000000 +0200
***************
*** 232,237 ****
--- 232,250 ----
libname)
file))))
+ (defun find-source-lisp-file (file-name)
+ (let* ((elc-file (locate-file (concat file-name "c") load-path))
+ (str (if (and elc-file (file-readable-p elc-file))
+ (with-temp-buffer
+ (insert-file-contents 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,314 ****
--- 322,331 ----
;; 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
[-- Attachment #3: Type: text/plain, Size: 142 bytes --]
_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel
prev parent reply other threads:[~2007-05-17 14:28 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-14 10:16 A suggestion David Kastrup
2007-05-17 4:31 ` Herbert Euler
2007-05-17 7:14 ` David Kastrup
2007-05-17 14:28 ` Jan Djärv [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=464C6684.8010805@swipnet.se \
--to=jan.h.d@swipnet.se \
--cc=dak@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=herberteuler@hotmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).