# HG changeset patch # User Stefan Monnier # Date 1031608236 0 # Node ID 8268e926d8e9657fd0ae8cefd37aa994a6f6df9c # Parent 0b6b707c1e14ab860e533ddc869363bfd08f6ea8 (find-library-suffixes, find-library-name) (find-library): New funs. (find-function-search-for-symbol): Use it. diff -r 0b6b707c1e14 -r 8268e926d8e9 lisp/emacs-lisp/find-func.el --- 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