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