Require button.el.
[emacs.git] / man / maintaining.texi
blob9683ffa62d8c90d21e6748f5d364f50645d61023
1 @c This is part of the Emacs manual.
2 @c Copyright (C) 1985,86,87,93,94,95,97,99,00,2001 Free Software Foundation, Inc.
3 @c See file emacs.texi for copying conditions.
4 @node Maintaining, Abbrevs, Building, Top
5 @chapter Maintaining Programs
6 @cindex Lisp editing
7 @cindex C editing
8 @cindex program editing
10   This chapter describes Emacs features for maintaining programs.  The
11 version control features (@pxref{Version Control}) are also
12 particularly useful for this purpose.
14 @menu
15 * Change Log::          Maintaining a change history for your program.
16 * Tags::                Go direct to any function in your program in one
17                           command.  Tags remembers which file it is in.
18 * Emerge::              A convenient way of merging two versions of a program.
19 @end menu
21 @node Change Log
22 @section Change Logs
24 @cindex change log
25 @kindex C-x 4 a
26 @findex add-change-log-entry-other-window
27   The Emacs command @kbd{C-x 4 a} adds a new entry to the change log
28 file for the file you are editing
29 (@code{add-change-log-entry-other-window}).  If that file is actually
30 a backup file, it makes an entry appropriate for the file's
31 parent---that is useful for making log entries for functions that
32 have been deleted in the current version.
34   A change log file contains a chronological record of when and why you
35 have changed a program, consisting of a sequence of entries describing
36 individual changes.  Normally it is kept in a file called
37 @file{ChangeLog} in the same directory as the file you are editing, or
38 one of its parent directories.  A single @file{ChangeLog} file can
39 record changes for all the files in its directory and all its
40 subdirectories.
42   You should put a copyright notice and permission notice at the
43 end of the change log file.  Here is an example:
45 @example
46 Copyright 1997, 1998 Free Software Foundation, Inc.
47 Copying and distribution of this file, with or without modification, are
48 permitted provided the copyright notice and this notice are preserved.
49 @end example
51 @noindent
52 Of course, you should substitute the proper years and copyright holder.
54   A change log entry starts with a header line that contains the
55 current date, your name, and your email address (taken from the
56 variable @code{user-mail-address}).  Aside from these header lines,
57 every line in the change log starts with a space or a tab.  The bulk
58 of the entry consists of @dfn{items}, each of which starts with a line
59 starting with whitespace and a star.  Here are two entries, both dated
60 in May 1993, each with two items:
62 @iftex
63 @medbreak
64 @end iftex
65 @smallexample
66 1993-05-25  Richard Stallman  <rms@@gnu.org>
68         * man.el: Rename symbols `man-*' to `Man-*'.
69         (manual-entry): Make prompt string clearer.
71         * simple.el (blink-matching-paren-distance):
72         Change default to 12,000.
74 1993-05-24  Richard Stallman  <rms@@gnu.org>
76         * vc.el (minor-mode-map-alist): Don't use it if it's void.
77         (vc-cancel-version): Doc fix.
78 @end smallexample
80   One entry can describe several changes; each change should have its
81 own item.  Normally there should be a blank line between items.  When
82 items are related (parts of the same change, in different places), group
83 them by leaving no blank line between them.  The second entry above
84 contains two items grouped in this way.
86   @kbd{C-x 4 a} visits the change log file and creates a new entry
87 unless the most recent entry is for today's date and your name.  It
88 also creates a new item for the current file.  For many languages, it
89 can even guess the name of the function or other object that was
90 changed.
92 @vindex add-log-keep-changes-together
93   When the option @code{add-log-keep-changes-together} is
94 non-@code{nil}, @kbd{C-x 4 a} adds to any existing entry for the file
95 rather than starting a new entry.
97 @vindex change-log-version-info-enabled
98 @vindex change-log-version-number-regexp-list
99 @cindex file version in change log entries
100   If the value of the variable @code{change-log-version-info-enabled}
101 is non-@code{nil}, @kbd{C-x 4 a} adds the file's version number to the
102 change log entry.  It finds the version number by searching the first
103 ten percent of the file, using regular expressions from the variable
104 @code{change-log-version-number-regexp-list}.
106 @vindex add-log-always-start-new-record
107   If @code{add-log-always-start-new-record} is non-@code{nil},
108 @kbd{C-x 4 a} always makes a new entry, even if the last entry
109 was made by you and on the same date.
111 @cindex Change Log mode
112 @findex change-log-mode
113   The change log file is visited in Change Log mode.  In this major
114 mode, each bunch of grouped items counts as one paragraph, and each
115 entry is considered a page.  This facilitates editing the entries.
116 @kbd{C-j} and auto-fill indent each new line like the previous line;
117 this is convenient for entering the contents of an entry.
119 @findex change-log-merge
120   You can use the command @kbd{M-x change-log-merge} to merge other
121 log files into a buffer in Change Log Mode, preserving the date
122 ordering of entries.
124 @findex change-log-redate
125 @cindex converting change log date style
126   Versions of Emacs before 20.1 used a different format for the time of
127 the change log entry:
129 @smallexample
130 Fri May 25 11:23:23 1993 Richard Stallman  <rms@@gnu.org>
131 @end smallexample
133 @noindent
134 The @kbd{M-x change-log-redate} command converts all the old-style
135 date entries in the change log file visited in the current buffer to
136 the new format, to make the file uniform in style.  This is handy when
137 entries are contributed by many different people, some of whom use old
138 versions of Emacs.
140   Version control systems are another way to keep track of changes in your
141 program and keep a change log.  @xref{Log Buffer}.
143 @ignore
144 @c This is commented out because the command is specific
145 @c to maintenance of Emacs itself.
147 @node Authors
148 @section @file{AUTHORS} files
149 @cindex @file{AUTHORS} file
151   Programs which have many contributors usually include a file named
152 @file{AUTHORS} in their distribution, which lists the individual
153 contributions.  Emacs has a special command for maintaining the
154 @file{AUTHORS} file that is part of the Emacs distribution.
156 @findex authors
157   The @kbd{M-x authors} command prompts for the name of the root of the
158 Emacs source directory.  It then scans @file{ChangeLog} files and Lisp
159 source files under that directory for information about authors of
160 individual packages, and people who made changes in source files, and
161 puts the information it gleans into a buffer named @samp{*Authors*}.
162 You can then edit the contents of that buffer and merge it with the
163 existing @file{AUTHORS} file.
165   Do not assume that this command finds all the contributors; don't
166 assume that a person not listed in the output was not a contributor.
167 If you merged in someone's contribution and did not put his name
168 in the change log, he won't show up in @kbd{M-x authors} either.
169 @end ignore
171 @node Tags
172 @section Tags Tables
173 @cindex tags table
175   A @dfn{tags table} is a description of how a multi-file program is
176 broken up into files.  It lists the names of the component files and the
177 names and positions of the functions (or other named subunits) in each
178 file.  Grouping the related files makes it possible to search or replace
179 through all the files with one command.  Recording the function names
180 and positions makes possible the @kbd{M-.} command which finds the
181 definition of a function by looking up which of the files it is in.
183   Tags tables are stored in files called @dfn{tags table files}.  The
184 conventional name for a tags table file is @file{TAGS}.
186   Each entry in the tags table records the name of one tag, the name of the
187 file that the tag is defined in (implicitly), and the position in that
188 file of the tag's definition.  When a file parsed by @code{etags} is
189 generated from a different source file, like a C file generated from a
190 Cweb source file, the tags of the parsed file reference the source
191 file.
193   Just what names from the described files are recorded in the tags table
194 depends on the programming language of the described file.  They
195 normally include all file names, functions and subroutines, and may
196 also include global variables, data types, and anything else
197 convenient.  Each name recorded is called a @dfn{tag}.
199 @cindex C++ class browser, tags
200 @cindex tags, C++
201 @cindex class browser, C++
202 @cindex Ebrowse
203   See also the Ebrowse facility, which is tailored for C++.
204 @xref{Top,, Ebrowse, ebrowse, Ebrowse User's Manual}.
206 @menu
207 * Tag Syntax::          Tag syntax for various types of code and text files.
208 * Create Tags Table::   Creating a tags table with @code{etags}.
209 * Etags Regexps::       Create arbitrary tags using regular expressions.
210 * Select Tags Table::   How to visit a tags table.
211 * Find Tag::            Commands to find the definition of a specific tag.
212 * Tags Search::         Using a tags table for searching and replacing.
213 * List Tags::           Listing and finding tags defined in a file.
214 @end menu
216 @node Tag Syntax
217 @subsection Source File Tag Syntax
219   Here is how tag syntax is defined for the most popular languages:
221 @itemize @bullet
222 @item
223 In C code, any C function or typedef is a tag, and so are definitions of
224 @code{struct}, @code{union} and @code{enum}.
225 @code{#define} macro definitions and @code{enum} constants are also
226 tags, unless you specify @samp{--no-defines} when making the tags table.
227 Similarly, global variables are tags, unless you specify
228 @samp{--no-globals}.  Use of @samp{--no-globals} and @samp{--no-defines}
229 can make the tags table file much smaller.
231 You can tag function declarations and external variables in addition
232 to function definitions by giving the @samp{--declarations} option to
233 @code{etags}.  You can tag struct members with the @samp{--members}
234 option.
236 @item
237 In C++ code, in addition to all the tag constructs of C code, member
238 functions are also recognized, and optionally member variables if you
239 use the @samp{--members} option.  Tags for variables and functions in
240 classes are named @samp{@var{class}::@var{variable}} and
241 @samp{@var{class}::@var{function}}.  @code{operator} definitions have
242 tag names like @samp{operator+}.
244 @item
245 In Java code, tags include all the constructs recognized in C++, plus
246 the @code{interface}, @code{extends} and @code{implements} constructs.
247 Tags for variables and functions in classes are named
248 @samp{@var{class}.@var{variable}} and @samp{@var{class}.@var{function}}.
250 @item
251 In La@TeX{} text, the argument of any of the commands @code{\chapter},
252 @code{\section}, @code{\subsection}, @code{\subsubsection},
253 @code{\eqno}, @code{\label}, @code{\ref}, @code{\cite},
254 @code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry},
255 @code{\index}, @code{\def}, @code{\newcommand}, @code{\renewcommand},
256 @code{\newenvironment} or @code{\renewenvironment} is a tag.@refill
258 Other commands can make tags as well, if you specify them in the
259 environment variable @env{TEXTAGS} before invoking @code{etags}.  The
260 value of this environment variable should be a colon-separated list of
261 command names.  For example,
263 @example
264 TEXTAGS="mycommand:myothercommand"
265 export TEXTAGS
266 @end example
268 @noindent
269 specifies (using Bourne shell syntax) that the commands
270 @samp{\mycommand} and @samp{\myothercommand} also define tags.
272 @item
273 In Lisp code, any function defined with @code{defun}, any variable
274 defined with @code{defvar} or @code{defconst}, and in general the first
275 argument of any expression that starts with @samp{(def} in column zero is
276 a tag.
278 @item
279 In Scheme code, tags include anything defined with @code{def} or with a
280 construct whose name starts with @samp{def}.  They also include variables
281 set with @code{set!} at top level in the file.
282 @end itemize
284   Several other languages are also supported:
286 @itemize @bullet
288 @item
289 In Ada code, functions, procedures, packages, tasks and types are
290 tags.  Use the @samp{--packages-only} option to create tags for
291 packages only.
293 In Ada, the same name can be used for different kinds of entity
294 (e.g.@:, for a procedure and for a function).  Also, for things like
295 packages, procedures and functions, there is the spec (i.e.@: the
296 interface) and the body (i.e.@: the implementation).  To make it
297 easier to pick the definition you want, Ada tag name have suffixes
298 indicating the type of entity:
300 @table @samp
301 @item /b
302 package body.
303 @item /f
304 function.
305 @item /k
306 task.
307 @item /p
308 procedure.
309 @item /s
310 package spec.
311 @item /t
312 type.
313 @end table
315   Thus, @kbd{M-x find-tag @key{RET} bidule/b @key{RET}} will go
316 directly to the body of the package @code{bidule}, while @kbd{M-x
317 find-tag @key{RET} bidule @key{RET}} will just search for any tag
318 @code{bidule}.
320 @item
321 In assembler code, labels appearing at the beginning of a line,
322 followed by a colon, are tags.
324 @item
325 In Bison or Yacc input files, each rule defines as a tag the nonterminal
326 it constructs.  The portions of the file that contain C code are parsed
327 as C code.
329 @item
330 In Cobol code, tags are paragraph names; that is, any word starting in
331 column 8 and followed by a period.
333 @item
334 In Erlang code, the tags are the functions, records and macros defined
335 in the file.
337 @item
338 In Fortran code, functions, subroutines and block data are tags.
340 @item
341 In HTML input files, the tags are the @code{title} and the @code{h1},
342 @code{h2}, @code{h3} headers.  Also, tags are @code{name=} in anchors
343 and all occurrences of @code{id=}.
345 @item
346 In makefiles, targets are tags; additionally, variables are tags
347 unless you specify @samp{--no-globals}.
349 @item
350 In Objective C code, tags include Objective C definitions for classes,
351 class categories, methods and protocols.  Tags for variables and
352 functions in classes are named @samp{@var{class}::@var{variable}} and
353 @samp{@var{class}::@var{function}}.
355 @item
356 In Pascal code, the tags are the functions and procedures defined in
357 the file.
359 @item
360 In Perl code, the tags are the packages, subroutines and variables
361 defined by the @code{package}, @code{sub}, @code{my} and @code{local}
362 keywords.  Use @samp{--globals} if you want to tag global variables.
363 Tags for subroutines are named @samp{@var{package}::@var{sub}}.  The
364 name for subroutines defined in the default package is
365 @samp{main::@var{sub}}.
367 @item
368 In PHP code, tags are functions, classes and defines.  When using the
369 @samp{--members} option, vars are tags too.
371 @item
372 In PostScript code, the tags are the functions.
374 @item
375 In Prolog code, tags are predicates and rules at the beginning of
376 line.
378 @item
379 In Python code, @code{def} or @code{class} at the beginning of a line
380 generate a tag.
381 @end itemize
383   You can also generate tags based on regexp matching (@pxref{Etags
384 Regexps}) to handle other formats and languages.
386 @node Create Tags Table
387 @subsection Creating Tags Tables
388 @cindex @code{etags} program
390   The @code{etags} program is used to create a tags table file.  It knows
391 the syntax of several languages, as described in
392 @iftex
393 the previous section.
394 @end iftex
395 @ifinfo
396 @ref{Tag Syntax}.
397 @end ifinfo
398 Here is how to run @code{etags}:
400 @example
401 etags @var{inputfiles}@dots{}
402 @end example
404 @noindent
405 The @code{etags} program reads the specified files, and writes a tags
406 table named @file{TAGS} in the current working directory.
408   If the specified files don't exist, @code{etags} looks for
409 compressed versions of them and uncompresses them to read them.  Under
410 MS-DOS, @code{etags} also looks for file names like @file{mycode.cgz}
411 if it is given @samp{mycode.c} on the command line and @file{mycode.c}
412 does not exist.
414   @code{etags} recognizes the language used in an input file based on
415 its file name and contents.  You can specify the language with the
416 @samp{--language=@var{name}} option, described below.
418   If the tags table data become outdated due to changes in the files
419 described in the table, the way to update the tags table is the same
420 way it was made in the first place.  If the tags table fails to record
421 a tag, or records it for the wrong file, then Emacs cannot possibly
422 find its definition until you update the tags table.  However, if the
423 position recorded in the tags table becomes a little bit wrong (due to
424 other editing), the only consequence is a slight delay in finding the
425 tag.  Even if the stored position is very far wrong, Emacs will still
426 find the tag, after searching most of the file for it.  Even that
427 delay is hardly noticeable with today's computers.
429   So you should update a tags table when you define new tags that you want
430 to have listed, or when you move tag definitions from one file to another,
431 or when changes become substantial.  Normally there is no need to update
432 the tags table after each edit, or even every day.
434   One tags table can virtually include another.  Specify the included
435 tags file name with the @samp{--include=@var{file}} option when
436 creating the file that is to include it.  The latter file then acts as
437 if it covered all the source files specified in the included file, as
438 well as the files it directly contains.
440   If you specify the source files with relative file names when you run
441 @code{etags}, the tags file will contain file names relative to the
442 directory where the tags file was initially written.  This way, you can
443 move an entire directory tree containing both the tags file and the
444 source files, and the tags file will still refer correctly to the source
445 files.
447   If you specify absolute file names as arguments to @code{etags}, then
448 the tags file will contain absolute file names.  This way, the tags file
449 will still refer to the same files even if you move it, as long as the
450 source files remain in the same place.  Absolute file names start with
451 @samp{/}, or with @samp{@var{device}:/} on MS-DOS and MS-Windows.
453   When you want to make a tags table from a great number of files, you
454 may have problems listing them on the command line, because some systems
455 have a limit on its length.  The simplest way to circumvent this limit
456 is to tell @code{etags} to read the file names from its standard input,
457 by typing a dash in place of the file names, like this:
459 @smallexample
460 find . -name "*.[chCH]" -print | etags -
461 @end smallexample
463   Use the option @samp{--language=@var{name}} to specify the language
464 explicitly.  You can intermix these options with file names; each one
465 applies to the file names that follow it.  Specify
466 @samp{--language=auto} to tell @code{etags} to resume guessing the
467 language from the file names and file contents.  Specify
468 @samp{--language=none} to turn off language-specific processing
469 entirely; then @code{etags} recognizes tags by regexp matching alone
470 (@pxref{Etags Regexps}).
472   The option @samp{--parse-stdin=@var{file}} is mostly useful when
473 calling @code{etags} from programs.  It can be used (only once) in
474 place of a file name on the command line.  @code{Etags} will read from
475 standard input and mark the produced tags as belonging to the file
476 @var{file}.
478   @samp{etags --help} prints the list of the languages @code{etags}
479 knows, and the file name rules for guessing the language.  It also prints
480 a list of all the available @code{etags} options, together with a short
481 explanation.  If followed by one or more @samp{--language=@var{lang}}
482 options, prints detailed information about how tags are generated for
483 @var{lang}.
485 @node Etags Regexps
486 @subsection Etags Regexps
488   The @samp{--regex} option provides a general way of recognizing tags
489 based on regexp matching.  You can freely intermix it with file names.
490 If you specify multiple @samp{--regex} options, all of them are used
491 in parallel, but each one applies only to the source files that follow
492 it.  The syntax is:
494 @smallexample
495 --regex=[@var{@{language@}}]/@var{tagregexp}/[@var{nameregexp}/]@var{modifiers}
496 @end smallexample
498   The essential part of the option value is @var{tagregexp}, the
499 regexp for matching tags.  It is always used anchored, that is, it
500 only matches at the beginning of a line.  If you want to allow
501 indented tags, use a regexp that matches initial whitespace; start it
502 with @samp{[ \t]*}.
504   In these regular expressions, @samp{\} quotes the next character, and
505 all the GCC character escape sequences are supported (@samp{\a} for
506 bell, @samp{\b} for back space, @samp{\d} for delete, @samp{\e} for
507 escape, @samp{\f} for formfeed, @samp{\n} for newline, @samp{\r} for
508 carriage return, @samp{\t} for tab, and @samp{\v} for vertical tab).
510   Ideally, @var{tagregexp} should not match more characters than are
511 needed to recognize what you want to tag.  If the syntax requires you
512 to write @var{tagregexp} so it matches more characters beyond the tag
513 itself, you should add a @var{nameregexp}, to pick out just the tag.
514 This will enable Emacs to find tags more accurately and to do
515 completion on tag names more reliably.  You can find some examples
516 below.
518   The @var{modifiers} are a sequence of zero or more characters that
519 modify the way @code{etags} does the matching.  A regexp with no
520 modifiers is applied sequentially to each line of the input file, in a
521 case-sensitive way.  The modifiers and their meanings are:
523 @table @samp
524 @item i
525 Ignore case when matching this regexp.
526 @item m
527 Match this regular expression against the whole file, so that
528 multi-line matches are possible.
529 @item s
530 Match this regular expression against the whole file, and allow
531 @samp{.} in @var{tagregexp} to match newlines.
532 @end table
534   The @samp{-R} option cancels all the regexps defined by preceding
535 @samp{--regex} options.  It applies to the file names following it, as
536 you can see from the following example:
538 @smallexample
539 etags --regex=/@var{reg1}/i voo.doo --regex=/@var{reg2}/m \
540     bar.ber -R --lang=lisp los.er
541 @end smallexample
543 @noindent
544 Here @code{etags} chooses the parsing language for @file{voo.doo} and
545 @file{bar.ber} according to their contents.  @code{etags} also uses
546 @var{reg1} to recognize additional tags in @file{voo.doo}, and both
547 @var{reg1} and @var{reg2} to recognize additional tags in
548 @file{bar.ber}.  @var{reg1} is checked against each line of
549 @file{voo.doo} and @file{bar.ber}, in a case-insensitive way, while
550 @var{reg2} is checked against the whole @file{bar.ber} file,
551 permitting multi-line matches, in a case-sensitive way.  @code{etags}
552 uses only the Lisp tags rules, with no user-specified regexp matching,
553 to recognize tags in @file{los.er}.
555   You can restrict a @samp{--regex} option to match only files of a
556 given language by using the optional prefix @var{@{language@}}.
557 (@samp{etags --help} prints the list of languages recognized by
558 @code{etags}.)  This is particularly useful when storing many
559 predefined regular expressions for @code{etags} in a file.  The
560 following example tags the @code{DEFVAR} macros in the Emacs source
561 files, for the C language only:
563 @smallexample
564 --regex='@{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/'
565 @end smallexample
567 @noindent
568 When you have complex regular expressions, you can store the list of
569 them in a file.  The following option syntax instructs @code{etags} to
570 read two files of regular expressions.  The regular expressions
571 contained in the second file are matched without regard to case.
573 @smallexample
574 --regex=@@@var{case-sensitive-file} --ignore-case-regex=@@@var{ignore-case-file}
575 @end smallexample
577 @noindent
578 A regex file for @code{etags} contains one regular expression per
579 line.  Empty lines, and lines beginning with space or tab are ignored.
580 When the first character in a line is @samp{@@}, @code{etags} assumes
581 that the rest of the line is the name of another file of regular
582 expressions; thus, one such file can include another file.  All the
583 other lines are taken to be regular expressions.  If the first
584 non-whitespace text on the line is @samp{--}, that line is a comment.
586   For example, we can create a file called @samp{emacs.tags} with the
587 following contents:
589 @smallexample
590         -- This is for GNU Emacs C source files
591 @{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/\1/
592 @end smallexample
594 @noindent
595 and then use it like this:
597 @smallexample
598 etags --regex=@@emacs.tags *.[ch] */*.[ch]
599 @end smallexample
601   Here are some more examples.  The regexps are quoted to protect them
602 from shell interpretation.
604 @itemize @bullet
606 @item
607 Tag Octave files:
609 @smallexample
610 etags --language=none \
611       --regex='/[ \t]*function.*=[ \t]*\([^ \t]*\)[ \t]*(/\1/' \
612       --regex='/###key \(.*\)/\1/' \
613       --regex='/[ \t]*global[ \t].*/' \
614       *.m
615 @end smallexample
617 @noindent
618 Note that tags are not generated for scripts, so that you have to add
619 a line by yourself of the form @samp{###key @var{scriptname}} if you
620 want to jump to it.
622 @item
623 Tag Tcl files:
625 @smallexample
626 etags --language=none --regex='/proc[ \t]+\([^ \t]+\)/\1/' *.tcl
627 @end smallexample
629 @item
630 Tag VHDL files:
632 @smallexample
633 etags --language=none \
634   --regex='/[ \t]*\(ARCHITECTURE\|CONFIGURATION\) +[^ ]* +OF/' \
635   --regex='/[ \t]*\(ATTRIBUTE\|ENTITY\|FUNCTION\|PACKAGE\
636   \( BODY\)?\|PROCEDURE\|PROCESS\|TYPE\)[ \t]+\([^ \t(]+\)/\3/'
637 @end smallexample
638 @end itemize
640 @node Select Tags Table
641 @subsection Selecting a Tags Table
643 @vindex tags-file-name
644 @findex visit-tags-table
645   Emacs has at any time one @dfn{selected} tags table, and all the commands
646 for working with tags tables use the selected one.  To select a tags table,
647 type @kbd{M-x visit-tags-table}, which reads the tags table file name as an
648 argument.  The name @file{TAGS} in the default directory is used as the
649 default file name.
651   All this command does is store the file name in the variable
652 @code{tags-file-name}.  Emacs does not actually read in the tags table
653 contents until you try to use them.  Setting this variable yourself is just
654 as good as using @code{visit-tags-table}.  The variable's initial value is
655 @code{nil}; that value tells all the commands for working with tags tables
656 that they must ask for a tags table file name to use.
658   Using @code{visit-tags-table} when a tags table is already loaded
659 gives you a choice: you can add the new tags table to the current list
660 of tags tables, or start a new list.  The tags commands use all the tags
661 tables in the current list.  If you start a new list, the new tags table
662 is used @emph{instead} of others.  If you add the new table to the
663 current list, it is used @emph{as well as} the others.  When the tags
664 commands scan the list of tags tables, they don't always start at the
665 beginning of the list; they start with the first tags table (if any)
666 that describes the current file, proceed from there to the end of the
667 list, and then scan from the beginning of the list until they have
668 covered all the tables in the list.
670 @vindex tags-table-list
671   You can specify a precise list of tags tables by setting the variable
672 @code{tags-table-list} to a list of strings, like this:
674 @c keep this on two lines for formatting in smallbook
675 @example
676 @group
677 (setq tags-table-list
678       '("~/emacs" "/usr/local/lib/emacs/src"))
679 @end group
680 @end example
682 @noindent
683 This tells the tags commands to look at the @file{TAGS} files in your
684 @file{~/emacs} directory and in the @file{/usr/local/lib/emacs/src}
685 directory.  The order depends on which file you are in and which tags
686 table mentions that file, as explained above.
688   Do not set both @code{tags-file-name} and @code{tags-table-list}.
690 @node Find Tag
691 @subsection Finding a Tag
693   The most important thing that a tags table enables you to do is to find
694 the definition of a specific tag.
696 @table @kbd
697 @item M-.@: @var{tag} @key{RET}
698 Find first definition of @var{tag} (@code{find-tag}).
699 @item C-u M-.
700 Find next alternate definition of last tag specified.
701 @item C-u - M-.
702 Go back to previous tag found.
703 @item C-M-. @var{pattern} @key{RET}
704 Find a tag whose name matches @var{pattern} (@code{find-tag-regexp}).
705 @item C-u C-M-.
706 Find the next tag whose name matches the last pattern used.
707 @item C-x 4 .@: @var{tag} @key{RET}
708 Find first definition of @var{tag}, but display it in another window
709 (@code{find-tag-other-window}).
710 @item C-x 5 .@: @var{tag} @key{RET}
711 Find first definition of @var{tag}, and create a new frame to select the
712 buffer (@code{find-tag-other-frame}).
713 @item M-*
714 Pop back to where you previously invoked @kbd{M-.} and friends.
715 @end table
717 @kindex M-.
718 @findex find-tag
719   @kbd{M-.}@: (@code{find-tag}) is the command to find the definition of
720 a specified tag.  It searches through the tags table for that tag, as a
721 string, and then uses the tags table info to determine the file that the
722 definition is in and the approximate character position in the file of
723 the definition.  Then @code{find-tag} visits that file, moves point to
724 the approximate character position, and searches ever-increasing
725 distances away to find the tag definition.
727   If an empty argument is given (just type @key{RET}), the balanced
728 expression in the buffer before or around point is used as the
729 @var{tag} argument.  @xref{Expressions}.
731   You don't need to give @kbd{M-.} the full name of the tag; a part
732 will do.  This is because @kbd{M-.} finds tags in the table which
733 contain @var{tag} as a substring.  However, it prefers an exact match
734 to a substring match.  To find other tags that match the same
735 substring, give @code{find-tag} a numeric argument, as in @kbd{C-u
736 M-.}; this does not read a tag name, but continues searching the tags
737 table's text for another tag containing the same substring last used.
738 If you have a real @key{META} key, @kbd{M-0 M-.}@: is an easier
739 alternative to @kbd{C-u M-.}.
741 @kindex C-x 4 .
742 @findex find-tag-other-window
743 @kindex C-x 5 .
744 @findex find-tag-other-frame
745   Like most commands that can switch buffers, @code{find-tag} has a
746 variant that displays the new buffer in another window, and one that
747 makes a new frame for it.  The former is @kbd{C-x 4 .}, which invokes
748 the command @code{find-tag-other-window}.  The latter is @kbd{C-x 5 .},
749 which invokes @code{find-tag-other-frame}.
751   To move back to places you've found tags recently, use @kbd{C-u -
752 M-.}; more generally, @kbd{M-.} with a negative numeric argument.  This
753 command can take you to another buffer.  @kbd{C-x 4 .} with a negative
754 argument finds the previous tag location in another window.
756 @kindex M-*
757 @findex pop-tag-mark
758 @vindex find-tag-marker-ring-length
759   As well as going back to places you've found tags recently, you can go
760 back to places @emph{from where} you found them.  Use @kbd{M-*}, which
761 invokes the command @code{pop-tag-mark}, for this.  Typically you would
762 find and study the definition of something with @kbd{M-.} and then
763 return to where you were with @kbd{M-*}.
765   Both @kbd{C-u - M-.} and @kbd{M-*} allow you to retrace your steps to
766 a depth determined by the variable @code{find-tag-marker-ring-length}.
768 @findex find-tag-regexp
769 @kindex C-M-.
770   The command @kbd{C-M-.} (@code{find-tag-regexp}) visits the tags that
771 match a specified regular expression.  It is just like @kbd{M-.} except
772 that it does regexp matching instead of substring matching.
774 @node Tags Search
775 @subsection Searching and Replacing with Tags Tables
776 @cindex search and replace in multiple files
777 @cindex multiple-file search and replace
779   The commands in this section visit and search all the files listed in the
780 selected tags table, one by one.  For these commands, the tags table serves
781 only to specify a sequence of files to search.
783 @table @kbd
784 @item M-x tags-search @key{RET} @var{regexp} @key{RET}
785 Search for @var{regexp} through the files in the selected tags
786 table.
787 @item M-x tags-query-replace @key{RET} @var{regexp} @key{RET} @var{replacement} @key{RET}
788 Perform a @code{query-replace-regexp} on each file in the selected tags table.
789 @item M-,
790 Restart one of the commands above, from the current location of point
791 (@code{tags-loop-continue}).
792 @end table
794 @findex tags-search
795   @kbd{M-x tags-search} reads a regexp using the minibuffer, then
796 searches for matches in all the files in the selected tags table, one
797 file at a time.  It displays the name of the file being searched so you
798 can follow its progress.  As soon as it finds an occurrence,
799 @code{tags-search} returns.
801 @kindex M-,
802 @findex tags-loop-continue
803   Having found one match, you probably want to find all the rest.  To find
804 one more match, type @kbd{M-,} (@code{tags-loop-continue}) to resume the
805 @code{tags-search}.  This searches the rest of the current buffer, followed
806 by the remaining files of the tags table.@refill
808 @findex tags-query-replace
809   @kbd{M-x tags-query-replace} performs a single
810 @code{query-replace-regexp} through all the files in the tags table.  It
811 reads a regexp to search for and a string to replace with, just like
812 ordinary @kbd{M-x query-replace-regexp}.  It searches much like @kbd{M-x
813 tags-search}, but repeatedly, processing matches according to your
814 input.  @xref{Replace}, for more information on query replace.
816 @vindex tags-case-fold-search
817 @cindex case-sensitivity and tags search
818   You can control the case-sensitivity of tags search commands by
819 customizing the value of the variable @code{tags-case-fold-search}.  The
820 default is to use the same setting as the value of
821 @code{case-fold-search} (@pxref{Search Case}).
823   It is possible to get through all the files in the tags table with a
824 single invocation of @kbd{M-x tags-query-replace}.  But often it is
825 useful to exit temporarily, which you can do with any input event that
826 has no special query replace meaning.  You can resume the query replace
827 subsequently by typing @kbd{M-,}; this command resumes the last tags
828 search or replace command that you did.
830   The commands in this section carry out much broader searches than the
831 @code{find-tag} family.  The @code{find-tag} commands search only for
832 definitions of tags that match your substring or regexp.  The commands
833 @code{tags-search} and @code{tags-query-replace} find every occurrence
834 of the regexp, as ordinary search commands and replace commands do in
835 the current buffer.
837   These commands create buffers only temporarily for the files that they
838 have to search (those which are not already visited in Emacs buffers).
839 Buffers in which no match is found are quickly killed; the others
840 continue to exist.
842   It may have struck you that @code{tags-search} is a lot like
843 @code{grep}.  You can also run @code{grep} itself as an inferior of
844 Emacs and have Emacs show you the matching lines one by one.  This works
845 much like running a compilation; finding the source locations of the
846 @code{grep} matches works like finding the compilation errors.
847 @xref{Compilation}.
849 @node List Tags
850 @subsection Tags Table Inquiries
852 @table @kbd
853 @item M-x list-tags @key{RET} @var{file} @key{RET}
854 Display a list of the tags defined in the program file @var{file}.
855 @item M-x tags-apropos @key{RET} @var{regexp} @key{RET}
856 Display a list of all tags matching @var{regexp}.
857 @end table
859 @findex list-tags
860   @kbd{M-x list-tags} reads the name of one of the files described by
861 the selected tags table, and displays a list of all the tags defined in
862 that file.  The ``file name'' argument is really just a string to
863 compare against the file names recorded in the tags table; it is read as
864 a string rather than as a file name.  Therefore, completion and
865 defaulting are not available, and you must enter the file name the same
866 way it appears in the tags table.  Do not include a directory as part of
867 the file name unless the file name recorded in the tags table includes a
868 directory.
870 @findex tags-apropos
871 @vindex tags-apropos-verbose
872   @kbd{M-x tags-apropos} is like @code{apropos} for tags
873 (@pxref{Apropos}).  It finds all the tags in the selected tags table
874 whose entries match @var{regexp}, and displays them.  If the variable
875 @code{tags-apropos-verbose} is non-@code{nil}, it displays the names
876 of the tags files together with the tag names.
878 @vindex tags-tag-face
879 @vindex tags-apropos-additional-actions
880 You can customize the appearance of the output with the face
881 @code{tags-tag-face}.  You can display additional output with @kbd{M-x
882 tags-apropos} by customizing the variable
883 @code{tags-apropos-additional-actions}---see its documentation for
884 details.
886   You can also use the collection of tag names to complete a symbol
887 name in the buffer.  @xref{Symbol Completion}.
889 @node Emerge
890 @section Merging Files with Emerge
891 @cindex Emerge
892 @cindex merging files
894 It's not unusual for programmers to get their signals crossed and modify
895 the same program in two different directions.  To recover from this
896 confusion, you need to merge the two versions.  Emerge makes this
897 easier.  See also @ref{Comparing Files}, for commands to compare
898 in a more manual fashion, and @ref{Top, Ediff,, ediff, The Ediff Manual}.
900 @menu
901 * Overview of Emerge::  How to start Emerge.  Basic concepts.
902 * Submodes of Emerge::  Fast mode vs. Edit mode.
903                           Skip Prefers mode and Auto Advance mode.
904 * State of Difference:: You do the merge by specifying state A or B
905                           for each difference.
906 * Merge Commands::      Commands for selecting a difference,
907                           changing states of differences, etc.
908 * Exiting Emerge::      What to do when you've finished the merge.
909 * Combining in Emerge::     How to keep both alternatives for a difference.
910 * Fine Points of Emerge::   Misc.
911 @end menu
913 @node Overview of Emerge
914 @subsection Overview of Emerge
916 To start Emerge, run one of these four commands:
918 @table @kbd
919 @item M-x emerge-files
920 @findex emerge-files
921 Merge two specified files.
923 @item M-x emerge-files-with-ancestor
924 @findex emerge-files-with-ancestor
925 Merge two specified files, with reference to a common ancestor.
927 @item M-x emerge-buffers
928 @findex emerge-buffers
929 Merge two buffers.
931 @item M-x emerge-buffers-with-ancestor
932 @findex emerge-buffers-with-ancestor
933 Merge two buffers with reference to a common ancestor in a third
934 buffer.
935 @end table
937 @cindex merge buffer (Emerge)
938 @cindex A and B buffers (Emerge)
939   The Emerge commands compare two files or buffers, and display the
940 comparison in three buffers: one for each input text (the @dfn{A buffer}
941 and the @dfn{B buffer}), and one (the @dfn{merge buffer}) where merging
942 takes place.  The merge buffer shows the full merged text, not just the
943 differences.  Wherever the two input texts differ, you can choose which
944 one of them to include in the merge buffer.
946   The Emerge commands that take input from existing buffers use only the
947 accessible portions of those buffers, if they are narrowed
948 (@pxref{Narrowing}).
950   If a common ancestor version is available, from which the two texts to
951 be merged were both derived, Emerge can use it to guess which
952 alternative is right.  Wherever one current version agrees with the
953 ancestor, Emerge presumes that the other current version is a deliberate
954 change which should be kept in the merged version.  Use the
955 @samp{with-ancestor} commands if you want to specify a common ancestor
956 text.  These commands read three file or buffer names---variant A,
957 variant B, and the common ancestor.
959   After the comparison is done and the buffers are prepared, the
960 interactive merging starts.  You control the merging by typing special
961 @dfn{merge commands} in the merge buffer.  The merge buffer shows you a
962 full merged text, not just differences.  For each run of differences
963 between the input texts, you can choose which one of them to keep, or
964 edit them both together.
966   The merge buffer uses a special major mode, Emerge mode, with commands
967 for making these choices.  But you can also edit the buffer with
968 ordinary Emacs commands.
970   At any given time, the attention of Emerge is focused on one
971 particular difference, called the @dfn{selected} difference.  This
972 difference is marked off in the three buffers like this:
974 @example
975 vvvvvvvvvvvvvvvvvvvv
976 @var{text that differs}
977 ^^^^^^^^^^^^^^^^^^^^
978 @end example
980 @noindent
981 Emerge numbers all the differences sequentially and the mode
982 line always shows the number of the selected difference.
984   Normally, the merge buffer starts out with the A version of the text.
985 But when the A version of a difference agrees with the common ancestor,
986 then the B version is initially preferred for that difference.
988   Emerge leaves the merged text in the merge buffer when you exit.  At
989 that point, you can save it in a file with @kbd{C-x C-w}.  If you give a
990 numeric argument to @code{emerge-files} or
991 @code{emerge-files-with-ancestor}, it reads the name of the output file
992 using the minibuffer.  (This is the last file name those commands read.)
993 Then exiting from Emerge saves the merged text in the output file.
995   Normally, Emerge commands save the output buffer in its file when you
996 exit.  If you abort Emerge with @kbd{C-]}, the Emerge command does not
997 save the output buffer, but you can save it yourself if you wish.
999 @node Submodes of Emerge
1000 @subsection Submodes of Emerge
1002   You can choose between two modes for giving merge commands: Fast mode
1003 and Edit mode.  In Fast mode, basic merge commands are single
1004 characters, but ordinary Emacs commands are disabled.  This is
1005 convenient if you use only merge commands.  In Edit mode, all merge
1006 commands start with the prefix key @kbd{C-c C-c}, and the normal Emacs
1007 commands are also available.  This allows editing the merge buffer, but
1008 slows down Emerge operations.
1010   Use @kbd{e} to switch to Edit mode, and @kbd{C-c C-c f} to switch to
1011 Fast mode.  The mode line indicates Edit and Fast modes with @samp{E}
1012 and @samp{F}.
1014   Emerge has two additional submodes that affect how particular merge
1015 commands work: Auto Advance mode and Skip Prefers mode.
1017   If Auto Advance mode is in effect, the @kbd{a} and @kbd{b} commands
1018 advance to the next difference.  This lets you go through the merge
1019 faster as long as you simply choose one of the alternatives from the
1020 input.  The mode line indicates Auto Advance mode with @samp{A}.
1022   If Skip Prefers mode is in effect, the @kbd{n} and @kbd{p} commands
1023 skip over differences in states prefer-A and prefer-B (@pxref{State of
1024 Difference}).  Thus you see only differences for which neither version
1025 is presumed ``correct.''  The mode line indicates Skip Prefers mode with
1026 @samp{S}.
1028 @findex emerge-auto-advance-mode
1029 @findex emerge-skip-prefers-mode
1030   Use the command @kbd{s a} (@code{emerge-auto-advance-mode}) to set or
1031 clear Auto Advance mode.  Use @kbd{s s}
1032 (@code{emerge-skip-prefers-mode}) to set or clear Skip Prefers mode.
1033 These commands turn on the mode with a positive argument, turns it off
1034 with a negative or zero argument, and toggle the mode with no argument.
1036 @node State of Difference
1037 @subsection State of a Difference
1039   In the merge buffer, a difference is marked with lines of @samp{v} and
1040 @samp{^} characters.  Each difference has one of these seven states:
1042 @table @asis
1043 @item A
1044 The difference is showing the A version.  The @kbd{a} command always
1045 produces this state; the mode line indicates it with @samp{A}.
1047 @item B
1048 The difference is showing the B version.  The @kbd{b} command always
1049 produces this state; the mode line indicates it with @samp{B}.
1051 @item default-A
1052 @itemx default-B
1053 The difference is showing the A or the B state by default, because you
1054 haven't made a choice.  All differences start in the default-A state
1055 (and thus the merge buffer is a copy of the A buffer), except those for
1056 which one alternative is ``preferred'' (see below).
1058 When you select a difference, its state changes from default-A or
1059 default-B to plain A or B.  Thus, the selected difference never has
1060 state default-A or default-B, and these states are never displayed in
1061 the mode line.
1063 The command @kbd{d a} chooses default-A as the default state, and @kbd{d
1064 b} chooses default-B.  This chosen default applies to all differences
1065 which you haven't ever selected and for which no alternative is preferred.
1066 If you are moving through the merge sequentially, the differences you
1067 haven't selected are those following the selected one.  Thus, while
1068 moving sequentially, you can effectively make the A version the default
1069 for some sections of the merge buffer and the B version the default for
1070 others by using @kbd{d a} and @kbd{d b} between sections.
1072 @item prefer-A
1073 @itemx prefer-B
1074 The difference is showing the A or B state because it is
1075 @dfn{preferred}.  This means that you haven't made an explicit choice,
1076 but one alternative seems likely to be right because the other
1077 alternative agrees with the common ancestor.  Thus, where the A buffer
1078 agrees with the common ancestor, the B version is preferred, because
1079 chances are it is the one that was actually changed.
1081 These two states are displayed in the mode line as @samp{A*} and @samp{B*}.
1083 @item combined
1084 The difference is showing a combination of the A and B states, as a
1085 result of the @kbd{x c} or @kbd{x C} commands.
1087 Once a difference is in this state, the @kbd{a} and @kbd{b} commands
1088 don't do anything to it unless you give them a numeric argument.
1090 The mode line displays this state as @samp{comb}.
1091 @end table
1093 @node Merge Commands
1094 @subsection Merge Commands
1096   Here are the Merge commands for Fast mode; in Edit mode, precede them
1097 with @kbd{C-c C-c}:
1099 @table @kbd
1100 @item p
1101 Select the previous difference.
1103 @item n
1104 Select the next difference.
1106 @item a
1107 Choose the A version of this difference.
1109 @item b
1110 Choose the B version of this difference.
1112 @item C-u @var{n} j
1113 Select difference number @var{n}.
1115 @item .
1116 Select the difference containing point.  You can use this command in the
1117 merge buffer or in the A or B buffer.
1119 @item q
1120 Quit---finish the merge.
1122 @item C-]
1123 Abort---exit merging and do not save the output.
1125 @item f
1126 Go into Fast mode.  (In Edit mode, this is actually @kbd{C-c C-c f}.)
1128 @item e
1129 Go into Edit mode.
1131 @item l
1132 Recenter (like @kbd{C-l}) all three windows.
1134 @item -
1135 Specify part of a prefix numeric argument.
1137 @item @var{digit}
1138 Also specify part of a prefix numeric argument.
1140 @item d a
1141 Choose the A version as the default from here down in
1142 the merge buffer.
1144 @item d b
1145 Choose the B version as the default from here down in
1146 the merge buffer.
1148 @item c a
1149 Copy the A version of this difference into the kill ring.
1151 @item c b
1152 Copy the B version of this difference into the kill ring.
1154 @item i a
1155 Insert the A version of this difference at point.
1157 @item i b
1158 Insert the B version of this difference at point.
1160 @item m
1161 Put point and mark around the difference.
1163 @item ^
1164 Scroll all three windows down (like @kbd{M-v}).
1166 @item v
1167 Scroll all three windows up (like @kbd{C-v}).
1169 @item <
1170 Scroll all three windows left (like @kbd{C-x <}).
1172 @item >
1173 Scroll all three windows right (like @kbd{C-x >}).
1175 @item |
1176 Reset horizontal scroll on all three windows.
1178 @item x 1
1179 Shrink the merge window to one line.  (Use @kbd{C-u l} to restore it
1180 to full size.)
1182 @item x c
1183 Combine the two versions of this difference (@pxref{Combining in
1184 Emerge}).
1186 @item x f
1187 Show the names of the files/buffers Emerge is operating on, in a Help
1188 window.  (Use @kbd{C-u l} to restore windows.)
1190 @item x j
1191 Join this difference with the following one.
1192 (@kbd{C-u x j} joins this difference with the previous one.)
1194 @item x s
1195 Split this difference into two differences.  Before you use this
1196 command, position point in each of the three buffers at the place where
1197 you want to split the difference.
1199 @item x t
1200 Trim identical lines off the top and bottom of the difference.
1201 Such lines occur when the A and B versions are
1202 identical but differ from the ancestor version.
1203 @end table
1205 @node Exiting Emerge
1206 @subsection Exiting Emerge
1208   The @kbd{q} command (@code{emerge-quit}) finishes the merge, storing
1209 the results into the output file if you specified one.  It restores the
1210 A and B buffers to their proper contents, or kills them if they were
1211 created by Emerge and you haven't changed them.  It also disables the
1212 Emerge commands in the merge buffer, since executing them later could
1213 damage the contents of the various buffers.
1215   @kbd{C-]} aborts the merge.  This means exiting without writing the
1216 output file.  If you didn't specify an output file, then there is no
1217 real difference between aborting and finishing the merge.
1219   If the Emerge command was called from another Lisp program, then its
1220 return value is @code{t} for successful completion, or @code{nil} if you
1221 abort.
1223 @node Combining in Emerge
1224 @subsection Combining the Two Versions
1226   Sometimes you want to keep @emph{both} alternatives for a particular
1227 difference.  To do this, use @kbd{x c}, which edits the merge buffer
1228 like this:
1230 @example
1231 @group
1232 #ifdef NEW
1233 @var{version from A buffer}
1234 #else /* not NEW */
1235 @var{version from B buffer}
1236 #endif /* not NEW */
1237 @end group
1238 @end example
1240 @noindent
1241 @vindex emerge-combine-versions-template
1242 While this example shows C preprocessor conditionals delimiting the two
1243 alternative versions, you can specify the strings to use by setting
1244 the variable @code{emerge-combine-versions-template} to a string of your
1245 choice.  In the string, @samp{%a} says where to put version A, and
1246 @samp{%b} says where to put version B.  The default setting, which
1247 produces the results shown above, looks like this:
1249 @example
1250 @group
1251 "#ifdef NEW\n%a#else /* not NEW */\n%b#endif /* not NEW */\n"
1252 @end group
1253 @end example
1255 @node Fine Points of Emerge
1256 @subsection Fine Points of Emerge
1258   During the merge, you mustn't try to edit the A and B buffers yourself.
1259 Emerge modifies them temporarily, but ultimately puts them back the way
1260 they were.
1262   You can have any number of merges going at once---just don't use any one
1263 buffer as input to more than one merge at once, since the temporary
1264 changes made in these buffers would get in each other's way.
1266   Starting Emerge can take a long time because it needs to compare the
1267 files fully.  Emacs can't do anything else until @code{diff} finishes.
1268 Perhaps in the future someone will change Emerge to do the comparison in
1269 the background when the input files are large---then you could keep on
1270 doing other things with Emacs until Emerge is ready to accept
1271 commands.
1273 @vindex emerge-startup-hook
1274   After setting up the merge, Emerge runs the hook
1275 @code{emerge-startup-hook} (@pxref{Hooks}).