]> code.delx.au - gnu-emacs/blob - doc/emacs/maintaining.texi
Merge from emacs-23; up to 2010-06-22T07:41:10Z!rgm@gnu.org
[gnu-emacs] / doc / emacs / maintaining.texi
1 @c This is part of the Emacs manual.
2 @c Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2011
3 @c Free Software Foundation, Inc.
4 @c See file emacs.texi for copying conditions.
5 @node Maintaining, Abbrevs, Building, Top
6 @chapter Maintaining Large Programs
7
8 This chapter describes Emacs features for maintaining large
9 programs.
10
11 @menu
12 * Version Control:: Using version control systems.
13 * Change Log:: Maintaining a change history for your program.
14 * Tags:: Go directly to any function in your program in one
15 command. Tags remembers which file it is in.
16 * EDE:: An integrated development environment for Emacs.
17 @ifnottex
18 * Emerge:: A convenient way of merging two versions of a program.
19 @end ifnottex
20 @end menu
21
22 @node Version Control
23 @section Version Control
24 @cindex version control
25
26 A @dfn{version control system} is a program that can record multiple
27 versions of a source file, storing information such as the creation
28 time of each version, who made it, and a description of what was
29 changed.
30
31 The Emacs version control interface is called @dfn{VC}. VC commands
32 work with several different version control systems; currently, it
33 supports GNU Arch, Bazaar, CVS, Git, Mercurial, Monotone, RCS,
34 SCCS/CSSC, and Subversion. Of these, the GNU project distributes CVS,
35 Arch, RCS, and Bazaar.
36
37 VC is enabled automatically whenever you visit a file governed by a
38 version control system. To disable VC entirely, set the customizable
39 variable @code{vc-handled-backends} to @code{nil}
40 @iftex
41 (@pxref{Customizing VC,,,emacs-xtra, Specialized Emacs Features}).
42 @end iftex
43 @ifnottex
44 (@pxref{Customizing VC}).
45 @end ifnottex
46
47 @menu
48 * Introduction to VC:: How version control works in general.
49 * VC Mode Line:: How the mode line shows version control status.
50 * Basic VC Editing:: How to edit a file under version control.
51 * Log Buffer:: Features available in log entry buffers.
52 * Old Revisions:: Examining and comparing old versions.
53 * Secondary VC Commands:: The commands used a little less frequently.
54 * VC Directory Mode:: Listing files managed by version control.
55 * Branches:: Multiple lines of development.
56 @ifnottex
57 * Remote Repositories:: Efficient access to remote CVS servers.
58 * Revision Tags:: Symbolic names for revisions.
59 * Miscellaneous VC:: Various other commands and features of VC.
60 * Customizing VC:: Variables that change VC's behavior.
61 @end ifnottex
62 @end menu
63
64 @node Introduction to VC
65 @subsection Introduction to Version Control
66
67 VC allows you to use a version control system from within Emacs,
68 integrating the version control operations smoothly with editing. It
69 provides a uniform interface for common operations in many version
70 control operations.
71
72 Some uncommon or intricate version control operations, such as
73 altering repository settings, are not supported in VC. You should
74 perform such tasks outside Emacs, e.g. via the command line.
75
76 This section provides a general overview of version control, and
77 describes the version control systems that VC supports. You can skip
78 this section if you are already familiar with the version control system
79 you want to use.
80
81 @menu
82 * Why Version Control?:: Understanding the problems it addresses.
83 * Version Control Systems:: Supported version control back-end systems.
84 * VCS Concepts:: Words and concepts related to version control.
85 * VCS Merging:: How file conflicts are handled.
86 * VCS Changesets:: How changes are grouped.
87 * VCS Repositories:: Where version control repositories are stored.
88 * Types of Log File:: The VCS log in contrast to the ChangeLog.
89 @end menu
90
91 @node Why Version Control?
92 @subsubsection Understanding the problems it addresses
93
94 Version control systems provide you with three important
95 capabilities:
96
97 @itemize @bullet
98 @item
99 @dfn{Reversibility}: the ability to back up to a previous state if you
100 discover that some modification you did was a mistake or a bad idea.
101
102 @item
103 @dfn{Concurrency}: the ability to have many people modifying the same
104 collection of files knowing that conflicting modifications can be
105 detected and resolved.
106
107 @item
108 @dfn{History}: the ability to attach historical data to your data,
109 such as explanatory comments about the intention behind each change to
110 it. Even for a programmer working solo, change histories are an
111 important aid to memory; for a multi-person project, they are a
112 vitally important form of communication among developers.
113 @end itemize
114
115 @node Version Control Systems
116 @subsubsection Supported Version Control Systems
117
118 @cindex back end (version control)
119 VC currently works with many different version control systems,
120 which it refers to as @dfn{back ends}:
121
122 @itemize @bullet
123
124 @cindex SCCS
125 @item
126 SCCS was the first version control system ever built, and was long ago
127 superseded by more advanced ones. VC compensates for certain features
128 missing in SCCS (e.g., tag names for releases) by implementing them
129 itself. Other VC features, such as multiple branches, are simply
130 unavailable. Since SCCS is non-free, we recommend avoiding it.
131
132 @cindex CSSC
133 @item
134 CSSC is a free replacement for SCCS. You should use CSSC only if, for
135 some reason, you cannot use a more recent and better-designed version
136 control system.
137
138 @cindex RCS
139 @item
140 RCS is the free version control system around which VC was initially
141 built. It is relatively primitive: it cannot be used over the
142 network, and works at the level of individual files. Almost
143 everything you can do with RCS can be done through VC.
144
145 @cindex CVS
146 @item
147 CVS is the free version control system that was, until recently (circa
148 2008), used by the majority of free software projects. Nowadays, it
149 is slowly being superseded by newer systems. CVS allows concurrent
150 multi-user development either locally or over the network. Unlike
151 newer systems, it lacks support for atomic commits and file
152 moving/renaming. VC supports all basic editing operations under CVS.
153
154 @cindex SVN
155 @cindex Subversion
156 @item
157 Subversion (SVN) is a free version control system designed to be
158 similar to CVS but without its problems (e.g., it supports atomic
159 commits of filesets, and versioning of directories, symbolic links,
160 meta-data, renames, copies, and deletes).
161
162 @cindex GNU Arch
163 @cindex Arch
164 @item
165 GNU Arch is one of the earliest @dfn{distributed} version control
166 systems (the other being Monotone). @xref{VCS Concepts}, for a
167 description of distributed version control systems. It is no longer
168 under active development, and has been deprecated in favor of Bazaar.
169
170 @cindex git
171 @item
172 Git is a distributed version control system originally invented by
173 Linus Torvalds to support development of Linux (his kernel). VC
174 supports many common git operations, but others, such as repository
175 syncing, must be done from the command line.
176
177 @cindex hg
178 @cindex Mercurial
179 @item
180 Mercurial (hg) is a distributed version control system broadly
181 resembling git. VC supports most Mercurial commands, with the
182 exception of repository sync operations.
183
184 @cindex bzr
185 @cindex Bazaar
186 @item
187 Bazaar (bzr) is a distributed version control system that supports
188 both repository-based and distributed versioning. VC supports most
189 basic editing operations under Bazaar.
190 @end itemize
191
192 Previous versions of VC supported a version control system known as
193 Meta-CVS. This support was dropped due to limited interest from users
194 and developers.
195
196 @node VCS Concepts
197 @subsubsection Concepts of Version Control
198
199 @cindex repository
200 @cindex registered file
201 When a file is under version control, we say that it is
202 @dfn{registered} in the version control system. The system has a
203 @dfn{repository} which stores both the file's present state and its
204 change history---enough to reconstruct the current version or any
205 earlier version. The repository also contains other information, such
206 as @dfn{log entries} that describe the changes made to each file.
207
208 @cindex work file
209 @cindex checking out files
210 The copy of a version-controlled file that you actually edit is
211 called the @dfn{work file}. You can change each work file as you
212 would an ordinary file. After you are done with a set of changes, you
213 @dfn{commit} (or @dfn{check in}) the changes; this records the changes
214 in the repository, along with a descriptive log entry.
215
216 @cindex revision
217 @cindex revision ID
218 A copy of a file stored in a repository is called a @dfn{revision}.
219 The history of a file is a sequence of revisions. Each revision is
220 named by a @dfn{revision ID}. The format of the revision ID depends
221 on the version control system; in the simplest case, it is just an
222 integer.
223
224 To go beyond these basic concepts, you will need to understand three
225 aspects in which version control systems differ. As explained in the
226 next three sections, they can be lock-based or merge-based; file-based
227 or changeset-based; and centralized or decentralized. VC handles all
228 these modes of operation, but it cannot hide the differences.
229
230 @node VCS Merging
231 @subsubsection Merge-based vs lock-based Version Control
232 @cindex locking versus merging
233
234 A version control system typically has some mechanism to coordinate
235 between users who want to change the same file. There are two ways to
236 do this: merging and locking.
237
238 In a version control system that uses merging, each user may check
239 out and modify a work file at any time. The system lets you
240 @dfn{merge} your work file, which may contain changes that have not
241 been committed, with the latest changes that others have committed.
242
243 Older version control systems use a @dfn{locking} scheme instead.
244 Here, work files are normally read-only. To edit a file, you ask the
245 version control system to make it writable for you by @dfn{locking}
246 it; only one user can lock a given file at any given time. This
247 procedure is analogous to, but different from, the locking that Emacs
248 uses to detect simultaneous editing of ordinary files
249 (@pxref{Interlocking}). When you commit your changes, that unlocks
250 the file, and the work file becomes read-only again. Other users may
251 then lock the file to make their own changes.
252
253 Both locking and merging systems can have problems when multiple
254 users try to modify the same file at the same time. Locking systems
255 have @dfn{lock conflicts}; a user may try to check a file out and be
256 unable to because it is locked. In merging systems, @dfn{merge
257 conflicts} happen when you commit a change to a file that conflicts
258 with a change committed by someone else after your checkout. Both
259 kinds of conflict have to be resolved by human judgment and
260 communication. Experience has shown that merging is superior to
261 locking, both in convenience to developers and in minimizing the
262 number and severity of conflicts that actually occur.
263
264 SCCS always uses locking. RCS is lock-based by default but can be
265 told to operate in a merging style. CVS and Subversion are
266 merge-based by default but can be told to operate in a locking mode.
267 Distributed version control systems, such as GNU Arch, git, and
268 Mercurial, are exclusively merging-based.
269
270 VC mode supports both locking and merging version control. The
271 terms ``commit'' and ``update'' are used in newer version control
272 systems; older lock-based systems use the terms ``check in'' and
273 ``check out''. VC hides the differences between them as much as
274 possible.
275
276 @node VCS Changesets
277 @subsubsection Changeset-based vs File-based Version Control
278
279 @cindex changesets
280 On SCCS, RCS, CVS, and other early version control systems, version
281 control operations are @dfn{file-based}: each file has its own comment
282 and revision history separate from that of all other files. Newer
283 systems, beginning with Subversion, are @dfn{changeset-based}: a
284 checkin may include changes to several files, and the entire set of
285 changes is handled as a unit. Any comment associated with the change
286 does not belong to a single file, but to the changeset itself.
287
288 Changeset-based version control is more flexible and powerful than
289 file-based version control; usually, when a change to multiple files
290 has to be reversed, it's good to be able to easily identify and remove
291 all of it.
292
293 @node VCS Repositories
294 @subsubsection Decentralized vs Centralized Repositories
295
296 @cindex centralized version control
297 @cindex decentralized version control
298 Early version control systems were designed around a
299 @dfn{centralized} model in which each project has only one repository
300 used by all developers. SCCS, RCS, CVS, and Subversion share this
301 kind of model. One of its drawbacks is that the repository is a choke
302 point for reliability and efficiency.
303
304 GNU Arch pioneered the concept of @dfn{decentralized} version
305 control, later implemented in git, Mercurial, and Bazaar. A project
306 may have several different repositories, and these systems support a
307 sort of super-merge between repositories that tries to reconcile their
308 change histories. In effect, there is one repository for each
309 developer, and repository merges take the place of commit operations.
310
311 VC helps you manage the traffic between your personal workfiles and
312 a repository. Whether the repository is a single master, or one of a
313 network of peer repositories, is not something VC has to care about.
314
315 @node Types of Log File
316 @subsubsection Types of Log File
317 @cindex types of log file
318 @cindex log File, types of
319 @cindex version control log
320
321 Projects that use a version control system can have two types of log
322 for changes. One is the log maintained by the version control system:
323 each time you commit a change, you fill out a @dfn{log entry} for the
324 change (@pxref{Log Buffer}). This is called the @dfn{version control
325 log}.
326
327 The other kind of log is the file @file{ChangeLog} (@pxref{Change
328 Log}). It provides a chronological record of all changes to a large
329 portion of a program---typically one directory and its subdirectories.
330 A small program would use one @file{ChangeLog} file; a large program
331 may have a @file{ChangeLog} file in each major directory.
332 @xref{Change Log}. Programmers have used change logs since long
333 before version control systems.
334
335 Changeset-based version systems typically maintain a changeset-based
336 modification log for the entire system, which makes change log files
337 somewhat redundant. One advantage that they retain is that it is
338 sometimes useful to be able to view the transaction history of a
339 single directory separately from those of other directories.
340
341 A project maintained with version control can use just the version
342 control log, or it can use both kinds of logs. It can handle some
343 files one way and some files the other way. Each project has its
344 policy, which you should follow.
345
346 When the policy is to use both, you typically want to write an entry
347 for each change just once, then put it into both logs. You can write
348 the entry in @file{ChangeLog}, then copy it to the log buffer with
349 @kbd{C-c C-a} when checking in the change (@pxref{Log Buffer}). Or
350 you can write the entry in the log buffer while checking in the
351 change, and later use the @kbd{C-x v a} command to copy it to
352 @file{ChangeLog}
353 @iftex
354 (@pxref{Change Logs and VC,,,emacs-xtra, Specialized Emacs Features}).
355 @end iftex
356 @ifnottex
357 (@pxref{Change Logs and VC}).
358 @end ifnottex
359
360 @node VC Mode Line
361 @subsection Version Control and the Mode Line
362 @cindex VC, mode line indicator
363
364 When you visit a file that is under version control, Emacs indicates
365 this on the mode line. For example, @samp{Bzr-1223} says that Bazaar
366 is used for that file, and the current revision ID is 1223.
367
368 The character between the back-end name and the revision ID
369 indicates the status of the work file. In a merge-based version
370 control system, a @samp{-} character indicates that the work file is
371 unmodified, and @samp{:} indicates that it has been modified.
372 @samp{!} indicates that the file contains conflicts as result of a
373 recent merge operation (@pxref{Merging}), or that the file was removed
374 from the version control. Finally, @samp{?} means that the file is
375 under version control, but is missing from the working tree.
376
377 In a lock-based system, @samp{-} indicates an unlocked file, and
378 @samp{:} a locked file; if the file is locked by another user (for
379 instance, @samp{jim}), that is displayed as @samp{RCS:jim:1.3}.
380 @samp{@@} means that the file was locally added, but not yet committed
381 to the master repository.
382
383 On a graphical display, you can move the mouse over this mode line
384 indicator to pop up a ``tool-tip'', which displays a more verbose
385 description of the version control status. Pressing @kbd{Mouse-1}
386 over the indicator pops up a menu of VC commands, identical to
387 @samp{Tools / Version Control} on the menu bar.
388
389 @vindex auto-revert-check-vc-info
390 When Auto Revert mode (@pxref{Reverting}) reverts a buffer that is
391 under version control, it updates the version control information in
392 the mode line. However, Auto Revert mode may not properly update this
393 information if the version control status changes without changes to
394 the work file, from outside the current Emacs session. If you set
395 @code{auto-revert-check-vc-info} to @code{t}, Auto Revert mode updates
396 the version control status information every
397 @code{auto-revert-interval} seconds, even if the work file itself is
398 unchanged. The resulting CPU usage depends on the version control
399 system, but is usually not excessive.
400
401 @node Basic VC Editing
402 @subsection Basic Editing under Version Control
403
404 @cindex filesets, VC
405 Most VC commands operate on @dfn{VC filesets}. A VC fileset is a
406 collection of one or more files that a VC operation acts on. When you
407 type VC commands in a buffer visiting a version-controlled file, the
408 VC fileset is simply that one file. When you type them in a VC
409 Directory buffer, and some files in it are marked, the VC fileset
410 consists of the marked files (@pxref{VC Directory Mode}).
411
412 The principal VC command is an all-purpose command, @kbd{C-x v v}
413 (@code{vc-next-action}), that performs either registration, locking,
414 merging or a check-in (depending on the situation) on the current VC
415 fileset. You can use @kbd{C-x v v} in a file-visiting buffer or in a
416 VC Directory buffer.
417
418 @table @kbd
419 @itemx C-x v v
420 Perform the appropriate next version control operation on the VC fileset.
421 @end table
422
423 @findex vc-next-action
424 @kindex C-x v v
425 The precise action of @kbd{C-x v v} depends on the state of the VC
426 fileset, and whether the version control system uses locking or
427 merging. This is described in detail in the subsequent sections.
428
429 VC filesets are the way that VC mode bridges the gap between
430 file-based and changeset-based version control systems. They are,
431 essentially, a way to pass multiple file arguments as a group to
432 version control commands. For example, on Subversion, a checkin with
433 a multi-file VC fileset becomes a joint commit, as though you had
434 typed @command{svn commit} with those file arguments at the shell
435 command line. All files in a VC fileset must be under the same
436 version control system; if they are not, Emacs signals an error when
437 you attempt to execute a command on the fileset.
438
439 VC filesets are distinct from the ``named filesets'' used for
440 viewing and visiting files in functional groups (@pxref{Filesets}).
441 Unlike named filesets, VC filesets are not named and don't persist
442 across sessions.
443
444 @menu
445 * VC With A Merging VCS:: Without locking: default mode for CVS.
446 * VC With A Locking VCS:: RCS in its default mode, SCCS, and optionally CVS.
447 * Advanced C-x v v:: Advanced features available with a prefix argument.
448 @end menu
449
450 @node VC With A Merging VCS
451 @subsubsection Basic Version Control with Merging
452
453 When your version control system is merging-based (the default for
454 CVS and all newer version control systems), work files are always
455 writable; you need not do anything special to begin editing a file.
456 The status indicator on the mode line is @samp{-} if the file is
457 unmodified; it flips to @samp{:} as soon as you save any changes
458 (@pxref{VC Mode Line}).
459
460 Here is what @kbd{C-x v v} does when using a merging-based system:
461
462 @itemize @bullet
463 @item
464 If the work file is in a directory that is not controlled by any
465 version control system, prompt for a repository type. Then, create a
466 version control repository of that type and register the file with it.
467
468 @item
469 If the work file is in a directory that is controlled by a version
470 control system but not registered with it, register the file.
471
472 @item
473 If the work file is the same as in the repository, do nothing.
474
475 @item
476 If you have not changed the work file, but some other user has checked
477 in changes to the repository, merge those changes into the work file.
478
479 @item
480 If you have made modifications to the work file, attempt to commit
481 the changes. To do this, Emacs first reads the log entry for the new
482 revision (@pxref{Log Buffer}). If some other user has committed
483 changes to the repository since you last checked it out, the checkin
484 fails. In that case, type @kbd{C-x v v} again to merge those changes
485 into your own work file; this puts the work file into a ``conflicted''
486 state. Type @kbd{C-x v v} to clear the ``conflicted'' state; VC then
487 regards the file as up-to-date and modified, and you can try to check
488 it in again.
489
490 To pick up any recent changes from the repository @emph{without}
491 trying to commit your own changes, type @kbd{C-x v m @key{RET}}.
492 @xref{Merging}.
493 @end itemize
494
495 These rules also apply when you use RCS in its ``non-locking'' mode,
496 except that changes are not automatically merged from the repository.
497 Nothing informs you if another user has committed changes in the same
498 file since you began editing it; when you commit your revision, his
499 changes are removed (however, they remain in the repository and are
500 thus not irrevocably lost). Therefore, you must verify that the
501 current revision is unchanged before checking in your changes. In
502 addition, locking is possible with RCS even in this mode: @kbd{C-x v
503 v} with an unmodified file locks the file, just as it does with RCS in
504 its normal locking mode (@pxref{VC With A Locking VCS}).
505
506 @node VC With A Locking VCS
507 @subsubsection Basic Version Control with Locking
508
509 Under a locking-based version control system (such as SCCS, and RCS
510 in its default mode), @kbd{C-x v v} does the following:
511
512 @itemize @bullet
513 @item
514 If the file is not locked, lock it and make it writable, so that you
515 can change it.
516
517 @item
518 If the file is locked by you, and contains changes, commit the
519 changes. In order to do this, Emacs first reads the log entry for the
520 new revision. @xref{Log Buffer}.
521
522 @item
523 If the file is locked by you, but you have not changed it since you
524 locked it, release the lock and makes the file read-only again.
525
526 @item
527 If the file is locked by some other user, ask whether you want to
528 ``steal the lock'' from that user. If you say yes, the file becomes
529 locked by you, but a message is sent to the person who had formerly
530 locked the file, to inform him of what has happened.
531 @end itemize
532
533 These rules also apply when you use CVS in locking mode, except
534 that CVS does not support stealing a lock.
535
536 @node Advanced C-x v v
537 @subsubsection Advanced Control in @kbd{C-x v v}
538
539 @cindex revision ID in version control
540 When you give a prefix argument to @code{vc-next-action} (@kbd{C-u
541 C-x v v}), it still performs the next logical version control
542 operation, but accepts additional arguments to specify precisely how
543 to do the operation.
544
545 @itemize @bullet
546 @item
547 If the file is modified (or locked), you can specify the revision ID
548 to use for the new version that you commit. This is one way to create
549 a new branch (@pxref{Branches}).
550
551 @item
552 If the file is not modified (and unlocked), you can specify the
553 revision to select; this lets you start working from an older
554 revision, or on another branch. If you do not enter any revision,
555 that takes you to the highest (``head'') revision on the current
556 branch; therefore @kbd{C-u C-x v v @key{RET}} is a convenient way to
557 get the latest version of a file from the repository.
558
559 @item
560 @cindex specific version control system
561 Instead of the revision ID, you can also specify the name of a
562 version control system. This is useful when one file is being managed
563 with two version control systems at the same time
564 @iftex
565 (@pxref{Local Version Control,,,emacs-xtra, Specialized Emacs
566 Features}).
567 @end iftex
568 @ifnottex
569 (@pxref{Local Version Control}).
570 @end ifnottex
571
572 @end itemize
573
574 @node Log Buffer
575 @subsection Features of the Log Entry Buffer
576
577 When you tell VC to commit a change, it pops up a buffer called
578 @samp{*VC-Log*}. In this buffer, you should write a @dfn{log entry}
579 describing the changes you have made (@pxref{Why Version Control?}).
580 After you are done, type @kbd{C-c C-c}; this exits the buffer and
581 commits the change, together with your log entry.
582
583 While in the @samp{*VC-Log*} buffer, you can write one or more
584 @dfn{header lines}, specifying additional information to be supplied
585 to the version control system. Each header line must occupy a single
586 line at the top of the buffer; the first line that is not a header
587 line is treated as the start of the log entry. For example, the
588 following header line states that the present change was not written
589 by you, but by another developer:
590
591 @smallexample
592 Author: J. R. Hacker <jrh@@example.com>
593 @end smallexample
594
595 @noindent
596 Apart from the @samp{Author} header, Emacs recognizes the headers
597 @samp{Date} (a manually-specified commit time) and @samp{Fixes} (a
598 reference to a bug fixed by the change). Not all version control
599 systems recognize all headers: Bazaar recognizes all three headers,
600 while git, Mercurial, and Monotone recognizes only @samp{Author} and
601 @samp{Summary}. If you specify a header for a version control that
602 does not support it, the header is treated as part of the log entry.
603
604 @findex log-edit-show-files
605 @findex log-edit-show-diff
606 Type @kbd{C-c C-f} (@code{log-edit-show-files}) to display a list of
607 files in the current VC fileset. If you called @kbd{C-x v v} directly
608 from a work file, the fileset consists of that single file; if you
609 called @kbd{C-x v v} from a VC directory buffer (@pxref{VC Directory
610 Mode}), the fileset may consist of multiple files.
611
612 @findex log-edit-insert-changelog
613 Type @kbd{C-c C-d} (@code{log-edit-show-diff}) to show a @dfn{diff}
614 of the changes you have made (i.e., the differences between the work
615 file and the repository revision from which you started editing).
616 @xref{Old Revisions}.
617
618 If the current VC fileset includes one or more @file{ChangeLog}
619 files (@pxref{Change Log}), type @kbd{C-c C-a}
620 (@code{log-edit-insert-changelog}) to pull the relevant entries into
621 the @samp{*VC-Log*} buffer. If the topmost item in each
622 @file{ChangeLog} was made under your user name on the current date,
623 this command searches that item for entries that match the file(s) to
624 be committed; if found, these entries are inserted.
625 @iftex
626 @xref{Change Logs and VC,,,emacs-xtra, Specialized Emacs Features},
627 @end iftex
628 @ifnottex
629 @xref{Change Logs and VC},
630 @end ifnottex
631 for the opposite way of working---generating ChangeLog entries from
632 the revision control log.
633
634 To abort a check-in, just @strong{don't} type @kbd{C-c C-c} in that
635 buffer. You can switch buffers and do other editing. As long as you
636 don't try to commit another file, the entry you were editing remains
637 in the @samp{*VC-Log*} buffer, and you can go back to that buffer at
638 any time to complete the check-in.
639
640 If you change several source files for the same reason, it is often
641 convenient to specify the same log entry for many of the files. (This
642 is the normal way to do things on a changeset-oriented system, where
643 comments are attached to changesets rather than the history of
644 individual files.) The most convenient way to do this is to mark all
645 the files in VC Directory Mode and commit from there; the log buffer
646 will carry the fileset information with it and do a group commit when
647 you type @kbd{C-c C-c}.
648
649 You can also browse the history of previous log entries to duplicate
650 a checkin comment. This can be useful when you want several files to
651 have checkin comments that vary only slightly from each other. The
652 commands @kbd{M-n}, @kbd{M-p}, @kbd{M-s} and @kbd{M-r} for doing this
653 work just like the minibuffer history commands (except that these
654 versions are used outside the minibuffer).
655
656 @vindex vc-log-mode-hook
657 Each time you commit a change, the log entry buffer is put into VC
658 Log Edit mode, which involves running two hooks: @code{text-mode-hook}
659 and @code{vc-log-mode-hook}. @xref{Hooks}.
660
661 @node Old Revisions
662 @subsection Examining And Comparing Old Revisions
663
664 One of the convenient features of version control is the ability
665 to examine any revision of a file, or compare two revisions.
666
667 @table @kbd
668 @item C-x v ~
669 Prompt for a revision of the current file, and visit it in a buffer of
670 its own (@code{vc-revision-other-window}).
671
672 @item C-x v =
673 Compare the files in the current fileset with the working revision(s)
674 you started from (@code{vc-diff}). With a prefix argument, prompt for
675 two revisions of the current fileset and compare them. You can call
676 this command from a Dired buffer (@pxref{Dired}).
677
678 @item C-x v D
679 Compare the entire tree corresponding to the current fileset with the
680 tree you started from (@code{vc-root-diff}). With a prefix argument,
681 prompt for two revisions and compare their trees.
682
683 @item C-x v g
684 Display an annotated version of the file: for each line, show the
685 latest revision in which it was modified (@code{vc-annotate}).
686 @end table
687
688 @findex vc-revision-other-window
689 @kindex C-x v ~
690 To examine an old revision, visit the work file and type @kbd{C-x v
691 ~ @var{revision} @key{RET}} (@code{vc-revision-other-window}). Here,
692 @var{revision} is either the desired revision ID (@pxref{VCS
693 Concepts}), or the name of a tag or branch
694 @iftex
695 (@pxref{Tags,,,emacs-xtra, Specialized Emacs Features}).
696 @end iftex
697 @ifnottex
698 (@pxref{Tags}).
699 @end ifnottex
700 This command puts the text of the old revision in a file named
701 @file{@var{filename}.~@var{revision}~}, and visits it in its own
702 buffer in a separate window.
703
704 @findex vc-diff
705 @kindex C-x v =
706 @kbd{C-x v =} (@code{vc-diff}) compares each file in the current VC
707 fileset (saving them if necessary) with the repository revision(s)
708 from which you started editing. Note that the latter may or may not
709 be the latest revision of the file(s).
710
711 The diff is displayed in another window, in a Diff mode buffer
712 (@pxref{Diff Mode}) named @file{*vc-diff*}. In this buffer, the
713 @kbd{g} (@code{revert-buffer}) command performs the file comparison
714 again, generating a new diff.
715
716 @findex vc-diff
717 @kindex C-u C-x v =
718 To compare two arbitrary revisions of the current VC fileset, call
719 @code{vc-diff} with a prefix argument: @kbd{C-u C-x v =}. This
720 prompts for two revision IDs, using the minibuffer, and displays the
721 diff in a special buffer in another window. Instead of providing a
722 revision ID, you can give an empty input, which specifies the current
723 contents of the work file; or a tag or branch name
724 @iftex
725 (@pxref{Tags,,,emacs-xtra, Specialized Emacs Features}).
726 @end iftex
727 @ifnottex
728 (@pxref{Tags}).
729 @end ifnottex
730 If your version control system is file-based (e.g. CVS) rather than
731 changeset-based (Subversion, GNU Arch, git, Mercurial), supplying a
732 revision ID for a multi-file fileset (as opposed to a symbolic tag
733 name) is unlikely to return diffs that are connected in any meaningful
734 way.
735
736 The command @kbd{C-x v D} (@code{vc-root-diff}) is similar to
737 @kbd{C-x v =}, but it compares the entire tree associated with the
738 current VC fileset with the tree you started with. This means all the
739 files controlled by the current version control repository, even those
740 that are not part of the current VC fileset.
741
742 If you invoke @kbd{C-x v =} or @kbd{C-u C-x v =} from a buffer that
743 is neither visiting a version-controlled file nor a VC directory
744 buffer, these commands generate a diff of all registered files in the
745 current directory and its subdirectories.
746
747 @findex vc-ediff
748 The function @code{vc-ediff} works like @code{vc-diff} and provides a way to
749 visually compare two revisions of a file in an Ediff session, @pxref{Top,
750 Ediff, ediff, The Ediff Manual}. It compares the file associated with the
751 current buffer with the last repository revision. To compare two arbitrary
752 revisions of the current file, call @code{vc-ediff} with a prefix argument.
753
754 @vindex vc-diff-switches
755 @vindex vc-rcs-diff-switches
756 @kbd{C-x v =} works by running a variant of the @code{diff} utility
757 designed to work with the version control system in use. The options
758 to pass to the @code{diff} command are taken from the first non-@code{nil}
759 value of @code{vc-@var{backend}-diff-switches}, @code{vc-diff-switches},
760 and @code{diff-switches} (@pxref{Comparing Files}), in that order.
761 Since @code{nil} means to check the next variable in the sequence,
762 either of the first two may use the value @code{t} to mean no switches at all.
763 Most of the @samp{vc@dots{}diff-switches} variables default to
764 @code{nil}, but some default to @code{t}. These are for those version
765 control systems (e.g. SVN) whose @code{diff} implementations do not
766 accept common options (e.g. @samp{-c}) likely to be in
767 @code{diff-switches}.
768
769 The buffer produced by @kbd{C-x v =} supports the commands of
770 Compilation mode (@pxref{Compilation Mode}), such as @kbd{C-x `} and
771 @kbd{C-c C-c}, in both the ``old'' and ``new'' text, and they always
772 find the corresponding locations in the current work file. (Older
773 revisions are not, in general, present as files on your disk.)
774
775 @findex vc-annotate
776 @kindex C-x v g
777 For some back ends, you can display the file @dfn{annotated} with
778 per-line revision information, by typing @kbd{C-x v g}
779 (@code{vc-annotate}). This creates a new buffer (the ``annotate
780 buffer'') displaying the file's text, with each part colored to show
781 how old it is. Text colored red is new, blue means old, and
782 intermediate colors indicate intermediate ages. By default, the color
783 is scaled over the full range of ages, such that the oldest changes
784 are blue, and the newest changes are red.
785
786 When you give a prefix argument to this command, Emacs reads two
787 arguments using the minibuffer: the ID of which revision to display and
788 annotate (instead of the current file contents), and the time span in
789 days the color range should cover.
790
791 From the annotate buffer, these and other color scaling options are
792 available from the @samp{VC-Annotate} menu. In this buffer, you can
793 also use the following keys to browse the annotations of past revisions,
794 view diffs, or view log entries:
795
796 @table @kbd
797 @item p
798 Annotate the previous revision, that is to say, the revision before
799 the one currently annotated. A numeric prefix argument is a repeat
800 count, so @kbd{C-u 10 p} would take you back 10 revisions.
801
802 @item n
803 Annotate the next revision---the one after the revision currently
804 annotated. A numeric prefix argument is a repeat count.
805
806 @item j
807 Annotate the revision indicated by the current line.
808
809 @item a
810 Annotate the revision before the one indicated by the current line.
811 This is useful to see the state the file was in before the change on
812 the current line was made.
813
814 @item f
815 Show in a buffer the file revision indicated by the current line.
816
817 @item d
818 Display the diff between the current line's revision and the previous
819 revision. This is useful to see what the current line's revision
820 actually changed in the file.
821
822 @item D
823 Display the diff between the current line's revision and the previous
824 revision for all files in the changeset (for VC systems that support
825 changesets). This is useful to see what the current line's revision
826 actually changed in the tree.
827
828 @item l
829 Show the log of the current line's revision. This is useful to see
830 the author's description of the changes in the revision on the current
831 line.
832
833 @item w
834 Annotate the working revision--the one you are editing. If you used
835 @kbd{p} and @kbd{n} to browse to other revisions, use this key to
836 return to your working revision.
837
838 @item v
839 Toggle the annotation visibility. This is useful for looking just at
840 the file contents without distraction from the annotations.
841 @end table
842
843 @node Secondary VC Commands
844 @subsection The Secondary Commands of VC
845
846 This section explains the secondary commands of VC.
847
848 @menu
849 * Registering:: Putting a file under version control.
850 * VC Change Log:: Viewing the VC Change Log.
851 * VC Undo:: Canceling changes before or after check-in.
852 @end menu
853
854 @node Registering
855 @subsubsection Registering a File for Version Control
856
857 @kindex C-x v i
858 @findex vc-register
859 You can put any file under version control by simply visiting it, and
860 then typing @w{@kbd{C-x v i}} (@code{vc-register}).
861
862 @table @kbd
863 @item C-x v i
864 Register the visited file for version control.
865 @end table
866
867 To register the file, Emacs must choose which version control system
868 to use for it. If the file's directory already contains files
869 registered in a version control system, Emacs uses that system. If
870 there is more than one system in use for a directory, Emacs uses the
871 one that appears first in @code{vc-handled-backends}
872 @iftex
873 (@pxref{Customizing VC,,,emacs-xtra, Specialized Emacs Features}).
874 @end iftex
875 @ifnottex
876 (@pxref{Customizing VC}).
877 @end ifnottex
878 On the other hand, if there are no files already registered, Emacs uses
879 the first system from @code{vc-handled-backends} that could register
880 the file (for example, you cannot register a file under CVS if its
881 directory is not already part of a CVS tree); with the default value
882 of @code{vc-handled-backends}, this means that Emacs uses RCS in this
883 situation.
884
885 If locking is in use, @kbd{C-x v i} leaves the file unlocked and
886 read-only. Type @kbd{C-x v v} if you wish to start editing it. After
887 registering a file with CVS, you must subsequently commit the initial
888 revision by typing @kbd{C-x v v}. Until you do that, the revision ID
889 appears as @samp{@@@@} in the mode line.
890
891 @vindex vc-default-init-revision
892 @cindex initial revision ID to register
893 The default initial revision ID for a newly registered file
894 varies by what VCS you are using; normally it will be 1.1 on VCSes
895 that use dot-pair revision IDs and 1 on VCSes that use monotonic IDs.
896 You can specify a different default by setting the variable
897 @code{vc-default-init-revision}, or you can give @kbd{C-x v i} a
898 numeric argument; then it reads the initial revision ID for this
899 particular file using the minibuffer.
900
901 @c See http://debbugs.gnu.org/9745
902 @c @vindex vc-initial-comment
903 @c If @code{vc-initial-comment} is non-@code{nil}, @kbd{C-x v i} reads an
904 @c initial comment to describe the purpose of this source file. Reading
905 @c the initial comment works like reading a log entry (@pxref{Log Buffer}).
906
907 @node VC Change Log
908 @subsubsection VC Change Log
909
910 @table @kbd
911 @item C-x v l
912 Display revision control state and change history
913 (@code{vc-print-log}).
914
915 @item C-x v L
916 Display the change history for the current repository
917 (@code{vc-print-root-log}).
918
919 @item C-x v I
920 Display the changes that will be received with a pull operation
921 (@code{vc-log-incoming}).
922
923 @item C-x v O
924 Display the changes that will be sent by the next push operation
925 (@code{vc-log-outgoing}).
926 @end table
927
928 @kindex C-x v l
929 @findex vc-print-log
930 The command @kbd{C-x v l} (@code{vc-print-log}) displays a buffer
931 named @samp{*vc-change-log*} in a new window. This buffer lists the
932 changes to the current file, including the associated log entries.
933 (These are the log entries associated with the version control system,
934 i.e. the ones you enter via the @samp{*VC-Log*} buffer. @xref{Log
935 Buffer}.) Point is centered at the revision of the file currently
936 being visited. With a prefix argument, the command prompts for the
937 revision to center on, and the maximum number of revisions to display.
938 You can call this command from a Dired buffer (@pxref{Dired}).
939
940 @findex vc-print-root-log
941 Type @kbd{C-x v L} (@code{vc-print-root-log}) to display a
942 @samp{*vc-change-log*} buffer showing the history of the
943 version-controlled directory tree as a whole. With a prefix argument,
944 the command prompts for the maximum number of revisions to display.
945 RCS, SCCS, and CVS do not support this feature.
946
947 On a distributed version control system, the @kbd{C-x v I}
948 (@code{vc-log-incoming}) command displays a log buffer showing the
949 changes that will be applied, the next time you run the version
950 control system's ``pull'' command to get new revisions from another
951 repository. This other repository is the default one from which
952 changes are pulled, as defined by the version control system; with a
953 prefix argument, @code{vc-log-incoming} prompts for a specific
954 repository from which changes would be pulled, and lists the changes
955 accordingly. Similarly, @kbd{C-x v O} (@code{vc-log-outgoing}) shows
956 the changes that will be sent to another repository, the next time you
957 run the ``push'' command; with a prefix argument, it prompts for a
958 specific repository to which changes would be pushed.
959
960 In the @samp{*vc-change-log*} buffer, you can use the following keys
961 to move between the logs of revisions and of files, to view past
962 revisions, to modify change comments, to view annotations and to view
963 diffs:
964
965 @table @kbd
966 @item p
967 Move to the previous revision-item in the buffer. (Revision entries in the log
968 buffer are usually in reverse-chronological order, so the previous
969 revision-item usually corresponds to a newer revision.) A numeric
970 prefix argument is a repeat count.
971
972 @item n
973 Move to the next revision-item (which most often corresponds to the
974 previous revision of the file). A numeric prefix argument is a repeat
975 count.
976
977 @item P
978 Move to the log of the previous file, when the logs of multiple files
979 are in the log buffer (@pxref{VC Directory Mode}). Otherwise, just
980 move to the beginning of the log. A numeric prefix argument is a
981 repeat count, so @kbd{C-u 10 P} would move backward 10 files.
982
983 @item N
984 Move to the log of the next file, when the logs of multiple files are
985 in the log buffer (@pxref{VC Directory Mode}). It also takes a
986 numeric prefix argument as a repeat count.
987
988 @item a
989 Annotate the revision indicated by the current line.
990
991 @item e
992 Modify the change comment displayed at point. Note that not all VC
993 systems support modifying change comments.
994
995 @item f
996 Visit the revision indicated at the current line, like typing @kbd{C-x
997 v ~} and specifying this revision's ID (@pxref{Old Revisions}).
998
999 @item d
1000 Display the diff (@pxref{Comparing Files}) between the revision
1001 indicated at the current line and the next earlier revision. This is
1002 useful to see what actually changed in the file when the revision
1003 indicated on the current line was committed.
1004
1005 @item D
1006 Display the changeset diff (@pxref{Comparing Files}) between the
1007 revision indicated at the current line and the next earlier revision.
1008 This is useful to see all the changes to all files that the revision
1009 indicated on the current line did when it was committed.
1010 @end table
1011
1012 @vindex vc-log-show-limit
1013 Because fetching many log entries can be slow, the
1014 @samp{*vc-change-log*} buffer displays no more than 2000 revisions by
1015 default. The variable @code{vc-log-show-limit} specifies this limit;
1016 if you set the value to zero, that removes the limit. You can also
1017 increase the number of revisions shown in an existing
1018 @samp{*vc-change-log*} buffer by clicking on the @samp{Show 2X
1019 entries} or @samp{Show unlimited entries} buttons at the end of the
1020 buffer. However, RCS, SCCS, and CVS do not support this feature.
1021
1022 @node VC Undo
1023 @subsubsection Undoing Version Control Actions
1024
1025 @table @kbd
1026 @item C-x v u
1027 Revert the buffer and the file to the working revision from which you started
1028 editing the file.
1029
1030 @item C-x v c
1031 Remove the last-entered change from the master for the visited file.
1032 This undoes your last check-in.
1033 @end table
1034
1035 @kindex C-x v u
1036 @findex vc-revert-buffer
1037 If you want to discard your current set of changes and revert to the
1038 working revision from which you started editing the file, use @kbd{C-x
1039 v u} (@code{vc-revert-buffer}). If the version control system is
1040 locking-based, this leaves the file unlocked, and you must lock it
1041 again before making new changes. @kbd{C-x v u} requires confirmation,
1042 unless it sees that you haven't made any changes with respect to the
1043 master copy of the working revision.
1044
1045 @kbd{C-x v u} is also the command to unlock a file if you lock it and
1046 then decide not to change it.
1047
1048 @kindex C-x v c
1049 @findex vc-rollback
1050 To cancel a change that you already committed, use @kbd{C-x v c}
1051 (@code{vc-rollback}). This command discards all record of the most
1052 recent checked-in revision, but only if your work file corresponds to
1053 that revision---you cannot use @kbd{C-x v c} to cancel a revision that
1054 is not the latest on its branch. Note that many version control
1055 systems do not support rollback at all; this command is something of a
1056 historical relic.
1057
1058 @node VC Directory Mode
1059 @subsection VC Directory Mode
1060
1061 @kindex C-x v d
1062 @findex vc-dir
1063 When you are working on a large program, it is often useful to find
1064 out which files have changed within an entire directory tree, or to
1065 view the status of all files under version control at once, and to
1066 perform version control operations on collections of files. You can
1067 use the command @kbd{C-x v d} (@code{vc-dir}) to make a directory
1068 listing that includes only files relevant for version control. This
1069 creates a @dfn{VC Directory buffer} and displays it in a separate
1070 window.
1071
1072 @cindex PCL-CVS
1073 @pindex cvs
1074 @cindex CVS directory mode
1075 The VC Directory buffer works with all the version control systems
1076 that VC supports. For CVS, Emacs also offers a more powerful facility
1077 called PCL-CVS. @xref{Top, , About PCL-CVS, pcl-cvs, PCL-CVS --- The
1078 Emacs Front-End to CVS}.
1079
1080 @menu
1081 * Buffer: VC Directory Buffer. What the buffer looks like and means.
1082 * Commands: VC Directory Commands. Commands to use in a VC directory buffer.
1083 @end menu
1084
1085 @node VC Directory Buffer
1086 @subsubsection The VC Directory Buffer
1087
1088 The VC Directory buffer contains a list of version-controlled files
1089 in the current directory and its subdirectories. Files which are
1090 up-to-date (have no local differences from the repository copy) are
1091 usually hidden; if all files in a subdirectory are up-to-date, the
1092 subdirectory is hidden as well. There is an exception to this rule:
1093 if VC mode detects that a file has changed to an up-to-date state
1094 since you last looked at it, that file and its state are shown.
1095
1096 If a directory uses more that one version control system, you can
1097 select which system to use for the @code{vc-dir} command by invoking
1098 @code{vc-dir} with a prefix argument: @kbd{C-u C-x v d}.
1099
1100 The line for an individual file shows the version control state of
1101 the file. Under RCS and SCCS, the name of the user locking the file
1102 is shown; under CVS, an abbreviated version of the @samp{cvs status}
1103 output is used. Here is an example using CVS:
1104
1105 @smallexample
1106 @group
1107 ./
1108 modified file1.c
1109 needs-update file2.c
1110 needs-merge file3.c
1111 @end group
1112 @end smallexample
1113
1114 @noindent
1115 In this example, @samp{file1.c} is modified with respect to the
1116 repository, and @samp{file2.c} is not. @samp{file3.c} is modified,
1117 but other changes have also been committed---you need to merge them
1118 with the work file before you can check it in.
1119
1120 @vindex vc-stay-local
1121 @vindex vc-cvs-stay-local
1122 In the above, if the repository were on a remote machine, VC only
1123 contacts it when the variable @code{vc-stay-local} (or
1124 @code{vc-cvs-stay-local}) is @code{nil}
1125 @iftex
1126 (@pxref{CVS Options,,,emacs-xtra, Specialized Emacs Features}).
1127 @end iftex
1128 @ifnottex
1129 (@pxref{CVS Options}).
1130 @end ifnottex
1131 This is because access to the repository may be slow, or you may be
1132 working offline and not have access to the repository at all. As a
1133 consequence, VC would not be able to tell you that @samp{file3.c} is
1134 in the ``merge'' state; you would learn that only when you try to
1135 check-in your modified copy of the file, or use a command such as
1136 @kbd{C-x v m}.
1137
1138 In practice, this is not a problem because CVS handles this case
1139 consistently whenever it arises. In VC, you'll simply get prompted to
1140 merge the remote changes into your work file first. The benefits of
1141 less network communication usually outweigh the disadvantage of not
1142 seeing remote changes immediately.
1143
1144 @vindex vc-directory-exclusion-list
1145 When a VC directory displays subdirectories it omits some that
1146 should never contain any files under version control. By default,
1147 this includes Version Control subdirectories such as @samp{RCS} and
1148 @samp{CVS}; you can customize this by setting the variable
1149 @code{vc-directory-exclusion-list}.
1150
1151 @node VC Directory Commands
1152 @subsubsection VC Directory Commands
1153
1154 VC Directory mode has a full set of navigation and marking commands
1155 for picking out filesets. Some of these are also available in a
1156 context menu invoked by @kbd{mouse-2}.
1157
1158 Up- and down-arrow keys move in the buffer; @kbd{n} and @kbd{p} also
1159 move vertically as in other list-browsing modes. @key{SPC} and
1160 @key{TAB} behave like down-arrow, and @key{BackTab} behaves like
1161 up-arrow.
1162
1163 Both @kbd{C-m} and @kbd{f} visit the file on the current
1164 line. @kbd{o} visits that file in another window. @kbd{q} dismisses
1165 the directory buffer.
1166
1167 @kbd{x} hides up-to-date files.
1168
1169 @kbd{m} marks the file or directory on the current line. If the
1170 region is active, @kbd{m} marks all the files in the region. There
1171 are some restrictions when marking: a file cannot be marked if any of
1172 its parent directories are marked, and a directory cannot be marked if
1173 any files in it or in its child directories are marked.
1174
1175 @kbd{M} marks all the files with the same VC state as the current
1176 file if the cursor is on a file. If the cursor is on a directory, it
1177 marks all child files. With a prefix argument: marks all files and
1178 directories.
1179
1180 @kbd{u} unmarks the file or directory on the current line. If the
1181 region is active, it unmarks all the files in the region.
1182
1183 @kbd{U} marks all the files with the same VC state as the current file
1184 if the cursor is on a file. If the cursor is on a directory, it
1185 unmarks all child files. With a prefix argument: unmarks all marked
1186 files and directories.
1187
1188 It is possible to do search, search and replace, incremental search,
1189 and incremental regexp search on multiple files. These commands will
1190 work on all the marked files or the current file if nothing is marked.
1191 If a directory is marked, the files in that directory shown in the VC
1192 directory buffer will be used.
1193
1194 @kbd{S} searches the marked files.
1195
1196 @kbd{Q} does a query replace on the marked files.
1197
1198 @kbd{M-s a C-s} does an incremental search on the marked files.
1199
1200 @kbd{M-s a C-M-s} does an incremental regular expression search
1201 on the marked files.
1202
1203 @cindex stashes in version control
1204 @cindex shelves in version control
1205 Commands are also accessible from the VC-dir menu. Note that some
1206 VC backends use the VC-dir menu to make available extra,
1207 backend-specific, commands. For example, Git and Bazaar allow you to
1208 manipulate @dfn{stashes} and @dfn{shelves}. (These provide a
1209 mechanism to temporarily store uncommitted changes somewhere out of
1210 the way, and bring them back at a later time.)
1211
1212 Normal VC commands with the @kbd{C-x v} prefix work in VC directory
1213 buffers. Some single-key shortcuts are available as well; @kbd{=},
1214 @kbd{+}, @kbd{l}, @kbd{i}, and @kbd{v} behave as through prefixed with
1215 @kbd{C-x v}.
1216
1217 The command @kbd{C-x v v} (@code{vc-next-action}) operates on all
1218 the marked files, so that you can commit several files at once. If
1219 the underlying VC supports atomic commits of multiple-file changesets,
1220 @kbd{C-x v v} with a selected set of modified but not committed files
1221 will commit all of them at once as a single changeset.
1222
1223 When @kbd{C-x v v} (@code{vc-next-action}) operates on multiple
1224 files, all of those files must be either in the same state or in
1225 compatible states (added, modified and removed states are considered
1226 compatible). Otherwise it signals an error. This differs from the
1227 behavior of older versions of VC, which did not have fileset
1228 operations and simply did @code{vc-next-action} on each file
1229 individually.
1230
1231 If any files are in a state that calls for commit, @kbd{C-x v v} reads a
1232 single log entry and uses it for the changeset as a whole. If the
1233 underling VCS is file- rather than changeset-oriented, the log entry
1234 will be replicated into the history of each file.
1235
1236 @node Branches
1237 @subsection Multiple Branches of a File
1238 @cindex branch (version control)
1239 @cindex trunk (version control)
1240
1241 One use of version control is to maintain multiple ``current''
1242 revisions of a file. For example, you might have different revisions of a
1243 program in which you are gradually adding various unfinished new
1244 features. Each such independent line of development is called a
1245 @dfn{branch}. VC allows you to create branches, switch between
1246 different branches, and merge changes from one branch to another.
1247 Please note, however, that branches are not supported for SCCS.
1248
1249 A file's main line of development is usually called the @dfn{trunk}.
1250 You can create multiple branches from the trunk. How the difference
1251 between trunk and branch is made visible is dependent on whether the
1252 VCS uses dot-pair or monotonic version IDs.
1253
1254 In VCSes with dot-pair revision IDs, the revisions on the trunk are
1255 normally IDed 1.1, 1.2, 1.3, etc. At any such revision, you can
1256 start an independent branch. A branch starting at revision 1.2 would
1257 have revision ID 1.2.1.1, and consecutive revisions on this branch
1258 would have IDs 1.2.1.2, 1.2.1.3, 1.2.1.4, and so on. If there is
1259 a second branch also starting at revision 1.2, it would consist of
1260 revisions 1.2.2.1, 1.2.2.2, 1.2.2.3, etc.
1261
1262 In VCSes with monotonic revision IDs, trunk revisions are IDed as
1263 1, 2, 3, etc. A branch from (say) revision 2 might start with 2.1 and
1264 continue through 2.2, 2.3, etc. But naming conventions for branches
1265 and subbranches vary widely on these systems, and some (like
1266 Mercurial) never depart from the monotonic integer sequence at all.
1267 Consult the documentation of the VCS you are using.
1268
1269 @cindex head revision
1270 If you omit the final component of a dot-pair revision ID, that is called a
1271 @dfn{branch ID}. It refers to the highest existing revision on that
1272 branch---the @dfn{head revision} of that branch. The branches in the
1273 dot-pair example above have branch IDs 1.2.1 and 1.2.2.
1274
1275 @menu
1276 * Switching Branches:: How to get to another existing branch.
1277 * Creating Branches:: How to start a new branch.
1278 * Merging:: Transferring changes between branches.
1279 * Multi-User Branching:: Multiple users working at multiple branches
1280 in parallel.
1281 @end menu
1282
1283 @node Switching Branches
1284 @subsubsection Switching between Branches
1285
1286 To switch between branches, type @kbd{C-u C-x v v} and specify the
1287 revision ID you want to select. On a locking-based system, this
1288 version is then visited @emph{unlocked} (write-protected), so you can
1289 examine it before locking it. Switching branches in this way is allowed
1290 only when the file is not locked.
1291
1292 On a VCS with dot-pair IDs, you can omit the minor part, thus giving
1293 only the branch ID; this takes you to the head version on the
1294 chosen branch. If you only type @key{RET}, Emacs goes to the highest
1295 version on the trunk.
1296
1297 After you have switched to any branch (including the main branch), you
1298 stay on it for subsequent VC commands, until you explicitly select some
1299 other branch.
1300
1301 @node Creating Branches
1302 @subsubsection Creating New Branches
1303
1304 To create a new branch from a head revision (one that is the latest
1305 in the branch that contains it), first select that revision if
1306 necessary, lock it with @kbd{C-x v v}, and make whatever changes you
1307 want. Then, when you commit the changes, use @kbd{C-u C-x v v}. This
1308 lets you specify the revision ID for the new revision. You should
1309 specify a suitable branch ID for a branch starting at the current
1310 revision. For example, if the current revision is 2.5, the branch ID
1311 should be 2.5.1, 2.5.2, and so on, depending on the number of existing
1312 branches at that point.
1313
1314 To create a new branch at an older revision (one that is no longer the
1315 head of a branch), first select that revision (@pxref{Switching
1316 Branches}). Your procedure will then differ depending on whether you
1317 are using a locking or merging-based VCS.
1318
1319 On a locking VCS, you will need to lock the old revision branch with
1320 @kbd{C-x v v}. You'll be asked to confirm, when you lock the old
1321 revision, that you really mean to create a new branch---if you say no,
1322 you'll be offered a chance to lock the latest revision instead. On
1323 a merging-based VCS you will skip this step.
1324
1325 Then make your changes and type @kbd{C-x v v} again to commit a new
1326 revision. This automatically creates a new branch starting from the
1327 selected revision. You need not specially request a new branch,
1328 because that's the only way to add a new revision at a point that is
1329 not the head of a branch.
1330
1331 After the branch is created, you ``stay'' on it. That means that
1332 subsequent check-ins create new revisions on that branch. To leave the
1333 branch, you must explicitly select a different revision with @kbd{C-u C-x
1334 v v}. To transfer changes from one branch to another, use the merge
1335 command, described in the next section.
1336
1337 @node Merging
1338 @subsubsection Merging Branches
1339
1340 @cindex merging changes
1341 When you have finished the changes on a certain branch, you will
1342 often want to incorporate them into the file's main line of development
1343 (the trunk). This is not a trivial operation, because development might
1344 also have proceeded on the trunk, so that you must @dfn{merge} the
1345 changes into a file that has already been changed otherwise. VC allows
1346 you to do this (and other things) with the @code{vc-merge} command.
1347
1348 @table @kbd
1349 @item C-x v m (vc-merge)
1350 Merge changes into the work file.
1351 @end table
1352
1353 @kindex C-x v m
1354 @findex vc-merge
1355 @kbd{C-x v m} (@code{vc-merge}) takes a set of changes and merges it
1356 into the current version of the work file. It firsts asks you in the
1357 minibuffer where the changes should come from. If you just type
1358 @key{RET}, Emacs merges any changes that were made on the same branch
1359 since you checked the file out (we call this @dfn{merging the news}).
1360 This is the common way to pick up recent changes from the repository,
1361 regardless of whether you have already changed the file yourself.
1362
1363 You can also enter a branch ID or a pair of revision IDs in
1364 the minibuffer. Then @kbd{C-x v m} finds the changes from that
1365 branch, or the differences between the two revisions you specified, and
1366 merges them into the current revision of the current file.
1367
1368 As an example, suppose that you have finished a certain feature on
1369 branch 1.3.1. In the meantime, development on the trunk has proceeded
1370 to revision 1.5. To merge the changes from the branch to the trunk,
1371 first go to the head revision of the trunk, by typing @kbd{C-u C-x v v
1372 @key{RET}}. Revision 1.5 is now current. If locking is used for the file,
1373 type @kbd{C-x v v} to lock revision 1.5 so that you can change it. Next,
1374 type @kbd{C-x v m 1.3.1 @key{RET}}. This takes the entire set of changes on
1375 branch 1.3.1 (relative to revision 1.3, where the branch started, up to
1376 the last revision on the branch) and merges it into the current revision
1377 of the work file. You can now commit the changed file, thus creating
1378 revision 1.6 containing the changes from the branch.
1379
1380 It is possible to do further editing after merging the branch, before
1381 the next check-in. But it is usually wiser to commit the merged
1382 revision, then lock it and make the further changes. This will keep
1383 a better record of the history of changes.
1384
1385 @cindex conflicts
1386 @cindex resolving conflicts
1387 When you merge changes into a file that has itself been modified, the
1388 changes might overlap. We call this situation a @dfn{conflict}, and
1389 reconciling the conflicting changes is called @dfn{resolving a
1390 conflict}.
1391
1392 Whenever conflicts occur during merging, VC detects them, tells you
1393 about them in the echo area, and asks whether you want help in merging.
1394 If you say yes, it starts an Ediff session (@pxref{Top,
1395 Ediff, Ediff, ediff, The Ediff Manual}).
1396
1397 If you say no, the conflicting changes are both inserted into the
1398 file, surrounded by @dfn{conflict markers}. The example below shows how
1399 a conflict region looks; the file is called @samp{name} and the current
1400 master file revision with user B's changes in it is 1.11.
1401
1402 @c @w here is so CVS won't think this is a conflict.
1403 @smallexample
1404 @group
1405 @w{<}<<<<<< name
1406 @var{User A's version}
1407 =======
1408 @var{User B's version}
1409 @w{>}>>>>>> 1.11
1410 @end group
1411 @end smallexample
1412
1413 @findex vc-resolve-conflicts
1414 Then you can resolve the conflicts by editing the file manually. Or
1415 you can type @code{M-x vc-resolve-conflicts} after visiting the file.
1416 This starts an Ediff session, as described above. Don't forget to
1417 commit the merged version afterwards.
1418
1419 @findex vc-find-conflicted-file
1420 If there is more than one conflicted file in a merge, type @kbd{M-x
1421 vc-find-conflicted-file} after resolving the conflicts in each file.
1422 This command visits the next conflicted file, and moves point to the
1423 first conflict marker in that file.
1424
1425 @node Multi-User Branching
1426 @subsubsection Multi-User Branching
1427
1428 It is often useful for multiple developers to work simultaneously on
1429 different branches of a file. CVS and later systems allow this by
1430 default; for RCS, it is possible if you create multiple source
1431 directories. Each source directory should have a link named
1432 @file{RCS} which points to a common directory of RCS master files.
1433 Then each source directory can have its own choice of selected
1434 revisions, but all share the same common RCS records.
1435
1436 This technique works reliably and automatically, provided that the
1437 source files contain RCS version headers
1438 @iftex
1439 (@pxref{Version Headers,,,emacs-xtra, Specialized Emacs Features}).
1440 @end iftex
1441 @ifnottex
1442 (@pxref{Version Headers}).
1443 @end ifnottex
1444 The headers enable Emacs to be sure, at all times, which revision
1445 ID is present in the work file.
1446
1447 If the files do not have version headers, you must instead tell Emacs
1448 explicitly in each session which branch you are working on. To do this,
1449 first find the file, then type @kbd{C-u C-x v v} and specify the correct
1450 branch ID. This ensures that Emacs knows which branch it is using
1451 during this particular editing session.
1452
1453 @ifnottex
1454 @include vc1-xtra.texi
1455 @end ifnottex
1456
1457 @node Change Log
1458 @section Change Logs
1459
1460 @cindex change log
1461 A change log file contains a chronological record of when and why you
1462 have changed a program, consisting of a sequence of entries describing
1463 individual changes. Normally it is kept in a file called
1464 @file{ChangeLog} in the same directory as the file you are editing, or
1465 one of its parent directories. A single @file{ChangeLog} file can
1466 record changes for all the files in its directory and all its
1467 subdirectories.
1468
1469 @menu
1470 * Change Log Commands:: Commands for editing change log files.
1471 * Format of ChangeLog:: What the change log file looks like.
1472 @end menu
1473
1474 @node Change Log Commands
1475 @subsection Change Log Commands
1476
1477 @kindex C-x 4 a
1478 @findex add-change-log-entry-other-window
1479 The Emacs command @kbd{C-x 4 a} adds a new entry to the change log
1480 file for the file you are editing
1481 (@code{add-change-log-entry-other-window}). If that file is actually
1482 a backup file, it makes an entry appropriate for the file's
1483 parent---that is useful for making log entries for functions that
1484 have been deleted in the current version.
1485
1486 @kbd{C-x 4 a} visits the change log file and creates a new entry
1487 unless the most recent entry is for today's date and your name. It
1488 also creates a new item for the current file. For many languages, it
1489 can even guess the name of the function or other object that was
1490 changed.
1491
1492 @vindex add-log-keep-changes-together
1493 When the variable @code{add-log-keep-changes-together} is
1494 non-@code{nil}, @kbd{C-x 4 a} adds to any existing item for the file
1495 rather than starting a new item.
1496
1497 You can combine multiple changes of the same nature. If you don't
1498 enter any text after the initial @kbd{C-x 4 a}, any subsequent
1499 @kbd{C-x 4 a} adds another symbol to the change.
1500
1501 @vindex add-log-always-start-new-record
1502 If @code{add-log-always-start-new-record} is non-@code{nil},
1503 @kbd{C-x 4 a} always makes a new entry, even if the last entry
1504 was made by you and on the same date.
1505
1506 @vindex change-log-version-info-enabled
1507 @vindex change-log-version-number-regexp-list
1508 @cindex file version in change log entries
1509 If the value of the variable @code{change-log-version-info-enabled}
1510 is non-@code{nil}, @kbd{C-x 4 a} adds the file's version number to the
1511 change log entry. It finds the version number by searching the first
1512 ten percent of the file, using regular expressions from the variable
1513 @code{change-log-version-number-regexp-list}.
1514
1515 @cindex Change Log mode
1516 @findex change-log-mode
1517 The change log file is visited in Change Log mode. In this major
1518 mode, each bunch of grouped items counts as one paragraph, and each
1519 entry is considered a page. This facilitates editing the entries.
1520 @kbd{C-j} and auto-fill indent each new line like the previous line;
1521 this is convenient for entering the contents of an entry.
1522
1523 You can use the @code{next-error} command (by default bound to
1524 @kbd{C-x `}) to move between entries in the Change Log, when Change
1525 Log mode is on. You will jump to the actual site in the file that was
1526 changed, not just to the next Change Log entry. You can also use
1527 @code{previous-error} to move back in the same list.
1528
1529 @findex change-log-merge
1530 You can use the command @kbd{M-x change-log-merge} to merge other
1531 log files into a buffer in Change Log Mode, preserving the date
1532 ordering of entries.
1533
1534 Version control systems are another way to keep track of changes in
1535 your program and keep a change log. In the VC log buffer, typing
1536 @kbd{C-c C-a} (@code{log-edit-insert-changelog}) inserts the relevant
1537 Change Log entry, if one exists (@pxref{Log Buffer}). You can also
1538 insert a VC log entry into a Change Log buffer by typing @kbd{C-x v a}
1539 (@code{vc-update-change-log}) in the Change Log buffer
1540 @iftex
1541 (@pxref{Change Logs and VC,,,emacs-xtra, Specialized Emacs Features}).
1542 @end iftex
1543 @ifnottex
1544 (@pxref{Change Logs and VC}).
1545 @end ifnottex
1546
1547 @node Format of ChangeLog
1548 @subsection Format of ChangeLog
1549
1550 A change log entry starts with a header line that contains the
1551 current date, your name (taken from the variable
1552 @code{add-log-full-name}), and your email address (taken from the
1553 variable @code{add-log-mailing-address}). Aside from these header
1554 lines, every line in the change log starts with a space or a tab. The
1555 bulk of the entry consists of @dfn{items}, each of which starts with a
1556 line starting with whitespace and a star. Here are two entries, both
1557 dated in May 1993, with two items and one item respectively.
1558
1559 @iftex
1560 @medbreak
1561 @end iftex
1562 @smallexample
1563 1993-05-25 Richard Stallman <rms@@gnu.org>
1564
1565 * man.el: Rename symbols `man-*' to `Man-*'.
1566 (manual-entry): Make prompt string clearer.
1567
1568 * simple.el (blink-matching-paren-distance):
1569 Change default to 12,000.
1570
1571 1993-05-24 Richard Stallman <rms@@gnu.org>
1572
1573 * vc.el (minor-mode-map-alist): Don't use it if it's void.
1574 (vc-cancel-version): Doc fix.
1575 @end smallexample
1576
1577 One entry can describe several changes; each change should have its
1578 own item, or its own line in an item. Normally there should be a
1579 blank line between items. When items are related (parts of the same
1580 change, in different places), group them by leaving no blank line
1581 between them.
1582
1583 You should put a copyright notice and permission notice at the
1584 end of the change log file. Here is an example:
1585
1586 @smallexample
1587 Copyright 1997, 1998 Free Software Foundation, Inc.
1588 Copying and distribution of this file, with or without modification, are
1589 permitted provided the copyright notice and this notice are preserved.
1590 @end smallexample
1591
1592 @noindent
1593 Of course, you should substitute the proper years and copyright holder.
1594
1595 @node Tags
1596 @section Tags Tables
1597 @cindex tags and tag tables
1598
1599 A @dfn{tag} is a reference to a subunit in a program or in a
1600 document. In program source code, tags reference syntactic elements
1601 of the program: functions, subroutines, data types, macros, etc. In a
1602 document, tags reference chapters, sections, appendices, etc. Each
1603 tag specifies the name of the file where the corresponding subunit is
1604 defined, and the position of the subunit's definition in that file.
1605
1606 A @dfn{tags table} records the tags extracted by scanning the source
1607 code of a certain program or a certain document. Tags extracted from
1608 generated files reference the original files, rather than the
1609 generated files that were scanned during tag extraction. Examples of
1610 generated files include C files generated from Cweb source files, from
1611 a Yacc parser, or from Lex scanner definitions; @file{.i} preprocessed
1612 C files; and Fortran files produced by preprocessing @file{.fpp}
1613 source files.
1614
1615 To produce a tags table, you use the @samp{etags} command,
1616 submitting it a document or the source code of a program.
1617 @samp{etags} writes the tags to a @dfn{tags table file}, or @dfn{tags
1618 file} in short. The conventional name for a tags file is @file{TAGS}.
1619
1620 Emacs uses the information recorded in tags tables in commands that
1621 search or replace through multiple source files: these commands use
1622 the names of the source files recorded in the tags table to know which
1623 files to search. Other commands, such as @kbd{M-.}, which finds the
1624 definition of a function, use the recorded information about the
1625 function names and positions to find the source file and the position
1626 within that file where the function is defined.
1627
1628 @cindex C++ class browser, tags
1629 @cindex tags, C++
1630 @cindex class browser, C++
1631 @cindex Ebrowse
1632 See also the Ebrowse facility, which is tailored for C++.
1633 @xref{Top,, Ebrowse, ebrowse, Ebrowse User's Manual}.
1634
1635 @menu
1636 * Tag Syntax:: Tag syntax for various types of code and text files.
1637 * Create Tags Table:: Creating a tags table with @code{etags}.
1638 * Etags Regexps:: Create arbitrary tags using regular expressions.
1639 * Select Tags Table:: How to visit a tags table.
1640 * Find Tag:: Commands to find the definition of a specific tag.
1641 * Tags Search:: Using a tags table for searching and replacing.
1642 * List Tags:: Listing and finding tags defined in a file.
1643 @end menu
1644
1645 @node Tag Syntax
1646 @subsection Source File Tag Syntax
1647
1648 Here is how tag syntax is defined for the most popular languages:
1649
1650 @itemize @bullet
1651 @item
1652 In C code, any C function or typedef is a tag, and so are definitions of
1653 @code{struct}, @code{union} and @code{enum}.
1654 @code{#define} macro definitions, @code{#undef} and @code{enum}
1655 constants are also
1656 tags, unless you specify @samp{--no-defines} when making the tags table.
1657 Similarly, global variables are tags, unless you specify
1658 @samp{--no-globals}, and so are struct members, unless you specify
1659 @samp{--no-members}. Use of @samp{--no-globals}, @samp{--no-defines}
1660 and @samp{--no-members} can make the tags table file much smaller.
1661
1662 You can tag function declarations and external variables in addition
1663 to function definitions by giving the @samp{--declarations} option to
1664 @code{etags}.
1665
1666 @item
1667 In C++ code, in addition to all the tag constructs of C code, member
1668 functions are also recognized; member variables are also recognized,
1669 unless you use the @samp{--no-members} option. Tags for variables and
1670 functions in classes are named @samp{@var{class}::@var{variable}} and
1671 @samp{@var{class}::@var{function}}. @code{operator} definitions have
1672 tag names like @samp{operator+}.
1673
1674 @item
1675 In Java code, tags include all the constructs recognized in C++, plus
1676 the @code{interface}, @code{extends} and @code{implements} constructs.
1677 Tags for variables and functions in classes are named
1678 @samp{@var{class}.@var{variable}} and @samp{@var{class}.@var{function}}.
1679
1680 @item
1681 In La@TeX{} text, the argument of any of the commands @code{\chapter},
1682 @code{\section}, @code{\subsection}, @code{\subsubsection},
1683 @code{\eqno}, @code{\label}, @code{\ref}, @code{\cite},
1684 @code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry},
1685 @code{\index}, @code{\def}, @code{\newcommand}, @code{\renewcommand},
1686 @code{\newenvironment} or @code{\renewenvironment} is a tag.@refill
1687
1688 Other commands can make tags as well, if you specify them in the
1689 environment variable @env{TEXTAGS} before invoking @code{etags}. The
1690 value of this environment variable should be a colon-separated list of
1691 command names. For example,
1692
1693 @example
1694 TEXTAGS="mycommand:myothercommand"
1695 export TEXTAGS
1696 @end example
1697
1698 @noindent
1699 specifies (using Bourne shell syntax) that the commands
1700 @samp{\mycommand} and @samp{\myothercommand} also define tags.
1701
1702 @item
1703 In Lisp code, any function defined with @code{defun}, any variable
1704 defined with @code{defvar} or @code{defconst}, and in general the first
1705 argument of any expression that starts with @samp{(def} in column zero is
1706 a tag.
1707
1708 @item
1709 In Scheme code, tags include anything defined with @code{def} or with a
1710 construct whose name starts with @samp{def}. They also include variables
1711 set with @code{set!} at top level in the file.
1712 @end itemize
1713
1714 Several other languages are also supported:
1715
1716 @itemize @bullet
1717
1718 @item
1719 In Ada code, functions, procedures, packages, tasks and types are
1720 tags. Use the @samp{--packages-only} option to create tags for
1721 packages only.
1722
1723 In Ada, the same name can be used for different kinds of entity
1724 (e.g.@:, for a procedure and for a function). Also, for things like
1725 packages, procedures and functions, there is the spec (i.e.@: the
1726 interface) and the body (i.e.@: the implementation). To make it
1727 easier to pick the definition you want, Ada tag name have suffixes
1728 indicating the type of entity:
1729
1730 @table @samp
1731 @item /b
1732 package body.
1733 @item /f
1734 function.
1735 @item /k
1736 task.
1737 @item /p
1738 procedure.
1739 @item /s
1740 package spec.
1741 @item /t
1742 type.
1743 @end table
1744
1745 Thus, @kbd{M-x find-tag @key{RET} bidule/b @key{RET}} will go
1746 directly to the body of the package @code{bidule}, while @kbd{M-x
1747 find-tag @key{RET} bidule @key{RET}} will just search for any tag
1748 @code{bidule}.
1749
1750 @item
1751 In assembler code, labels appearing at the beginning of a line,
1752 followed by a colon, are tags.
1753
1754 @item
1755 In Bison or Yacc input files, each rule defines as a tag the nonterminal
1756 it constructs. The portions of the file that contain C code are parsed
1757 as C code.
1758
1759 @item
1760 In Cobol code, tags are paragraph names; that is, any word starting in
1761 column 8 and followed by a period.
1762
1763 @item
1764 In Erlang code, the tags are the functions, records and macros defined
1765 in the file.
1766
1767 @item
1768 In Fortran code, functions, subroutines and block data are tags.
1769
1770 @item
1771 In HTML input files, the tags are the @code{title} and the @code{h1},
1772 @code{h2}, @code{h3} headers. Also, tags are @code{name=} in anchors
1773 and all occurrences of @code{id=}.
1774
1775 @item
1776 In Lua input files, all functions are tags.
1777
1778 @item
1779 In makefiles, targets are tags; additionally, variables are tags
1780 unless you specify @samp{--no-globals}.
1781
1782 @item
1783 In Objective C code, tags include Objective C definitions for classes,
1784 class categories, methods and protocols. Tags for variables and
1785 functions in classes are named @samp{@var{class}::@var{variable}} and
1786 @samp{@var{class}::@var{function}}.
1787
1788 @item
1789 In Pascal code, the tags are the functions and procedures defined in
1790 the file.
1791
1792 @item
1793 In Perl code, the tags are the packages, subroutines and variables
1794 defined by the @code{package}, @code{sub}, @code{my} and @code{local}
1795 keywords. Use @samp{--globals} if you want to tag global variables.
1796 Tags for subroutines are named @samp{@var{package}::@var{sub}}. The
1797 name for subroutines defined in the default package is
1798 @samp{main::@var{sub}}.
1799
1800 @item
1801 In PHP code, tags are functions, classes and defines. Vars are tags
1802 too, unless you use the @samp{--no-members} option.
1803
1804 @item
1805 In PostScript code, the tags are the functions.
1806
1807 @item
1808 In Prolog code, tags are predicates and rules at the beginning of
1809 line.
1810
1811 @item
1812 In Python code, @code{def} or @code{class} at the beginning of a line
1813 generate a tag.
1814 @end itemize
1815
1816 You can also generate tags based on regexp matching (@pxref{Etags
1817 Regexps}) to handle other formats and languages.
1818
1819 @node Create Tags Table
1820 @subsection Creating Tags Tables
1821 @cindex @code{etags} program
1822
1823 The @code{etags} program is used to create a tags table file. It knows
1824 the syntax of several languages, as described in
1825 @iftex
1826 the previous section.
1827 @end iftex
1828 @ifnottex
1829 @ref{Tag Syntax}.
1830 @end ifnottex
1831 Here is how to run @code{etags}:
1832
1833 @example
1834 etags @var{inputfiles}@dots{}
1835 @end example
1836
1837 @noindent
1838 The @code{etags} program reads the specified files, and writes a tags
1839 table named @file{TAGS} in the current working directory. You can
1840 optionally specify a different file name for the tags table by using the
1841 @samp{--output=@var{file}} option; specifying @file{-} as a file name
1842 prints the tags table to standard output.
1843
1844 If the specified files don't exist, @code{etags} looks for
1845 compressed versions of them and uncompresses them to read them. Under
1846 MS-DOS, @code{etags} also looks for file names like @file{mycode.cgz}
1847 if it is given @samp{mycode.c} on the command line and @file{mycode.c}
1848 does not exist.
1849
1850 @code{etags} recognizes the language used in an input file based on
1851 its file name and contents. You can specify the language with the
1852 @samp{--language=@var{name}} option, described below.
1853
1854 If the tags table data become outdated due to changes in the files
1855 described in the table, the way to update the tags table is the same
1856 way it was made in the first place. If the tags table fails to record
1857 a tag, or records it for the wrong file, then Emacs cannot possibly
1858 find its definition until you update the tags table. However, if the
1859 position recorded in the tags table becomes a little bit wrong (due to
1860 other editing), the worst consequence is a slight delay in finding the
1861 tag. Even if the stored position is very far wrong, Emacs will still
1862 find the tag, after searching most of the file for it. That delay is
1863 hardly noticeable with today's computers.
1864
1865 Thus, there is no need to update the tags table after each edit.
1866 You should update a tags table when you define new tags that you want
1867 to have listed, or when you move tag definitions from one file to
1868 another, or when changes become substantial.
1869
1870 One tags table can virtually include another. Specify the included
1871 tags file name with the @samp{--include=@var{file}} option when
1872 creating the file that is to include it. The latter file then acts as
1873 if it covered all the source files specified in the included file, as
1874 well as the files it directly contains.
1875
1876 If you specify the source files with relative file names when you run
1877 @code{etags}, the tags file will contain file names relative to the
1878 directory where the tags file was initially written. This way, you can
1879 move an entire directory tree containing both the tags file and the
1880 source files, and the tags file will still refer correctly to the source
1881 files. If the tags file is @file{-} or is in the @file{/dev} directory,
1882 however, the file names are
1883 made relative to the current working directory. This is useful, for
1884 example, when writing the tags to @file{/dev/stdout}.
1885
1886 When using a relative file name, it should not be a symbolic link
1887 pointing to a tags file in a different directory, because this would
1888 generally render the file names invalid.
1889
1890 If you specify absolute file names as arguments to @code{etags}, then
1891 the tags file will contain absolute file names. This way, the tags file
1892 will still refer to the same files even if you move it, as long as the
1893 source files remain in the same place. Absolute file names start with
1894 @samp{/}, or with @samp{@var{device}:/} on MS-DOS and MS-Windows.
1895
1896 When you want to make a tags table from a great number of files, you
1897 may have problems listing them on the command line, because some systems
1898 have a limit on its length. The simplest way to circumvent this limit
1899 is to tell @code{etags} to read the file names from its standard input,
1900 by typing a dash in place of the file names, like this:
1901
1902 @smallexample
1903 find . -name "*.[chCH]" -print | etags -
1904 @end smallexample
1905
1906 Use the option @samp{--language=@var{name}} to specify the language
1907 explicitly. You can intermix these options with file names; each one
1908 applies to the file names that follow it. Specify
1909 @samp{--language=auto} to tell @code{etags} to resume guessing the
1910 language from the file names and file contents. Specify
1911 @samp{--language=none} to turn off language-specific processing
1912 entirely; then @code{etags} recognizes tags by regexp matching alone
1913 (@pxref{Etags Regexps}).
1914
1915 The option @samp{--parse-stdin=@var{file}} is mostly useful when
1916 calling @code{etags} from programs. It can be used (only once) in
1917 place of a file name on the command line. @code{Etags} will read from
1918 standard input and mark the produced tags as belonging to the file
1919 @var{file}.
1920
1921 @samp{etags --help} outputs the list of the languages @code{etags}
1922 knows, and the file name rules for guessing the language. It also prints
1923 a list of all the available @code{etags} options, together with a short
1924 explanation. If followed by one or more @samp{--language=@var{lang}}
1925 options, it outputs detailed information about how tags are generated for
1926 @var{lang}.
1927
1928 @node Etags Regexps
1929 @subsection Etags Regexps
1930
1931 The @samp{--regex} option provides a general way of recognizing tags
1932 based on regexp matching. You can freely intermix this option with
1933 file names, and each one applies to the source files that follow it.
1934 If you specify multiple @samp{--regex} options, all of them are used
1935 in parallel. The syntax is:
1936
1937 @smallexample
1938 --regex=[@var{@{language@}}]/@var{tagregexp}/[@var{nameregexp}/]@var{modifiers}
1939 @end smallexample
1940
1941 The essential part of the option value is @var{tagregexp}, the
1942 regexp for matching tags. It is always used anchored, that is, it
1943 only matches at the beginning of a line. If you want to allow
1944 indented tags, use a regexp that matches initial whitespace; start it
1945 with @samp{[ \t]*}.
1946
1947 In these regular expressions, @samp{\} quotes the next character, and
1948 all the GCC character escape sequences are supported (@samp{\a} for
1949 bell, @samp{\b} for back space, @samp{\d} for delete, @samp{\e} for
1950 escape, @samp{\f} for formfeed, @samp{\n} for newline, @samp{\r} for
1951 carriage return, @samp{\t} for tab, and @samp{\v} for vertical tab).
1952
1953 Ideally, @var{tagregexp} should not match more characters than are
1954 needed to recognize what you want to tag. If the syntax requires you
1955 to write @var{tagregexp} so it matches more characters beyond the tag
1956 itself, you should add a @var{nameregexp}, to pick out just the tag.
1957 This will enable Emacs to find tags more accurately and to do
1958 completion on tag names more reliably. You can find some examples
1959 below.
1960
1961 The @var{modifiers} are a sequence of zero or more characters that
1962 modify the way @code{etags} does the matching. A regexp with no
1963 modifiers is applied sequentially to each line of the input file, in a
1964 case-sensitive way. The modifiers and their meanings are:
1965
1966 @table @samp
1967 @item i
1968 Ignore case when matching this regexp.
1969 @item m
1970 Match this regular expression against the whole file, so that
1971 multi-line matches are possible.
1972 @item s
1973 Match this regular expression against the whole file, and allow
1974 @samp{.} in @var{tagregexp} to match newlines.
1975 @end table
1976
1977 The @samp{-R} option cancels all the regexps defined by preceding
1978 @samp{--regex} options. It too applies to the file names following
1979 it. Here's an example:
1980
1981 @smallexample
1982 etags --regex=/@var{reg1}/i voo.doo --regex=/@var{reg2}/m \
1983 bar.ber -R --lang=lisp los.er
1984 @end smallexample
1985
1986 @noindent
1987 Here @code{etags} chooses the parsing language for @file{voo.doo} and
1988 @file{bar.ber} according to their contents. @code{etags} also uses
1989 @var{reg1} to recognize additional tags in @file{voo.doo}, and both
1990 @var{reg1} and @var{reg2} to recognize additional tags in
1991 @file{bar.ber}. @var{reg1} is checked against each line of
1992 @file{voo.doo} and @file{bar.ber}, in a case-insensitive way, while
1993 @var{reg2} is checked against the whole @file{bar.ber} file,
1994 permitting multi-line matches, in a case-sensitive way. @code{etags}
1995 uses only the Lisp tags rules, with no user-specified regexp matching,
1996 to recognize tags in @file{los.er}.
1997
1998 You can restrict a @samp{--regex} option to match only files of a
1999 given language by using the optional prefix @var{@{language@}}.
2000 (@samp{etags --help} prints the list of languages recognized by
2001 @code{etags}.) This is particularly useful when storing many
2002 predefined regular expressions for @code{etags} in a file. The
2003 following example tags the @code{DEFVAR} macros in the Emacs source
2004 files, for the C language only:
2005
2006 @smallexample
2007 --regex='@{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/'
2008 @end smallexample
2009
2010 @noindent
2011 When you have complex regular expressions, you can store the list of
2012 them in a file. The following option syntax instructs @code{etags} to
2013 read two files of regular expressions. The regular expressions
2014 contained in the second file are matched without regard to case.
2015
2016 @smallexample
2017 --regex=@@@var{case-sensitive-file} --ignore-case-regex=@@@var{ignore-case-file}
2018 @end smallexample
2019
2020 @noindent
2021 A regex file for @code{etags} contains one regular expression per
2022 line. Empty lines, and lines beginning with space or tab are ignored.
2023 When the first character in a line is @samp{@@}, @code{etags} assumes
2024 that the rest of the line is the name of another file of regular
2025 expressions; thus, one such file can include another file. All the
2026 other lines are taken to be regular expressions. If the first
2027 non-whitespace text on the line is @samp{--}, that line is a comment.
2028
2029 For example, we can create a file called @samp{emacs.tags} with the
2030 following contents:
2031
2032 @smallexample
2033 -- This is for GNU Emacs C source files
2034 @{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/\1/
2035 @end smallexample
2036
2037 @noindent
2038 and then use it like this:
2039
2040 @smallexample
2041 etags --regex=@@emacs.tags *.[ch] */*.[ch]
2042 @end smallexample
2043
2044 Here are some more examples. The regexps are quoted to protect them
2045 from shell interpretation.
2046
2047 @itemize @bullet
2048
2049 @item
2050 Tag Octave files:
2051
2052 @smallexample
2053 etags --language=none \
2054 --regex='/[ \t]*function.*=[ \t]*\([^ \t]*\)[ \t]*(/\1/' \
2055 --regex='/###key \(.*\)/\1/' \
2056 --regex='/[ \t]*global[ \t].*/' \
2057 *.m
2058 @end smallexample
2059
2060 @noindent
2061 Note that tags are not generated for scripts, so that you have to add
2062 a line by yourself of the form @samp{###key @var{scriptname}} if you
2063 want to jump to it.
2064
2065 @item
2066 Tag Tcl files:
2067
2068 @smallexample
2069 etags --language=none --regex='/proc[ \t]+\([^ \t]+\)/\1/' *.tcl
2070 @end smallexample
2071
2072 @item
2073 Tag VHDL files:
2074
2075 @smallexample
2076 etags --language=none \
2077 --regex='/[ \t]*\(ARCHITECTURE\|CONFIGURATION\) +[^ ]* +OF/' \
2078 --regex='/[ \t]*\(ATTRIBUTE\|ENTITY\|FUNCTION\|PACKAGE\
2079 \( BODY\)?\|PROCEDURE\|PROCESS\|TYPE\)[ \t]+\([^ \t(]+\)/\3/'
2080 @end smallexample
2081 @end itemize
2082
2083 @node Select Tags Table
2084 @subsection Selecting a Tags Table
2085
2086 @vindex tags-file-name
2087 @findex visit-tags-table
2088 Emacs has at any time one @dfn{selected} tags table, and all the
2089 commands for working with tags tables use the selected one. To select
2090 a tags table, type @kbd{M-x visit-tags-table}, which reads the tags
2091 table file name as an argument, with @file{TAGS} in the default
2092 directory as the default.
2093
2094 Emacs does not actually read in the tags table contents until you
2095 try to use them; all @code{visit-tags-table} does is store the file
2096 name in the variable @code{tags-file-name}, and setting the variable
2097 yourself is just as good. The variable's initial value is @code{nil};
2098 that value tells all the commands for working with tags tables that
2099 they must ask for a tags table file name to use.
2100
2101 Using @code{visit-tags-table} when a tags table is already loaded
2102 gives you a choice: you can add the new tags table to the current list
2103 of tags tables, or start a new list. The tags commands use all the tags
2104 tables in the current list. If you start a new list, the new tags table
2105 is used @emph{instead} of others. If you add the new table to the
2106 current list, it is used @emph{as well as} the others.
2107
2108 @vindex tags-table-list
2109 You can specify a precise list of tags tables by setting the variable
2110 @code{tags-table-list} to a list of strings, like this:
2111
2112 @c keep this on two lines for formatting in smallbook
2113 @example
2114 @group
2115 (setq tags-table-list
2116 '("~/emacs" "/usr/local/lib/emacs/src"))
2117 @end group
2118 @end example
2119
2120 @noindent
2121 This tells the tags commands to look at the @file{TAGS} files in your
2122 @file{~/emacs} directory and in the @file{/usr/local/lib/emacs/src}
2123 directory. The order depends on which file you are in and which tags
2124 table mentions that file, as explained above.
2125
2126 Do not set both @code{tags-file-name} and @code{tags-table-list}.
2127
2128 @node Find Tag
2129 @subsection Finding a Tag
2130
2131 The most important thing that a tags table enables you to do is to find
2132 the definition of a specific tag.
2133
2134 @table @kbd
2135 @item M-.@: @var{tag} @key{RET}
2136 Find first definition of @var{tag} (@code{find-tag}).
2137 @item C-u M-.
2138 Find next alternate definition of last tag specified.
2139 @item C-u - M-.
2140 Go back to previous tag found.
2141 @item C-M-. @var{pattern} @key{RET}
2142 Find a tag whose name matches @var{pattern} (@code{find-tag-regexp}).
2143 @item C-u C-M-.
2144 Find the next tag whose name matches the last pattern used.
2145 @item C-x 4 .@: @var{tag} @key{RET}
2146 Find first definition of @var{tag}, but display it in another window
2147 (@code{find-tag-other-window}).
2148 @item C-x 5 .@: @var{tag} @key{RET}
2149 Find first definition of @var{tag}, and create a new frame to select the
2150 buffer (@code{find-tag-other-frame}).
2151 @item M-*
2152 Pop back to where you previously invoked @kbd{M-.} and friends.
2153 @end table
2154
2155 @kindex M-.
2156 @findex find-tag
2157 @kbd{M-.}@: (@code{find-tag}) is the command to find the definition of
2158 a specified tag. It searches through the tags table for that tag, as a
2159 string, and then uses the tags table info to determine the file that the
2160 definition is in and the approximate character position in the file of
2161 the definition. Then @code{find-tag} visits that file, moves point to
2162 the approximate character position, and searches ever-increasing
2163 distances away to find the tag definition.
2164
2165 If an empty argument is given (just type @key{RET}), the balanced
2166 expression in the buffer before or around point is used as the
2167 @var{tag} argument. @xref{Expressions}.
2168
2169 You don't need to give @kbd{M-.} the full name of the tag; a part
2170 will do. This is because @kbd{M-.} finds tags in the table which
2171 contain @var{tag} as a substring. However, it prefers an exact match
2172 to a substring match. To find other tags that match the same
2173 substring, give @code{find-tag} a numeric argument, as in @kbd{C-u
2174 M-.}; this does not read a tag name, but continues searching the tags
2175 table's text for another tag containing the same substring last used.
2176 If you have a real @key{META} key, @kbd{M-0 M-.}@: is an easier
2177 alternative to @kbd{C-u M-.}.
2178
2179 @kindex C-x 4 .
2180 @findex find-tag-other-window
2181 @kindex C-x 5 .
2182 @findex find-tag-other-frame
2183 Like most commands that can switch buffers, @code{find-tag} has a
2184 variant that displays the new buffer in another window, and one that
2185 makes a new frame for it. The former is @w{@kbd{C-x 4 .}}, which invokes
2186 the command @code{find-tag-other-window}. The latter is @w{@kbd{C-x 5 .}},
2187 which invokes @code{find-tag-other-frame}.
2188
2189 To move back to places you've found tags recently, use @kbd{C-u -
2190 M-.}; more generally, @kbd{M-.} with a negative numeric argument. This
2191 command can take you to another buffer. @w{@kbd{C-x 4 .}} with a negative
2192 argument finds the previous tag location in another window.
2193
2194 @kindex M-*
2195 @findex pop-tag-mark
2196 @vindex find-tag-marker-ring-length
2197 As well as going back to places you've found tags recently, you can go
2198 back to places @emph{from where} you found them. Use @kbd{M-*}, which
2199 invokes the command @code{pop-tag-mark}, for this. Typically you would
2200 find and study the definition of something with @kbd{M-.} and then
2201 return to where you were with @kbd{M-*}.
2202
2203 Both @kbd{C-u - M-.} and @kbd{M-*} allow you to retrace your steps to
2204 a depth determined by the variable @code{find-tag-marker-ring-length}.
2205
2206 @findex find-tag-regexp
2207 @kindex C-M-.
2208 The command @kbd{C-M-.} (@code{find-tag-regexp}) visits the tags that
2209 match a specified regular expression. It is just like @kbd{M-.} except
2210 that it does regexp matching instead of substring matching.
2211
2212 @node Tags Search
2213 @subsection Searching and Replacing with Tags Tables
2214 @cindex search and replace in multiple files
2215 @cindex multiple-file search and replace
2216
2217 The commands in this section visit and search all the files listed
2218 in the selected tags table, one by one. For these commands, the tags
2219 table serves only to specify a sequence of files to search. These
2220 commands scan the list of tags tables starting with the first tags
2221 table (if any) that describes the current file, proceed from there to
2222 the end of the list, and then scan from the beginning of the list
2223 until they have covered all the tables in the list.
2224
2225 @table @kbd
2226 @item M-x tags-search @key{RET} @var{regexp} @key{RET}
2227 Search for @var{regexp} through the files in the selected tags
2228 table.
2229 @item M-x tags-query-replace @key{RET} @var{regexp} @key{RET} @var{replacement} @key{RET}
2230 Perform a @code{query-replace-regexp} on each file in the selected tags table.
2231 @item M-,
2232 Restart one of the commands above, from the current location of point
2233 (@code{tags-loop-continue}).
2234 @end table
2235
2236 @findex tags-search
2237 @kbd{M-x tags-search} reads a regexp using the minibuffer, then
2238 searches for matches in all the files in the selected tags table, one
2239 file at a time. It displays the name of the file being searched so you
2240 can follow its progress. As soon as it finds an occurrence,
2241 @code{tags-search} returns.
2242
2243 @kindex M-,
2244 @findex tags-loop-continue
2245 Having found one match, you probably want to find all the rest. To find
2246 one more match, type @kbd{M-,} (@code{tags-loop-continue}) to resume the
2247 @code{tags-search}. This searches the rest of the current buffer, followed
2248 by the remaining files of the tags table.@refill
2249
2250 @findex tags-query-replace
2251 @kbd{M-x tags-query-replace} performs a single
2252 @code{query-replace-regexp} through all the files in the tags table. It
2253 reads a regexp to search for and a string to replace with, just like
2254 ordinary @kbd{M-x query-replace-regexp}. It searches much like @kbd{M-x
2255 tags-search}, but repeatedly, processing matches according to your
2256 input. @xref{Replace}, for more information on query replace.
2257
2258 @vindex tags-case-fold-search
2259 @cindex case-sensitivity and tags search
2260 You can control the case-sensitivity of tags search commands by
2261 customizing the value of the variable @code{tags-case-fold-search}. The
2262 default is to use the same setting as the value of
2263 @code{case-fold-search} (@pxref{Search Case}).
2264
2265 It is possible to get through all the files in the tags table with a
2266 single invocation of @kbd{M-x tags-query-replace}. But often it is
2267 useful to exit temporarily, which you can do with any input event that
2268 has no special query replace meaning. You can resume the query
2269 replace subsequently by typing @kbd{M-,}; this command resumes the
2270 last tags search or replace command that you did. For instance, to
2271 skip the rest of the current file, you can type @kbd{M-> M-,}.
2272
2273 The commands in this section carry out much broader searches than the
2274 @code{find-tag} family. The @code{find-tag} commands search only for
2275 definitions of tags that match your substring or regexp. The commands
2276 @code{tags-search} and @code{tags-query-replace} find every occurrence
2277 of the regexp, as ordinary search commands and replace commands do in
2278 the current buffer.
2279
2280 These commands create buffers only temporarily for the files that they
2281 have to search (those which are not already visited in Emacs buffers).
2282 Buffers in which no match is found are quickly killed; the others
2283 continue to exist.
2284
2285 It may have struck you that @code{tags-search} is a lot like
2286 @code{grep}. You can also run @code{grep} itself as an inferior of
2287 Emacs and have Emacs show you the matching lines one by one.
2288 @xref{Grep Searching}.
2289
2290 @node List Tags
2291 @subsection Tags Table Inquiries
2292
2293 @table @kbd
2294 @item M-x list-tags @key{RET} @var{file} @key{RET}
2295 Display a list of the tags defined in the program file @var{file}.
2296 @item M-x tags-apropos @key{RET} @var{regexp} @key{RET}
2297 Display a list of all tags matching @var{regexp}.
2298 @end table
2299
2300 @findex list-tags
2301 @kbd{M-x list-tags} reads the name of one of the files described by
2302 the selected tags table, and displays a list of all the tags defined in
2303 that file. The ``file name'' argument is really just a string to
2304 compare against the file names recorded in the tags table; it is read as
2305 a string rather than as a file name. Therefore, completion and
2306 defaulting are not available, and you must enter the file name the same
2307 way it appears in the tags table. Do not include a directory as part of
2308 the file name unless the file name recorded in the tags table includes a
2309 directory.
2310
2311 @findex tags-apropos
2312 @vindex tags-apropos-verbose
2313 @kbd{M-x tags-apropos} is like @code{apropos} for tags
2314 (@pxref{Apropos}). It finds all the tags in the selected tags table
2315 whose entries match @var{regexp}, and displays them. If the variable
2316 @code{tags-apropos-verbose} is non-@code{nil}, it displays the names
2317 of the tags files together with the tag names.
2318
2319 @vindex tags-tag-face
2320 @vindex tags-apropos-additional-actions
2321 You can customize the appearance of the output by setting the
2322 variable @code{tags-tag-face} to a face. You can display additional
2323 output with @kbd{M-x tags-apropos} by customizing the variable
2324 @code{tags-apropos-additional-actions}---see its documentation for
2325 details.
2326
2327 You can also use the collection of tag names to complete a symbol
2328 name in the buffer. @xref{Symbol Completion}.
2329
2330 You can use @kbd{M-x next-file} to visit the files in the selected
2331 tags table. The first time this command is called, it visits the
2332 first file in the tags table. Each subsequent call visits the next
2333 file in the table, unless a prefix argument is supplied, in which case
2334 it returns to the first file.
2335
2336 @node EDE
2337 @section Emacs Development Environment
2338 @cindex EDE (Emacs Development Environment)
2339 @cindex Emacs Development Environment
2340 @cindex Integrated development environment
2341
2342 EDE (@dfn{Emacs Development Environment}) is a package that simplifies
2343 the task of creating, building, and debugging large programs with
2344 Emacs. It provides some of the features of an IDE, or @dfn{Integrated
2345 Development Environment}, in Emacs.
2346
2347 This section provides a brief description of EDE usage.
2348 @ifnottex
2349 For full details, see @ref{Top, EDE,, ede, Emacs Development Environment}.
2350 @end ifnottex
2351 @iftex
2352 For full details on Ede, type @kbd{C-h i} and then select the EDE
2353 manual.
2354 @end iftex
2355
2356 EDE is implemented as a global minor mode (@pxref{Minor Modes}). To
2357 enable it, type @kbd{M-x global-ede-mode} or click on the
2358 @samp{Project Support (EDE)} item in the @samp{Tools} menu. You can
2359 also enable EDE each time you start Emacs, by adding the following
2360 line to your initialization file:
2361
2362 @smallexample
2363 (global-ede-mode t)
2364 @end smallexample
2365
2366 @noindent
2367 Activating EDE adds a menu named @samp{Development} to the menu bar.
2368 Many EDE commands, including the ones described below, can be invoked
2369 from this menu.
2370
2371 EDE organizes files into @dfn{projects}, which correspond to
2372 directory trees. The @dfn{project root} is the topmost directory of a
2373 project. To define a new project, visit a file in the desired project
2374 root and type @kbd{M-x ede-new}. This command prompts for a
2375 @dfn{project type}, which refers to the underlying method that EDE
2376 will use to manage the project (@pxref{Creating a Project, EDE,, ede,
2377 Emacs Development Environment}). The most common project types are
2378 @samp{Make}, which uses Makefiles, and @samp{Automake}, which uses GNU
2379 Automake (@pxref{Top, Automake,, automake, Automake}). In both cases,
2380 EDE also creates a file named @file{Project.ede}, which stores
2381 information about the project.
2382
2383 A project may contain one or more @dfn{targets}. A target can be an
2384 object file, executable program, or some other type of file, which is
2385 ``built'' from one or more of the files in the project.
2386
2387 To add a new @dfn{target} to a project, type @kbd{C-c . t}
2388 (@code{M-x ede-new-target}). This command also asks if you wish to
2389 ``add'' the current file to that target, which means that the target
2390 is to be built from that file. After you have defined a target, you
2391 can add more files to it by typing @kbd{C-c . a}
2392 (@code{ede-add-file}).
2393
2394 To build a target, type @kbd{C-c . c} (@code{ede-compile-target}).
2395 To build all the targets in the project, type @kbd{C-c . C}
2396 (@code{ede-compile-project}). EDE uses the file types to guess how
2397 the target should be built.
2398
2399 @ifnottex
2400 @include emerge-xtra.texi
2401 @end ifnottex