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