[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/emacs-lisp/find-func.el [emacs-unico
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/emacs-lisp/find-func.el [emacs-unicode-2] |
Date: |
Mon, 28 Jun 2004 04:56:42 -0400 |
Index: emacs/lisp/emacs-lisp/find-func.el
diff -c emacs/lisp/emacs-lisp/find-func.el:1.46.4.1
emacs/lisp/emacs-lisp/find-func.el:1.46.4.2
*** emacs/lisp/emacs-lisp/find-func.el:1.46.4.1 Fri Apr 16 12:50:13 2004
--- emacs/lisp/emacs-lisp/find-func.el Mon Jun 28 07:29:46 2004
***************
*** 1,6 ****
;;; find-func.el --- find the definition of the Emacs Lisp function near point
! ;; Copyright (C) 1997, 1999, 2001 Free Software Foundation, Inc.
;; Author: Jens Petersen <address@hidden>
;; Maintainer: address@hidden
--- 1,6 ----
;;; find-func.el --- find the definition of the Emacs Lisp function near point
! ;; Copyright (C) 1997, 1999, 2001, 2004 Free Software Foundation, Inc.
;; Author: Jens Petersen <address@hidden>
;; Maintainer: address@hidden
***************
*** 128,133 ****
--- 128,167 ----
(append (find-library-suffixes) '("")))
(error "Can't find library %s" library)))
+ (defvar find-function-C-source-directory
+ (let ((dir (expand-file-name "src" source-directory)))
+ (when (and (file-directory-p dir) (file-readable-p dir))
+ dir))
+ "Directory where the C source files of Emacs can be found.
+ If nil, do not try to find the source code of functions and variables
+ defined in C.")
+
+ (defun find-function-C-source (fun-or-var file variable-p)
+ "Find the source location where SUBR-OR-VAR is defined in FILE.
+ VARIABLE-P should be non-nil for a variable or nil for a subroutine."
+ (unless find-function-C-source-directory
+ (setq find-function-C-source-directory
+ (read-directory-name "Emacs C source dir: " nil nil t)))
+ (setq file (expand-file-name file find-function-C-source-directory))
+ (unless (file-readable-p file)
+ (error "The C source file %s is not available"
+ (file-name-nondirectory file)))
+ (unless variable-p
+ (setq fun-or-var (indirect-function fun-or-var)))
+ (with-current-buffer (find-file-noselect file)
+ (goto-char (point-min))
+ (unless (re-search-forward
+ (if variable-p
+ (concat "DEFVAR[A-Z_]*[ \t\n]*([ \t\n]*\""
+ (regexp-quote (symbol-name fun-or-var))
+ "\"")
+ (concat "DEFUN[ \t\n]*([ \t\n]*\""
+ (regexp-quote (subr-name fun-or-var))
+ "\""))
+ nil t)
+ (error "Can't find source for %s" fun-or-var))
+ (cons (current-buffer) (match-beginning 0))))
+
;;;###autoload
(defun find-library (library)
"Find the elisp source of LIBRARY."
***************
*** 149,157 ****
(error "Don't know where `%s' is defined" symbol))
;; Some functions are defined as part of the construct
;; that defines something else.
! (while (get symbol 'definition-name)
(setq symbol (get symbol 'definition-name)))
! (save-match-data
(if (string-match "\\.el\\(c\\)\\'" library)
(setq library (substring library 0 (match-beginning 1))))
(let* ((filename (find-library-name library)))
--- 183,192 ----
(error "Don't know where `%s' is defined" symbol))
;; Some functions are defined as part of the construct
;; that defines something else.
! (while (and (symbolp symbol) (get symbol 'definition-name))
(setq symbol (get symbol 'definition-name)))
! (if (string-match "\\`src/\\(.*\\.c\\)\\'" library)
! (find-function-C-source symbol (match-string 1 library) variable-p)
(if (string-match "\\.el\\(c\\)\\'" library)
(setq library (substring library 0 (match-beginning 1))))
(let* ((filename (find-library-name library)))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/find-func.el [emacs-unicode-2],
Miles Bader <=