annotate lisp/progmodes/etags.el @ 449:4a1a5ad2d9d0

*** empty log message ***
author Eric S. Raymond <esr@snark.thyrsus.com>
date Sun, 08 Dec 1991 09:58:46 +0000
parents 066d9d0dd901
children 0bac8c701777
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 ;; Tags facility for Emacs.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2 ;; Copyright (C) 1985, 1986, 1988 Free Software Foundation, Inc.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 ;; This file is part of GNU Emacs.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 ;; GNU Emacs is free software; you can redistribute it and/or modify
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 ;; it under the terms of the GNU General Public License as published by
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 ;; the Free Software Foundation; either version 1, or (at your option)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 ;; any later version.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 ;; GNU Emacs is distributed in the hope that it will be useful,
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 ;; GNU General Public License for more details.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 ;; You should have received a copy of the GNU General Public License
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; along with GNU Emacs; see the file COPYING. If not, write to
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
21 (provide 'etags)
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
22
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
23 ;;;###autoload
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
24 (defvar tags-file-name nil "\
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
25 *File name of tag table.
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
26 To switch to a new tag table, setting this variable is sufficient.
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
27 Use the `etags' program to make a tag table file.")
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 (defvar tag-table-files nil
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30 "List of file names covered by current tag table.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 nil means it has not been computed yet; do (tag-table-files) to compute it.")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 (defvar last-tag nil
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 "Tag found by the last find-tag.")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
36 ;;;###autoload
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 (defun visit-tags-table (file)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 "Tell tags commands to use tag table file FILE.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 FILE should be the name of a file created with the `etags' program.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 A directory name is ok too; it means file TAGS in that directory."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 (interactive (list (read-file-name "Visit tags table: (default TAGS) "
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 default-directory
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 (concat default-directory "TAGS")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 t)))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 (setq file (expand-file-name file))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 (if (file-directory-p file)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 (setq file (concat file "TAGS")))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 (setq tag-table-files nil
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 tags-file-name file))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 (defun visit-tags-table-buffer ()
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 "Select the buffer containing the current tag table.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 This is a file whose name is in the variable tags-file-name."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 (or tags-file-name
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 (call-interactively 'visit-tags-table))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 (set-buffer (or (get-file-buffer tags-file-name)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 (progn
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 (setq tag-table-files nil)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 (find-file-noselect tags-file-name))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 (or (verify-visited-file-modtime (get-file-buffer tags-file-name))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 (cond ((yes-or-no-p "Tags file has changed, read new contents? ")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 (revert-buffer t t)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 (setq tag-table-files nil))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 (or (eq (char-after 1) ?\^L)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 (error "File %s not a valid tag table" tags-file-name)))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 (defun file-of-tag ()
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 "Return the file name of the file whose tags point is within.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 Assumes the tag table is the current buffer.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 File name returned is relative to tag table file's directory."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 (let ((opoint (point))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 prev size)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 (save-excursion
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 (goto-char (point-min))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 (while (< (point) opoint)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 (forward-line 1)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 (end-of-line)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 (skip-chars-backward "^,\n")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 (setq prev (point))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 (setq size (read (current-buffer)))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 (goto-char prev)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 (forward-line 1)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 (forward-char size))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 (goto-char (1- prev))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 (buffer-substring (point)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 (progn (beginning-of-line) (point))))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
88 ;;;###autoload
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 (defun tag-table-files ()
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 "Return a list of files in the current tag table.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 File names returned are absolute."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 (save-excursion
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 (visit-tags-table-buffer)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 (or tag-table-files
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 (let (files)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 (goto-char (point-min))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 (while (not (eobp))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 (forward-line 1)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 (end-of-line)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 (skip-chars-backward "^,\n")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 (setq prev (point))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 (setq size (read (current-buffer)))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 (goto-char prev)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 (setq files (cons (expand-file-name
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 (buffer-substring (1- (point))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 (save-excursion
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 (beginning-of-line)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 (point)))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 (file-name-directory tags-file-name))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 files))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 (forward-line 1)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 (forward-char size))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 (setq tag-table-files (nreverse files))))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 ;; Return a default tag to search for, based on the text at point.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 (defun find-tag-default ()
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 (save-excursion
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 (while (looking-at "\\sw\\|\\s_")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 (forward-char 1))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 (if (re-search-backward "\\sw\\|\\s_" nil t)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 (progn (forward-char 1)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 (buffer-substring (point)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 (progn (forward-sexp -1)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 (while (looking-at "\\s'")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 (forward-char 1))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 (point))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 nil)))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 (defun find-tag-tag (string)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 (let* ((default (find-tag-default))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 (spec (read-string
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 (if default
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 (format "%s(default %s) " string default)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 string))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 (list (if (equal spec "")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 default
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 spec))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
139 ;;;###autoload
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 (defun find-tag (tagname &optional next other-window)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 "Find tag (in current tag table) whose name contains TAGNAME.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 Selects the buffer that the tag is contained in
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 and puts point at its definition.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 If TAGNAME is a null string, the expression in the buffer
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 around or before point is used as the tag name.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 If second arg NEXT is non-nil (interactively, with prefix arg),
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 searches for the next tag in the tag table
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 that matches the tagname used in the previous find-tag.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 See documentation of variable tags-file-name."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 (interactive (if current-prefix-arg
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 '(nil t)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 (find-tag-tag "Find tag: ")))
449
4a1a5ad2d9d0 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 360
diff changeset
154 (let ((tagbuf (find-tag-noselect tagname nil next)))
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 (if other-window
449
4a1a5ad2d9d0 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 360
diff changeset
156 (switch-to-buffer-other-window tagbuf)
4a1a5ad2d9d0 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 360
diff changeset
157 (switch-to-buffer tagbuf))
4a1a5ad2d9d0 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 360
diff changeset
158 )
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 (setq tags-loop-form '(find-tag nil t))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 ;; Return t in case used as the tags-loop-form.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 t)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
163 ;;;###autoload
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
164 (define-key esc-map "." 'find-tag)
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
165
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
166 ;;;###autoload
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 (defun find-tag-other-window (tagname &optional next)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 "Find tag (in current tag table) whose name contains TAGNAME.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 Selects the buffer that the tag is contained in in another window
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 and puts point at its definition.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 If TAGNAME is a null string, the expression in the buffer
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 around or before point is used as the tag name.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 If second arg NEXT is non-nil (interactively, with prefix arg),
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 searches for the next tag in the tag table
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 that matches the tagname used in the previous find-tag.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 See documentation of variable tags-file-name."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 (interactive (if current-prefix-arg
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 '(nil t)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 (find-tag-tag "Find tag other window: ")))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 (find-tag tagname next t))
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
182 ;;;###autoload
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
183 (define-key ctl-x-4-map "." 'find-tag-other-window)
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 (defvar next-file-list nil
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 "List of files for next-file to process.")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
188 ;;;###autoload
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 (defun next-file (&optional initialize)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 "Select next file among files in current tag table.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 Non-nil argument (prefix arg, if interactive)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 initializes to the beginning of the list of files in the tag table."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 (interactive "P")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 (if initialize
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 (setq next-file-list (tag-table-files)))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 (or next-file-list
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 (error "All files processed."))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 (find-file (car next-file-list))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 (setq next-file-list (cdr next-file-list)))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 (defvar tags-loop-form nil
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 "Form for tags-loop-continue to eval to process one file.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 If it returns nil, it is through with one file; move on to next.")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
205 ;;;###autoload
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 (defun tags-loop-continue (&optional first-time)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 "Continue last \\[tags-search] or \\[tags-query-replace] command.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 Used noninteractively with non-nil argument
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 to begin such a command. See variable tags-loop-form."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 (interactive)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 (if first-time
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 (progn (next-file t)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 (goto-char (point-min))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 (while (not (eval tags-loop-form))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 (next-file)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 (message "Scanning file %s..." buffer-file-name)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 (goto-char (point-min))))
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
218 ;;;###autoload
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
219 (define-key esc-map "," 'tags-loop-continue)
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
221 ;;;###autoload
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 (defun tags-search (regexp)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 "Search through all files listed in tag table for match for REGEXP.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 Stops when a match is found.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 To continue searching for next match, use command \\[tags-loop-continue].
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 See documentation of variable tags-file-name."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 (interactive "sTags search (regexp): ")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 (if (and (equal regexp "")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 (eq (car tags-loop-form) 're-search-forward))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 (tags-loop-continue nil)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 (setq tags-loop-form
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 (list 're-search-forward regexp nil t))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 (tags-loop-continue t)))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
236 ;;;###autoload
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 (defun tags-query-replace (from to &optional delimited)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 "Query-replace-regexp FROM with TO through all files listed in tag table.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 If you exit (C-G or ESC), you can resume the query-replace
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 with the command \\[tags-loop-continue].
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 See documentation of variable tags-file-name."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 (interactive "sTags query replace (regexp): \nsTags query replace %s by: \nP")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 (setq tags-loop-form
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 (list 'and (list 'save-excursion
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247 (list 're-search-forward from nil t))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 (list 'not (list 'perform-replace from to t t
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 (not (null delimited))))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 (tags-loop-continue t))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
252 ;;;###autoload
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 (defun list-tags (string)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 "Display list of tags in file FILE.
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 FILE should not contain a directory spec
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 unless it has one in the tag table."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 (interactive "sList tags (in file): ")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 (with-output-to-temp-buffer "*Tags List*"
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 (princ "Tags in file ")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 (princ string)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 (terpri)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 (save-excursion
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 (visit-tags-table-buffer)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 (goto-char 1)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 (search-forward (concat "\f\n" string ","))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 (forward-line 1)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 (while (not (or (eobp) (looking-at "\f")))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 (princ (buffer-substring (point)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 (progn (skip-chars-forward "^\177")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 (point))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 (terpri)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 (forward-line 1)))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273
360
066d9d0dd901 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 342
diff changeset
274 ;;;###autoload
342
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 (defun tags-apropos (string)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 "Display list of all tags in tag table REGEXP matches."
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 (interactive "sTag apropos (regexp): ")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 (with-output-to-temp-buffer "*Tags List*"
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 (princ "Tags matching regexp ")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 (prin1 string)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 (terpri)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 (save-excursion
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 (visit-tags-table-buffer)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 (goto-char 1)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 (while (re-search-forward string nil t)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 (beginning-of-line)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 (princ (buffer-substring (point)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 (progn (skip-chars-forward "^\177")
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 (point))))
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 (terpri)
8bfd98a0dcdd Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 (forward-line 1)))))