[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: A suggestion...
From: |
David Kastrup |
Subject: |
Re: A suggestion... |
Date: |
Thu, 17 May 2007 09:14:14 +0200 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/23.0.51 (gnu/linux) |
"Herbert Euler" <address@hidden> 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 address@hidden 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.
(defcustom find-function-transform-list
`((,(expand-file-name ".." data-directory)
"/home/tmp/emacs")
("/usr/local/emacs-21/share/emacs/site-lisp/preview"
"/home/tmp/auctex/preview")
("/usr/local/emacs-21/share/emacs/site-lisp/auctex"
"/home/tmp/auctex/preview"
"/home/tmp/auctex"))
"File prefixes to transform `find-function-source-path'."
:group 'find-file
:type '(repeat (list string (repeat string))))
(defadvice find-library-name (around find-function-transform activate)
(let ((find-function-source-path (or find-function-source-path load-path)))
(let (lst case-fold-search lst2 len elt2)
(setq find-function-source-path
(dolist (elt find-function-source-path (nreverse lst))
(setq lst2 find-function-transform-list)
(catch 'found
(while lst2
(setq elt2 (pop lst2)
len (length (car elt2)))
(when (or (string= elt (car elt2))
(and (< len (length elt))
(string= (substring elt 0 (1+ len))
(concat (car elt2) "/"))))
(while (setq elt2 (cdr elt2))
(push (concat (car elt2) (substring elt len)) lst))
(throw 'found t)))
(push elt lst)))))
ad-do-it))
--
David Kastrup, Kriemhildstr. 15, 44793 Bochum