Mercurial > emacs
annotate lisp/emacs-lisp/find-func.el @ 55434:f88632e54afb
2004-05-08 John Wiegley <johnw@newartisans.com>
* iswitchb.el (iswitchb-use-virtual-buffers): Added support for
"virtual buffers" (off by default), which makes it possible to
switch to the buffers of recently files. When a buffer name
search fails, and this option is on, iswitchb will look at the
list of recently visited files, and permit matching against those
names. When the user hits RET on a match, it will revisit that
file.
(iswitchb-read-buffer): Added two optional arguments, which makes
isearchb.el possible.
(iswitchb-completions, iswitchb-set-matches, iswitchb-prev-match,
iswitchb-next-match): Added support for virtual buffers.
author | John Wiegley <johnw@newartisans.com> |
---|---|
date | Sat, 08 May 2004 13:00:52 +0000 |
parents | 7fc34677dcb8 |
children | 212733e53508 4c90ffeb71c5 |
rev | line source |
---|---|
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
1 ;;; find-func.el --- find the definition of the Emacs Lisp function near point |
20183 | 2 |
55231
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
3 ;; Copyright (C) 1997, 1999, 2001, 2004 Free Software Foundation, Inc. |
20183 | 4 |
5 ;; Author: Jens Petersen <petersen@kurims.kyoto-u.ac.jp> | |
6 ;; Maintainer: petersen@kurims.kyoto-u.ac.jp | |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
7 ;; Keywords: emacs-lisp, functions, variables |
20183 | 8 ;; Created: 97/07/25 |
9 | |
10 ;; This file is part of GNU Emacs. | |
11 | |
12 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
13 ;; it under the terms of the GNU General Public License as published by | |
14 ;; the Free Software Foundation; either version 2, or (at your option) | |
15 ;; any later version. | |
16 | |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
25 ;; Boston, MA 02111-1307, USA. | |
26 | |
27 ;;; Commentary: | |
28 ;; | |
29 ;; The funniest thing about this is that I can't imagine why a package | |
30 ;; so obviously useful as this hasn't been written before!! | |
31 ;; ;;; find-func | |
22759
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
32 ;; (find-function-setup-keys) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
33 ;; |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
34 ;; or just: |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
35 ;; |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
36 ;; (load "find-func") |
20183 | 37 ;; |
22759
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
38 ;; if you don't like the given keybindings and away you go! It does |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
39 ;; pretty much what you would expect, putting the cursor at the |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
40 ;; definition of the function or variable at point. |
20183 | 41 ;; |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
42 ;; The code started out from `describe-function', `describe-key' |
20183 | 43 ;; ("help.el") and `fff-find-loaded-emacs-lisp-function' (Noah Friedman's |
44 ;; "fff.el"). | |
45 | |
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
33198
diff
changeset
|
46 ;;; Code: |
20183 | 47 |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
48 (require 'loadhist) |
20183 | 49 |
50 ;;; User variables: | |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
51 |
20962 | 52 (defgroup find-function nil |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
53 "Finds the definition of the Emacs Lisp symbol near point." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
54 ;; :prefix "find-function" |
20962 | 55 :group 'lisp) |
20183 | 56 |
45326
892ea515fb3a
(find-function-search-for-symbol): Find funs defined with defun-cvs-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45257
diff
changeset
|
57 (defconst find-function-space-re "\\(?:\\s-\\|\n\\|;.*\n\\)+") |
892ea515fb3a
(find-function-search-for-symbol): Find funs defined with defun-cvs-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45257
diff
changeset
|
58 |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
59 (defcustom find-function-regexp |
24013 | 60 ;; Match things like (defun foo ...), (defmacro foo ...), |
61 ;; (define-skeleton foo ...), (define-generic-mode 'foo ...), | |
26558
2daba92c1033
(find-function-regexp): Use `define-minor-mode' after easy-menu
Dave Love <fx@gnu.org>
parents:
25424
diff
changeset
|
62 ;; (define-derived-mode foo ...), (define-minor-mode foo) |
45326
892ea515fb3a
(find-function-search-for-symbol): Find funs defined with defun-cvs-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45257
diff
changeset
|
63 (concat |
892ea515fb3a
(find-function-search-for-symbol): Find funs defined with defun-cvs-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45257
diff
changeset
|
64 "^\\s-*(\\(def\\(ine-skeleton\\|ine-generic-mode\\|ine-derived-mode\\|\ |
38557
cda1a73acb68
(find-function-regexp): Add
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
65 \[^cgv\W]\\w+\\*?\\)\\|define-minor-mode\ |
45326
892ea515fb3a
(find-function-search-for-symbol): Find funs defined with defun-cvs-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45257
diff
changeset
|
66 \\|easy-mmode-define-global-mode\\)" find-function-space-re |
892ea515fb3a
(find-function-search-for-symbol): Find funs defined with defun-cvs-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45257
diff
changeset
|
67 "\\('\\|\(quote \\)?%s\\(\\s-\\|$\\|\(\\|\)\\)") |
24013 | 68 "The regexp used by `find-function' to search for a function definition. |
69 Note it must contain a `%s' at the place where `format' | |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
70 should insert the function name. The default value avoids `defconst', |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
71 `defgroup', `defvar'. |
20183 | 72 |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
73 Please send improvements and fixes to the maintainer." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
74 :type 'regexp |
22759
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
75 :group 'find-function |
26558
2daba92c1033
(find-function-regexp): Use `define-minor-mode' after easy-menu
Dave Love <fx@gnu.org>
parents:
25424
diff
changeset
|
76 :version "21.1") |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
77 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
78 (defcustom find-variable-regexp |
45326
892ea515fb3a
(find-function-search-for-symbol): Find funs defined with defun-cvs-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45257
diff
changeset
|
79 (concat"^\\s-*(def[^umag]\\(\\w\\|\\s_\\)+\\*?" find-function-space-re "%s\\(\\s-\\|$\\)") |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
80 "The regexp used by `find-variable' to search for a variable definition. |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
81 It should match right up to the variable name. The default value |
33155
02b0153b79a7
(find-variable-regexp): Avoid defgroup.
Dave Love <fx@gnu.org>
parents:
32226
diff
changeset
|
82 avoids `defun', `defmacro', `defalias', `defadvice', `defgroup'. |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
83 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
84 Please send improvements and fixes to the maintainer." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
85 :type 'regexp |
22759
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
86 :group 'find-function |
32226
2af46c6c8bde
(find-function-regexp): Remove spurion.
Dave Love <fx@gnu.org>
parents:
26593
diff
changeset
|
87 :version "21.1") |
20183 | 88 |
20962 | 89 (defcustom find-function-source-path nil |
24013 | 90 "The default list of directories where `find-function' searches. |
20183 | 91 |
24013 | 92 If this variable is nil then `find-function' searches `load-path' by |
20962 | 93 default." |
94 :type '(repeat directory) | |
95 :group 'find-function) | |
20183 | 96 |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
97 (defcustom find-function-recenter-line 1 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
98 "The window line-number from which to start displaying a symbol definition. |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
99 A value of nil implies center the beginning of the definition. |
47298
c6dddb2746ee
* emacs-lisp/cl-indent.el (extended-loop-p): Doc fix.
John Paul Wallington <jpw@pobox.com>
parents:
47255
diff
changeset
|
100 See `find-function' and `find-variable'." |
c6dddb2746ee
* emacs-lisp/cl-indent.el (extended-loop-p): Doc fix.
John Paul Wallington <jpw@pobox.com>
parents:
47255
diff
changeset
|
101 :type '(choice (const :tag "Center" nil) |
c6dddb2746ee
* emacs-lisp/cl-indent.el (extended-loop-p): Doc fix.
John Paul Wallington <jpw@pobox.com>
parents:
47255
diff
changeset
|
102 integer) |
22759
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
103 :group 'find-function |
23100
043247d0ced9
Fix :version tags to have a string value, not a float.
Andreas Schwab <schwab@suse.de>
parents:
22867
diff
changeset
|
104 :version "20.3") |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
105 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
106 (defcustom find-function-after-hook nil |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
107 "Hook run after finding symbol definition. |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
108 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
109 See the functions `find-function' and `find-variable'." |
22759
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
110 :group 'find-function |
23100
043247d0ced9
Fix :version tags to have a string value, not a float.
Andreas Schwab <schwab@suse.de>
parents:
22867
diff
changeset
|
111 :version "20.3") |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
112 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
113 ;;; Functions: |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
114 |
47345
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
115 (defun find-library-suffixes () |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
116 (let ((suffixes nil)) |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
117 (dolist (suffix load-suffixes (nreverse suffixes)) |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
118 (unless (string-match "elc" suffix) (push suffix suffixes))))) |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
119 |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
120 (defun find-library-name (library) |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
121 "Return the full name of the elisp source of LIBRARY." |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
122 ;; If the library is byte-compiled, try to find a source library by |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
123 ;; the same name. |
47610
8a24f7edde82
(find-library-name): Correctly find "f.el.gz" from "f.elc" or "f.elc.gz".
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47447
diff
changeset
|
124 (if (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library) |
8a24f7edde82
(find-library-name): Correctly find "f.el.gz" from "f.elc" or "f.elc.gz".
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47447
diff
changeset
|
125 (setq library (replace-match "" t t library))) |
47345
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
126 (or (locate-file library |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
127 (or find-function-source-path load-path) |
47447
85021da80289
(find-library-name): Typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47446
diff
changeset
|
128 (append (find-library-suffixes) '(""))) |
47446
8bd5dd6cc381
(find-library-name): Don't forget the empty suffix. Fix stale variable name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47345
diff
changeset
|
129 (error "Can't find library %s" library))) |
47345
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
130 |
55231
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
131 (defvar find-function-C-source-directory |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
132 (let ((dir (expand-file-name "src" source-directory))) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
133 (when (and (file-directory-p dir) (file-readable-p dir)) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
134 dir)) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
135 "Directory where the C source files of Emacs can be found. |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
136 If nil, do not try to find the source code of functions and variables |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
137 defined in C.") |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
138 |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
139 (defun find-function-C-source (fun-or-var file variable-p) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
140 "Find the source location where SUBR-OR-VAR is defined in FILE. |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
141 VARIABLE-P should be non-nil for a variable or nil for a subroutine." |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
142 (unless find-function-C-source-directory |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
143 (setq find-function-C-source-directory |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
144 (read-directory-name "Emacs C source dir: " nil nil t))) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
145 (setq file (expand-file-name file find-function-C-source-directory)) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
146 (unless (file-readable-p file) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
147 (error "The C source file %s is not available" |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
148 (file-name-nondirectory file))) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
149 (unless variable-p |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
150 (setq fun-or-var (indirect-function fun-or-var))) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
151 (with-current-buffer (find-file-noselect file) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
152 (goto-char (point-min)) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
153 (unless (re-search-forward |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
154 (if variable-p |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
155 (concat "DEFVAR[A-Z_]*[ \t\n]*([ \t\n]*\"" |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
156 (regexp-quote (symbol-name fun-or-var)) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
157 "\"") |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
158 (concat "DEFUN[ \t\n]*([ \t\n]*\"" |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
159 (regexp-quote (subr-name fun-or-var)) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
160 "\"")) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
161 nil t) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
162 (error "Can't find source for %s" fun-or-var)) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
163 (cons (current-buffer) (match-beginning 0)))) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
164 |
47345
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
165 ;;;###autoload |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
166 (defun find-library (library) |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
167 "Find the elisp source of LIBRARY." |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
168 (interactive |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
169 (list |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
170 (completing-read "Library name: " |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
171 'locate-file-completion |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
172 (cons (or find-function-source-path load-path) |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
173 (find-library-suffixes))))) |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
174 (let ((buf (find-file-noselect (find-library-name library)))) |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
175 (condition-case nil (switch-to-buffer buf) (error (pop-to-buffer buf))))) |
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
176 |
45190
9c3195b605f7
(find-function-search-for-symbol): Add autoload cookie.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45150
diff
changeset
|
177 ;;;###autoload |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
178 (defun find-function-search-for-symbol (symbol variable-p library) |
24013 | 179 "Search for SYMBOL. |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
180 If VARIABLE-P is nil, `find-function-regexp' is used, otherwise |
47255
ad258fa595db
(find-function-search-for-symbol): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents:
46893
diff
changeset
|
181 `find-variable-regexp' is used. The search is done in library LIBRARY." |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
182 (if (null library) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
183 (error "Don't know where `%s' is defined" symbol)) |
46874
cbd462ecc9ad
(find-function-search-for-symbol): Obey `definition-name' properties.
Richard M. Stallman <rms@gnu.org>
parents:
45326
diff
changeset
|
184 ;; Some functions are defined as part of the construct |
cbd462ecc9ad
(find-function-search-for-symbol): Obey `definition-name' properties.
Richard M. Stallman <rms@gnu.org>
parents:
45326
diff
changeset
|
185 ;; that defines something else. |
55231
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
186 (while (and (symbolp symbol) (get symbol 'definition-name)) |
46874
cbd462ecc9ad
(find-function-search-for-symbol): Obey `definition-name' properties.
Richard M. Stallman <rms@gnu.org>
parents:
45326
diff
changeset
|
187 (setq symbol (get symbol 'definition-name))) |
55231
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
188 (if (string-match "\\`src/\\(.*\\.c\\)\\'" library) |
7fc34677dcb8
(find-function-C-source-directory): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
189 (find-function-C-source symbol (match-string 1 library) variable-p) |
23862
d0e08cc0aa3d
(find-function-search-for-symbol):
Dave Love <fx@gnu.org>
parents:
23737
diff
changeset
|
190 (if (string-match "\\.el\\(c\\)\\'" library) |
d0e08cc0aa3d
(find-function-search-for-symbol):
Dave Love <fx@gnu.org>
parents:
23737
diff
changeset
|
191 (setq library (substring library 0 (match-beginning 1)))) |
47345
8268e926d8e9
(find-library-suffixes, find-library-name)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47298
diff
changeset
|
192 (let* ((filename (find-library-name library))) |
23862
d0e08cc0aa3d
(find-function-search-for-symbol):
Dave Love <fx@gnu.org>
parents:
23737
diff
changeset
|
193 (with-current-buffer (find-file-noselect filename) |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
194 (let ((regexp (format (if variable-p |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
195 find-variable-regexp |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
196 find-function-regexp) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
197 (regexp-quote (symbol-name symbol)))) |
45120
254bce531056
(find-function-search-for-symbol): Bind case-fold-search when searching.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
40480
diff
changeset
|
198 (case-fold-search)) |
45150
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
199 (with-syntax-table emacs-lisp-mode-syntax-table |
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
200 (goto-char (point-min)) |
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
201 (if (or (re-search-forward regexp nil t) |
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
202 (re-search-forward |
45326
892ea515fb3a
(find-function-search-for-symbol): Find funs defined with defun-cvs-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45257
diff
changeset
|
203 (concat "^([^ ]+" find-function-space-re "['(]" |
45150
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
204 (regexp-quote (symbol-name symbol)) |
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
205 "\\>") |
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
206 nil t)) |
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
207 (progn |
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
208 (beginning-of-line) |
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
209 (cons (current-buffer) (point))) |
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
210 (error "Cannot find definition of `%s' in library `%s'" |
4a2bcce6b13a
(find-function-search-for-symbol): Use with-syntax-table.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45120
diff
changeset
|
211 symbol library)))))))) |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
212 |
22851
2c2eb47ec8e3
(find-function-noselect): Autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
22759
diff
changeset
|
213 ;;;###autoload |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
214 (defun find-function-noselect (function) |
24013 | 215 "Return a pair (BUFFER . POINT) pointing to the definition of FUNCTION. |
20183 | 216 |
217 Finds the Emacs Lisp library containing the definition of FUNCTION | |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
218 in a buffer and the point of the definition. The buffer is |
20183 | 219 not selected. |
220 | |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
221 If the file where FUNCTION is defined is not known, then it is |
24013 | 222 searched for in `find-function-source-path' if non nil, otherwise |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
223 in `load-path'." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
224 (if (not function) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
225 (error "You didn't specify a function")) |
20183 | 226 (and (subrp (symbol-function function)) |
227 (error "%s is a primitive function" function)) | |
228 (let ((def (symbol-function function)) | |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
229 aliases) |
20183 | 230 (while (symbolp def) |
231 (or (eq def function) | |
232 (if aliases | |
233 (setq aliases (concat aliases | |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
234 (format ", which is an alias for `%s'" |
20183 | 235 (symbol-name def)))) |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
236 (setq aliases (format "`%s' an alias for `%s'" |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
237 function (symbol-name def))))) |
20183 | 238 (setq function (symbol-function function) |
239 def (symbol-function function))) | |
240 (if aliases | |
241 (message aliases)) | |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
242 (let ((library |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
243 (cond ((eq (car-safe def) 'autoload) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
244 (nth 1 def)) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
245 ((symbol-file function))))) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
246 (find-function-search-for-symbol function nil library)))) |
20183 | 247 |
32226
2af46c6c8bde
(find-function-regexp): Remove spurion.
Dave Love <fx@gnu.org>
parents:
26593
diff
changeset
|
248 (defalias 'function-at-point 'function-called-at-point) |
20183 | 249 |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
250 (defun find-function-read (&optional variable-p) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
251 "Read and return an interned symbol, defaulting to the one near point. |
20183 | 252 |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
253 If the optional VARIABLE-P is nil, then a function is gotten |
24013 | 254 defaulting to the value of the function `function-at-point', otherwise |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
255 a variable is asked for, with the default coming from |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
256 `variable-at-point'." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
257 (let ((symb (funcall (if variable-p |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
258 'variable-at-point |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
259 'function-at-point))) |
20183 | 260 (enable-recursive-minibuffers t) |
261 val) | |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
262 (if (equal symb 0) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
263 (setq symb nil)) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
264 (setq val (if variable-p |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
265 (completing-read |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
266 (concat "Find variable" |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
267 (if symb |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
268 (format " (default %s)" symb)) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
269 ": ") |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
270 obarray 'boundp t nil) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
271 (completing-read |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
272 (concat "Find function" |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
273 (if symb |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
274 (format " (default %s)" symb)) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
275 ": ") |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
276 obarray 'fboundp t nil))) |
20183 | 277 (list (if (equal val "") |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
278 symb |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
279 (intern val))))) |
20183 | 280 |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
281 (defun find-function-do-it (symbol variable-p switch-fn) |
24013 | 282 "Find Emacs Lisp SYMBOL in a buffer and display it. |
283 If VARIABLE-P is nil, a function definition is searched for, otherwise | |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
284 a variable definition is searched for. The start of a definition is |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
285 centered according to the variable `find-function-recenter-line'. |
24013 | 286 See also `find-function-after-hook' It is displayed with function SWITCH-FN. |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
287 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
288 Point is saved in the buffer if it is one of the current buffers." |
22759
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
289 (let* ((orig-point (point)) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
290 (orig-buf (window-buffer)) |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
291 (orig-buffers (buffer-list)) |
22759
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
292 (buffer-point (save-excursion |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
293 (funcall (if variable-p |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
294 'find-variable-noselect |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
295 'find-function-noselect) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
296 symbol))) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
297 (new-buf (car buffer-point)) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
298 (new-point (cdr buffer-point))) |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
299 (when buffer-point |
22759
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
300 (when (memq new-buf orig-buffers) |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
301 (push-mark orig-point)) |
22759
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
302 (funcall switch-fn new-buf) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
303 (goto-char new-point) |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
304 (recenter find-function-recenter-line) |
33198
167dad6064bf
(find-function-do-it): Quote the hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33155
diff
changeset
|
305 (run-hooks 'find-function-after-hook)))) |
20183 | 306 |
20184
c8d4024e07de
(find-function, find-function-other-window, find-function-other-frame,
Dave Love <fx@gnu.org>
parents:
20183
diff
changeset
|
307 ;;;###autoload |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
308 (defun find-function (function) |
24021 | 309 "Find the definition of the FUNCTION near point. |
20183 | 310 |
311 Finds the Emacs Lisp library containing the definition of the function | |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
312 near point (selected by `function-at-point') in a buffer and |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
313 places point before the definition. Point is saved in the buffer if |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
314 it is one of the current buffers. |
20183 | 315 |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
316 The library where FUNCTION is defined is searched for in |
24013 | 317 `find-function-source-path', if non nil, otherwise in `load-path'. |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
318 See also `find-function-recenter-line' and `find-function-after-hook'." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
319 (interactive (find-function-read)) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
320 (find-function-do-it function nil 'switch-to-buffer)) |
20183 | 321 |
20184
c8d4024e07de
(find-function, find-function-other-window, find-function-other-frame,
Dave Love <fx@gnu.org>
parents:
20183
diff
changeset
|
322 ;;;###autoload |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
323 (defun find-function-other-window (function) |
24021 | 324 "Find, in another window, the definition of FUNCTION near point. |
20183 | 325 |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
326 See `find-function' for more details." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
327 (interactive (find-function-read)) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
328 (find-function-do-it function nil 'switch-to-buffer-other-window)) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
329 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
330 ;;;###autoload |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
331 (defun find-function-other-frame (function) |
24021 | 332 "Find, in ananother frame, the definition of FUNCTION near point. |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
333 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
334 See `find-function' for more details." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
335 (interactive (find-function-read)) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
336 (find-function-do-it function nil 'switch-to-buffer-other-frame)) |
20183 | 337 |
23659
e221aa952b5b
(find-variable-noselect): Autoload.
Karl Heuer <kwzh@gnu.org>
parents:
23287
diff
changeset
|
338 ;;;###autoload |
40480
5ebd79883369
(find-function-search-for-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38557
diff
changeset
|
339 (defun find-variable-noselect (variable &optional file) |
5ebd79883369
(find-function-search-for-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38557
diff
changeset
|
340 "Return a pair `(BUFFER . POINT)' pointing to the definition of SYMBOL. |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
341 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
342 Finds the Emacs Lisp library containing the definition of SYMBOL |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
343 in a buffer and the point of the definition. The buffer is |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
344 not selected. |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
345 |
40480
5ebd79883369
(find-function-search-for-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38557
diff
changeset
|
346 The library where VARIABLE is defined is searched for in FILE or |
24013 | 347 `find-function-source-path', if non nil, otherwise in `load-path'." |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
348 (if (not variable) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
349 (error "You didn't specify a variable")) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49031
diff
changeset
|
350 ;; Fixme: I think `symbol-file' should be fixed instead. -- fx |
49031
1f99e20d4977
(find-variable-noselect): Make it work
Dave Love <fx@gnu.org>
parents:
47610
diff
changeset
|
351 (let ((library (or file (symbol-file (cons 'defvar variable))))) |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
352 (find-function-search-for-symbol variable 'variable library))) |
20183 | 353 |
20184
c8d4024e07de
(find-function, find-function-other-window, find-function-other-frame,
Dave Love <fx@gnu.org>
parents:
20183
diff
changeset
|
354 ;;;###autoload |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
355 (defun find-variable (variable) |
24021 | 356 "Find the definition of the VARIABLE near point. |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
357 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
358 Finds the Emacs Lisp library containing the definition of the variable |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
359 near point (selected by `variable-at-point') in a buffer and |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
360 places point before the definition. Point is saved in the buffer if |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
361 it is one of the current buffers. |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
362 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
363 The library where VARIABLE is defined is searched for in |
24013 | 364 `find-function-source-path', if non nil, otherwise in `load-path'. |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
365 See also `find-function-recenter-line' and `find-function-after-hook'." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
366 (interactive (find-function-read 'variable)) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
367 (find-function-do-it variable t 'switch-to-buffer)) |
20183 | 368 |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
369 ;;;###autoload |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
370 (defun find-variable-other-window (variable) |
24021 | 371 "Find, in another window, the definition of VARIABLE near point. |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
372 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
373 See `find-variable' for more details." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
374 (interactive (find-function-read 'variable)) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
375 (find-function-do-it variable t 'switch-to-buffer-other-window)) |
20183 | 376 |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
377 ;;;###autoload |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
378 (defun find-variable-other-frame (variable) |
24021 | 379 "Find, in annother frame, the definition of VARIABLE near point. |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
380 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
381 See `find-variable' for more details." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
382 (interactive (find-function-read 'variable)) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
383 (find-function-do-it variable t 'switch-to-buffer-other-frame)) |
20183 | 384 |
20184
c8d4024e07de
(find-function, find-function-other-window, find-function-other-frame,
Dave Love <fx@gnu.org>
parents:
20183
diff
changeset
|
385 ;;;###autoload |
20183 | 386 (defun find-function-on-key (key) |
387 "Find the function that KEY invokes. KEY is a string. | |
388 Point is saved if FUNCTION is in the current buffer." | |
389 (interactive "kFind function on key: ") | |
51097
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
390 (let (defn) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
391 (save-excursion |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
392 (let* ((event (and (eventp key) (aref key 0))) ; Null event OK below. |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
393 (start (event-start event)) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
394 (modifiers (event-modifiers event)) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
395 (window (and (or (memq 'click modifiers) (memq 'down modifiers) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
396 (memq 'drag modifiers)) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
397 (posn-window start)))) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
398 ;; For a mouse button event, go to the button it applies to |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
399 ;; to get the right key bindings. And go to the right place |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
400 ;; in case the keymap depends on where you clicked. |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
401 (when (windowp window) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
402 (set-buffer (window-buffer window)) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
403 (goto-char (posn-point start))) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
404 (setq defn (key-binding key)))) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
405 (let ((key-desc (key-description key))) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
406 (if (or (null defn) (integerp defn)) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
407 (message "%s is unbound" key-desc) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
408 (if (consp defn) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
409 (message "%s runs %s" key-desc (prin1-to-string defn)) |
37a69a2f1992
(find-function-on-key): Move the call to find-function-other-window
Richard M. Stallman <rms@gnu.org>
parents:
49598
diff
changeset
|
410 (find-function-other-window defn)))))) |
22641
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
411 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
412 ;;;###autoload |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
413 (defun find-function-at-point () |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
414 "Find directly the function at point in the other window." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
415 (interactive) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
416 (let ((symb (function-at-point))) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
417 (when symb |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
418 (find-function-other-window symb)))) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
419 |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
420 ;;;###autoload |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
421 (defun find-variable-at-point () |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
422 "Find directly the function at point in the other window." |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
423 (interactive) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
424 (let ((symb (variable-at-point))) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
425 (when (and symb (not (equal symb 0))) |
1c5197790616
Require `loadhist'. Variable
Richard M. Stallman <rms@gnu.org>
parents:
22487
diff
changeset
|
426 (find-variable-other-window symb)))) |
20183 | 427 |
22759
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
428 ;;;###autoload |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
429 (defun find-function-setup-keys () |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
430 "Define some key bindings for the find-function family of functions." |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
431 (define-key ctl-x-map "F" 'find-function) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
432 (define-key ctl-x-4-map "F" 'find-function-other-window) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
433 (define-key ctl-x-5-map "F" 'find-function-other-frame) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
434 (define-key ctl-x-map "K" 'find-function-on-key) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
435 (define-key ctl-x-map "V" 'find-variable) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
436 (define-key ctl-x-4-map "V" 'find-variable-other-window) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
437 (define-key ctl-x-5-map "V" 'find-variable-other-frame)) |
be3e1a724828
(find-function-regexp): Added :version 20.3.
Richard M. Stallman <rms@gnu.org>
parents:
22641
diff
changeset
|
438 |
20183 | 439 (provide 'find-func) |
440 | |
52401 | 441 ;;; arch-tag: 43ecd81c-74dc-4d9a-8f63-a61e55670d64 |
20183 | 442 ;;; find-func.el ends here |