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