annotate lisp/progmodes/etags.el @ 727:540b047ece4d

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