Mercurial > emacs
changeset 47345:8268e926d8e9
(find-library-suffixes, find-library-name)
(find-library): New funs.
(find-function-search-for-symbol): Use it.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Mon, 09 Sep 2002 21:50:36 +0000 |
parents | 0b6b707c1e14 |
children | 8287dca5eb2d |
files | lisp/emacs-lisp/find-func.el |
diffstat | 1 files changed, 29 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/emacs-lisp/find-func.el Mon Sep 09 21:41:34 2002 +0000 +++ b/lisp/emacs-lisp/find-func.el Mon Sep 09 21:50:36 2002 +0000 @@ -112,6 +112,34 @@ ;;; Functions: +(defun find-library-suffixes () + (let ((suffixes nil)) + (dolist (suffix load-suffixes (nreverse suffixes)) + (unless (string-match "elc" suffix) (push suffix suffixes))))) + +(defun find-library-name (library) + "Return the full name of the elisp source of LIBRARY." + ;; If the library is byte-compiled, try to find a source library by + ;; the same name. + (if (string-match "\\.el\\(c\\(\\..*\\)\\)\\'" library) + (setq library (replace-match "" t t library 1))) + (or (locate-file library + (or find-function-source-path load-path) + (find-library-suffixes)) + (error "Can't find library %s" file))) + +;;;###autoload +(defun find-library (library) + "Find the elisp source of LIBRARY." + (interactive + (list + (completing-read "Library name: " + 'locate-file-completion + (cons (or find-function-source-path load-path) + (find-library-suffixes))))) + (let ((buf (find-file-noselect (find-library-name library)))) + (condition-case nil (switch-to-buffer buf) (error (pop-to-buffer buf))))) + ;;;###autoload (defun find-function-search-for-symbol (symbol variable-p library) "Search for SYMBOL. @@ -126,23 +154,7 @@ (save-match-data (if (string-match "\\.el\\(c\\)\\'" library) (setq library (substring library 0 (match-beginning 1)))) - (let* ((path find-function-source-path) - (compression (or (rassq 'jka-compr-handler file-name-handler-alist) - (member 'crypt-find-file-hook find-file-hook))) - (filename (progn - ;; use `file-name-sans-extension' here? (if it gets fixed) - (if (string-match "\\(\\.el\\)\\'" library) - (setq library (substring library 0 - (match-beginning 1)))) - (or (locate-library (concat library ".el") t path) - (locate-library library t path) - (if compression - (or (locate-library (concat library ".el.gz") - t path) - (locate-library (concat library ".gz") - t path))))))) - (if (not filename) - (error "The library `%s' is not in the path" library)) + (let* ((filename (find-library-name library))) (with-current-buffer (find-file-noselect filename) (let ((regexp (format (if variable-p find-variable-regexp