(compilation-handle-exit): Quote first argument of `run-hook-with-args'.
[bpt/emacs.git] / man / maintaining.texi
CommitLineData
f00366c2 1@c This is part of the Emacs manual.
21e9e795 2@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000,
4e6835db 3@c 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
f00366c2
RS
4@c See file emacs.texi for copying conditions.
5@node Maintaining, Abbrevs, Building, Top
2f15c7c3 6@chapter Maintaining Large Programs
f00366c2 7
2f15c7c3
RS
8 This chapter describes Emacs features for maintaining large
9programs. The version control features (@pxref{Version Control}) are
10also particularly useful for this purpose.
f00366c2
RS
11
12@menu
13* Change Log:: Maintaining a change history for your program.
191f7d86 14* Format of ChangeLog:: What the change log file looks like.
f00366c2
RS
15* Tags:: Go direct to any function in your program in one
16 command. Tags remembers which file it is in.
4984edc7
EZ
17@ifnottex
18* Emerge:: A convenient way of merging two versions of a program.
19@end ifnottex
f00366c2
RS
20@end menu
21
22@node Change Log
23@section Change Logs
24
191f7d86
RS
25 A change log file contains a chronological record of when and why you
26have changed a program, consisting of a sequence of entries describing
27individual changes. Normally it is kept in a file called
28@file{ChangeLog} in the same directory as the file you are editing, or
29one of its parent directories. A single @file{ChangeLog} file can
30record changes for all the files in its directory and all its
31subdirectories.
32
f00366c2
RS
33@cindex change log
34@kindex C-x 4 a
35@findex add-change-log-entry-other-window
36 The Emacs command @kbd{C-x 4 a} adds a new entry to the change log
37file for the file you are editing
38(@code{add-change-log-entry-other-window}). If that file is actually
39a backup file, it makes an entry appropriate for the file's
40parent---that is useful for making log entries for functions that
41have been deleted in the current version.
42
f00366c2
RS
43 @kbd{C-x 4 a} visits the change log file and creates a new entry
44unless the most recent entry is for today's date and your name. It
45also creates a new item for the current file. For many languages, it
46can even guess the name of the function or other object that was
47changed.
48
49@vindex add-log-keep-changes-together
19b2c4ca 50 When the variable @code{add-log-keep-changes-together} is
6742e765
RS
51non-@code{nil}, @kbd{C-x 4 a} adds to any existing item for the file
52rather than starting a new item.
f00366c2 53
191f7d86
RS
54@vindex add-log-always-start-new-record
55 If @code{add-log-always-start-new-record} is non-@code{nil},
56@kbd{C-x 4 a} always makes a new entry, even if the last entry
57was made by you and on the same date.
58
f00366c2
RS
59@vindex change-log-version-info-enabled
60@vindex change-log-version-number-regexp-list
61@cindex file version in change log entries
62 If the value of the variable @code{change-log-version-info-enabled}
63is non-@code{nil}, @kbd{C-x 4 a} adds the file's version number to the
64change log entry. It finds the version number by searching the first
65ten percent of the file, using regular expressions from the variable
66@code{change-log-version-number-regexp-list}.
67
68@cindex Change Log mode
69@findex change-log-mode
70 The change log file is visited in Change Log mode. In this major
71mode, each bunch of grouped items counts as one paragraph, and each
72entry is considered a page. This facilitates editing the entries.
73@kbd{C-j} and auto-fill indent each new line like the previous line;
74this is convenient for entering the contents of an entry.
75
76@findex change-log-merge
77 You can use the command @kbd{M-x change-log-merge} to merge other
78log files into a buffer in Change Log Mode, preserving the date
79ordering of entries.
80
191f7d86
RS
81 Version control systems are another way to keep track of changes in your
82program and keep a change log. @xref{Log Buffer}.
f00366c2 83
191f7d86
RS
84@node Format of ChangeLog
85@section Format of ChangeLog
86
87 A change log entry starts with a header line that contains the current
88date, your name, and your email address (taken from the variable
89@code{add-log-mailing-address}). Aside from these header lines, every
90line in the change log starts with a space or a tab. The bulk of the
91entry consists of @dfn{items}, each of which starts with a line starting
92with whitespace and a star. Here are two entries, both dated in May
931993, with two items and one item respectively.
94
95@iftex
96@medbreak
97@end iftex
f00366c2 98@smallexample
191f7d86
RS
991993-05-25 Richard Stallman <rms@@gnu.org>
100
101 * man.el: Rename symbols `man-*' to `Man-*'.
102 (manual-entry): Make prompt string clearer.
103
104 * simple.el (blink-matching-paren-distance):
105 Change default to 12,000.
106
1071993-05-24 Richard Stallman <rms@@gnu.org>
108
109 * vc.el (minor-mode-map-alist): Don't use it if it's void.
110 (vc-cancel-version): Doc fix.
f00366c2
RS
111@end smallexample
112
191f7d86
RS
113 One entry can describe several changes; each change should have its
114own item, or its own line in an item. Normally there should be a
115blank line between items. When items are related (parts of the same
116change, in different places), group them by leaving no blank line
117between them.
f00366c2 118
191f7d86
RS
119 You should put a copyright notice and permission notice at the
120end of the change log file. Here is an example:
121
444246ca 122@smallexample
191f7d86
RS
123Copyright 1997, 1998 Free Software Foundation, Inc.
124Copying and distribution of this file, with or without modification, are
125permitted provided the copyright notice and this notice are preserved.
444246ca 126@end smallexample
f00366c2 127
191f7d86
RS
128@noindent
129Of course, you should substitute the proper years and copyright holder.
f00366c2
RS
130
131@node Tags
132@section Tags Tables
133@cindex tags table
134
135 A @dfn{tags table} is a description of how a multi-file program is
136broken up into files. It lists the names of the component files and the
137names and positions of the functions (or other named subunits) in each
138file. Grouping the related files makes it possible to search or replace
139through all the files with one command. Recording the function names
140and positions makes possible the @kbd{M-.} command which finds the
141definition of a function by looking up which of the files it is in.
142
143 Tags tables are stored in files called @dfn{tags table files}. The
144conventional name for a tags table file is @file{TAGS}.
145
146 Each entry in the tags table records the name of one tag, the name of the
bf8dd4e3
FP
147file that the tag is defined in (implicitly), and the position in that
148file of the tag's definition. When a file parsed by @code{etags} is
0f5401a8
FP
149generated from a different source file, like a C file generated from a
150Cweb source file, the tags of the parsed file reference the source
151file.
f00366c2
RS
152
153 Just what names from the described files are recorded in the tags table
154depends on the programming language of the described file. They
155normally include all file names, functions and subroutines, and may
156also include global variables, data types, and anything else
157convenient. Each name recorded is called a @dfn{tag}.
158
159@cindex C++ class browser, tags
160@cindex tags, C++
161@cindex class browser, C++
162@cindex Ebrowse
163 See also the Ebrowse facility, which is tailored for C++.
164@xref{Top,, Ebrowse, ebrowse, Ebrowse User's Manual}.
165
166@menu
167* Tag Syntax:: Tag syntax for various types of code and text files.
168* Create Tags Table:: Creating a tags table with @code{etags}.
169* Etags Regexps:: Create arbitrary tags using regular expressions.
170* Select Tags Table:: How to visit a tags table.
171* Find Tag:: Commands to find the definition of a specific tag.
172* Tags Search:: Using a tags table for searching and replacing.
173* List Tags:: Listing and finding tags defined in a file.
174@end menu
175
176@node Tag Syntax
177@subsection Source File Tag Syntax
178
179 Here is how tag syntax is defined for the most popular languages:
180
181@itemize @bullet
182@item
183In C code, any C function or typedef is a tag, and so are definitions of
184@code{struct}, @code{union} and @code{enum}.
5f7c79f9 185@code{#define} macro definitions, @code{#undef} and @code{enum}
049b41a4 186constants are also
f00366c2
RS
187tags, unless you specify @samp{--no-defines} when making the tags table.
188Similarly, global variables are tags, unless you specify
049b41a4
FP
189@samp{--no-globals}, and so are struct members, unless you specify
190@samp{--no-members}. Use of @samp{--no-globals}, @samp{--no-defines}
191and @samp{--no-members} can make the tags table file much smaller.
f00366c2
RS
192
193You can tag function declarations and external variables in addition
194to function definitions by giving the @samp{--declarations} option to
049b41a4 195@code{etags}.
f00366c2
RS
196
197@item
198In C++ code, in addition to all the tag constructs of C code, member
049b41a4
FP
199functions are also recognized; member variables are also recognized,
200unless you use the @samp{--no-members} option. Tags for variables and
201functions in classes are named @samp{@var{class}::@var{variable}} and
f00366c2
RS
202@samp{@var{class}::@var{function}}. @code{operator} definitions have
203tag names like @samp{operator+}.
204
205@item
206In Java code, tags include all the constructs recognized in C++, plus
207the @code{interface}, @code{extends} and @code{implements} constructs.
208Tags for variables and functions in classes are named
209@samp{@var{class}.@var{variable}} and @samp{@var{class}.@var{function}}.
210
211@item
212In La@TeX{} text, the argument of any of the commands @code{\chapter},
213@code{\section}, @code{\subsection}, @code{\subsubsection},
e4a1e8d9
FP
214@code{\eqno}, @code{\label}, @code{\ref}, @code{\cite},
215@code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry},
28665d46 216@code{\index}, @code{\def}, @code{\newcommand}, @code{\renewcommand},
e4a1e8d9 217@code{\newenvironment} or @code{\renewenvironment} is a tag.@refill
f00366c2
RS
218
219Other commands can make tags as well, if you specify them in the
220environment variable @env{TEXTAGS} before invoking @code{etags}. The
221value of this environment variable should be a colon-separated list of
222command names. For example,
223
224@example
e4a1e8d9 225TEXTAGS="mycommand:myothercommand"
f00366c2
RS
226export TEXTAGS
227@end example
228
229@noindent
e4a1e8d9
FP
230specifies (using Bourne shell syntax) that the commands
231@samp{\mycommand} and @samp{\myothercommand} also define tags.
f00366c2
RS
232
233@item
234In Lisp code, any function defined with @code{defun}, any variable
235defined with @code{defvar} or @code{defconst}, and in general the first
f01f5735 236argument of any expression that starts with @samp{(def} in column zero is
f00366c2
RS
237a tag.
238
239@item
240In Scheme code, tags include anything defined with @code{def} or with a
241construct whose name starts with @samp{def}. They also include variables
242set with @code{set!} at top level in the file.
243@end itemize
244
245 Several other languages are also supported:
246
247@itemize @bullet
248
249@item
f01f5735 250In Ada code, functions, procedures, packages, tasks and types are
f00366c2
RS
251tags. Use the @samp{--packages-only} option to create tags for
252packages only.
253
254In Ada, the same name can be used for different kinds of entity
255(e.g.@:, for a procedure and for a function). Also, for things like
256packages, procedures and functions, there is the spec (i.e.@: the
257interface) and the body (i.e.@: the implementation). To make it
258easier to pick the definition you want, Ada tag name have suffixes
259indicating the type of entity:
260
261@table @samp
262@item /b
263package body.
264@item /f
265function.
266@item /k
267task.
268@item /p
269procedure.
270@item /s
271package spec.
272@item /t
273type.
274@end table
275
276 Thus, @kbd{M-x find-tag @key{RET} bidule/b @key{RET}} will go
277directly to the body of the package @code{bidule}, while @kbd{M-x
278find-tag @key{RET} bidule @key{RET}} will just search for any tag
279@code{bidule}.
280
281@item
282In assembler code, labels appearing at the beginning of a line,
283followed by a colon, are tags.
284
285@item
286In Bison or Yacc input files, each rule defines as a tag the nonterminal
287it constructs. The portions of the file that contain C code are parsed
288as C code.
289
290@item
291In Cobol code, tags are paragraph names; that is, any word starting in
292column 8 and followed by a period.
293
294@item
f01f5735 295In Erlang code, the tags are the functions, records and macros defined
f00366c2
RS
296in the file.
297
298@item
47d7776c 299In Fortran code, functions, subroutines and block data are tags.
f00366c2 300
2c37653c
FP
301@item
302In HTML input files, the tags are the @code{title} and the @code{h1},
303@code{h2}, @code{h3} headers. Also, tags are @code{name=} in anchors
304and all occurrences of @code{id=}.
305
dfcb9727
FP
306@item
307In Lua input files, all functions are tags.
308
f00366c2 309@item
f175bfff
FP
310In makefiles, targets are tags; additionally, variables are tags
311unless you specify @samp{--no-globals}.
f00366c2
RS
312
313@item
314In Objective C code, tags include Objective C definitions for classes,
f01f5735 315class categories, methods and protocols. Tags for variables and
3e7eaab2
FP
316functions in classes are named @samp{@var{class}::@var{variable}} and
317@samp{@var{class}::@var{function}}.
f00366c2
RS
318
319@item
320In Pascal code, the tags are the functions and procedures defined in
321the file.
322
323@item
3e7eaab2
FP
324In Perl code, the tags are the packages, subroutines and variables
325defined by the @code{package}, @code{sub}, @code{my} and @code{local}
326keywords. Use @samp{--globals} if you want to tag global variables.
327Tags for subroutines are named @samp{@var{package}::@var{sub}}. The
328name for subroutines defined in the default package is
329@samp{main::@var{sub}}.
f00366c2 330
e94a3679 331@item
049b41a4
FP
332In PHP code, tags are functions, classes and defines. Vars are tags
333too, unless you use the @samp{--no-members} option.
e94a3679 334
f00366c2
RS
335@item
336In PostScript code, the tags are the functions.
337
338@item
e94a3679
FP
339In Prolog code, tags are predicates and rules at the beginning of
340line.
f00366c2
RS
341
342@item
343In Python code, @code{def} or @code{class} at the beginning of a line
344generate a tag.
345@end itemize
346
347 You can also generate tags based on regexp matching (@pxref{Etags
348Regexps}) to handle other formats and languages.
349
350@node Create Tags Table
351@subsection Creating Tags Tables
352@cindex @code{etags} program
353
354 The @code{etags} program is used to create a tags table file. It knows
355the syntax of several languages, as described in
356@iftex
357the previous section.
358@end iftex
af566730 359@ifnottex
f00366c2 360@ref{Tag Syntax}.
af566730 361@end ifnottex
f00366c2
RS
362Here is how to run @code{etags}:
363
364@example
365etags @var{inputfiles}@dots{}
366@end example
367
368@noindent
369The @code{etags} program reads the specified files, and writes a tags
370table named @file{TAGS} in the current working directory.
371
372 If the specified files don't exist, @code{etags} looks for
373compressed versions of them and uncompresses them to read them. Under
374MS-DOS, @code{etags} also looks for file names like @file{mycode.cgz}
375if it is given @samp{mycode.c} on the command line and @file{mycode.c}
376does not exist.
377
378 @code{etags} recognizes the language used in an input file based on
379its file name and contents. You can specify the language with the
380@samp{--language=@var{name}} option, described below.
381
382 If the tags table data become outdated due to changes in the files
383described in the table, the way to update the tags table is the same
55d3737d
RS
384way it was made in the first place. If the tags table fails to record
385a tag, or records it for the wrong file, then Emacs cannot possibly
386find its definition until you update the tags table. However, if the
f00366c2 387position recorded in the tags table becomes a little bit wrong (due to
191f7d86 388other editing), the worst consequence is a slight delay in finding the
55d3737d 389tag. Even if the stored position is very far wrong, Emacs will still
191f7d86
RS
390find the tag, after searching most of the file for it. That delay is
391hardly noticeable with today's computers.
f00366c2 392
191f7d86
RS
393 Thus, there is no need to update the tags table after each edit.
394You should update a tags table when you define new tags that you want
395to have listed, or when you move tag definitions from one file to
396another, or when changes become substantial.
f00366c2
RS
397
398 One tags table can virtually include another. Specify the included
399tags file name with the @samp{--include=@var{file}} option when
400creating the file that is to include it. The latter file then acts as
401if it covered all the source files specified in the included file, as
402well as the files it directly contains.
403
404 If you specify the source files with relative file names when you run
405@code{etags}, the tags file will contain file names relative to the
406directory where the tags file was initially written. This way, you can
407move an entire directory tree containing both the tags file and the
408source files, and the tags file will still refer correctly to the source
4559d619 409files. If the tags file is in @file{/dev}, however, the file names are
1899ba36
FP
410made relative to the current working directory. This is useful, for
411example, when writing the tags to @file{/dev/stdout}.
500c43ed
RS
412
413 When using a a relative file name, it should not be a symbolic link
414pointing to a tags file in a different directory, because this would
415generally render the file names invalid.
f00366c2
RS
416
417 If you specify absolute file names as arguments to @code{etags}, then
418the tags file will contain absolute file names. This way, the tags file
419will still refer to the same files even if you move it, as long as the
420source files remain in the same place. Absolute file names start with
421@samp{/}, or with @samp{@var{device}:/} on MS-DOS and MS-Windows.
422
423 When you want to make a tags table from a great number of files, you
424may have problems listing them on the command line, because some systems
425have a limit on its length. The simplest way to circumvent this limit
426is to tell @code{etags} to read the file names from its standard input,
427by typing a dash in place of the file names, like this:
428
429@smallexample
430find . -name "*.[chCH]" -print | etags -
431@end smallexample
432
433 Use the option @samp{--language=@var{name}} to specify the language
434explicitly. You can intermix these options with file names; each one
435applies to the file names that follow it. Specify
436@samp{--language=auto} to tell @code{etags} to resume guessing the
437language from the file names and file contents. Specify
438@samp{--language=none} to turn off language-specific processing
439entirely; then @code{etags} recognizes tags by regexp matching alone
440(@pxref{Etags Regexps}).
441
e4a1e8d9
FP
442 The option @samp{--parse-stdin=@var{file}} is mostly useful when
443calling @code{etags} from programs. It can be used (only once) in
444place of a file name on the command line. @code{Etags} will read from
445standard input and mark the produced tags as belonging to the file
446@var{file}.
447
191f7d86 448 @samp{etags --help} outputs the list of the languages @code{etags}
f00366c2
RS
449knows, and the file name rules for guessing the language. It also prints
450a list of all the available @code{etags} options, together with a short
f01f5735 451explanation. If followed by one or more @samp{--language=@var{lang}}
191f7d86 452options, it outputs detailed information about how tags are generated for
177c0ea7 453@var{lang}.
f00366c2
RS
454
455@node Etags Regexps
456@subsection Etags Regexps
457
458 The @samp{--regex} option provides a general way of recognizing tags
191f7d86
RS
459based on regexp matching. You can freely intermix this option with
460file names, and each one applies to the source files that follow it.
ed1b7d5e 461If you specify multiple @samp{--regex} options, all of them are used
191f7d86 462in parallel. The syntax is:
f00366c2
RS
463
464@smallexample
cc76b311
FP
465--regex=[@var{@{language@}}]/@var{tagregexp}/[@var{nameregexp}/]@var{modifiers}
466@end smallexample
467
ed1b7d5e
RS
468 The essential part of the option value is @var{tagregexp}, the
469regexp for matching tags. It is always used anchored, that is, it
470only matches at the beginning of a line. If you want to allow
471indented tags, use a regexp that matches initial whitespace; start it
472with @samp{[ \t]*}.
473
474 In these regular expressions, @samp{\} quotes the next character, and
475all the GCC character escape sequences are supported (@samp{\a} for
476bell, @samp{\b} for back space, @samp{\d} for delete, @samp{\e} for
477escape, @samp{\f} for formfeed, @samp{\n} for newline, @samp{\r} for
478carriage return, @samp{\t} for tab, and @samp{\v} for vertical tab).
479
480 Ideally, @var{tagregexp} should not match more characters than are
481needed to recognize what you want to tag. If the syntax requires you
482to write @var{tagregexp} so it matches more characters beyond the tag
483itself, you should add a @var{nameregexp}, to pick out just the tag.
484This will enable Emacs to find tags more accurately and to do
485completion on tag names more reliably. You can find some examples
486below.
487
488 The @var{modifiers} are a sequence of zero or more characters that
489modify the way @code{etags} does the matching. A regexp with no
490modifiers is applied sequentially to each line of the input file, in a
491case-sensitive way. The modifiers and their meanings are:
cc76b311
FP
492
493@table @samp
494@item i
ed1b7d5e 495Ignore case when matching this regexp.
cc76b311 496@item m
ed1b7d5e
RS
497Match this regular expression against the whole file, so that
498multi-line matches are possible.
cc76b311 499@item s
ed1b7d5e
RS
500Match this regular expression against the whole file, and allow
501@samp{.} in @var{tagregexp} to match newlines.
cc76b311
FP
502@end table
503
ed1b7d5e 504 The @samp{-R} option cancels all the regexps defined by preceding
191f7d86
RS
505@samp{--regex} options. It too applies to the file names following
506it. Here's an example:
f00366c2
RS
507
508@smallexample
648ed8f4 509etags --regex=/@var{reg1}/i voo.doo --regex=/@var{reg2}/m \
f00366c2
RS
510 bar.ber -R --lang=lisp los.er
511@end smallexample
512
513@noindent
514Here @code{etags} chooses the parsing language for @file{voo.doo} and
515@file{bar.ber} according to their contents. @code{etags} also uses
516@var{reg1} to recognize additional tags in @file{voo.doo}, and both
517@var{reg1} and @var{reg2} to recognize additional tags in
648ed8f4
FP
518@file{bar.ber}. @var{reg1} is checked against each line of
519@file{voo.doo} and @file{bar.ber}, in a case-insensitive way, while
520@var{reg2} is checked against the whole @file{bar.ber} file,
521permitting multi-line matches, in a case-sensitive way. @code{etags}
ed1b7d5e
RS
522uses only the Lisp tags rules, with no user-specified regexp matching,
523to recognize tags in @file{los.er}.
f00366c2 524
b8fc5a9c
FP
525 You can restrict a @samp{--regex} option to match only files of a
526given language by using the optional prefix @var{@{language@}}.
648ed8f4
FP
527(@samp{etags --help} prints the list of languages recognized by
528@code{etags}.) This is particularly useful when storing many
529predefined regular expressions for @code{etags} in a file. The
f00366c2
RS
530following example tags the @code{DEFVAR} macros in the Emacs source
531files, for the C language only:
532
533@smallexample
534--regex='@{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/'
535@end smallexample
536
537@noindent
ed1b7d5e
RS
538When you have complex regular expressions, you can store the list of
539them in a file. The following option syntax instructs @code{etags} to
540read two files of regular expressions. The regular expressions
541contained in the second file are matched without regard to case.
f00366c2
RS
542
543@smallexample
ed1b7d5e 544--regex=@@@var{case-sensitive-file} --ignore-case-regex=@@@var{ignore-case-file}
f00366c2
RS
545@end smallexample
546
547@noindent
ed1b7d5e
RS
548A regex file for @code{etags} contains one regular expression per
549line. Empty lines, and lines beginning with space or tab are ignored.
550When the first character in a line is @samp{@@}, @code{etags} assumes
551that the rest of the line is the name of another file of regular
552expressions; thus, one such file can include another file. All the
553other lines are taken to be regular expressions. If the first
554non-whitespace text on the line is @samp{--}, that line is a comment.
555
556 For example, we can create a file called @samp{emacs.tags} with the
f00366c2
RS
557following contents:
558
559@smallexample
560 -- This is for GNU Emacs C source files
561@{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/\1/
562@end smallexample
563
564@noindent
565and then use it like this:
566
567@smallexample
568etags --regex=@@emacs.tags *.[ch] */*.[ch]
569@end smallexample
570
571 Here are some more examples. The regexps are quoted to protect them
572from shell interpretation.
573
574@itemize @bullet
575
576@item
577Tag Octave files:
578
579@smallexample
580etags --language=none \
581 --regex='/[ \t]*function.*=[ \t]*\([^ \t]*\)[ \t]*(/\1/' \
582 --regex='/###key \(.*\)/\1/' \
583 --regex='/[ \t]*global[ \t].*/' \
584 *.m
585@end smallexample
586
587@noindent
588Note that tags are not generated for scripts, so that you have to add
589a line by yourself of the form @samp{###key @var{scriptname}} if you
590want to jump to it.
591
592@item
593Tag Tcl files:
594
595@smallexample
596etags --language=none --regex='/proc[ \t]+\([^ \t]+\)/\1/' *.tcl
597@end smallexample
598
599@item
600Tag VHDL files:
601
602@smallexample
603etags --language=none \
604 --regex='/[ \t]*\(ARCHITECTURE\|CONFIGURATION\) +[^ ]* +OF/' \
605 --regex='/[ \t]*\(ATTRIBUTE\|ENTITY\|FUNCTION\|PACKAGE\
606 \( BODY\)?\|PROCEDURE\|PROCESS\|TYPE\)[ \t]+\([^ \t(]+\)/\3/'
607@end smallexample
608@end itemize
609
610@node Select Tags Table
611@subsection Selecting a Tags Table
612
613@vindex tags-file-name
614@findex visit-tags-table
191f7d86
RS
615 Emacs has at any time one @dfn{selected} tags table, and all the
616commands for working with tags tables use the selected one. To select
617a tags table, type @kbd{M-x visit-tags-table}, which reads the tags
618table file name as an argument, with @file{TAGS} in the default
619directory as the default.
620
621 Emacs does not actually read in the tags table contents until you
622try to use them; all @code{visit-tags-table} does is store the file
623name in the variable @code{tags-file-name}, and setting the variable
624yourself is just as good. The variable's initial value is @code{nil};
625that value tells all the commands for working with tags tables that
626they must ask for a tags table file name to use.
f00366c2
RS
627
628 Using @code{visit-tags-table} when a tags table is already loaded
629gives you a choice: you can add the new tags table to the current list
630of tags tables, or start a new list. The tags commands use all the tags
631tables in the current list. If you start a new list, the new tags table
632is used @emph{instead} of others. If you add the new table to the
191f7d86 633current list, it is used @emph{as well as} the others.
f00366c2
RS
634
635@vindex tags-table-list
636 You can specify a precise list of tags tables by setting the variable
637@code{tags-table-list} to a list of strings, like this:
638
639@c keep this on two lines for formatting in smallbook
640@example
641@group
642(setq tags-table-list
643 '("~/emacs" "/usr/local/lib/emacs/src"))
644@end group
645@end example
646
647@noindent
648This tells the tags commands to look at the @file{TAGS} files in your
649@file{~/emacs} directory and in the @file{/usr/local/lib/emacs/src}
650directory. The order depends on which file you are in and which tags
651table mentions that file, as explained above.
652
653 Do not set both @code{tags-file-name} and @code{tags-table-list}.
654
655@node Find Tag
656@subsection Finding a Tag
657
658 The most important thing that a tags table enables you to do is to find
659the definition of a specific tag.
660
661@table @kbd
662@item M-.@: @var{tag} @key{RET}
663Find first definition of @var{tag} (@code{find-tag}).
664@item C-u M-.
665Find next alternate definition of last tag specified.
666@item C-u - M-.
667Go back to previous tag found.
668@item C-M-. @var{pattern} @key{RET}
669Find a tag whose name matches @var{pattern} (@code{find-tag-regexp}).
670@item C-u C-M-.
671Find the next tag whose name matches the last pattern used.
672@item C-x 4 .@: @var{tag} @key{RET}
673Find first definition of @var{tag}, but display it in another window
674(@code{find-tag-other-window}).
675@item C-x 5 .@: @var{tag} @key{RET}
676Find first definition of @var{tag}, and create a new frame to select the
677buffer (@code{find-tag-other-frame}).
678@item M-*
679Pop back to where you previously invoked @kbd{M-.} and friends.
680@end table
681
682@kindex M-.
683@findex find-tag
684 @kbd{M-.}@: (@code{find-tag}) is the command to find the definition of
685a specified tag. It searches through the tags table for that tag, as a
686string, and then uses the tags table info to determine the file that the
687definition is in and the approximate character position in the file of
688the definition. Then @code{find-tag} visits that file, moves point to
689the approximate character position, and searches ever-increasing
690distances away to find the tag definition.
691
692 If an empty argument is given (just type @key{RET}), the balanced
693expression in the buffer before or around point is used as the
694@var{tag} argument. @xref{Expressions}.
695
696 You don't need to give @kbd{M-.} the full name of the tag; a part
697will do. This is because @kbd{M-.} finds tags in the table which
698contain @var{tag} as a substring. However, it prefers an exact match
699to a substring match. To find other tags that match the same
700substring, give @code{find-tag} a numeric argument, as in @kbd{C-u
701M-.}; this does not read a tag name, but continues searching the tags
702table's text for another tag containing the same substring last used.
703If you have a real @key{META} key, @kbd{M-0 M-.}@: is an easier
704alternative to @kbd{C-u M-.}.
705
706@kindex C-x 4 .
707@findex find-tag-other-window
708@kindex C-x 5 .
709@findex find-tag-other-frame
710 Like most commands that can switch buffers, @code{find-tag} has a
711variant that displays the new buffer in another window, and one that
191f7d86
RS
712makes a new frame for it. The former is @w{@kbd{C-x 4 .}}, which invokes
713the command @code{find-tag-other-window}. The latter is @w{@kbd{C-x 5 .}},
f00366c2
RS
714which invokes @code{find-tag-other-frame}.
715
716 To move back to places you've found tags recently, use @kbd{C-u -
717M-.}; more generally, @kbd{M-.} with a negative numeric argument. This
191f7d86 718command can take you to another buffer. @w{@kbd{C-x 4 .}} with a negative
f00366c2
RS
719argument finds the previous tag location in another window.
720
721@kindex M-*
722@findex pop-tag-mark
723@vindex find-tag-marker-ring-length
724 As well as going back to places you've found tags recently, you can go
725back to places @emph{from where} you found them. Use @kbd{M-*}, which
726invokes the command @code{pop-tag-mark}, for this. Typically you would
727find and study the definition of something with @kbd{M-.} and then
728return to where you were with @kbd{M-*}.
729
730 Both @kbd{C-u - M-.} and @kbd{M-*} allow you to retrace your steps to
731a depth determined by the variable @code{find-tag-marker-ring-length}.
732
733@findex find-tag-regexp
734@kindex C-M-.
735 The command @kbd{C-M-.} (@code{find-tag-regexp}) visits the tags that
736match a specified regular expression. It is just like @kbd{M-.} except
737that it does regexp matching instead of substring matching.
738
739@node Tags Search
740@subsection Searching and Replacing with Tags Tables
741@cindex search and replace in multiple files
742@cindex multiple-file search and replace
743
191f7d86
RS
744 The commands in this section visit and search all the files listed
745in the selected tags table, one by one. For these commands, the tags
746table serves only to specify a sequence of files to search. These
747commands scan the list of tags tables starting with the first tags
748table (if any) that describes the current file, proceed from there to
749the end of the list, and then scan from the beginning of the list
750until they have covered all the tables in the list.
f00366c2
RS
751
752@table @kbd
753@item M-x tags-search @key{RET} @var{regexp} @key{RET}
754Search for @var{regexp} through the files in the selected tags
755table.
756@item M-x tags-query-replace @key{RET} @var{regexp} @key{RET} @var{replacement} @key{RET}
757Perform a @code{query-replace-regexp} on each file in the selected tags table.
758@item M-,
759Restart one of the commands above, from the current location of point
760(@code{tags-loop-continue}).
761@end table
762
763@findex tags-search
764 @kbd{M-x tags-search} reads a regexp using the minibuffer, then
765searches for matches in all the files in the selected tags table, one
766file at a time. It displays the name of the file being searched so you
767can follow its progress. As soon as it finds an occurrence,
768@code{tags-search} returns.
769
770@kindex M-,
771@findex tags-loop-continue
772 Having found one match, you probably want to find all the rest. To find
773one more match, type @kbd{M-,} (@code{tags-loop-continue}) to resume the
774@code{tags-search}. This searches the rest of the current buffer, followed
775by the remaining files of the tags table.@refill
776
777@findex tags-query-replace
778 @kbd{M-x tags-query-replace} performs a single
779@code{query-replace-regexp} through all the files in the tags table. It
780reads a regexp to search for and a string to replace with, just like
781ordinary @kbd{M-x query-replace-regexp}. It searches much like @kbd{M-x
782tags-search}, but repeatedly, processing matches according to your
783input. @xref{Replace}, for more information on query replace.
784
785@vindex tags-case-fold-search
786@cindex case-sensitivity and tags search
787 You can control the case-sensitivity of tags search commands by
788customizing the value of the variable @code{tags-case-fold-search}. The
789default is to use the same setting as the value of
790@code{case-fold-search} (@pxref{Search Case}).
791
792 It is possible to get through all the files in the tags table with a
793single invocation of @kbd{M-x tags-query-replace}. But often it is
794useful to exit temporarily, which you can do with any input event that
795has no special query replace meaning. You can resume the query replace
796subsequently by typing @kbd{M-,}; this command resumes the last tags
797search or replace command that you did.
798
799 The commands in this section carry out much broader searches than the
800@code{find-tag} family. The @code{find-tag} commands search only for
801definitions of tags that match your substring or regexp. The commands
802@code{tags-search} and @code{tags-query-replace} find every occurrence
803of the regexp, as ordinary search commands and replace commands do in
804the current buffer.
805
806 These commands create buffers only temporarily for the files that they
807have to search (those which are not already visited in Emacs buffers).
808Buffers in which no match is found are quickly killed; the others
809continue to exist.
810
811 It may have struck you that @code{tags-search} is a lot like
812@code{grep}. You can also run @code{grep} itself as an inferior of
191f7d86 813Emacs and have Emacs show you the matching lines one by one.
5d9b307f 814@xref{Grep Searching}.
f00366c2
RS
815
816@node List Tags
817@subsection Tags Table Inquiries
818
819@table @kbd
820@item M-x list-tags @key{RET} @var{file} @key{RET}
821Display a list of the tags defined in the program file @var{file}.
822@item M-x tags-apropos @key{RET} @var{regexp} @key{RET}
823Display a list of all tags matching @var{regexp}.
824@end table
825
826@findex list-tags
827 @kbd{M-x list-tags} reads the name of one of the files described by
828the selected tags table, and displays a list of all the tags defined in
829that file. The ``file name'' argument is really just a string to
830compare against the file names recorded in the tags table; it is read as
831a string rather than as a file name. Therefore, completion and
832defaulting are not available, and you must enter the file name the same
833way it appears in the tags table. Do not include a directory as part of
834the file name unless the file name recorded in the tags table includes a
835directory.
836
837@findex tags-apropos
838@vindex tags-apropos-verbose
839 @kbd{M-x tags-apropos} is like @code{apropos} for tags
840(@pxref{Apropos}). It finds all the tags in the selected tags table
841whose entries match @var{regexp}, and displays them. If the variable
842@code{tags-apropos-verbose} is non-@code{nil}, it displays the names
843of the tags files together with the tag names.
844
845@vindex tags-tag-face
846@vindex tags-apropos-additional-actions
191f7d86
RS
847 You can customize the appearance of the output by setting the
848variable @code{tags-tag-face} to a face. You can display additional
849output with @kbd{M-x tags-apropos} by customizing the variable
f00366c2
RS
850@code{tags-apropos-additional-actions}---see its documentation for
851details.
852
853 You can also use the collection of tag names to complete a symbol
854name in the buffer. @xref{Symbol Completion}.
855
4984edc7
EZ
856@ifnottex
857@include emerge-xtra.texi
858@end ifnottex
859
ab5796a9
MB
860@ignore
861 arch-tag: b9d83dfb-82ea-4ff6-bab5-05a3617091fb
862@end ignore