[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:
>>;;; 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
> 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)
  "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)))))

David Kastrup, Kriemhildstr. 15, 44793 Bochum

reply via email to

[Prev in Thread] Current Thread [Next in Thread]