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