| 1 |
This is ../info/emacs, produced by makeinfo version 4.3 from emacs.texi. |
|---|
| 2 |
|
|---|
| 3 |
This is the Fourteenth edition of the `GNU Emacs Manual', updated |
|---|
| 4 |
for Emacs version 21.3. |
|---|
| 5 |
|
|---|
| 6 |
INFO-DIR-SECTION Emacs |
|---|
| 7 |
START-INFO-DIR-ENTRY |
|---|
| 8 |
* Emacs: (emacs). The extensible self-documenting text editor. |
|---|
| 9 |
END-INFO-DIR-ENTRY |
|---|
| 10 |
|
|---|
| 11 |
Published by the Free Software Foundation 59 Temple Place, Suite 330 |
|---|
| 12 |
Boston, MA 02111-1307 USA |
|---|
| 13 |
|
|---|
| 14 |
Copyright (C) |
|---|
| 15 |
1985,1986,1987,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002 |
|---|
| 16 |
Free Software Foundation, Inc. |
|---|
| 17 |
|
|---|
| 18 |
Permission is granted to copy, distribute and/or modify this document |
|---|
| 19 |
under the terms of the GNU Free Documentation License, Version 1.1 or |
|---|
| 20 |
any later version published by the Free Software Foundation; with the |
|---|
| 21 |
Invariant Sections being "The GNU Manifesto", "Distribution" and "GNU |
|---|
| 22 |
GENERAL PUBLIC LICENSE", with the Front-Cover texts being "A GNU |
|---|
| 23 |
Manual," and with the Back-Cover Texts as in (a) below. A copy of the |
|---|
| 24 |
license is included in the section entitled "GNU Free Documentation |
|---|
| 25 |
License." |
|---|
| 26 |
|
|---|
| 27 |
(a) The FSF's Back-Cover Text is: "You have freedom to copy and |
|---|
| 28 |
modify this GNU Manual, like GNU software. Copies published by the Free |
|---|
| 29 |
Software Foundation raise funds for GNU development." |
|---|
| 30 |
|
|---|
| 31 |
|
|---|
| 32 |
File: emacs, Node: Snapshots, Next: Miscellaneous VC, Prev: Remote Repositories, Up: Version Control |
|---|
| 33 |
|
|---|
| 34 |
Snapshots |
|---|
| 35 |
--------- |
|---|
| 36 |
|
|---|
| 37 |
A "snapshot" is a named set of file versions (one for each |
|---|
| 38 |
registered file) that you can treat as a unit. One important kind of |
|---|
| 39 |
snapshot is a "release", a (theoretically) stable version of the system |
|---|
| 40 |
that is ready for distribution to users. |
|---|
| 41 |
|
|---|
| 42 |
* Menu: |
|---|
| 43 |
|
|---|
| 44 |
* Making Snapshots:: The snapshot facilities. |
|---|
| 45 |
* Snapshot Caveats:: Things to be careful of when using snapshots. |
|---|
| 46 |
|
|---|
| 47 |
|
|---|
| 48 |
File: emacs, Node: Making Snapshots, Next: Snapshot Caveats, Up: Snapshots |
|---|
| 49 |
|
|---|
| 50 |
Making and Using Snapshots |
|---|
| 51 |
.......................... |
|---|
| 52 |
|
|---|
| 53 |
There are two basic commands for snapshots; one makes a snapshot |
|---|
| 54 |
with a given name, the other retrieves a named snapshot. |
|---|
| 55 |
|
|---|
| 56 |
`C-x v s NAME <RET>' |
|---|
| 57 |
Define the last saved versions of every registered file in or |
|---|
| 58 |
under the current directory as a snapshot named NAME |
|---|
| 59 |
(`vc-create-snapshot'). |
|---|
| 60 |
|
|---|
| 61 |
`C-x v r NAME <RET>' |
|---|
| 62 |
For all registered files at or below the current directory level, |
|---|
| 63 |
select whatever versions correspond to the snapshot NAME |
|---|
| 64 |
(`vc-retrieve-snapshot'). |
|---|
| 65 |
|
|---|
| 66 |
This command reports an error if any files are locked at or below |
|---|
| 67 |
the current directory, without changing anything; this is to avoid |
|---|
| 68 |
overwriting work in progress. |
|---|
| 69 |
|
|---|
| 70 |
A snapshot uses a very small amount of resources--just enough to |
|---|
| 71 |
record the list of file names and which version belongs to the |
|---|
| 72 |
snapshot. Thus, you need not hesitate to create snapshots whenever |
|---|
| 73 |
they are useful. |
|---|
| 74 |
|
|---|
| 75 |
You can give a snapshot name as an argument to `C-x v =' or `C-x v |
|---|
| 76 |
~' (*note Old Versions::). Thus, you can use it to compare a snapshot |
|---|
| 77 |
against the current files, or two snapshots against each other, or a |
|---|
| 78 |
snapshot against a named version. |
|---|
| 79 |
|
|---|
| 80 |
|
|---|
| 81 |
File: emacs, Node: Snapshot Caveats, Prev: Making Snapshots, Up: Snapshots |
|---|
| 82 |
|
|---|
| 83 |
Snapshot Caveats |
|---|
| 84 |
................ |
|---|
| 85 |
|
|---|
| 86 |
VC's snapshot facilities are modeled on RCS's named-configuration |
|---|
| 87 |
support. They use RCS's native facilities for this, so under VC |
|---|
| 88 |
snapshots made using RCS are visible even when you bypass VC. |
|---|
| 89 |
|
|---|
| 90 |
For SCCS, VC implements snapshots itself. The files it uses contain |
|---|
| 91 |
name/file/version-number triples. These snapshots are visible only |
|---|
| 92 |
through VC. |
|---|
| 93 |
|
|---|
| 94 |
A snapshot is a set of checked-in versions. So make sure that all |
|---|
| 95 |
the files are checked in and not locked when you make a snapshot. |
|---|
| 96 |
|
|---|
| 97 |
File renaming and deletion can create some difficulties with |
|---|
| 98 |
snapshots. This is not a VC-specific problem, but a general design |
|---|
| 99 |
issue in version control systems that no one has solved very well yet. |
|---|
| 100 |
|
|---|
| 101 |
If you rename a registered file, you need to rename its master along |
|---|
| 102 |
with it (the command `vc-rename-file' does this automatically). If you |
|---|
| 103 |
are using SCCS, you must also update the records of the snapshot, to |
|---|
| 104 |
mention the file by its new name (`vc-rename-file' does this, too). An |
|---|
| 105 |
old snapshot that refers to a master file that no longer exists under |
|---|
| 106 |
the recorded name is invalid; VC can no longer retrieve it. It would |
|---|
| 107 |
be beyond the scope of this manual to explain enough about RCS and SCCS |
|---|
| 108 |
to explain how to update the snapshots by hand. |
|---|
| 109 |
|
|---|
| 110 |
Using `vc-rename-file' makes the snapshot remain valid for |
|---|
| 111 |
retrieval, but it does not solve all problems. For example, some of the |
|---|
| 112 |
files in your program probably refer to others by name. At the very |
|---|
| 113 |
least, the makefile probably mentions the file that you renamed. If you |
|---|
| 114 |
retrieve an old snapshot, the renamed file is retrieved under its new |
|---|
| 115 |
name, which is not the name that the makefile expects. So the program |
|---|
| 116 |
won't really work as retrieved. |
|---|
| 117 |
|
|---|
| 118 |
|
|---|
| 119 |
File: emacs, Node: Miscellaneous VC, Next: Customizing VC, Prev: Snapshots, Up: Version Control |
|---|
| 120 |
|
|---|
| 121 |
Miscellaneous Commands and Features of VC |
|---|
| 122 |
----------------------------------------- |
|---|
| 123 |
|
|---|
| 124 |
This section explains the less-frequently-used features of VC. |
|---|
| 125 |
|
|---|
| 126 |
* Menu: |
|---|
| 127 |
|
|---|
| 128 |
* Change Logs and VC:: Generating a change log file from log entries. |
|---|
| 129 |
* Renaming and VC:: A command to rename both the source and master |
|---|
| 130 |
file correctly. |
|---|
| 131 |
* Version Headers:: Inserting version control headers into working files. |
|---|
| 132 |
|
|---|
| 133 |
|
|---|
| 134 |
File: emacs, Node: Change Logs and VC, Next: Renaming and VC, Up: Miscellaneous VC |
|---|
| 135 |
|
|---|
| 136 |
Change Logs and VC |
|---|
| 137 |
.................. |
|---|
| 138 |
|
|---|
| 139 |
If you use RCS or CVS for a program and also maintain a change log |
|---|
| 140 |
file for it (*note Change Log::), you can generate change log entries |
|---|
| 141 |
automatically from the version control log entries: |
|---|
| 142 |
|
|---|
| 143 |
`C-x v a' |
|---|
| 144 |
Visit the current directory's change log file and, for registered |
|---|
| 145 |
files in that directory, create new entries for versions checked |
|---|
| 146 |
in since the most recent entry in the change log file. |
|---|
| 147 |
(`vc-update-change-log'). |
|---|
| 148 |
|
|---|
| 149 |
This command works with RCS or CVS only, not with SCCS. |
|---|
| 150 |
|
|---|
| 151 |
`C-u C-x v a' |
|---|
| 152 |
As above, but only find entries for the current buffer's file. |
|---|
| 153 |
|
|---|
| 154 |
`M-1 C-x v a' |
|---|
| 155 |
As above, but find entries for all the currently visited files |
|---|
| 156 |
that are maintained with version control. This works only with |
|---|
| 157 |
RCS, and it puts all entries in the log for the default directory, |
|---|
| 158 |
which may not be appropriate. |
|---|
| 159 |
|
|---|
| 160 |
For example, suppose the first line of `ChangeLog' is dated |
|---|
| 161 |
1999-04-10, and that the only check-in since then was by Nathaniel |
|---|
| 162 |
Bowditch to `rcs2log' on 1999-05-22 with log text `Ignore log messages |
|---|
| 163 |
that start with `#'.'. Then `C-x v a' visits `ChangeLog' and inserts |
|---|
| 164 |
text like this: |
|---|
| 165 |
|
|---|
| 166 |
1999-05-22 Nathaniel Bowditch <nat@apn.org> |
|---|
| 167 |
|
|---|
| 168 |
* rcs2log: Ignore log messages that start with `#'. |
|---|
| 169 |
|
|---|
| 170 |
You can then edit the new change log entry further as you wish. |
|---|
| 171 |
|
|---|
| 172 |
Some of the new change log entries may duplicate what's already in |
|---|
| 173 |
ChangeLog. You will have to remove these duplicates by hand. |
|---|
| 174 |
|
|---|
| 175 |
Normally, the log entry for file `foo' is displayed as `* foo: TEXT |
|---|
| 176 |
OF LOG ENTRY'. The `:' after `foo' is omitted if the text of the log |
|---|
| 177 |
entry starts with `(FUNCTIONNAME): '. For example, if the log entry |
|---|
| 178 |
for `vc.el' is `(vc-do-command): Check call-process status.', then the |
|---|
| 179 |
text in `ChangeLog' looks like this: |
|---|
| 180 |
|
|---|
| 181 |
1999-05-06 Nathaniel Bowditch <nat@apn.org> |
|---|
| 182 |
|
|---|
| 183 |
* vc.el (vc-do-command): Check call-process status. |
|---|
| 184 |
|
|---|
| 185 |
When `C-x v a' adds several change log entries at once, it groups |
|---|
| 186 |
related log entries together if they all are checked in by the same |
|---|
| 187 |
author at nearly the same time. If the log entries for several such |
|---|
| 188 |
files all have the same text, it coalesces them into a single entry. |
|---|
| 189 |
For example, suppose the most recent check-ins have the following log |
|---|
| 190 |
entries: |
|---|
| 191 |
|
|---|
| 192 |
* For `vc.texinfo': `Fix expansion typos.' |
|---|
| 193 |
* For `vc.el': `Don't call expand-file-name.' |
|---|
| 194 |
* For `vc-hooks.el': `Don't call expand-file-name.' |
|---|
| 195 |
|
|---|
| 196 |
They appear like this in `ChangeLog': |
|---|
| 197 |
|
|---|
| 198 |
1999-04-01 Nathaniel Bowditch <nat@apn.org> |
|---|
| 199 |
|
|---|
| 200 |
* vc.texinfo: Fix expansion typos. |
|---|
| 201 |
|
|---|
| 202 |
* vc.el, vc-hooks.el: Don't call expand-file-name. |
|---|
| 203 |
|
|---|
| 204 |
Normally, `C-x v a' separates log entries by a blank line, but you |
|---|
| 205 |
can mark several related log entries to be clumped together (without an |
|---|
| 206 |
intervening blank line) by starting the text of each related log entry |
|---|
| 207 |
with a label of the form `{CLUMPNAME} '. The label itself is not |
|---|
| 208 |
copied to `ChangeLog'. For example, suppose the log entries are: |
|---|
| 209 |
|
|---|
| 210 |
* For `vc.texinfo': `{expand} Fix expansion typos.' |
|---|
| 211 |
* For `vc.el': `{expand} Don't call expand-file-name.' |
|---|
| 212 |
* For `vc-hooks.el': `{expand} Don't call expand-file-name.' |
|---|
| 213 |
|
|---|
| 214 |
Then the text in `ChangeLog' looks like this: |
|---|
| 215 |
|
|---|
| 216 |
1999-04-01 Nathaniel Bowditch <nat@apn.org> |
|---|
| 217 |
|
|---|
| 218 |
* vc.texinfo: Fix expansion typos. |
|---|
| 219 |
* vc.el, vc-hooks.el: Don't call expand-file-name. |
|---|
| 220 |
|
|---|
| 221 |
A log entry whose text begins with `#' is not copied to `ChangeLog'. |
|---|
| 222 |
For example, if you merely fix some misspellings in comments, you can |
|---|
| 223 |
log the change with an entry beginning with `#' to avoid putting such |
|---|
| 224 |
trivia into `ChangeLog'. |
|---|
| 225 |
|
|---|
| 226 |
|
|---|
| 227 |
File: emacs, Node: Renaming and VC, Next: Version Headers, Prev: Change Logs and VC, Up: Miscellaneous VC |
|---|
| 228 |
|
|---|
| 229 |
Renaming VC Work Files and Master Files |
|---|
| 230 |
....................................... |
|---|
| 231 |
|
|---|
| 232 |
When you rename a registered file, you must also rename its master |
|---|
| 233 |
file correspondingly to get proper results. Use `vc-rename-file' to |
|---|
| 234 |
rename the source file as you specify, and rename its master file |
|---|
| 235 |
accordingly. It also updates any snapshots (*note Snapshots::) that |
|---|
| 236 |
mention the file, so that they use the new name; despite this, the |
|---|
| 237 |
snapshot thus modified may not completely work (*note Snapshot |
|---|
| 238 |
Caveats::). |
|---|
| 239 |
|
|---|
| 240 |
You cannot use `vc-rename-file' on a file that is locked by someone |
|---|
| 241 |
else. |
|---|
| 242 |
|
|---|
| 243 |
|
|---|
| 244 |
File: emacs, Node: Version Headers, Prev: Renaming and VC, Up: Miscellaneous VC |
|---|
| 245 |
|
|---|
| 246 |
Inserting Version Control Headers |
|---|
| 247 |
................................. |
|---|
| 248 |
|
|---|
| 249 |
Sometimes it is convenient to put version identification strings |
|---|
| 250 |
directly into working files. Certain special strings called "version |
|---|
| 251 |
headers" are replaced in each successive version by the number of that |
|---|
| 252 |
version. |
|---|
| 253 |
|
|---|
| 254 |
If you are using RCS, and version headers are present in your working |
|---|
| 255 |
files, Emacs can use them to determine the current version and the |
|---|
| 256 |
locking state of the files. This is more reliable than referring to the |
|---|
| 257 |
master files, which is done when there are no version headers. Note |
|---|
| 258 |
that in a multi-branch environment, version headers are necessary to |
|---|
| 259 |
make VC behave correctly (*note Multi-User Branching::). |
|---|
| 260 |
|
|---|
| 261 |
Searching for version headers is controlled by the variable |
|---|
| 262 |
`vc-consult-headers'. If it is non-`nil' (the default), Emacs searches |
|---|
| 263 |
for headers to determine the version number you are editing. Setting |
|---|
| 264 |
it to `nil' disables this feature. |
|---|
| 265 |
|
|---|
| 266 |
You can use the `C-x v h' command (`vc-insert-headers') to insert a |
|---|
| 267 |
suitable header string. |
|---|
| 268 |
|
|---|
| 269 |
`C-x v h' |
|---|
| 270 |
Insert headers in a file for use with your version-control system. |
|---|
| 271 |
|
|---|
| 272 |
The default header string is `$Id$' for RCS and `%W%' for SCCS. You |
|---|
| 273 |
can specify other headers to insert by setting the variable |
|---|
| 274 |
`vc-header-alist'. Its value is a list of elements of the form |
|---|
| 275 |
`(PROGRAM . STRING)' where PROGRAM is `RCS' or `SCCS' and STRING is the |
|---|
| 276 |
string to use. |
|---|
| 277 |
|
|---|
| 278 |
Instead of a single string, you can specify a list of strings; then |
|---|
| 279 |
each string in the list is inserted as a separate header on a line of |
|---|
| 280 |
its own. |
|---|
| 281 |
|
|---|
| 282 |
It is often necessary to use "superfluous" backslashes when writing |
|---|
| 283 |
the strings that you put in this variable. For instance, you might |
|---|
| 284 |
write `"$Id\$"' rather than `"$Id$"'. The extra backslash prevents the |
|---|
| 285 |
string constant from being interpreted as a header, if the Emacs Lisp |
|---|
| 286 |
file containing it is maintained with version control. |
|---|
| 287 |
|
|---|
| 288 |
Each header is inserted surrounded by tabs, inside comment |
|---|
| 289 |
delimiters, on a new line at point. Normally the ordinary comment |
|---|
| 290 |
start and comment end strings of the current mode are used, but for |
|---|
| 291 |
certain modes, there are special comment delimiters for this purpose; |
|---|
| 292 |
the variable `vc-comment-alist' specifies them. Each element of this |
|---|
| 293 |
list has the form `(MODE STARTER ENDER)'. |
|---|
| 294 |
|
|---|
| 295 |
The variable `vc-static-header-alist' specifies further strings to |
|---|
| 296 |
add based on the name of the buffer. Its value should be a list of |
|---|
| 297 |
elements of the form `(REGEXP . FORMAT)'. Whenever REGEXP matches the |
|---|
| 298 |
buffer name, FORMAT is inserted as part of the header. A header line |
|---|
| 299 |
is inserted for each element that matches the buffer name, and for each |
|---|
| 300 |
string specified by `vc-header-alist'. The header line is made by |
|---|
| 301 |
processing the string from `vc-header-alist' with the format taken from |
|---|
| 302 |
the element. The default value for `vc-static-header-alist' is as |
|---|
| 303 |
follows: |
|---|
| 304 |
|
|---|
| 305 |
(("\\.c$" . |
|---|
| 306 |
"\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\ |
|---|
| 307 |
#endif /* lint */\n")) |
|---|
| 308 |
|
|---|
| 309 |
It specifies insertion of text of this form: |
|---|
| 310 |
|
|---|
| 311 |
|
|---|
| 312 |
#ifndef lint |
|---|
| 313 |
static char vcid[] = "STRING"; |
|---|
| 314 |
#endif /* lint */ |
|---|
| 315 |
|
|---|
| 316 |
Note that the text above starts with a blank line. |
|---|
| 317 |
|
|---|
| 318 |
If you use more than one version header in a file, put them close |
|---|
| 319 |
together in the file. The mechanism in `revert-buffer' that preserves |
|---|
| 320 |
markers may not handle markers positioned between two version headers. |
|---|
| 321 |
|
|---|
| 322 |
|
|---|
| 323 |
File: emacs, Node: Customizing VC, Prev: Miscellaneous VC, Up: Version Control |
|---|
| 324 |
|
|---|
| 325 |
Customizing VC |
|---|
| 326 |
-------------- |
|---|
| 327 |
|
|---|
| 328 |
The variable `vc-handled-backends' determines which version control |
|---|
| 329 |
systems VC should handle. The default value is `(RCS CVS SCCS)', so it |
|---|
| 330 |
contains all three version systems that are currently supported. If |
|---|
| 331 |
you want VC to ignore one or more of these systems, exclude its name |
|---|
| 332 |
from the list. |
|---|
| 333 |
|
|---|
| 334 |
The order of systems in the list is significant: when you visit a |
|---|
| 335 |
file registered in more than one system (*note Local Version Control::), |
|---|
| 336 |
VC uses the system that comes first in `vc-handled-backends' by |
|---|
| 337 |
default. The order is also significant when you register a file for |
|---|
| 338 |
the first time, *note Registering:: for details. |
|---|
| 339 |
|
|---|
| 340 |
* Menu: |
|---|
| 341 |
|
|---|
| 342 |
* General VC Options:: Options that apply to multiple back ends. |
|---|
| 343 |
* RCS and SCCS:: Options for RCS and SCCS. |
|---|
| 344 |
* CVS Options:: Options for CVS. |
|---|
| 345 |
|
|---|
| 346 |
|
|---|
| 347 |
File: emacs, Node: General VC Options, Next: RCS and SCCS, Up: Customizing VC |
|---|
| 348 |
|
|---|
| 349 |
General Options |
|---|
| 350 |
............... |
|---|
| 351 |
|
|---|
| 352 |
Emacs normally does not save backup files for source files that are |
|---|
| 353 |
maintained with version control. If you want to make backup files even |
|---|
| 354 |
for files that use version control, set the variable |
|---|
| 355 |
`vc-make-backup-files' to a non-`nil' value. |
|---|
| 356 |
|
|---|
| 357 |
Normally the work file exists all the time, whether it is locked or |
|---|
| 358 |
not. If you set `vc-keep-workfiles' to `nil', then checking in a new |
|---|
| 359 |
version with `C-x C-q' deletes the work file; but any attempt to visit |
|---|
| 360 |
the file with Emacs creates it again. (With CVS, work files are always |
|---|
| 361 |
kept.) |
|---|
| 362 |
|
|---|
| 363 |
Editing a version-controlled file through a symbolic link can be |
|---|
| 364 |
dangerous. It bypasses the version control system--you can edit the |
|---|
| 365 |
file without locking it, and fail to check your changes in. Also, your |
|---|
| 366 |
changes might overwrite those of another user. To protect against |
|---|
| 367 |
this, VC checks each symbolic link that you visit, to see if it points |
|---|
| 368 |
to a file under version control. |
|---|
| 369 |
|
|---|
| 370 |
The variable `vc-follow-symlinks' controls what to do when a |
|---|
| 371 |
symbolic link points to a version-controlled file. If it is `nil', VC |
|---|
| 372 |
only displays a warning message. If it is `t', VC automatically |
|---|
| 373 |
follows the link, and visits the real file instead, telling you about |
|---|
| 374 |
this in the echo area. If the value is `ask' (the default), VC asks |
|---|
| 375 |
you each time whether to follow the link. |
|---|
| 376 |
|
|---|
| 377 |
If `vc-suppress-confirm' is non-`nil', then `C-x C-q' and `C-x v i' |
|---|
| 378 |
can save the current buffer without asking, and `C-x v u' also operates |
|---|
| 379 |
without asking for confirmation. (This variable does not affect `C-x v |
|---|
| 380 |
c'; that operation is so drastic that it should always ask for |
|---|
| 381 |
confirmation.) |
|---|
| 382 |
|
|---|
| 383 |
VC mode does much of its work by running the shell commands for RCS, |
|---|
| 384 |
CVS and SCCS. If `vc-command-messages' is non-`nil', VC displays |
|---|
| 385 |
messages to indicate which shell commands it runs, and additional |
|---|
| 386 |
messages when the commands finish. |
|---|
| 387 |
|
|---|
| 388 |
You can specify additional directories to search for version control |
|---|
| 389 |
programs by setting the variable `vc-path'. These directories are |
|---|
| 390 |
searched before the usual search path. It is rarely necessary to set |
|---|
| 391 |
this variable, because VC normally finds the proper files automatically. |
|---|
| 392 |
|
|---|
| 393 |
|
|---|
| 394 |
File: emacs, Node: RCS and SCCS, Next: CVS Options, Prev: General VC Options, Up: Customizing VC |
|---|
| 395 |
|
|---|
| 396 |
Options for RCS and SCCS |
|---|
| 397 |
........................ |
|---|
| 398 |
|
|---|
| 399 |
By default, RCS uses locking to coordinate the activities of several |
|---|
| 400 |
users, but there is a mode called "non-strict locking" in which you can |
|---|
| 401 |
check-in changes without locking the file first. Use `rcs -U' to |
|---|
| 402 |
switch to non-strict locking for a particular file, see the `rcs' |
|---|
| 403 |
manual page for details. |
|---|
| 404 |
|
|---|
| 405 |
When deducing the version control state of an RCS file, VC first |
|---|
| 406 |
looks for an RCS version header string in the file (*note Version |
|---|
| 407 |
Headers::). If there is no header string, VC normally looks at the |
|---|
| 408 |
file permissions of the work file; this is fast. But there might be |
|---|
| 409 |
situations when the file permissions cannot be trusted. In this case |
|---|
| 410 |
the master file has to be consulted, which is rather expensive. Also |
|---|
| 411 |
the master file can only tell you _if_ there's any lock on the file, |
|---|
| 412 |
but not whether your work file really contains that locked version. |
|---|
| 413 |
|
|---|
| 414 |
You can tell VC not to use version headers to determine the file |
|---|
| 415 |
status by setting `vc-consult-headers' to `nil'. VC then always uses |
|---|
| 416 |
the file permissions (if it is supposed to trust them), or else checks |
|---|
| 417 |
the master file. |
|---|
| 418 |
|
|---|
| 419 |
You can specify the criterion for whether to trust the file |
|---|
| 420 |
permissions by setting the variable `vc-mistrust-permissions'. Its |
|---|
| 421 |
value can be `t' (always mistrust the file permissions and check the |
|---|
| 422 |
master file), `nil' (always trust the file permissions), or a function |
|---|
| 423 |
of one argument which makes the decision. The argument is the |
|---|
| 424 |
directory name of the `RCS' subdirectory. A non-`nil' value from the |
|---|
| 425 |
function says to mistrust the file permissions. If you find that the |
|---|
| 426 |
file permissions of work files are changed erroneously, set |
|---|
| 427 |
`vc-mistrust-permissions' to `t'. Then VC always checks the master |
|---|
| 428 |
file to determine the file's status. |
|---|
| 429 |
|
|---|
| 430 |
VC determines the version control state of files under SCCS much as |
|---|
| 431 |
with RCS. It does not consider SCCS version headers, though. Thus, |
|---|
| 432 |
the variable `vc-mistrust-permissions' affects SCCS use, but |
|---|
| 433 |
`vc-consult-headers' does not. |
|---|
| 434 |
|
|---|
| 435 |
|
|---|
| 436 |
File: emacs, Node: CVS Options, Prev: RCS and SCCS, Up: Customizing VC |
|---|
| 437 |
|
|---|
| 438 |
Options specific for CVS |
|---|
| 439 |
........................ |
|---|
| 440 |
|
|---|
| 441 |
By default, CVS does not use locking to coordinate the activities of |
|---|
| 442 |
several users; anyone can change a work file at any time. However, |
|---|
| 443 |
there are ways to restrict this, resulting in behavior that resembles |
|---|
| 444 |
locking. |
|---|
| 445 |
|
|---|
| 446 |
For one thing, you can set the `CVSREAD' environment variable (the |
|---|
| 447 |
value you use makes no difference). If this variable is defined, CVS |
|---|
| 448 |
makes your work files read-only by default. In Emacs, you must type |
|---|
| 449 |
`C-x C-q' to make the file writable, so that editing works in fact |
|---|
| 450 |
similar as if locking was used. Note however, that no actual locking |
|---|
| 451 |
is performed, so several users can make their files writable at the |
|---|
| 452 |
same time. When setting `CVSREAD' for the first time, make sure to |
|---|
| 453 |
check out all your modules anew, so that the file protections are set |
|---|
| 454 |
correctly. |
|---|
| 455 |
|
|---|
| 456 |
Another way to achieve something similar to locking is to use the |
|---|
| 457 |
"watch" feature of CVS. If a file is being watched, CVS makes it |
|---|
| 458 |
read-only by default, and you must also use `C-x C-q' in Emacs to make |
|---|
| 459 |
it writable. VC calls `cvs edit' to make the file writable, and CVS |
|---|
| 460 |
takes care to notify other developers of the fact that you intend to |
|---|
| 461 |
change the file. See the CVS documentation for details on using the |
|---|
| 462 |
watch feature. |
|---|
| 463 |
|
|---|
| 464 |
When a file's repository is on a remote machine, VC tries to keep |
|---|
| 465 |
network interactions to a minimum. This is controlled by the variable |
|---|
| 466 |
`vc-cvs-stay-local'. If it is `t' (the default), then VC uses only the |
|---|
| 467 |
entry in the local CVS subdirectory to determine the file's state (and |
|---|
| 468 |
possibly information returned by previous CVS commands). One |
|---|
| 469 |
consequence of this is that when you have modified a file, and somebody |
|---|
| 470 |
else has already checked in other changes to the file, you are not |
|---|
| 471 |
notified of it until you actually try to commit. (But you can try to |
|---|
| 472 |
pick up any recent changes from the repository first, using `C-x v m |
|---|
| 473 |
<RET>', *note Merging::). |
|---|
| 474 |
|
|---|
| 475 |
When `vc-cvs-stay-local' is `t', VC also makes local version |
|---|
| 476 |
backups, so that simple diff and revert operations are completely local |
|---|
| 477 |
(*note Version Backups::). |
|---|
| 478 |
|
|---|
| 479 |
On the other hand, if you set `vc-cvs-stay-local' to `nil', then VC |
|---|
| 480 |
queries the remote repository _before_ it decides what to do in |
|---|
| 481 |
`vc-next-action' (`C-x v v'), just as it does for local repositories. |
|---|
| 482 |
It also does not make any version backups. |
|---|
| 483 |
|
|---|
| 484 |
You can also set `vc-cvs-stay-local' to a regular expression that is |
|---|
| 485 |
matched against the repository host name; VC then stays local only for |
|---|
| 486 |
repositories from hosts that match the pattern. |
|---|
| 487 |
|
|---|
| 488 |
|
|---|
| 489 |
File: emacs, Node: Directories, Next: Comparing Files, Prev: Version Control, Up: Files |
|---|
| 490 |
|
|---|
| 491 |
File Directories |
|---|
| 492 |
================ |
|---|
| 493 |
|
|---|
| 494 |
The file system groups files into "directories". A "directory |
|---|
| 495 |
listing" is a list of all the files in a directory. Emacs provides |
|---|
| 496 |
commands to create and delete directories, and to make directory |
|---|
| 497 |
listings in brief format (file names only) and verbose format (sizes, |
|---|
| 498 |
dates, and authors included). There is also a directory browser called |
|---|
| 499 |
Dired; see *Note Dired::. |
|---|
| 500 |
|
|---|
| 501 |
`C-x C-d DIR-OR-PATTERN <RET>' |
|---|
| 502 |
Display a brief directory listing (`list-directory'). |
|---|
| 503 |
|
|---|
| 504 |
`C-u C-x C-d DIR-OR-PATTERN <RET>' |
|---|
| 505 |
Display a verbose directory listing. |
|---|
| 506 |
|
|---|
| 507 |
`M-x make-directory <RET> DIRNAME <RET>' |
|---|
| 508 |
Create a new directory named DIRNAME. |
|---|
| 509 |
|
|---|
| 510 |
`M-x delete-directory <RET> DIRNAME <RET>' |
|---|
| 511 |
Delete the directory named DIRNAME. It must be empty, or you get |
|---|
| 512 |
an error. |
|---|
| 513 |
|
|---|
| 514 |
The command to display a directory listing is `C-x C-d' |
|---|
| 515 |
(`list-directory'). It reads using the minibuffer a file name which is |
|---|
| 516 |
either a directory to be listed or a wildcard-containing pattern for |
|---|
| 517 |
the files to be listed. For example, |
|---|
| 518 |
|
|---|
| 519 |
C-x C-d /u2/emacs/etc <RET> |
|---|
| 520 |
|
|---|
| 521 |
lists all the files in directory `/u2/emacs/etc'. Here is an example |
|---|
| 522 |
of specifying a file name pattern: |
|---|
| 523 |
|
|---|
| 524 |
C-x C-d /u2/emacs/src/*.c <RET> |
|---|
| 525 |
|
|---|
| 526 |
Normally, `C-x C-d' displays a brief directory listing containing |
|---|
| 527 |
just file names. A numeric argument (regardless of value) tells it to |
|---|
| 528 |
make a verbose listing including sizes, dates, and owners (like `ls |
|---|
| 529 |
-l'). |
|---|
| 530 |
|
|---|
| 531 |
The text of a directory listing is obtained by running `ls' in an |
|---|
| 532 |
inferior process. Two Emacs variables control the switches passed to |
|---|
| 533 |
`ls': `list-directory-brief-switches' is a string giving the switches |
|---|
| 534 |
to use in brief listings (`"-CF"' by default), and |
|---|
| 535 |
`list-directory-verbose-switches' is a string giving the switches to |
|---|
| 536 |
use in a verbose listing (`"-l"' by default). |
|---|
| 537 |
|
|---|
| 538 |
|
|---|
| 539 |
File: emacs, Node: Comparing Files, Next: Misc File Ops, Prev: Directories, Up: Files |
|---|
| 540 |
|
|---|
| 541 |
Comparing Files |
|---|
| 542 |
=============== |
|---|
| 543 |
|
|---|
| 544 |
The command `M-x diff' compares two files, displaying the |
|---|
| 545 |
differences in an Emacs buffer named `*diff*'. It works by running the |
|---|
| 546 |
`diff' program, using options taken from the variable `diff-switches'. |
|---|
| 547 |
The value of `diff-switches' should be a string; the default is `"-c"' |
|---|
| 548 |
to specify a context diff. |
|---|
| 549 |
|
|---|
| 550 |
The buffer `*diff*' has Compilation mode as its major mode, so you |
|---|
| 551 |
can use `C-x `' to visit successive changed locations in the two source |
|---|
| 552 |
files. You can also move to a particular hunk of changes and type |
|---|
| 553 |
<RET> or `C-c C-c', or click `Mouse-2' on it, to move to the |
|---|
| 554 |
corresponding source location. You can also use the other special |
|---|
| 555 |
commands of Compilation mode: <SPC> and <DEL> for scrolling, and `M-p' |
|---|
| 556 |
and `M-n' for cursor motion. *Note Compilation::. |
|---|
| 557 |
|
|---|
| 558 |
The command `M-x diff-backup' compares a specified file with its most |
|---|
| 559 |
recent backup. If you specify the name of a backup file, `diff-backup' |
|---|
| 560 |
compares it with the source file that it is a backup of. |
|---|
| 561 |
|
|---|
| 562 |
The command `M-x compare-windows' compares the text in the current |
|---|
| 563 |
window with that in the next window. Comparison starts at point in each |
|---|
| 564 |
window, and each starting position is pushed on the mark ring in its |
|---|
| 565 |
respective buffer. Then point moves forward in each window, a character |
|---|
| 566 |
at a time, until a mismatch between the two windows is reached. Then |
|---|
| 567 |
the command is finished. For more information about windows in Emacs, |
|---|
| 568 |
*Note Windows::. |
|---|
| 569 |
|
|---|
| 570 |
With a numeric argument, `compare-windows' ignores changes in |
|---|
| 571 |
whitespace. If the variable `compare-ignore-case' is non-`nil', it |
|---|
| 572 |
ignores differences in case as well. |
|---|
| 573 |
|
|---|
| 574 |
Differences between versions of files are often distributed as |
|---|
| 575 |
"patches", which are the output from `diff' or a version control system |
|---|
| 576 |
that uses `diff'. `M-x diff-mode' turns on Diff mode, a major mode for |
|---|
| 577 |
viewing and editing patches, either as "unified diffs" or "context |
|---|
| 578 |
diffs." |
|---|
| 579 |
|
|---|
| 580 |
You can use `M-x smerge-mode' to turn on Smerge mode, a minor mode |
|---|
| 581 |
for editing output from the `diff3' program. This is typically the |
|---|
| 582 |
result of a failed merge from a version control system "update" outside |
|---|
| 583 |
VC, due to conflicting changes to a file. Smerge mode provides |
|---|
| 584 |
commands to resolve conflicts by selecting specific changes. |
|---|
| 585 |
|
|---|
| 586 |
See also *Note Emerge::, and *Note Top: (ediff)Top, for convenient |
|---|
| 587 |
facilities for merging two similar files. |
|---|
| 588 |
|
|---|
| 589 |
|
|---|
| 590 |
File: emacs, Node: Misc File Ops, Next: Compressed Files, Prev: Comparing Files, Up: Files |
|---|
| 591 |
|
|---|
| 592 |
Miscellaneous File Operations |
|---|
| 593 |
============================= |
|---|
| 594 |
|
|---|
| 595 |
Emacs has commands for performing many other operations on files. |
|---|
| 596 |
All operate on one file; they do not accept wildcard file names. |
|---|
| 597 |
|
|---|
| 598 |
`M-x view-file' allows you to scan or read a file by sequential |
|---|
| 599 |
screenfuls. It reads a file name argument using the minibuffer. After |
|---|
| 600 |
reading the file into an Emacs buffer, `view-file' displays the |
|---|
| 601 |
beginning. You can then type <SPC> to scroll forward one windowful, or |
|---|
| 602 |
<DEL> to scroll backward. Various other commands are provided for |
|---|
| 603 |
moving around in the file, but none for changing it; type `?' while |
|---|
| 604 |
viewing for a list of them. They are mostly the same as normal Emacs |
|---|
| 605 |
cursor motion commands. To exit from viewing, type `q'. The commands |
|---|
| 606 |
for viewing are defined by a special major mode called View mode. |
|---|
| 607 |
|
|---|
| 608 |
A related command, `M-x view-buffer', views a buffer already present |
|---|
| 609 |
in Emacs. *Note Misc Buffer::. |
|---|
| 610 |
|
|---|
| 611 |
`M-x insert-file' (also `C-x i') inserts a copy of the contents of |
|---|
| 612 |
the specified file into the current buffer at point, leaving point |
|---|
| 613 |
unchanged before the contents and the mark after them. |
|---|
| 614 |
|
|---|
| 615 |
`M-x write-region' is the inverse of `M-x insert-file'; it copies |
|---|
| 616 |
the contents of the region into the specified file. `M-x |
|---|
| 617 |
append-to-file' adds the text of the region to the end of the specified |
|---|
| 618 |
file. *Note Accumulating Text::. |
|---|
| 619 |
|
|---|
| 620 |
`M-x delete-file' deletes the specified file, like the `rm' command |
|---|
| 621 |
in the shell. If you are deleting many files in one directory, it may |
|---|
| 622 |
be more convenient to use Dired (*note Dired::). |
|---|
| 623 |
|
|---|
| 624 |
`M-x rename-file' reads two file names OLD and NEW using the |
|---|
| 625 |
minibuffer, then renames file OLD as NEW. If the file name NEW already |
|---|
| 626 |
exists, you must confirm with `yes' or renaming is not done; this is |
|---|
| 627 |
because renaming causes the old meaning of the name NEW to be lost. If |
|---|
| 628 |
OLD and NEW are on different file systems, the file OLD is copied and |
|---|
| 629 |
deleted. |
|---|
| 630 |
|
|---|
| 631 |
The similar command `M-x add-name-to-file' is used to add an |
|---|
| 632 |
additional name to an existing file without removing its old name. The |
|---|
| 633 |
new name is created as a "hard link" to the existing file. The new |
|---|
| 634 |
name must belong on the same file system that the file is on. On |
|---|
| 635 |
Windows, this command works only if the file resides in an NTFS file |
|---|
| 636 |
system. On MS-DOS, it works by copying the file. |
|---|
| 637 |
|
|---|
| 638 |
`M-x copy-file' reads the file OLD and writes a new file named NEW |
|---|
| 639 |
with the same contents. Confirmation is required if a file named NEW |
|---|
| 640 |
already exists, because copying has the consequence of overwriting the |
|---|
| 641 |
old contents of the file NEW. |
|---|
| 642 |
|
|---|
| 643 |
`M-x make-symbolic-link' reads two file names TARGET and LINKNAME, |
|---|
| 644 |
then creates a symbolic link named LINKNAME, which points at TARGET. |
|---|
| 645 |
The effect is that future attempts to open file LINKNAME will refer to |
|---|
| 646 |
whatever file is named TARGET at the time the opening is done, or will |
|---|
| 647 |
get an error if the name TARGET is not in use at that time. This |
|---|
| 648 |
command does not expand the argument TARGET, so that it allows you to |
|---|
| 649 |
specify a relative name as the target of the link. |
|---|
| 650 |
|
|---|
| 651 |
Confirmation is required when creating the link if LINKNAME is in |
|---|
| 652 |
use. Note that not all systems support symbolic links; on systems that |
|---|
| 653 |
don't support them, this command is not defined. |
|---|
| 654 |
|
|---|
| 655 |
|
|---|
| 656 |
File: emacs, Node: Compressed Files, Next: File Archives, Prev: Misc File Ops, Up: Files |
|---|
| 657 |
|
|---|
| 658 |
Accessing Compressed Files |
|---|
| 659 |
========================== |
|---|
| 660 |
|
|---|
| 661 |
Emacs comes with a library that can automatically uncompress |
|---|
| 662 |
compressed files when you visit them, and automatically recompress them |
|---|
| 663 |
if you alter them and save them. To enable this feature, type the |
|---|
| 664 |
command `M-x auto-compression-mode'. You can enable it permanently by |
|---|
| 665 |
customizing the option `auto-compression-mode'. |
|---|
| 666 |
|
|---|
| 667 |
When automatic compression (which implies automatic uncompression as |
|---|
| 668 |
well) is enabled, Emacs recognizes compressed files by their file names. |
|---|
| 669 |
File names ending in `.gz' indicate a file compressed with `gzip'. |
|---|
| 670 |
Other endings indicate other compression programs. |
|---|
| 671 |
|
|---|
| 672 |
Automatic uncompression and compression apply to all the operations |
|---|
| 673 |
in which Emacs uses the contents of a file. This includes visiting it, |
|---|
| 674 |
saving it, inserting its contents into a buffer, loading it, and byte |
|---|
| 675 |
compiling it. |
|---|
| 676 |
|
|---|
| 677 |
|
|---|
| 678 |
File: emacs, Node: File Archives, Next: Remote Files, Prev: Compressed Files, Up: Files |
|---|
| 679 |
|
|---|
| 680 |
File Archives |
|---|
| 681 |
============= |
|---|
| 682 |
|
|---|
| 683 |
A file whose name ends in `.tar' is normally an "archive" made by |
|---|
| 684 |
the `tar' program. Emacs views these files in a special mode called |
|---|
| 685 |
Tar mode which provides a Dired-like list of the contents (*note |
|---|
| 686 |
Dired::). You can move around through the list just as you would in |
|---|
| 687 |
Dired, and visit the subfiles contained in the archive. However, not |
|---|
| 688 |
all Dired commands are available in Tar mode. |
|---|
| 689 |
|
|---|
| 690 |
If you enable Auto Compression mode (*note Compressed Files::), then |
|---|
| 691 |
Tar mode is used also for compressed archives--files with extensions |
|---|
| 692 |
`.tgz', `.tar.Z' and `.tar.gz'. |
|---|
| 693 |
|
|---|
| 694 |
The keys `e', `f' and <RET> all extract a component file into its |
|---|
| 695 |
own buffer. You can edit it there and when you save the buffer the |
|---|
| 696 |
edited version will replace the version in the Tar buffer. `v' |
|---|
| 697 |
extracts a file into a buffer in View mode. `o' extracts the file and |
|---|
| 698 |
displays it in another window, so you could edit the file and operate |
|---|
| 699 |
on the archive simultaneously. `d' marks a file for deletion when you |
|---|
| 700 |
later use `x', and `u' unmarks a file, as in Dired. `C' copies a file |
|---|
| 701 |
from the archive to disk and `R' renames a file. `g' reverts the |
|---|
| 702 |
buffer from the archive on disk. |
|---|
| 703 |
|
|---|
| 704 |
The keys `M', `G', and `O' change the file's permission bits, group, |
|---|
| 705 |
and owner, respectively. |
|---|
| 706 |
|
|---|
| 707 |
If your display supports colors and the mouse, moving the mouse |
|---|
| 708 |
pointer across a file name highlights that file name, indicating that |
|---|
| 709 |
you can click on it. Clicking `Mouse-2' on the highlighted file name |
|---|
| 710 |
extracts the file into a buffer and displays that buffer. |
|---|
| 711 |
|
|---|
| 712 |
Saving the Tar buffer writes a new version of the archive to disk |
|---|
| 713 |
with the changes you made to the components. |
|---|
| 714 |
|
|---|
| 715 |
You don't need the `tar' program to use Tar mode--Emacs reads the |
|---|
| 716 |
archives directly. However, accessing compressed archives requires the |
|---|
| 717 |
appropriate uncompression program. |
|---|
| 718 |
|
|---|
| 719 |
A separate but similar Archive mode is used for archives produced by |
|---|
| 720 |
the programs `arc', `jar', `lzh', `zip', and `zoo', which have |
|---|
| 721 |
extensions corresponding to the program names. |
|---|
| 722 |
|
|---|
| 723 |
The key bindings of Archive mode are similar to those in Tar mode, |
|---|
| 724 |
with the addition of the `m' key which marks a file for subsequent |
|---|
| 725 |
operations, and `M-<DEL>' which unmarks all the marked files. Also, |
|---|
| 726 |
the `a' key toggles the display of detailed file information, for those |
|---|
| 727 |
archive types where it won't fit in a single line. Operations such as |
|---|
| 728 |
renaming a subfile, or changing its mode or owner, are supported only |
|---|
| 729 |
for some of the archive formats. |
|---|
| 730 |
|
|---|
| 731 |
Unlike Tar mode, Archive mode runs the archiving program to unpack |
|---|
| 732 |
and repack archives. Details of the program names and their options |
|---|
| 733 |
can be set in the `Archive' Customize group. However, you don't need |
|---|
| 734 |
these programs to look at the archive table of contents, only to |
|---|
| 735 |
extract or manipulate the subfiles in the archive. |
|---|
| 736 |
|
|---|
| 737 |
|
|---|
| 738 |
File: emacs, Node: Remote Files, Next: Quoted File Names, Prev: File Archives, Up: Files |
|---|
| 739 |
|
|---|
| 740 |
Remote Files |
|---|
| 741 |
============ |
|---|
| 742 |
|
|---|
| 743 |
You can refer to files on other machines using a special file name |
|---|
| 744 |
syntax: |
|---|
| 745 |
|
|---|
| 746 |
/HOST:FILENAME |
|---|
| 747 |
/USER@HOST:FILENAME |
|---|
| 748 |
/USER@HOST#PORT:FILENAME |
|---|
| 749 |
|
|---|
| 750 |
When you do this, Emacs uses the FTP program to read and write files on |
|---|
| 751 |
the specified host. It logs in through FTP using your user name or the |
|---|
| 752 |
name USER. It may ask you for a password from time to time; this is |
|---|
| 753 |
used for logging in on HOST. The form using PORT allows you to access |
|---|
| 754 |
servers running on a non-default TCP port. |
|---|
| 755 |
|
|---|
| 756 |
If you want to disable backups for remote files, set the variable |
|---|
| 757 |
`ange-ftp-make-backup-files' to `nil'. |
|---|
| 758 |
|
|---|
| 759 |
Normally, if you do not specify a user name in a remote file name, |
|---|
| 760 |
that means to use your own user name. But if you set the variable |
|---|
| 761 |
`ange-ftp-default-user' to a string, that string is used instead. (The |
|---|
| 762 |
Emacs package that implements FTP file access is called `ange-ftp'.) |
|---|
| 763 |
|
|---|
| 764 |
To visit files accessible by anonymous FTP, you use special user |
|---|
| 765 |
names `anonymous' or `ftp'. Passwords for these user names are handled |
|---|
| 766 |
specially. The variable `ange-ftp-generate-anonymous-password' |
|---|
| 767 |
controls what happens: if the value of this variable is a string, then |
|---|
| 768 |
that string is used as the password; if non-`nil' (the default), then |
|---|
| 769 |
the value of `user-mail-address' is used; if `nil', the user is prompted |
|---|
| 770 |
for a password as normal. |
|---|
| 771 |
|
|---|
| 772 |
Sometimes you may be unable to access files on a remote machine |
|---|
| 773 |
because a "firewall" in between blocks the connection for security |
|---|
| 774 |
reasons. If you can log in on a "gateway" machine from which the |
|---|
| 775 |
target files _are_ accessible, and whose FTP server supports gatewaying |
|---|
| 776 |
features, you can still use remote file names; all you have to do is |
|---|
| 777 |
specify the name of the gateway machine by setting the variable |
|---|
| 778 |
`ange-ftp-gateway-host', and set `ange-ftp-smart-gateway' to `t'. |
|---|
| 779 |
Otherwise you may be able to make remote file names work, but the |
|---|
| 780 |
procedure is complex. You can read the instructions by typing `M-x |
|---|
| 781 |
finder-commentary <RET> ange-ftp <RET>'. |
|---|
| 782 |
|
|---|
| 783 |
You can entirely turn off the FTP file name feature by removing the |
|---|
| 784 |
entries `ange-ftp-completion-hook-function' and |
|---|
| 785 |
`ange-ftp-hook-function' from the variable `file-name-handler-alist'. |
|---|
| 786 |
You can turn off the feature in individual cases by quoting the file |
|---|
| 787 |
name with `/:' (*note Quoted File Names::). |
|---|
| 788 |
|
|---|
| 789 |
|
|---|
| 790 |
File: emacs, Node: Quoted File Names, Next: File Name Cache, Prev: Remote Files, Up: Files |
|---|
| 791 |
|
|---|
| 792 |
Quoted File Names |
|---|
| 793 |
================= |
|---|
| 794 |
|
|---|
| 795 |
You can "quote" an absolute file name to prevent special characters |
|---|
| 796 |
and syntax in it from having their special effects. The way to do this |
|---|
| 797 |
is to add `/:' at the beginning. |
|---|
| 798 |
|
|---|
| 799 |
For example, you can quote a local file name which appears remote, to |
|---|
| 800 |
prevent it from being treated as a remote file name. Thus, if you have |
|---|
| 801 |
a directory named `/foo:' and a file named `bar' in it, you can refer |
|---|
| 802 |
to that file in Emacs as `/:/foo:/bar'. |
|---|
| 803 |
|
|---|
| 804 |
`/:' can also prevent `~' from being treated as a special character |
|---|
| 805 |
for a user's home directory. For example, `/:/tmp/~hack' refers to a |
|---|
| 806 |
file whose name is `~hack' in directory `/tmp'. |
|---|
| 807 |
|
|---|
| 808 |
Likewise, quoting with `/:' is one way to enter in the minibuffer a |
|---|
| 809 |
file name that contains `$'. However, the `/:' must be at the |
|---|
| 810 |
beginning of the minibuffer in order to quote `$'. |
|---|
| 811 |
|
|---|
| 812 |
You can also quote wildcard characters with `/:', for visiting. For |
|---|
| 813 |
example, `/:/tmp/foo*bar' visits the file `/tmp/foo*bar'. However, in |
|---|
| 814 |
most cases you can simply type the wildcard characters for themselves. |
|---|
| 815 |
For example, if the only file name in `/tmp' that starts with `foo' and |
|---|
| 816 |
ends with `bar' is `foo*bar', then specifying `/tmp/foo*bar' will visit |
|---|
| 817 |
just `/tmp/foo*bar'. Another way is to specify `/tmp/foo[*]bar'. |
|---|
| 818 |
|
|---|
| 819 |
|
|---|
| 820 |
File: emacs, Node: File Name Cache, Next: File Conveniences, Prev: Quoted File Names, Up: Files |
|---|
| 821 |
|
|---|
| 822 |
File Name Cache |
|---|
| 823 |
=============== |
|---|
| 824 |
|
|---|
| 825 |
You can use the "file name cache" to make it easy to locate a file |
|---|
| 826 |
by name, without having to remember exactly where it is located. When |
|---|
| 827 |
typing a file name in the minibuffer, `C-<tab>' |
|---|
| 828 |
(`file-cache-minibuffer-complete') completes it using the file name |
|---|
| 829 |
cache. If you repeat `C-<tab>', that cycles through the possible |
|---|
| 830 |
completions of what you had originally typed. Note that the `C-<tab>' |
|---|
| 831 |
character cannot be typed on most text-only terminals. |
|---|
| 832 |
|
|---|
| 833 |
The file name cache does not fill up automatically. Instead, you |
|---|
| 834 |
load file names into the cache using these commands: |
|---|
| 835 |
|
|---|
| 836 |
`M-x file-cache-add-directory <RET> DIRECTORY <RET>' |
|---|
| 837 |
Add each file name in DIRECTORY to the file name cache. |
|---|
| 838 |
|
|---|
| 839 |
`M-x file-cache-add-directory-using-find <RET> DIRECTORY <RET>' |
|---|
| 840 |
Add each file name in DIRECTORY and all of its nested |
|---|
| 841 |
subdirectories to the file name cache. |
|---|
| 842 |
|
|---|
| 843 |
`M-x file-cache-add-directory-using-locate <RET> DIRECTORY <RET>' |
|---|
| 844 |
Add each file name in DIRECTORY and all of its nested |
|---|
| 845 |
subdirectories to the file name cache, using `locate' to find them |
|---|
| 846 |
all. |
|---|
| 847 |
|
|---|
| 848 |
`M-x file-cache-add-directory-list <RET> VARIABLE <RET>' |
|---|
| 849 |
Add each file name in each directory listed in VARIABLE to the |
|---|
| 850 |
file name cache. VARIABLE should be a Lisp variable such as |
|---|
| 851 |
`load-path' or `exec-path', whose value is a list of directory |
|---|
| 852 |
names. |
|---|
| 853 |
|
|---|
| 854 |
`M-x file-cache-clear-cache <RET>' |
|---|
| 855 |
Clear the cache; that is, remove all file names from it. |
|---|
| 856 |
|
|---|
| 857 |
|
|---|
| 858 |
File: emacs, Node: File Conveniences, Prev: File Name Cache, Up: Files |
|---|
| 859 |
|
|---|
| 860 |
Convenience Features for Finding Files |
|---|
| 861 |
====================================== |
|---|
| 862 |
|
|---|
| 863 |
If you enable Recentf mode, with `M-x recentf-mode', the `File' menu |
|---|
| 864 |
includes a submenu containing a list of recently opened files. `M-x |
|---|
| 865 |
recentf-save-list' saves the current `recent-file-list' to a file, and |
|---|
| 866 |
`M-x recentf-edit-list' edits it. |
|---|
| 867 |
|
|---|
| 868 |
When Auto-image-file minor mode is enabled, visiting an image file |
|---|
| 869 |
displays it as an image, not as text. Likewise, inserting an image |
|---|
| 870 |
file into a buffer inserts it as an image. This works only when Emacs |
|---|
| 871 |
can display the relevant image type. The variables |
|---|
| 872 |
`image-file-name-extensions' or `image-file-name-regexps' control which |
|---|
| 873 |
file names are recognized as containing images. |
|---|
| 874 |
|
|---|
| 875 |
The `M-x ffap' command generalizes `find-file' with more powerful |
|---|
| 876 |
heuristic defaults (*note FFAP::), often based on the text at point. |
|---|
| 877 |
Partial Completion mode offers other features extending `find-file', |
|---|
| 878 |
which can be used with `ffap'. *Note Completion Options::. |
|---|
| 879 |
|
|---|
| 880 |
|
|---|
| 881 |
File: emacs, Node: Buffers, Next: Windows, Prev: Files, Up: Top |
|---|
| 882 |
|
|---|
| 883 |
Using Multiple Buffers |
|---|
| 884 |
********************** |
|---|
| 885 |
|
|---|
| 886 |
The text you are editing in Emacs resides in an object called a |
|---|
| 887 |
"buffer". Each time you visit a file, a buffer is created to hold the |
|---|
| 888 |
file's text. Each time you invoke Dired, a buffer is created to hold |
|---|
| 889 |
the directory listing. If you send a message with `C-x m', a buffer |
|---|
| 890 |
named `*mail*' is used to hold the text of the message. When you ask |
|---|
| 891 |
for a command's documentation, that appears in a buffer called `*Help*'. |
|---|
| 892 |
|
|---|
| 893 |
At any time, one and only one buffer is "current". It is also |
|---|
| 894 |
called the "selected buffer". Often we say that a command operates on |
|---|
| 895 |
"the buffer" as if there were only one; but really this means that the |
|---|
| 896 |
command operates on the current buffer (most commands do). |
|---|
| 897 |
|
|---|
| 898 |
When Emacs has multiple windows, each window has its own chosen |
|---|
| 899 |
buffer and displays it; at any time, only one of the windows is |
|---|
| 900 |
selected, and its chosen buffer is the current buffer. Each window's |
|---|
| 901 |
mode line normally displays the name of the window's chosen buffer |
|---|
| 902 |
(*note Windows::). |
|---|
| 903 |
|
|---|
| 904 |
Each buffer has a name, which can be of any length, and you can |
|---|
| 905 |
select any buffer by giving its name. Most buffers are made by |
|---|
| 906 |
visiting files, and their names are derived from the files' names. But |
|---|
| 907 |
you can also create an empty buffer with any name you want. A newly |
|---|
| 908 |
started Emacs has a buffer named `*scratch*' which can be used for |
|---|
| 909 |
evaluating Lisp expressions in Emacs. The distinction between upper |
|---|
| 910 |
and lower case matters in buffer names. |
|---|
| 911 |
|
|---|
| 912 |
Each buffer records individually what file it is visiting, whether |
|---|
| 913 |
it is modified, and what major mode and minor modes are in effect in it |
|---|
| 914 |
(*note Major Modes::). Any Emacs variable can be made "local to" a |
|---|
| 915 |
particular buffer, meaning its value in that buffer can be different |
|---|
| 916 |
from the value in other buffers. *Note Locals::. |
|---|
| 917 |
|
|---|
| 918 |
A buffer's size cannot be larger than some maximum, which is defined |
|---|
| 919 |
by the largest buffer position representable by the "Emacs integer" |
|---|
| 920 |
data type. This is because Emacs tracks buffer positions using that |
|---|
| 921 |
data type. For 32-bit machines, the largest buffer size is 128 |
|---|
| 922 |
megabytes. |
|---|
| 923 |
|
|---|
| 924 |
* Menu: |
|---|
| 925 |
|
|---|
| 926 |
* Select Buffer:: Creating a new buffer or reselecting an old one. |
|---|
| 927 |
* List Buffers:: Getting a list of buffers that exist. |
|---|
| 928 |
* Misc Buffer:: Renaming; changing read-onlyness; copying text. |
|---|
| 929 |
* Kill Buffer:: Killing buffers you no longer need. |
|---|
| 930 |
* Several Buffers:: How to go through the list of all buffers |
|---|
| 931 |
and operate variously on several of them. |
|---|
| 932 |
* Indirect Buffers:: An indirect buffer shares the text of another buffer. |
|---|
| 933 |
* Buffer Convenience:: Convenience and customization features for |
|---|
| 934 |
buffer handling. |
|---|
| 935 |
|
|---|
| 936 |
|
|---|
| 937 |
File: emacs, Node: Select Buffer, Next: List Buffers, Up: Buffers |
|---|
| 938 |
|
|---|
| 939 |
Creating and Selecting Buffers |
|---|
| 940 |
============================== |
|---|
| 941 |
|
|---|
| 942 |
`C-x b BUFFER <RET>' |
|---|
| 943 |
Select or create a buffer named BUFFER (`switch-to-buffer'). |
|---|
| 944 |
|
|---|
| 945 |
`C-x 4 b BUFFER <RET>' |
|---|
| 946 |
Similar, but select BUFFER in another window |
|---|
| 947 |
(`switch-to-buffer-other-window'). |
|---|
| 948 |
|
|---|
| 949 |
`C-x 5 b BUFFER <RET>' |
|---|
| 950 |
Similar, but select BUFFER in a separate frame |
|---|
| 951 |
(`switch-to-buffer-other-frame'). |
|---|
| 952 |
|
|---|
| 953 |
To select the buffer named BUFNAME, type `C-x b BUFNAME <RET>'. |
|---|
| 954 |
This runs the command `switch-to-buffer' with argument BUFNAME. You |
|---|
| 955 |
can use completion on an abbreviation for the buffer name you want |
|---|
| 956 |
(*note Completion::). An empty argument to `C-x b' specifies the |
|---|
| 957 |
buffer that was current most recently among those not now displayed in |
|---|
| 958 |
any window. |
|---|
| 959 |
|
|---|
| 960 |
To select a buffer in a window other than the current one, type `C-x |
|---|
| 961 |
4 b BUFNAME <RET>'. This runs the command |
|---|
| 962 |
`switch-to-buffer-other-window' which displays the buffer BUFNAME in |
|---|
| 963 |
another window. By default, if displaying the buffer causes two |
|---|
| 964 |
vertically adjacent windows to be displayed, the heights of those |
|---|
| 965 |
windows are evened out; to countermand that and preserve the window |
|---|
| 966 |
configuration, set the variable `even-window-heights' to `nil'. |
|---|
| 967 |
|
|---|
| 968 |
Similarly, `C-x 5 b BUFFER <RET>' runs the command |
|---|
| 969 |
`switch-to-buffer-other-frame' which selects a buffer in another frame. |
|---|
| 970 |
|
|---|
| 971 |
You can control how certain buffers are handled by these commands by |
|---|
| 972 |
customizing the variables `special-display-buffer-names', |
|---|
| 973 |
`special-display-regexps', `same-window-buffer-names', and |
|---|
| 974 |
`same-window-regexps'. See *Note Force Same Window::, and *Note |
|---|
| 975 |
Special Buffer Frames::, for more about these variables. In addition, |
|---|
| 976 |
if the value of `display-buffer-reuse-frames' is non-`nil', and the |
|---|
| 977 |
buffer you want to switch to is already displayed in some frame, Emacs |
|---|
| 978 |
will raise that frame. |
|---|
| 979 |
|
|---|
| 980 |
Most buffers are created by visiting files, or by Emacs commands that |
|---|
| 981 |
want to display some text, but you can also create a buffer explicitly |
|---|
| 982 |
by typing `C-x b BUFNAME <RET>'. This makes a new, empty buffer that |
|---|
| 983 |
is not visiting any file, and selects it for editing. Such buffers are |
|---|
| 984 |
used for making notes to yourself. If you try to save one, you are |
|---|
| 985 |
asked for the file name to use. The new buffer's major mode is |
|---|
| 986 |
determined by the value of `default-major-mode' (*note Major Modes::). |
|---|
| 987 |
|
|---|
| 988 |
Note that `C-x C-f', and any other command for visiting a file, can |
|---|
| 989 |
also be used to switch to an existing file-visiting buffer. *Note |
|---|
| 990 |
Visiting::. |
|---|
| 991 |
|
|---|
| 992 |
Emacs uses buffer names that start with a space for internal |
|---|
| 993 |
purposes. It treats these buffers specially in minor ways--for |
|---|
| 994 |
example, by default they do not record undo information. It is best to |
|---|
| 995 |
avoid using such buffer names yourself. |
|---|
| 996 |
|
|---|
| 997 |
|
|---|
| 998 |
File: emacs, Node: List Buffers, Next: Misc Buffer, Prev: Select Buffer, Up: Buffers |
|---|
| 999 |
|
|---|
| 1000 |
Listing Existing Buffers |
|---|
| 1001 |
======================== |
|---|
| 1002 |
|
|---|
| 1003 |
`C-x C-b' |
|---|
| 1004 |
List the existing buffers (`list-buffers'). |
|---|
| 1005 |
|
|---|
| 1006 |
To display a list of all the buffers that exist, type `C-x C-b'. |
|---|
| 1007 |
Each line in the list shows one buffer's name, major mode and visited |
|---|
| 1008 |
file. The buffers are listed in the order that they were current; the |
|---|
| 1009 |
buffers that were current most recently come first. |
|---|
| 1010 |
|
|---|
| 1011 |
`*' at the beginning of a line indicates the buffer is "modified." |
|---|
| 1012 |
If several buffers are modified, it may be time to save some with `C-x |
|---|
| 1013 |
s' (*note Saving::). `%' indicates a read-only buffer. `.' marks the |
|---|
| 1014 |
current buffer. Here is an example of a buffer list: |
|---|
| 1015 |
|
|---|
| 1016 |
MR Buffer Size Mode File |
|---|
| 1017 |
-- ------ ---- ---- ---- |
|---|
| 1018 |
.* emacs.tex 383402 Texinfo /u2/emacs/man/emacs.tex |
|---|
| 1019 |
*Help* 1287 Fundamental |
|---|
| 1020 |
files.el 23076 Emacs-Lisp /u2/emacs/lisp/files.el |
|---|
| 1021 |
% RMAIL 64042 RMAIL /u/rms/RMAIL |
|---|
| 1022 |
*% man 747 Dired /u2/emacs/man/ |
|---|
| 1023 |
net.emacs 343885 Fundamental /u/rms/net.emacs |
|---|
| 1024 |
fileio.c 27691 C /u2/emacs/src/fileio.c |
|---|
| 1025 |
NEWS 67340 Text /u2/emacs/etc/NEWS |
|---|
| 1026 |
*scratch* 0 Lisp Interaction |
|---|
| 1027 |
|
|---|
| 1028 |
Note that the buffer `*Help*' was made by a help request; it is not |
|---|
| 1029 |
visiting any file. The buffer `man' was made by Dired on the directory |
|---|
| 1030 |
`/u2/emacs/man/'. You can list only buffers that are visiting files by |
|---|
| 1031 |
giving the command a prefix; for instance, by typing `C-u C-x C-b'. |
|---|
| 1032 |
|
|---|
| 1033 |
|
|---|
| 1034 |
File: emacs, Node: Misc Buffer, Next: Kill Buffer, Prev: List Buffers, Up: Buffers |
|---|
| 1035 |
|
|---|
| 1036 |
Miscellaneous Buffer Operations |
|---|
| 1037 |
=============================== |
|---|
| 1038 |
|
|---|
| 1039 |
`C-x C-q' |
|---|
| 1040 |
Toggle read-only status of buffer (`vc-toggle-read-only'). |
|---|
| 1041 |
|
|---|
| 1042 |
`M-x rename-buffer <RET> NAME <RET>' |
|---|
| 1043 |
Change the name of the current buffer. |
|---|
| 1044 |
|
|---|
| 1045 |
`M-x rename-uniquely' |
|---|
| 1046 |
Rename the current buffer by adding `<NUMBER>' to the end. |
|---|
| 1047 |
|
|---|
| 1048 |
`M-x view-buffer <RET> BUFFER <RET>' |
|---|
| 1049 |
Scroll through buffer BUFFER. |
|---|
| 1050 |
|
|---|
| 1051 |
A buffer can be "read-only", which means that commands to change its |
|---|
| 1052 |
contents are not allowed. The mode line indicates read-only buffers |
|---|
| 1053 |
with `%%' or `%*' near the left margin. Read-only buffers are usually |
|---|
| 1054 |
made by subsystems such as Dired and Rmail that have special commands |
|---|
| 1055 |
to operate on the text; also by visiting a file whose access control |
|---|
| 1056 |
says you cannot write it. |
|---|
| 1057 |
|
|---|
| 1058 |
If you wish to make changes in a read-only buffer, use the command |
|---|
| 1059 |
`C-x C-q' (`vc-toggle-read-only'). It makes a read-only buffer |
|---|
| 1060 |
writable, and makes a writable buffer read-only. In most cases, this |
|---|
| 1061 |
works by setting the variable `buffer-read-only', which has a local |
|---|
| 1062 |
value in each buffer and makes the buffer read-only if its value is |
|---|
| 1063 |
non-`nil'. If the file is maintained with version control, `C-x C-q' |
|---|
| 1064 |
works through the version control system to change the read-only status |
|---|
| 1065 |
of the file as well as the buffer. *Note Version Control::. |
|---|
| 1066 |
|
|---|
| 1067 |
`M-x rename-buffer' changes the name of the current buffer. Specify |
|---|
| 1068 |
the new name as a minibuffer argument. There is no default. If you |
|---|
| 1069 |
specify a name that is in use for some other buffer, an error happens |
|---|
| 1070 |
and no renaming is done. |
|---|
| 1071 |
|
|---|
| 1072 |
`M-x rename-uniquely' renames the current buffer to a similar name |
|---|
| 1073 |
with a numeric suffix added to make it both different and unique. This |
|---|
| 1074 |
command does not need an argument. It is useful for creating multiple |
|---|
| 1075 |
shell buffers: if you rename the `*Shell*' buffer, then do `M-x shell' |
|---|
| 1076 |
again, it makes a new shell buffer named `*Shell*'; meanwhile, the old |
|---|
| 1077 |
shell buffer continues to exist under its new name. This method is |
|---|
| 1078 |
also good for mail buffers, compilation buffers, and most Emacs |
|---|
| 1079 |
features that create special buffers with particular names. |
|---|
| 1080 |
|
|---|
| 1081 |
`M-x view-buffer' is much like `M-x view-file' (*note Misc File |
|---|
| 1082 |
Ops::) except that it examines an already existing Emacs buffer. View |
|---|
| 1083 |
mode provides commands for scrolling through the buffer conveniently |
|---|
| 1084 |
but not for changing it. When you exit View mode with `q', that |
|---|
| 1085 |
switches back to the buffer (and the position) which was previously |
|---|
| 1086 |
displayed in the window. Alternatively, if you exit View mode with |
|---|
| 1087 |
`e', the buffer and the value of point that resulted from your perusal |
|---|
| 1088 |
remain in effect. |
|---|
| 1089 |
|
|---|
| 1090 |
The commands `M-x append-to-buffer' and `M-x insert-buffer' can be |
|---|
| 1091 |
used to copy text from one buffer to another. *Note Accumulating |
|---|
| 1092 |
Text::. |
|---|
| 1093 |
|
|---|