diff options
| author | Eli Zaretskii | 2006-05-06 13:01:14 +0000 |
|---|---|---|
| committer | Eli Zaretskii | 2006-05-06 13:01:14 +0000 |
| commit | 240ce8099f86abdfcbaefc8387e8a43218652866 (patch) | |
| tree | e427698cb7469839cafd93fe5f20e4627fca880c | |
| parent | 030409091898c6e5a6c05b4706ab827d0636a0e7 (diff) | |
| download | emacs-240ce8099f86abdfcbaefc8387e8a43218652866.tar.gz emacs-240ce8099f86abdfcbaefc8387e8a43218652866.zip | |
(Introduction): Reword to make consistent with printed version only.
(MS-DOS): Renamed from "MS-DOG". All references updated.
(Daylight Savings): Remove this node: it is an exact duplicate of its
name-sake in calendar.texi.
<Top level>: Remove the body of all chapters and move them to the
new *-xtra.texi files. Use @raisesections and @lowersections to
convert sections to chapters etc.
| -rw-r--r-- | man/emacs-xtra.texi | 3774 |
1 files changed, 24 insertions, 3750 deletions
diff --git a/man/emacs-xtra.texi b/man/emacs-xtra.texi index 600748b7c88..65625522298 100644 --- a/man/emacs-xtra.texi +++ b/man/emacs-xtra.texi | |||
| @@ -56,16 +56,18 @@ license to the document, as described in section 6 of the license. | |||
| 56 | 56 | ||
| 57 | @menu | 57 | @menu |
| 58 | * Introduction:: What documentation belongs here? | 58 | * Introduction:: What documentation belongs here? |
| 59 | @iftex | ||
| 60 | * Picture Mode:: Editing pictures made up of characters using | ||
| 61 | the quarter-plane screen model. | ||
| 62 | |||
| 59 | * Autorevert:: Auto Reverting non-file buffers. | 63 | * Autorevert:: Auto Reverting non-file buffers. |
| 60 | * Subdir Switches:: Subdirectory switches in Dired. | 64 | * Subdir Switches:: Subdirectory switches in Dired. |
| 61 | * Advanced Calendar/Diary Usage:: Advanced Calendar/Diary customization. | 65 | * Advanced Calendar/Diary Usage:: Advanced Calendar/Diary customization. |
| 62 | * Emerge:: A convenient way of merging two versions of a program. | 66 | * Emerge:: A convenient way of merging two versions of a program. |
| 63 | * Picture Mode:: Editing pictures made up of characters using | ||
| 64 | the quarter-plane screen model. | ||
| 65 | |||
| 66 | * Advanced VC Usage:: Advanced VC (version control) features. | 67 | * Advanced VC Usage:: Advanced VC (version control) features. |
| 67 | * Fortran:: Fortran mode and its special features. | 68 | * Fortran:: Fortran mode and its special features. |
| 68 | * MS-DOS:: Using Emacs on MS-DOS (otherwise known as "MS-DOG"). | 69 | * MS-DOS:: Using Emacs on MS-DOS (otherwise known as @dfn{MS-DOG}). |
| 70 | @end iftex | ||
| 69 | * Index:: | 71 | * Index:: |
| 70 | @end menu | 72 | @end menu |
| 71 | 73 | ||
| @@ -73,3773 +75,45 @@ license to the document, as described in section 6 of the license. | |||
| 73 | @unnumbered Introduction | 75 | @unnumbered Introduction |
| 74 | 76 | ||
| 75 | This manual contains detailed information about various features that | 77 | This manual contains detailed information about various features that |
| 76 | are too specialized to be included in the Emacs manual. It is | 78 | are too specialized to be included in the printed Emacs manual. It is |
| 77 | intended to be readable by anyone having a basic knowledge of Emacs. | 79 | intended to be readable by anyone having a basic knowledge of Emacs. |
| 78 | However, certain sections may be intended for a more specialized | 80 | However, certain sections may be intended for a more specialized |
| 79 | audience, such as Elisp authors. This should be clearly pointed out | 81 | audience, such as Elisp authors. This should be clearly pointed out |
| 80 | at the beginning of these sections. | 82 | at the beginning of these sections. |
| 81 | 83 | ||
| 82 | This manual is intended as a complement, rather than an alternative, | 84 | Certain packages, or collections of related features, have their own |
| 83 | to other ways to gain a more detailed knowledge of Emacs than the | 85 | manuals, separate from the main Emacs User's manual. This manual is |
| 84 | Emacs manual can provide, such as browsing packages using @kbd{C-h p}, | 86 | intended as a complement, rather than an alternative, to reading those |
| 85 | accessing mode documentation using @kbd{C-h m} and browsing user | 87 | additional manuals; in a nutshell, it is a collection of smaller |
| 86 | options using Custom. Also, certain packages, or collections of | 88 | specialized features, too small or too obscure to justify their own |
| 87 | related features, have their own manuals. The present manual is | 89 | manual. |
| 88 | mainly intended to be a collection of smaller specialized features, | ||
| 89 | too small to get their own manual. | ||
| 90 | 90 | ||
| 91 | Sections intended specifically for Elisp programmers can follow the | 91 | Sections intended specifically for Elisp programmers can follow the |
| 92 | style of the Elisp manual. Other sections should follow the style of | 92 | style of the Elisp manual. Other sections should follow the style of |
| 93 | the Emacs manual. | 93 | the Emacs manual. |
| 94 | 94 | ||
| 95 | @node Autorevert | ||
| 96 | @chapter Auto Reverting non-file Buffers | ||
| 97 | |||
| 98 | Normally Global Auto Revert Mode only reverts file buffers. There are | ||
| 99 | two ways to auto-revert certain non-file buffers: enabling Auto Revert | ||
| 100 | Mode in those buffers (using @kbd{M-x auto-revert-mode}) and setting | ||
| 101 | @code{global-auto-revert-non-file-buffers} to @code{t}. The latter | ||
| 102 | enables Auto Reverting for all types of buffers for which it is | ||
| 103 | implemented, that is, for the types of buffers listed in the menu | ||
| 104 | below. | ||
| 105 | |||
| 106 | Like file buffers, non-file buffers should normally not revert while | ||
| 107 | you are working on them, or while they contain information that might | ||
| 108 | get lost after reverting. Therefore, they do not revert if they are | ||
| 109 | ``modified''. This can get tricky, because deciding when a non-file | ||
| 110 | buffer should be marked modified is usually more difficult than for | ||
| 111 | file buffers. | ||
| 112 | |||
| 113 | Another tricky detail is that, for efficiency reasons, Auto Revert | ||
| 114 | often does not try to detect all possible changes in the buffer, only | ||
| 115 | changes that are ``major'' or easy to detect. Hence, enabling | ||
| 116 | auto-reverting for a non-file buffer does not always guarantee that | ||
| 117 | all information in the buffer is up to date and does not necessarily | ||
| 118 | make manual reverts useless. | ||
| 119 | |||
| 120 | At the other extreme, certain buffers automatically auto-revert every | ||
| 121 | @code{auto-revert-interval} seconds. (This currently only applies to | ||
| 122 | the Buffer Menu.) In this case, Auto Revert does not print any | ||
| 123 | messages while reverting, even when @code{auto-revert-verbose} is | ||
| 124 | non-@code{nil}. | ||
| 125 | |||
| 126 | The details depend on the particular types of buffers and are | ||
| 127 | explained in the corresponding sections. | ||
| 128 | |||
| 129 | @menu | ||
| 130 | * Auto Reverting the Buffer Menu:: | ||
| 131 | * Auto Reverting Dired:: | ||
| 132 | * Supporting additional buffers:: | ||
| 133 | @end menu | ||
| 134 | |||
| 135 | @node Auto Reverting the Buffer Menu | ||
| 136 | @section Auto Reverting the Buffer Menu | ||
| 137 | |||
| 138 | If auto-reverting of non-file buffers is enabled, the Buffer Menu | ||
| 139 | automatically reverts every @code{auto-revert-interval} seconds, | ||
| 140 | whether there is a need for it or not. (It would probably take longer | ||
| 141 | to check whether there is a need than to actually revert.) | ||
| 142 | |||
| 143 | If the Buffer Menu inappropriately gets marked modified, just revert | ||
| 144 | it manually using @kbd{g} and auto-reverting will resume. However, if | ||
| 145 | you marked certain buffers to get deleted or to be displayed, you have | ||
| 146 | to be careful, because reverting erases all marks. The fact that | ||
| 147 | adding marks sets the buffer's modified flag prevents Auto Revert from | ||
| 148 | automatically erasing the marks. | ||
| 149 | |||
| 150 | @node Auto Reverting Dired | ||
| 151 | @section Auto Reverting Dired buffers | ||
| 152 | |||
| 153 | Auto-reverting Dired buffers currently works on GNU or Unix style | ||
| 154 | operating systems. It may not work satisfactorily on some other | ||
| 155 | systems. | ||
| 156 | |||
| 157 | Dired buffers only auto-revert when the file list of the buffer's main | ||
| 158 | directory changes. They do not auto-revert when information about a | ||
| 159 | particular file changes or when inserted subdirectories change. To be | ||
| 160 | sure that @emph{all} listed information is up to date, you have to | ||
| 161 | manually revert using @kbd{g}, @emph{even} if auto-reverting is | ||
| 162 | enabled in the Dired buffer. Sometimes, you might get the impression | ||
| 163 | that modifying or saving files listed in the main directory actually | ||
| 164 | does cause auto-reverting. This is because making changes to a file, | ||
| 165 | or saving it, very often causes changes in the directory itself, for | ||
| 166 | instance, through backup files or auto-save files. However, this is | ||
| 167 | not guaranteed. | ||
| 168 | |||
| 169 | If the Dired buffer is marked modified and there are no changes you | ||
| 170 | want to protect, then most of the time you can make auto-reverting | ||
| 171 | resume by manually reverting the buffer using @kbd{g}. There is one | ||
| 172 | exception. If you flag or mark files, you can safely revert the | ||
| 173 | buffer. This will not erase the flags or marks (unless the marked | ||
| 174 | file has been deleted, of course). However, the buffer will stay | ||
| 175 | modified, even after reverting, and auto-reverting will not resume. | ||
| 176 | This is because, if you flag or mark files, you may be working on the | ||
| 177 | buffer and you might not want the buffer to change without warning. | ||
| 178 | If you want auto-reverting to resume in the presence of marks and | ||
| 179 | flags, mark the buffer non-modified using @kbd{M-~}. However, adding, | ||
| 180 | deleting or changing marks or flags will mark it modified again. | ||
| 181 | |||
| 182 | Remote Dired buffers are not auto-reverted. Neither are Dired buffers | ||
| 183 | for which you used shell wildcards or file arguments to list only some | ||
| 184 | of the files. @samp{*Find*} and @samp{*Locate*} buffers do not | ||
| 185 | auto-revert either. | ||
| 186 | |||
| 187 | @node Supporting additional buffers | ||
| 188 | @section Adding Support for Auto-Reverting additional Buffers. | ||
| 189 | |||
| 190 | This section is intended for Elisp programmers who would like to add | ||
| 191 | support for auto-reverting new types of buffers. | ||
| 192 | |||
| 193 | To support auto-reverting the buffer must first of all have a | ||
| 194 | @code{revert-buffer-function}. @xref{Definition of | ||
| 195 | revert-buffer-function,, Reverting, elisp, the Emacs Lisp Reference Manual}. | ||
| 196 | |||
| 197 | In addition, it @emph{must} have a @code{buffer-stale-function}. | ||
| 198 | |||
| 199 | @defvar buffer-stale-function | ||
| 200 | The value of this variable is a function to check whether a non-file | ||
| 201 | buffer needs reverting. This should be a function with one optional | ||
| 202 | argument @var{noconfirm}. The function should return non-@code{nil} | ||
| 203 | if the buffer should be reverted. The buffer is current when this | ||
| 204 | function is called. | ||
| 205 | |||
| 206 | While this function is mainly intended for use in auto-reverting, it | ||
| 207 | could be used for other purposes as well. For instance, if | ||
| 208 | auto-reverting is not enabled, it could be used to warn the user that | ||
| 209 | the buffer needs reverting. The idea behind the @var{noconfirm} | ||
| 210 | argument is that it should be @code{t} if the buffer is going to be | ||
| 211 | reverted without asking the user and @code{nil} if the function is | ||
| 212 | just going to be used to warn the user that the buffer is out of date. | ||
| 213 | In particular, for use in auto-reverting, @var{noconfirm} is @code{t}. | ||
| 214 | If the function is only going to be used for auto-reverting, you can | ||
| 215 | ignore the @var{noconfirm} argument. | ||
| 216 | |||
| 217 | If you just want to automatically auto-revert every | ||
| 218 | @code{auto-revert-interval} seconds, use: | ||
| 219 | |||
| 220 | @example | ||
| 221 | (set (make-local-variable 'buffer-stale-function) | ||
| 222 | #'(lambda (&optional noconfirm) 'fast)) | ||
| 223 | @end example | ||
| 224 | |||
| 225 | @noindent | ||
| 226 | in the buffer's mode function. | ||
| 227 | |||
| 228 | The special return value @samp{fast} tells the caller that the need | ||
| 229 | for reverting was not checked, but that reverting the buffer is fast. | ||
| 230 | It also tells Auto Revert not to print any revert messages, even if | ||
| 231 | @code{auto-revert-verbose} is non-@code{nil}. This is important, as | ||
| 232 | getting revert messages every @code{auto-revert-interval} seconds can | ||
| 233 | be very annoying. The information provided by this return value could | ||
| 234 | also be useful if the function is consulted for purposes other than | ||
| 235 | auto-reverting. | ||
| 236 | @end defvar | ||
| 237 | |||
| 238 | Once the buffer has a @code{revert-buffer-function} and a | ||
| 239 | @code{buffer-stale-function}, several problems usually remain. | ||
| 240 | |||
| 241 | The buffer will only auto-revert if it is marked unmodified. Hence, | ||
| 242 | you will have to make sure that various functions mark the buffer | ||
| 243 | modified if and only if either the buffer contains information that | ||
| 244 | might be lost by reverting or there is reason to believe that the user | ||
| 245 | might be inconvenienced by auto-reverting, because he is actively | ||
| 246 | working on the buffer. The user can always override this by manually | ||
| 247 | adjusting the modified status of the buffer. To support this, calling | ||
| 248 | the @code{revert-buffer-function} on a buffer that is marked | ||
| 249 | unmodified should always keep the buffer marked unmodified. | ||
| 250 | |||
| 251 | It is important to assure that point does not continuously jump around | ||
| 252 | as a consequence of auto-reverting. Of course, moving point might be | ||
| 253 | inevitable if the buffer radically changes. | ||
| 254 | |||
| 255 | You should make sure that the @code{revert-buffer-function} does not | ||
| 256 | print messages that unnecessarily duplicate Auto Revert's own messages | ||
| 257 | if @code{auto-revert-verbose} is @code{t} and effectively override a | ||
| 258 | @code{nil} value for @code{auto-revert-verbose}. Hence, adapting a | ||
| 259 | mode for auto-reverting often involves getting rid of such messages. | ||
| 260 | This is especially important for buffers that automatically | ||
| 261 | auto-revert every @code{auto-revert-interval} seconds. | ||
| 262 | |||
| 263 | Also, you may want to update the documentation string of | ||
| 264 | @code{global-auto-revert-non-file-buffers}. | ||
| 265 | |||
| 266 | @ifinfo | ||
| 267 | Finally, you should add a node to this chapter's menu. This node | ||
| 268 | @end ifinfo | ||
| 269 | @ifnotinfo | ||
| 270 | Finally, you should add a section to this chapter. This section | ||
| 271 | @end ifnotinfo | ||
| 272 | should at the very least make clear whether enabling auto-reverting | ||
| 273 | for the buffer reliably assures that all information in the buffer is | ||
| 274 | completely up to date (or will be after @code{auto-revert-interval} | ||
| 275 | seconds). | ||
| 276 | |||
| 277 | @node Subdir Switches | ||
| 278 | @chapter Subdirectory Switches in Dired | ||
| 279 | |||
| 280 | You can insert subdirectories with specified @code{ls} switches in | ||
| 281 | Dired buffers, using @kbd{C-u i}. You can change the @code{ls} | ||
| 282 | switches of an already inserted subdirectory using @kbd{C-u l}. | ||
| 283 | |||
| 284 | In Emacs versions 22.1 and later, Dired remembers the switches, so | ||
| 285 | that reverting the buffer will not change them back to the main | ||
| 286 | directory's switches. Deleting a subdirectory forgets about its | ||
| 287 | switches. | ||
| 288 | |||
| 289 | Using @code{dired-undo} (usually bound to @kbd{C-_} and @kbd{C-x u}) | ||
| 290 | to reinsert or delete subdirectories, that were inserted with explicit | ||
| 291 | switches, can bypass Dired's machinery for remembering (or forgetting) | ||
| 292 | switches. Deleting a subdirectory using @code{dired-undo} does not | ||
| 293 | forget its switches. When later reinserted using @kbd{i}, it will be | ||
| 294 | reinserted using its old switches. Using @code{dired-undo} to | ||
| 295 | reinsert a subdirectory that was deleted using the regular | ||
| 296 | Dired commands (not @code{dired-undo}) will originally insert it with | ||
| 297 | its old switches. However, reverting the buffer will relist it using | ||
| 298 | the buffer's default switches. If any of this yields problems, you | ||
| 299 | can easily correct the situation using @kbd{C-u i} or @kbd{C-u l}. | ||
| 300 | |||
| 301 | Dired does not remember the @code{R} switch. Inserting a subdirectory | ||
| 302 | with switches that include the @code{R} switch is equivalent with | ||
| 303 | inserting each of its subdirectories using all remaining switches. | ||
| 304 | For instance, updating or killing a subdirectory that was inserted | ||
| 305 | with the @code{R} switch will not update or kill its subdirectories. | ||
| 306 | |||
| 307 | The buffer's default switches do not affect subdirectories that were | ||
| 308 | inserted using explicitly specified switches. In particular, | ||
| 309 | commands such as @kbd{s}, that change the buffer's switches do not | ||
| 310 | affect such subdirectories. (They do affect subdirectories without | ||
| 311 | explicitly assigned switches, however.) | ||
| 312 | |||
| 313 | You can make Dired forget about all subdirectory switches and relist | ||
| 314 | all subdirectories with the buffer's default switches using | ||
| 315 | @kbd{M-x dired-reset-subdir-switches}. This also reverts the Dired buffer. | ||
| 316 | |||
| 317 | |||
| 318 | @c Moved here from the Emacs Lisp Reference Manual, 2005-03-26. | ||
| 319 | @node Advanced Calendar/Diary Usage | ||
| 320 | @chapter Customizing the Calendar and Diary | ||
| 321 | |||
| 322 | There are many customizations that you can use to make the calendar and | ||
| 323 | diary suit your personal tastes. | ||
| 324 | |||
| 325 | @menu | ||
| 326 | * Calendar Customizing:: Defaults you can set. | ||
| 327 | * Holiday Customizing:: Defining your own holidays. | ||
| 328 | * Date Display Format:: Changing the format. | ||
| 329 | * Time Display Format:: Changing the format. | ||
| 330 | * Daylight Savings:: Changing the default. | ||
| 331 | * Diary Customizing:: Defaults you can set. | ||
| 332 | * Hebrew/Islamic Entries:: How to obtain them. | ||
| 333 | * Fancy Diary Display:: Enhancing the diary display, sorting entries, | ||
| 334 | using included diary files. | ||
| 335 | * Sexp Diary Entries:: Fancy things you can do. | ||
| 336 | @end menu | ||
| 337 | |||
| 338 | @node Calendar Customizing | ||
| 339 | @section Customizing the Calendar | ||
| 340 | @vindex calendar-holiday-marker | ||
| 341 | @vindex diary-entry-marker | ||
| 342 | The variable @code{calendar-holiday-marker} specifies how to mark a | ||
| 343 | date as being a holiday. Its value may be a single-character string | ||
| 344 | to insert next to the date, or a face name to use for displaying the | ||
| 345 | date. Likewise, the variable @code{diary-entry-marker} specifies how | ||
| 346 | to mark a date that has diary entries. The calendar creates faces | ||
| 347 | named @code{holiday-face} and @code{diary-face} for these purposes; | ||
| 348 | those symbols are the default values of these variables. | ||
| 349 | |||
| 350 | @vindex calendar-load-hook | ||
| 351 | The variable @code{calendar-load-hook} is a normal hook run when the | ||
| 352 | calendar package is first loaded (before actually starting to display | ||
| 353 | the calendar). | ||
| 354 | |||
| 355 | @vindex initial-calendar-window-hook | ||
| 356 | Starting the calendar runs the normal hook | ||
| 357 | @code{initial-calendar-window-hook}. Recomputation of the calendar | ||
| 358 | display does not run this hook. But if you leave the calendar with the | ||
| 359 | @kbd{q} command and reenter it, the hook runs again.@refill | ||
| 360 | |||
| 361 | @vindex today-visible-calendar-hook | ||
| 362 | The variable @code{today-visible-calendar-hook} is a normal hook run | ||
| 363 | after the calendar buffer has been prepared with the calendar when the | ||
| 364 | current date is visible in the window. One use of this hook is to | ||
| 365 | replace today's date with asterisks; to do that, use the hook function | ||
| 366 | @code{calendar-star-date}. | ||
| 367 | |||
| 368 | @findex calendar-star-date | ||
| 369 | @example | ||
| 370 | (add-hook 'today-visible-calendar-hook 'calendar-star-date) | ||
| 371 | @end example | ||
| 372 | |||
| 373 | @noindent | ||
| 374 | Another standard hook function marks the current date, either by | ||
| 375 | changing its face or by adding an asterisk. Here's how to use it: | ||
| 376 | |||
| 377 | @findex calendar-mark-today | ||
| 378 | @example | ||
| 379 | (add-hook 'today-visible-calendar-hook 'calendar-mark-today) | ||
| 380 | @end example | ||
| 381 | |||
| 382 | @noindent | ||
| 383 | @vindex calendar-today-marker | ||
| 384 | The variable @code{calendar-today-marker} specifies how to mark | ||
| 385 | today's date. Its value should be a single-character string to insert | ||
| 386 | next to the date or a face name to use for displaying the date. A | ||
| 387 | face named @code{calendar-today-face} is provided for this purpose; | ||
| 388 | that symbol is the default for this variable. | ||
| 389 | |||
| 390 | @vindex today-invisible-calendar-hook | ||
| 391 | @noindent | ||
| 392 | A similar normal hook, @code{today-invisible-calendar-hook} is run if | ||
| 393 | the current date is @emph{not} visible in the window. | ||
| 394 | |||
| 395 | @vindex calendar-move-hook | ||
| 396 | Each of the calendar cursor motion commands runs the hook | ||
| 397 | @code{calendar-move-hook} after it moves the cursor. | ||
| 398 | |||
| 399 | @node Holiday Customizing | ||
| 400 | @section Customizing the Holidays | ||
| 401 | |||
| 402 | @vindex calendar-holidays | ||
| 403 | @vindex christian-holidays | ||
| 404 | @vindex hebrew-holidays | ||
| 405 | @vindex islamic-holidays | ||
| 406 | Emacs knows about holidays defined by entries on one of several lists. | ||
| 407 | You can customize these lists of holidays to your own needs, adding or | ||
| 408 | deleting holidays. The lists of holidays that Emacs uses are for | ||
| 409 | general holidays (@code{general-holidays}), local holidays | ||
| 410 | (@code{local-holidays}), Christian holidays (@code{christian-holidays}), | ||
| 411 | Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Muslim) | ||
| 412 | holidays (@code{islamic-holidays}), and other holidays | ||
| 413 | (@code{other-holidays}). | ||
| 414 | |||
| 415 | @vindex general-holidays | ||
| 416 | The general holidays are, by default, holidays common throughout the | ||
| 417 | United States. To eliminate these holidays, set @code{general-holidays} | ||
| 418 | to @code{nil}. | ||
| 419 | |||
| 420 | @vindex local-holidays | ||
| 421 | There are no default local holidays (but sites may supply some). You | ||
| 422 | can set the variable @code{local-holidays} to any list of holidays, as | ||
| 423 | described below. | ||
| 424 | |||
| 425 | @vindex all-christian-calendar-holidays | ||
| 426 | @vindex all-hebrew-calendar-holidays | ||
| 427 | @vindex all-islamic-calendar-holidays | ||
| 428 | By default, Emacs does not include all the holidays of the religions | ||
| 429 | that it knows, only those commonly found in secular calendars. For a | ||
| 430 | more extensive collection of religious holidays, you can set any (or | ||
| 431 | all) of the variables @code{all-christian-calendar-holidays}, | ||
| 432 | @code{all-hebrew-calendar-holidays}, or | ||
| 433 | @code{all-islamic-calendar-holidays} to @code{t}. If you want to | ||
| 434 | eliminate the religious holidays, set any or all of the corresponding | ||
| 435 | variables @code{christian-holidays}, @code{hebrew-holidays}, and | ||
| 436 | @code{islamic-holidays} to @code{nil}.@refill | ||
| 437 | |||
| 438 | @vindex other-holidays | ||
| 439 | You can set the variable @code{other-holidays} to any list of | ||
| 440 | holidays. This list, normally empty, is intended for individual use. | ||
| 441 | |||
| 442 | @cindex holiday forms | ||
| 443 | Each of the lists (@code{general-holidays}, @code{local-holidays}, | ||
| 444 | @code{christian-holidays}, @code{hebrew-holidays}, | ||
| 445 | @code{islamic-holidays}, and @code{other-holidays}) is a list of | ||
| 446 | @dfn{holiday forms}, each holiday form describing a holiday (or | ||
| 447 | sometimes a list of holidays). | ||
| 448 | |||
| 449 | Here is a table of the possible kinds of holiday form. Day numbers | ||
| 450 | and month numbers count starting from 1, but ``dayname'' numbers | ||
| 451 | count Sunday as 0. The element @var{string} is always the | ||
| 452 | name of the holiday, as a string. | ||
| 453 | |||
| 454 | @table @code | ||
| 455 | @item (holiday-fixed @var{month} @var{day} @var{string}) | ||
| 456 | A fixed date on the Gregorian calendar. | ||
| 457 | |||
| 458 | @item (holiday-float @var{month} @var{dayname} @var{k} @var{string}) | ||
| 459 | The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar | ||
| 460 | (@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back | ||
| 461 | from the end of the month. | ||
| 462 | |||
| 463 | @item (holiday-hebrew @var{month} @var{day} @var{string}) | ||
| 464 | A fixed date on the Hebrew calendar. | ||
| 465 | |||
| 466 | @item (holiday-islamic @var{month} @var{day} @var{string}) | ||
| 467 | A fixed date on the Islamic calendar. | ||
| 468 | |||
| 469 | @item (holiday-julian @var{month} @var{day} @var{string}) | ||
| 470 | A fixed date on the Julian calendar. | ||
| 471 | |||
| 472 | @item (holiday-sexp @var{sexp} @var{string}) | ||
| 473 | A date calculated by the Lisp expression @var{sexp}. The expression | ||
| 474 | should use the variable @code{year} to compute and return the date of a | ||
| 475 | holiday, or @code{nil} if the holiday doesn't happen this year. The | ||
| 476 | value of @var{sexp} must represent the date as a list of the form | ||
| 477 | @code{(@var{month} @var{day} @var{year})}. | ||
| 478 | |||
| 479 | @item (if @var{condition} @var{holiday-form}) | ||
| 480 | A holiday that happens only if @var{condition} is true. | ||
| 481 | |||
| 482 | @item (@var{function} @r{[}@var{args}@r{]}) | ||
| 483 | A list of dates calculated by the function @var{function}, called with | ||
| 484 | arguments @var{args}. | ||
| 485 | @end table | ||
| 486 | |||
| 487 | For example, suppose you want to add Bastille Day, celebrated in | ||
| 488 | France on July 14. You can do this as follows: | ||
| 489 | |||
| 490 | @smallexample | ||
| 491 | (setq other-holidays '((holiday-fixed 7 14 "Bastille Day"))) | ||
| 492 | @end smallexample | ||
| 493 | |||
| 494 | @noindent | ||
| 495 | The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the | ||
| 496 | fourteenth day of the seventh month (July). | ||
| 497 | |||
| 498 | Many holidays occur on a specific day of the week, at a specific time | ||
| 499 | of month. Here is a holiday form describing Hurricane Supplication Day, | ||
| 500 | celebrated in the Virgin Islands on the fourth Monday in August: | ||
| 501 | |||
| 502 | @smallexample | ||
| 503 | (holiday-float 8 1 4 "Hurricane Supplication Day") | ||
| 504 | @end smallexample | ||
| 505 | |||
| 506 | @noindent | ||
| 507 | Here the 8 specifies August, the 1 specifies Monday (Sunday is 0, | ||
| 508 | Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in | ||
| 509 | the month (1 specifies the first occurrence, 2 the second occurrence, | ||
| 510 | @minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and | ||
| 511 | so on). | ||
| 512 | |||
| 513 | You can specify holidays that occur on fixed days of the Hebrew, | ||
| 514 | Islamic, and Julian calendars too. For example, | ||
| 515 | |||
| 516 | @smallexample | ||
| 517 | (setq other-holidays | ||
| 518 | '((holiday-hebrew 10 2 "Last day of Hanukkah") | ||
| 519 | (holiday-islamic 3 12 "Mohammed's Birthday") | ||
| 520 | (holiday-julian 4 2 "Jefferson's Birthday"))) | ||
| 521 | @end smallexample | ||
| 522 | |||
| 523 | @noindent | ||
| 524 | adds the last day of Hanukkah (since the Hebrew months are numbered with | ||
| 525 | 1 starting from Nisan), the Islamic feast celebrating Mohammed's | ||
| 526 | birthday (since the Islamic months are numbered from 1 starting with | ||
| 527 | Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the | ||
| 528 | Julian calendar. | ||
| 529 | |||
| 530 | To include a holiday conditionally, use either Emacs Lisp's @code{if} or the | ||
| 531 | @code{holiday-sexp} form. For example, American presidential elections | ||
| 532 | occur on the first Tuesday after the first Monday in November of years | ||
| 533 | divisible by 4: | ||
| 534 | |||
| 535 | @smallexample | ||
| 536 | (holiday-sexp '(if (= 0 (% year 4)) | ||
| 537 | (calendar-gregorian-from-absolute | ||
| 538 | (1+ (calendar-dayname-on-or-before | ||
| 539 | 1 (+ 6 (calendar-absolute-from-gregorian | ||
| 540 | (list 11 1 year))))))) | ||
| 541 | "US Presidential Election") | ||
| 542 | @end smallexample | ||
| 543 | |||
| 544 | @noindent | ||
| 545 | or | ||
| 546 | |||
| 547 | @smallexample | ||
| 548 | (if (= 0 (% displayed-year 4)) | ||
| 549 | (fixed 11 | ||
| 550 | (extract-calendar-day | ||
| 551 | (calendar-gregorian-from-absolute | ||
| 552 | (1+ (calendar-dayname-on-or-before | ||
| 553 | 1 (+ 6 (calendar-absolute-from-gregorian | ||
| 554 | (list 11 1 displayed-year))))))) | ||
| 555 | "US Presidential Election")) | ||
| 556 | @end smallexample | ||
| 557 | |||
| 558 | Some holidays just don't fit into any of these forms because special | ||
| 559 | calculations are involved in their determination. In such cases you | ||
| 560 | must write a Lisp function to do the calculation. To include eclipses, | ||
| 561 | for example, add @code{(eclipses)} to @code{other-holidays} | ||
| 562 | and write an Emacs Lisp function @code{eclipses} that returns a | ||
| 563 | (possibly empty) list of the relevant Gregorian dates among the range | ||
| 564 | visible in the calendar window, with descriptive strings, like this: | ||
| 565 | |||
| 566 | @smallexample | ||
| 567 | (((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... ) | ||
| 568 | @end smallexample | ||
| 569 | |||
| 570 | @node Date Display Format | ||
| 571 | @section Date Display Format | ||
| 572 | @vindex calendar-date-display-form | ||
| 573 | |||
| 574 | You can customize the manner of displaying dates in the diary, in mode | ||
| 575 | lines, and in messages by setting @code{calendar-date-display-form}. | ||
| 576 | This variable holds a list of expressions that can involve the variables | ||
| 577 | @code{month}, @code{day}, and @code{year}, which are all numbers in | ||
| 578 | string form, and @code{monthname} and @code{dayname}, which are both | ||
| 579 | alphabetic strings. In the American style, the default value of this | ||
| 580 | list is as follows: | ||
| 581 | |||
| 582 | @smallexample | ||
| 583 | ((if dayname (concat dayname ", ")) monthname " " day ", " year) | ||
| 584 | @end smallexample | ||
| 585 | |||
| 586 | @noindent | ||
| 587 | while in the European style this value is the default: | ||
| 588 | |||
| 589 | @smallexample | ||
| 590 | ((if dayname (concat dayname ", ")) day " " monthname " " year) | ||
| 591 | @end smallexample | ||
| 592 | |||
| 593 | @noindent | ||
| 594 | The ISO standard date representation is this: | ||
| 595 | |||
| 596 | @smallexample | ||
| 597 | (year "-" month "-" day) | ||
| 598 | @end smallexample | ||
| 599 | |||
| 600 | @noindent | ||
| 601 | This specifies a typical American format: | ||
| 602 | |||
| 603 | @smallexample | ||
| 604 | (month "/" day "/" (substring year -2)) | ||
| 605 | @end smallexample | ||
| 606 | |||
| 607 | @node Time Display Format | ||
| 608 | @section Time Display Format | ||
| 609 | @vindex calendar-time-display-form | ||
| 610 | |||
| 611 | The calendar and diary by default display times of day in the | ||
| 612 | conventional American style with the hours from 1 through 12, minutes, | ||
| 613 | and either @samp{am} or @samp{pm}. If you prefer the European style, | ||
| 614 | also known in the US as military, in which the hours go from 00 to 23, | ||
| 615 | you can alter the variable @code{calendar-time-display-form}. This | ||
| 616 | variable is a list of expressions that can involve the variables | ||
| 617 | @code{12-hours}, @code{24-hours}, and @code{minutes}, which are all | ||
| 618 | numbers in string form, and @code{am-pm} and @code{time-zone}, which are | ||
| 619 | both alphabetic strings. The default value of | ||
| 620 | @code{calendar-time-display-form} is as follows: | ||
| 621 | |||
| 622 | @smallexample | ||
| 623 | (12-hours ":" minutes am-pm | ||
| 624 | (if time-zone " (") time-zone (if time-zone ")")) | ||
| 625 | @end smallexample | ||
| 626 | |||
| 627 | @noindent | ||
| 628 | Here is a value that provides European style times: | ||
| 629 | |||
| 630 | @smallexample | ||
| 631 | (24-hours ":" minutes | ||
| 632 | (if time-zone " (") time-zone (if time-zone ")")) | ||
| 633 | @end smallexample | ||
| 634 | |||
| 635 | @node Daylight Savings | ||
| 636 | @section Daylight Savings Time | ||
| 637 | @cindex daylight savings time | ||
| 638 | |||
| 639 | Emacs understands the difference between standard time and daylight | ||
| 640 | savings time---the times given for sunrise, sunset, solstices, | ||
| 641 | equinoxes, and the phases of the moon take that into account. The rules | ||
| 642 | for daylight savings time vary from place to place and have also varied | ||
| 643 | historically from year to year. To do the job properly, Emacs needs to | ||
| 644 | know which rules to use. | ||
| 645 | |||
| 646 | Some operating systems keep track of the rules that apply to the place | ||
| 647 | where you are; on these systems, Emacs gets the information it needs | ||
| 648 | from the system automatically. If some or all of this information is | ||
| 649 | missing, Emacs fills in the gaps with the rules currently used in | ||
| 650 | Cambridge, Massachusetts, which is the center of GNU's world. | ||
| 651 | |||
| 652 | |||
| 653 | @vindex calendar-daylight-savings-starts | ||
| 654 | @vindex calendar-daylight-savings-ends | ||
| 655 | If the default choice of rules is not appropriate for your location, | ||
| 656 | you can tell Emacs the rules to use by setting the variables | ||
| 657 | @code{calendar-daylight-savings-starts} and | ||
| 658 | @code{calendar-daylight-savings-ends}. Their values should be Lisp | ||
| 659 | expressions that refer to the variable @code{year}, and evaluate to the | ||
| 660 | Gregorian date on which daylight savings time starts or (respectively) | ||
| 661 | ends, in the form of a list @code{(@var{month} @var{day} @var{year})}. | ||
| 662 | The values should be @code{nil} if your area does not use daylight | ||
| 663 | savings time. | ||
| 664 | |||
| 665 | Emacs uses these expressions to determine the start and end dates of | ||
| 666 | daylight savings time as holidays and for correcting times of day in the | ||
| 667 | solar and lunar calculations. | ||
| 668 | |||
| 669 | The values for Cambridge, Massachusetts are as follows: | ||
| 670 | |||
| 671 | @example | ||
| 672 | @group | ||
| 673 | (calendar-nth-named-day 1 0 4 year) | ||
| 674 | (calendar-nth-named-day -1 0 10 year) | ||
| 675 | @end group | ||
| 676 | @end example | ||
| 677 | |||
| 678 | @noindent | ||
| 679 | i.e., the first 0th day (Sunday) of the fourth month (April) in | ||
| 680 | the year specified by @code{year}, and the last Sunday of the tenth month | ||
| 681 | (October) of that year. If daylight savings time were | ||
| 682 | changed to start on October 1, you would set | ||
| 683 | @code{calendar-daylight-savings-starts} to this: | ||
| 684 | |||
| 685 | @example | ||
| 686 | (list 10 1 year) | ||
| 687 | @end example | ||
| 688 | |||
| 689 | For a more complex example, suppose daylight savings time begins on | ||
| 690 | the first of Nisan on the Hebrew calendar. You should set | ||
| 691 | @code{calendar-daylight-savings-starts} to this value: | ||
| 692 | |||
| 693 | @example | ||
| 694 | (calendar-gregorian-from-absolute | ||
| 695 | (calendar-absolute-from-hebrew | ||
| 696 | (list 1 1 (+ year 3760)))) | ||
| 697 | @end example | ||
| 698 | |||
| 699 | @noindent | ||
| 700 | because Nisan is the first month in the Hebrew calendar and the Hebrew | ||
| 701 | year differs from the Gregorian year by 3760 at Nisan. | ||
| 702 | |||
| 703 | If there is no daylight savings time at your location, or if you want | ||
| 704 | all times in standard time, set @code{calendar-daylight-savings-starts} | ||
| 705 | and @code{calendar-daylight-savings-ends} to @code{nil}. | ||
| 706 | |||
| 707 | @vindex calendar-daylight-time-offset | ||
| 708 | The variable @code{calendar-daylight-time-offset} specifies the | ||
| 709 | difference between daylight savings time and standard time, measured in | ||
| 710 | minutes. The value for Cambridge is 60. | ||
| 711 | |||
| 712 | @vindex calendar-daylight-savings-starts-time | ||
| 713 | @vindex calendar-daylight-savings-ends-time | ||
| 714 | The variable @code{calendar-daylight-savings-starts-time} and the | ||
| 715 | variable @code{calendar-daylight-savings-ends-time} specify the number | ||
| 716 | of minutes after midnight local time when the transition to and from | ||
| 717 | daylight savings time should occur. For Cambridge, both variables' | ||
| 718 | values are 120. | ||
| 719 | |||
| 720 | @node Diary Customizing | ||
| 721 | @section Customizing the Diary | ||
| 722 | |||
| 723 | @vindex holidays-in-diary-buffer | ||
| 724 | Ordinarily, the mode line of the diary buffer window indicates any | ||
| 725 | holidays that fall on the date of the diary entries. The process of | ||
| 726 | checking for holidays can take several seconds, so including holiday | ||
| 727 | information delays the display of the diary buffer noticeably. If you'd | ||
| 728 | prefer to have a faster display of the diary buffer but without the | ||
| 729 | holiday information, set the variable @code{holidays-in-diary-buffer} to | ||
| 730 | @code{nil}.@refill | ||
| 731 | |||
| 732 | @vindex number-of-diary-entries | ||
| 733 | The variable @code{number-of-diary-entries} controls the number of | ||
| 734 | days of diary entries to be displayed at one time. It affects the | ||
| 735 | initial display when @code{view-diary-entries-initially} is @code{t}, as | ||
| 736 | well as the command @kbd{M-x diary}. For example, the default value is | ||
| 737 | 1, which says to display only the current day's diary entries. If the | ||
| 738 | value is 2, both the current day's and the next day's entries are | ||
| 739 | displayed. The value can also be a vector of seven elements: for | ||
| 740 | example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries | ||
| 741 | appear on Sunday, the current date's and the next day's diary entries | ||
| 742 | appear Monday through Thursday, Friday through Monday's entries appear | ||
| 743 | on Friday, while on Saturday only that day's entries appear. | ||
| 744 | |||
| 745 | @vindex print-diary-entries-hook | ||
| 746 | @findex print-diary-entries | ||
| 747 | The variable @code{print-diary-entries-hook} is a normal hook run | ||
| 748 | after preparation of a temporary buffer containing just the diary | ||
| 749 | entries currently visible in the diary buffer. (The other, irrelevant | ||
| 750 | diary entries are really absent from the temporary buffer; in the diary | ||
| 751 | buffer, they are merely hidden.) The default value of this hook does | ||
| 752 | the printing with the command @code{lpr-buffer}. If you want to use a | ||
| 753 | different command to do the printing, just change the value of this | ||
| 754 | hook. Other uses might include, for example, rearranging the lines into | ||
| 755 | order by day and time. | ||
| 756 | |||
| 757 | @vindex diary-date-forms | ||
| 758 | You can customize the form of dates in your diary file, if neither the | ||
| 759 | standard American nor European styles suits your needs, by setting the | ||
| 760 | variable @code{diary-date-forms}. This variable is a list of patterns | ||
| 761 | for recognizing a date. Each date pattern is a list whose elements may | ||
| 762 | be regular expressions (@pxref{Regular Expressions,,, elisp, the Emacs | ||
| 763 | Lisp Reference Manual}) or the symbols @code{month}, @code{day}, | ||
| 764 | @code{year}, @code{monthname}, and @code{dayname}. All these elements | ||
| 765 | serve as patterns that match certain kinds of text in the diary file. | ||
| 766 | In order for the date pattern, as a whole, to match, all of its elements | ||
| 767 | must match consecutively. | ||
| 768 | |||
| 769 | A regular expression in a date pattern matches in its usual fashion, | ||
| 770 | using the standard syntax table altered so that @samp{*} is a word | ||
| 771 | constituent. | ||
| 772 | |||
| 773 | The symbols @code{month}, @code{day}, @code{year}, @code{monthname}, | ||
| 774 | and @code{dayname} match the month number, day number, year number, | ||
| 775 | month name, and day name of the date being considered. The symbols that | ||
| 776 | match numbers allow leading zeros; those that match names allow | ||
| 777 | three-letter abbreviations and capitalization. All the symbols can | ||
| 778 | match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any | ||
| 779 | month'', and so on, it should match regardless of the date being | ||
| 780 | considered. | ||
| 781 | |||
| 782 | The default value of @code{diary-date-forms} in the American style is | ||
| 783 | this: | ||
| 784 | |||
| 785 | @example | ||
| 786 | ((month "/" day "[^/0-9]") | ||
| 787 | (month "/" day "/" year "[^0-9]") | ||
| 788 | (monthname " *" day "[^,0-9]") | ||
| 789 | (monthname " *" day ", *" year "[^0-9]") | ||
| 790 | (dayname "\\W")) | ||
| 791 | @end example | ||
| 792 | |||
| 793 | The date patterns in the list must be @emph{mutually exclusive} and | ||
| 794 | must not match any portion of the diary entry itself, just the date and | ||
| 795 | one character of whitespace. If, to be mutually exclusive, the pattern | ||
| 796 | must match a portion of the diary entry text---beyond the whitespace | ||
| 797 | that ends the date---then the first element of the date pattern | ||
| 798 | @emph{must} be @code{backup}. This causes the date recognizer to back | ||
| 799 | up to the beginning of the current word of the diary entry, after | ||
| 800 | finishing the match. Even if you use @code{backup}, the date pattern | ||
| 801 | must absolutely not match more than a portion of the first word of the | ||
| 802 | diary entry. The default value of @code{diary-date-forms} in the | ||
| 803 | European style is this list: | ||
| 804 | |||
| 805 | @example | ||
| 806 | ((day "/" month "[^/0-9]") | ||
| 807 | (day "/" month "/" year "[^0-9]") | ||
| 808 | (backup day " *" monthname "\\W+\\<[^*0-9]") | ||
| 809 | (day " *" monthname " *" year "[^0-9]") | ||
| 810 | (dayname "\\W")) | ||
| 811 | @end example | ||
| 812 | |||
| 813 | @noindent | ||
| 814 | Notice the use of @code{backup} in the third pattern, because it needs | ||
| 815 | to match part of a word beyond the date itself to distinguish it from | ||
| 816 | the fourth pattern. | ||
| 817 | |||
| 818 | @node Hebrew/Islamic Entries | ||
| 819 | @section Hebrew- and Islamic-Date Diary Entries | ||
| 820 | |||
| 821 | Your diary file can have entries based on Hebrew or Islamic dates, as | ||
| 822 | well as entries based on the world-standard Gregorian calendar. | ||
| 823 | However, because recognition of such entries is time-consuming and most | ||
| 824 | people don't use them, you must explicitly enable their use. If you | ||
| 825 | want the diary to recognize Hebrew-date diary entries, for example, | ||
| 826 | you must do this: | ||
| 827 | |||
| 828 | @vindex nongregorian-diary-listing-hook | ||
| 829 | @vindex nongregorian-diary-marking-hook | ||
| 830 | @findex list-hebrew-diary-entries | ||
| 831 | @findex mark-hebrew-diary-entries | ||
| 832 | @smallexample | ||
| 833 | (add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries) | ||
| 834 | (add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries) | ||
| 835 | @end smallexample | ||
| 836 | |||
| 837 | @noindent | ||
| 838 | If you want Islamic-date entries, do this: | ||
| 839 | |||
| 840 | @findex list-islamic-diary-entries | ||
| 841 | @findex mark-islamic-diary-entries | ||
| 842 | @smallexample | ||
| 843 | (add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries) | ||
| 844 | (add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries) | ||
| 845 | @end smallexample | ||
| 846 | |||
| 847 | Hebrew- and Islamic-date diary entries have the same formats as | ||
| 848 | Gregorian-date diary entries, except that @samp{H} precedes a Hebrew | ||
| 849 | date and @samp{I} precedes an Islamic date. Moreover, because the | ||
| 850 | Hebrew and Islamic month names are not uniquely specified by the first | ||
| 851 | three letters, you may not abbreviate them. For example, a diary entry | ||
| 852 | for the Hebrew date Heshvan 25 could look like this: | ||
| 853 | |||
| 854 | @smallexample | ||
| 855 | HHeshvan 25 Happy Hebrew birthday! | ||
| 856 | @end smallexample | ||
| 857 | |||
| 858 | @noindent | ||
| 859 | and would appear in the diary for any date that corresponds to Heshvan 25 | ||
| 860 | on the Hebrew calendar. And here is an Islamic-date diary entry that matches | ||
| 861 | Dhu al-Qada 25: | ||
| 862 | |||
| 863 | @smallexample | ||
| 864 | IDhu al-Qada 25 Happy Islamic birthday! | ||
| 865 | @end smallexample | ||
| 866 | |||
| 867 | As with Gregorian-date diary entries, Hebrew- and Islamic-date entries | ||
| 868 | are nonmarking if they are preceded with an ampersand (@samp{&}). | ||
| 869 | |||
| 870 | Here is a table of commands used in the calendar to create diary entries | ||
| 871 | that match the selected date and other dates that are similar in the Hebrew | ||
| 872 | or Islamic calendar: | ||
| 873 | |||
| 874 | @table @kbd | ||
| 875 | @item i h d | ||
| 876 | Add a diary entry for the Hebrew date corresponding to the selected date | ||
| 877 | (@code{insert-hebrew-diary-entry}). | ||
| 878 | @item i h m | ||
| 879 | Add a diary entry for the day of the Hebrew month corresponding to the | ||
| 880 | selected date (@code{insert-monthly-hebrew-diary-entry}). This diary | ||
| 881 | entry matches any date that has the same Hebrew day-within-month as the | ||
| 882 | selected date. | ||
| 883 | @item i h y | ||
| 884 | Add a diary entry for the day of the Hebrew year corresponding to the | ||
| 885 | selected date (@code{insert-yearly-hebrew-diary-entry}). This diary | ||
| 886 | entry matches any date which has the same Hebrew month and day-within-month | ||
| 887 | as the selected date. | ||
| 888 | @item i i d | ||
| 889 | Add a diary entry for the Islamic date corresponding to the selected date | ||
| 890 | (@code{insert-islamic-diary-entry}). | ||
| 891 | @item i i m | ||
| 892 | Add a diary entry for the day of the Islamic month corresponding to the | ||
| 893 | selected date (@code{insert-monthly-islamic-diary-entry}). | ||
| 894 | @item i i y | ||
| 895 | Add a diary entry for the day of the Islamic year corresponding to the | ||
| 896 | selected date (@code{insert-yearly-islamic-diary-entry}). | ||
| 897 | @end table | ||
| 898 | |||
| 899 | @findex insert-hebrew-diary-entry | ||
| 900 | @findex insert-monthly-hebrew-diary-entry | ||
| 901 | @findex insert-yearly-hebrew-diary-entry | ||
| 902 | @findex insert-islamic-diary-entry | ||
| 903 | @findex insert-monthly-islamic-diary-entry | ||
| 904 | @findex insert-yearly-islamic-diary-entry | ||
| 905 | These commands work much like the corresponding commands for ordinary | ||
| 906 | diary entries: they apply to the date that point is on in the calendar | ||
| 907 | window, and what they do is insert just the date portion of a diary entry | ||
| 908 | at the end of your diary file. You must then insert the rest of the | ||
| 909 | diary entry. | ||
| 910 | |||
| 911 | @node Fancy Diary Display | ||
| 912 | @section Fancy Diary Display | ||
| 913 | @vindex diary-display-hook | ||
| 914 | @findex simple-diary-display | ||
| 915 | |||
| 916 | Diary display works by preparing the diary buffer and then running the | ||
| 917 | hook @code{diary-display-hook}. The default value of this hook | ||
| 918 | (@code{simple-diary-display}) hides the irrelevant diary entries and | ||
| 919 | then displays the buffer. However, if you specify the hook as follows, | ||
| 920 | |||
| 921 | @cindex diary buffer | ||
| 922 | @findex fancy-diary-display | ||
| 923 | @example | ||
| 924 | (add-hook 'diary-display-hook 'fancy-diary-display) | ||
| 925 | @end example | ||
| 926 | |||
| 927 | @noindent | ||
| 928 | this enables fancy diary display. It displays diary entries and | ||
| 929 | holidays by copying them into a special buffer that exists only for the | ||
| 930 | sake of display. Copying to a separate buffer provides an opportunity | ||
| 931 | to change the displayed text to make it prettier---for example, to sort | ||
| 932 | the entries by the dates they apply to. | ||
| 933 | |||
| 934 | As with simple diary display, you can print a hard copy of the buffer | ||
| 935 | with @code{print-diary-entries}. To print a hard copy of a day-by-day | ||
| 936 | diary for a week, position point on Sunday of that week, type | ||
| 937 | @kbd{7 d}, and then do @kbd{M-x print-diary-entries}. As usual, the | ||
| 938 | inclusion of the holidays slows down the display slightly; you can speed | ||
| 939 | things up by setting the variable @code{holidays-in-diary-buffer} to | ||
| 940 | @code{nil}. | ||
| 941 | |||
| 942 | @vindex diary-list-include-blanks | ||
| 943 | Ordinarily, the fancy diary buffer does not show days for which there are | ||
| 944 | no diary entries, even if that day is a holiday. If you want such days to be | ||
| 945 | shown in the fancy diary buffer, set the variable | ||
| 946 | @code{diary-list-include-blanks} to @code{t}.@refill | ||
| 947 | |||
| 948 | @cindex sorting diary entries | ||
| 949 | If you use the fancy diary display, you can use the normal hook | ||
| 950 | @code{list-diary-entries-hook} to sort each day's diary entries by their | ||
| 951 | time of day. Here's how: | ||
| 952 | |||
| 953 | @findex sort-diary-entries | ||
| 954 | @example | ||
| 955 | (add-hook 'list-diary-entries-hook 'sort-diary-entries t) | ||
| 956 | @end example | ||
| 957 | |||
| 958 | @noindent | ||
| 959 | For each day, this sorts diary entries that begin with a recognizable | ||
| 960 | time of day according to their times. Diary entries without times come | ||
| 961 | first within each day. | ||
| 962 | |||
| 963 | Fancy diary display also has the ability to process included diary | ||
| 964 | files. This permits a group of people to share a diary file for events | ||
| 965 | that apply to all of them. Lines in the diary file of this form: | ||
| 966 | |||
| 967 | @smallexample | ||
| 968 | #include "@var{filename}" | ||
| 969 | @end smallexample | ||
| 970 | |||
| 971 | @noindent | ||
| 972 | includes the diary entries from the file @var{filename} in the fancy | ||
| 973 | diary buffer. The include mechanism is recursive, so that included files | ||
| 974 | can include other files, and so on; you must be careful not to have a | ||
| 975 | cycle of inclusions, of course. Here is how to enable the include | ||
| 976 | facility: | ||
| 977 | |||
| 978 | @vindex list-diary-entries-hook | ||
| 979 | @vindex mark-diary-entries-hook | ||
| 980 | @findex include-other-diary-files | ||
| 981 | @findex mark-included-diary-files | ||
| 982 | @smallexample | ||
| 983 | (add-hook 'list-diary-entries-hook 'include-other-diary-files) | ||
| 984 | (add-hook 'mark-diary-entries-hook 'mark-included-diary-files) | ||
| 985 | @end smallexample | ||
| 986 | |||
| 987 | The include mechanism works only with the fancy diary display, because | ||
| 988 | ordinary diary display shows the entries directly from your diary file. | ||
| 989 | |||
| 990 | @node Sexp Diary Entries | ||
| 991 | @section Sexp Entries and the Fancy Diary Display | ||
| 992 | @cindex sexp diary entries | ||
| 993 | |||
| 994 | Sexp diary entries allow you to do more than just have complicated | ||
| 995 | conditions under which a diary entry applies. If you use the fancy | ||
| 996 | diary display, sexp entries can generate the text of the entry depending | ||
| 997 | on the date itself. For example, an anniversary diary entry can insert | ||
| 998 | the number of years since the anniversary date into the text of the | ||
| 999 | diary entry. Thus the @samp{%d} in this dairy entry: | ||
| 1000 | |||
| 1001 | @findex diary-anniversary | ||
| 1002 | @smallexample | ||
| 1003 | %%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old) | ||
| 1004 | @end smallexample | ||
| 1005 | |||
| 1006 | @noindent | ||
| 1007 | gets replaced by the age, so on October 31, 1990 the entry appears in | ||
| 1008 | the fancy diary buffer like this: | ||
| 1009 | |||
| 1010 | @smallexample | ||
| 1011 | Arthur's birthday (42 years old) | ||
| 1012 | @end smallexample | ||
| 1013 | |||
| 1014 | @noindent | ||
| 1015 | If the diary file instead contains this entry: | ||
| 1016 | |||
| 1017 | @smallexample | ||
| 1018 | %%(diary-anniversary 10 31 1948) Arthur's %d%s birthday | ||
| 1019 | @end smallexample | ||
| 1020 | |||
| 1021 | @noindent | ||
| 1022 | the entry in the fancy diary buffer for October 31, 1990 appears like this: | ||
| 1023 | |||
| 1024 | @smallexample | ||
| 1025 | Arthur's 42nd birthday | ||
| 1026 | @end smallexample | ||
| 1027 | |||
| 1028 | Similarly, cyclic diary entries can interpolate the number of repetitions | ||
| 1029 | that have occurred: | ||
| 1030 | |||
| 1031 | @findex diary-cyclic | ||
| 1032 | @smallexample | ||
| 1033 | %%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time) | ||
| 1034 | @end smallexample | ||
| 1035 | |||
| 1036 | @noindent | ||
| 1037 | looks like this: | ||
| 1038 | |||
| 1039 | @smallexample | ||
| 1040 | Renew medication (5th time) | ||
| 1041 | @end smallexample | ||
| 1042 | |||
| 1043 | @noindent | ||
| 1044 | in the fancy diary display on September 8, 1990. | ||
| 1045 | |||
| 1046 | There is an early reminder diary sexp that includes its entry in the | ||
| 1047 | diary not only on the date of occurrence, but also on earlier dates. | ||
| 1048 | For example, if you want a reminder a week before your anniversary, you | ||
| 1049 | can use | ||
| 1050 | |||
| 1051 | @findex diary-remind | ||
| 1052 | @smallexample | ||
| 1053 | %%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary | ||
| 1054 | @end smallexample | ||
| 1055 | |||
| 1056 | @noindent | ||
| 1057 | and the fancy diary will show | ||
| 1058 | @smallexample | ||
| 1059 | Ed's anniversary | ||
| 1060 | @end smallexample | ||
| 1061 | @noindent | ||
| 1062 | both on December 15 and on December 22. | ||
| 1063 | |||
| 1064 | @findex diary-date | ||
| 1065 | The function @code{diary-date} applies to dates described by a month, | ||
| 1066 | day, year combination, each of which can be an integer, a list of | ||
| 1067 | integers, or @code{t}. The value @code{t} means all values. For | ||
| 1068 | example, | ||
| 1069 | |||
| 1070 | @smallexample | ||
| 1071 | %%(diary-date '(10 11 12) 22 t) Rake leaves | ||
| 1072 | @end smallexample | ||
| 1073 | |||
| 1074 | @noindent | ||
| 1075 | causes the fancy diary to show | ||
| 1076 | |||
| 1077 | @smallexample | ||
| 1078 | Rake leaves | ||
| 1079 | @end smallexample | ||
| 1080 | |||
| 1081 | @noindent | ||
| 1082 | on October 22, November 22, and December 22 of every year. | ||
| 1083 | |||
| 1084 | @findex diary-float | ||
| 1085 | The function @code{diary-float} allows you to describe diary entries | ||
| 1086 | that apply to dates like the third Friday of November, or the last | ||
| 1087 | Tuesday in April. The parameters are the @var{month}, @var{dayname}, | ||
| 1088 | and an index @var{n}. The entry appears on the @var{n}th @var{dayname} | ||
| 1089 | of @var{month}, where @var{dayname}=0 means Sunday, 1 means Monday, and | ||
| 1090 | so on. If @var{n} is negative it counts backward from the end of | ||
| 1091 | @var{month}. The value of @var{month} can be a list of months, a single | ||
| 1092 | month, or @code{t} to specify all months. You can also use an optional | ||
| 1093 | parameter @var{day} to specify the @var{n}th @var{dayname} of | ||
| 1094 | @var{month} on or after/before @var{day}; the value of @var{day} defaults | ||
| 1095 | to 1 if @var{n} is positive and to the last day of @var{month} if | ||
| 1096 | @var{n} is negative. For example, | ||
| 1097 | |||
| 1098 | @smallexample | ||
| 1099 | %%(diary-float t 1 -1) Pay rent | ||
| 1100 | @end smallexample | ||
| 1101 | |||
| 1102 | @noindent | ||
| 1103 | causes the fancy diary to show | ||
| 1104 | |||
| 1105 | @smallexample | ||
| 1106 | Pay rent | ||
| 1107 | @end smallexample | ||
| 1108 | |||
| 1109 | @noindent | ||
| 1110 | on the last Monday of every month. | ||
| 1111 | |||
| 1112 | The generality of sexp diary entries lets you specify any diary | ||
| 1113 | entry that you can describe algorithmically. A sexp diary entry | ||
| 1114 | contains an expression that computes whether the entry applies to any | ||
| 1115 | given date. If its value is non-@code{nil}, the entry applies to that | ||
| 1116 | date; otherwise, it does not. The expression can use the variable | ||
| 1117 | @code{date} to find the date being considered; its value is a list | ||
| 1118 | (@var{month} @var{day} @var{year}) that refers to the Gregorian | ||
| 1119 | calendar. | ||
| 1120 | |||
| 1121 | The sexp diary entry applies to a date when the expression's value | ||
| 1122 | is non-@code{nil}, but some values have more specific meanings. If | ||
| 1123 | the value is a string, that string is a description of the event which | ||
| 1124 | occurs on that date. The value can also have the form | ||
| 1125 | @code{(@var{mark} . @var{string})}; then @var{mark} specifies how to | ||
| 1126 | mark the date in the calendar, and @var{string} is the description of | ||
| 1127 | the event. If @var{mark} is a single-character string, that character | ||
| 1128 | appears next to the date in the calendar. If @var{mark} is a face | ||
| 1129 | name, the date is displayed in that face. If @var{mark} is | ||
| 1130 | @code{nil}, that specifies no particular highlighting for the date. | ||
| 1131 | |||
| 1132 | Suppose you get paid on the 21st of the month if it is a weekday, and | ||
| 1133 | on the Friday before if the 21st is on a weekend. Here is how to write | ||
| 1134 | a sexp diary entry that matches those dates: | ||
| 1135 | |||
| 1136 | @smallexample | ||
| 1137 | &%%(let ((dayname (calendar-day-of-week date)) | ||
| 1138 | (day (car (cdr date)))) | ||
| 1139 | (or (and (= day 21) (memq dayname '(1 2 3 4 5))) | ||
| 1140 | (and (memq day '(19 20)) (= dayname 5))) | ||
| 1141 | ) Pay check deposited | ||
| 1142 | @end smallexample | ||
| 1143 | |||
| 1144 | The following sexp diary entries take advantage of the ability (in the fancy | ||
| 1145 | diary display) to concoct diary entries whose text varies based on the date: | ||
| 1146 | |||
| 1147 | @findex diary-sunrise-sunset | ||
| 1148 | @findex diary-phases-of-moon | ||
| 1149 | @findex diary-day-of-year | ||
| 1150 | @findex diary-iso-date | ||
| 1151 | @findex diary-julian-date | ||
| 1152 | @findex diary-astro-day-number | ||
| 1153 | @findex diary-hebrew-date | ||
| 1154 | @findex diary-islamic-date | ||
| 1155 | @findex diary-french-date | ||
| 1156 | @findex diary-mayan-date | ||
| 1157 | @table @code | ||
| 1158 | @item %%(diary-sunrise-sunset) | ||
| 1159 | Make a diary entry for the local times of today's sunrise and sunset. | ||
| 1160 | @item %%(diary-phases-of-moon) | ||
| 1161 | Make a diary entry for the phases (quarters) of the moon. | ||
| 1162 | @item %%(diary-day-of-year) | ||
| 1163 | Make a diary entry with today's day number in the current year and the number | ||
| 1164 | of days remaining in the current year. | ||
| 1165 | @item %%(diary-iso-date) | ||
| 1166 | Make a diary entry with today's equivalent ISO commercial date. | ||
| 1167 | @item %%(diary-julian-date) | ||
| 1168 | Make a diary entry with today's equivalent date on the Julian calendar. | ||
| 1169 | @item %%(diary-astro-day-number) | ||
| 1170 | Make a diary entry with today's equivalent astronomical (Julian) day number. | ||
| 1171 | @item %%(diary-hebrew-date) | ||
| 1172 | Make a diary entry with today's equivalent date on the Hebrew calendar. | ||
| 1173 | @item %%(diary-islamic-date) | ||
| 1174 | Make a diary entry with today's equivalent date on the Islamic calendar. | ||
| 1175 | @item %%(diary-french-date) | ||
| 1176 | Make a diary entry with today's equivalent date on the French Revolutionary | ||
| 1177 | calendar. | ||
| 1178 | @item %%(diary-mayan-date) | ||
| 1179 | Make a diary entry with today's equivalent date on the Mayan calendar. | ||
| 1180 | @end table | ||
| 1181 | |||
| 1182 | @noindent | ||
| 1183 | Thus including the diary entry | ||
| 1184 | |||
| 1185 | @example | ||
| 1186 | &%%(diary-hebrew-date) | ||
| 1187 | @end example | ||
| 1188 | |||
| 1189 | @noindent | ||
| 1190 | causes every day's diary display to contain the equivalent date on the | ||
| 1191 | Hebrew calendar, if you are using the fancy diary display. (With simple | ||
| 1192 | diary display, the line @samp{&%%(diary-hebrew-date)} appears in the | ||
| 1193 | diary for any date, but does nothing particularly useful.) | ||
| 1194 | |||
| 1195 | These functions can be used to construct sexp diary entries based on | ||
| 1196 | the Hebrew calendar in certain standard ways: | ||
| 1197 | |||
| 1198 | @cindex rosh hodesh | ||
| 1199 | @findex diary-rosh-hodesh | ||
| 1200 | @cindex parasha, weekly | ||
| 1201 | @findex diary-parasha | ||
| 1202 | @cindex candle lighting times | ||
| 1203 | @findex diary-sabbath-candles | ||
| 1204 | @cindex omer count | ||
| 1205 | @findex diary-omer | ||
| 1206 | @cindex yahrzeits | ||
| 1207 | @findex diary-yahrzeit | ||
| 1208 | @table @code | ||
| 1209 | @item %%(diary-rosh-hodesh) | ||
| 1210 | Make a diary entry that tells the occurrence and ritual announcement of each | ||
| 1211 | new Hebrew month. | ||
| 1212 | @item %%(diary-parasha) | ||
| 1213 | Make a Saturday diary entry that tells the weekly synagogue scripture reading. | ||
| 1214 | @item %%(diary-sabbath-candles) | ||
| 1215 | Make a Friday diary entry that tells the @emph{local time} of Sabbath | ||
| 1216 | candle lighting. | ||
| 1217 | @item %%(diary-omer) | ||
| 1218 | Make a diary entry that gives the omer count, when appropriate. | ||
| 1219 | @item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name} | ||
| 1220 | Make a diary entry marking the anniversary of a date of death. The date | ||
| 1221 | is the @emph{Gregorian} (civil) date of death. The diary entry appears | ||
| 1222 | on the proper Hebrew calendar anniversary and on the day before. (In | ||
| 1223 | the European style, the order of the parameters is changed to @var{day}, | ||
| 1224 | @var{month}, @var{year}.) | ||
| 1225 | @end table | ||
| 1226 | |||
| 1227 | All the functions documented above take an optional argument | ||
| 1228 | @var{mark} which specifies how to mark the date in the calendar display. | ||
| 1229 | If one of these functions decides that it applies to a certain date, | ||
| 1230 | it returns a value that contains @var{mark}. | ||
| 1231 | |||
| 1232 | @node Emerge | ||
| 1233 | @chapter Merging Files with Emerge | ||
| 1234 | @cindex Emerge | ||
| 1235 | @cindex merging files | ||
| 1236 | |||
| 1237 | It's not unusual for programmers to get their signals crossed and | ||
| 1238 | modify the same program in two different directions. To recover from | ||
| 1239 | this confusion, you need to merge the two versions. Emerge makes this | ||
| 1240 | easier. For other ways to compare files, see @ref{Comparing Files,,, | ||
| 1241 | emacs, the Emacs Manual} and @ref{Top, Ediff,, ediff, The Ediff | ||
| 1242 | Manual}. | ||
| 1243 | |||
| 1244 | @menu | ||
| 1245 | * Overview of Emerge:: How to start Emerge. Basic concepts. | ||
| 1246 | * Submodes of Emerge:: Fast mode vs. Edit mode. | ||
| 1247 | Skip Prefers mode and Auto Advance mode. | ||
| 1248 | * State of Difference:: You do the merge by specifying state A or B | ||
| 1249 | for each difference. | ||
| 1250 | * Merge Commands:: Commands for selecting a difference, | ||
| 1251 | changing states of differences, etc. | ||
| 1252 | * Exiting Emerge:: What to do when you've finished the merge. | ||
| 1253 | * Combining in Emerge:: How to keep both alternatives for a difference. | ||
| 1254 | * Fine Points of Emerge:: Misc. | ||
| 1255 | @end menu | ||
| 1256 | |||
| 1257 | @node Overview of Emerge | ||
| 1258 | @section Overview of Emerge | ||
| 1259 | |||
| 1260 | To start Emerge, run one of these four commands: | ||
| 1261 | |||
| 1262 | @table @kbd | ||
| 1263 | @item M-x emerge-files | ||
| 1264 | @findex emerge-files | ||
| 1265 | Merge two specified files. | ||
| 1266 | |||
| 1267 | @item M-x emerge-files-with-ancestor | ||
| 1268 | @findex emerge-files-with-ancestor | ||
| 1269 | Merge two specified files, with reference to a common ancestor. | ||
| 1270 | |||
| 1271 | @item M-x emerge-buffers | ||
| 1272 | @findex emerge-buffers | ||
| 1273 | Merge two buffers. | ||
| 1274 | |||
| 1275 | @item M-x emerge-buffers-with-ancestor | ||
| 1276 | @findex emerge-buffers-with-ancestor | ||
| 1277 | Merge two buffers with reference to a common ancestor in a third | ||
| 1278 | buffer. | ||
| 1279 | @end table | ||
| 1280 | |||
| 1281 | @cindex merge buffer (Emerge) | ||
| 1282 | @cindex A and B buffers (Emerge) | ||
| 1283 | The Emerge commands compare two files or buffers, and display the | ||
| 1284 | comparison in three buffers: one for each input text (the @dfn{A buffer} | ||
| 1285 | and the @dfn{B buffer}), and one (the @dfn{merge buffer}) where merging | ||
| 1286 | takes place. The merge buffer shows the full merged text, not just the | ||
| 1287 | differences. Wherever the two input texts differ, you can choose which | ||
| 1288 | one of them to include in the merge buffer. | ||
| 1289 | |||
| 1290 | The Emerge commands that take input from existing buffers use only | ||
| 1291 | the accessible portions of those buffers, if they are narrowed. | ||
| 1292 | @xref{Narrowing,,, emacs, the Emacs Manual}. | ||
| 1293 | |||
| 1294 | |||
| 1295 | If a common ancestor version is available, from which the two texts to | ||
| 1296 | be merged were both derived, Emerge can use it to guess which | ||
| 1297 | alternative is right. Wherever one current version agrees with the | ||
| 1298 | ancestor, Emerge presumes that the other current version is a deliberate | ||
| 1299 | change which should be kept in the merged version. Use the | ||
| 1300 | @samp{with-ancestor} commands if you want to specify a common ancestor | ||
| 1301 | text. These commands read three file or buffer names---variant A, | ||
| 1302 | variant B, and the common ancestor. | ||
| 1303 | |||
| 1304 | After the comparison is done and the buffers are prepared, the | ||
| 1305 | interactive merging starts. You control the merging by typing special | ||
| 1306 | @dfn{merge commands} in the merge buffer (@pxref{Merge Commands}). | ||
| 1307 | For each run of differences between the input texts, you can choose | ||
| 1308 | which one of them to keep, or edit them both together. | ||
| 1309 | |||
| 1310 | The merge buffer uses a special major mode, Emerge mode, with commands | ||
| 1311 | for making these choices. But you can also edit the buffer with | ||
| 1312 | ordinary Emacs commands. | ||
| 1313 | |||
| 1314 | At any given time, the attention of Emerge is focused on one | ||
| 1315 | particular difference, called the @dfn{selected} difference. This | ||
| 1316 | difference is marked off in the three buffers like this: | ||
| 1317 | |||
| 1318 | @example | ||
| 1319 | vvvvvvvvvvvvvvvvvvvv | ||
| 1320 | @var{text that differs} | ||
| 1321 | ^^^^^^^^^^^^^^^^^^^^ | ||
| 1322 | @end example | ||
| 1323 | |||
| 1324 | @noindent | ||
| 1325 | Emerge numbers all the differences sequentially and the mode | ||
| 1326 | line always shows the number of the selected difference. | ||
| 1327 | |||
| 1328 | Normally, the merge buffer starts out with the A version of the text. | ||
| 1329 | But when the A version of a difference agrees with the common ancestor, | ||
| 1330 | then the B version is initially preferred for that difference. | ||
| 1331 | |||
| 1332 | Emerge leaves the merged text in the merge buffer when you exit. At | ||
| 1333 | that point, you can save it in a file with @kbd{C-x C-w}. If you give a | ||
| 1334 | numeric argument to @code{emerge-files} or | ||
| 1335 | @code{emerge-files-with-ancestor}, it reads the name of the output file | ||
| 1336 | using the minibuffer. (This is the last file name those commands read.) | ||
| 1337 | Then exiting from Emerge saves the merged text in the output file. | ||
| 1338 | |||
| 1339 | Normally, Emerge commands save the output buffer in its file when you | ||
| 1340 | exit. If you abort Emerge with @kbd{C-]}, the Emerge command does not | ||
| 1341 | save the output buffer, but you can save it yourself if you wish. | ||
| 1342 | |||
| 1343 | @node Submodes of Emerge | ||
| 1344 | @section Submodes of Emerge | ||
| 1345 | |||
| 1346 | You can choose between two modes for giving merge commands: Fast mode | ||
| 1347 | and Edit mode. In Fast mode, basic merge commands are single | ||
| 1348 | characters, but ordinary Emacs commands are disabled. This is | ||
| 1349 | convenient if you use only merge commands. In Edit mode, all merge | ||
| 1350 | commands start with the prefix key @kbd{C-c C-c}, and the normal Emacs | ||
| 1351 | commands are also available. This allows editing the merge buffer, but | ||
| 1352 | slows down Emerge operations. | ||
| 1353 | |||
| 1354 | Use @kbd{e} to switch to Edit mode, and @kbd{C-c C-c f} to switch to | ||
| 1355 | Fast mode. The mode line indicates Edit and Fast modes with @samp{E} | ||
| 1356 | and @samp{F}. | ||
| 1357 | |||
| 1358 | Emerge has two additional submodes that affect how particular merge | ||
| 1359 | commands work: Auto Advance mode and Skip Prefers mode. | ||
| 1360 | |||
| 1361 | If Auto Advance mode is in effect, the @kbd{a} and @kbd{b} commands | ||
| 1362 | advance to the next difference. This lets you go through the merge | ||
| 1363 | faster as long as you simply choose one of the alternatives from the | ||
| 1364 | input. The mode line indicates Auto Advance mode with @samp{A}. | ||
| 1365 | |||
| 1366 | If Skip Prefers mode is in effect, the @kbd{n} and @kbd{p} commands | ||
| 1367 | skip over differences in states prefer-A and prefer-B (@pxref{State of | ||
| 1368 | Difference}). Thus you see only differences for which neither version | ||
| 1369 | is presumed ``correct.'' The mode line indicates Skip Prefers mode with | ||
| 1370 | @samp{S}. | ||
| 1371 | |||
| 1372 | @findex emerge-auto-advance-mode | ||
| 1373 | @findex emerge-skip-prefers-mode | ||
| 1374 | Use the command @kbd{s a} (@code{emerge-auto-advance-mode}) to set or | ||
| 1375 | clear Auto Advance mode. Use @kbd{s s} | ||
| 1376 | (@code{emerge-skip-prefers-mode}) to set or clear Skip Prefers mode. | ||
| 1377 | These commands turn on the mode with a positive argument, turns it off | ||
| 1378 | with a negative or zero argument, and toggle the mode with no argument. | ||
| 1379 | |||
| 1380 | @node State of Difference | ||
| 1381 | @section State of a Difference | ||
| 1382 | |||
| 1383 | In the merge buffer, a difference is marked with lines of @samp{v} and | ||
| 1384 | @samp{^} characters. Each difference has one of these seven states: | ||
| 1385 | |||
| 1386 | @table @asis | ||
| 1387 | @item A | ||
| 1388 | The difference is showing the A version. The @kbd{a} command always | ||
| 1389 | produces this state; the mode line indicates it with @samp{A}. | ||
| 1390 | |||
| 1391 | @item B | ||
| 1392 | The difference is showing the B version. The @kbd{b} command always | ||
| 1393 | produces this state; the mode line indicates it with @samp{B}. | ||
| 1394 | |||
| 1395 | @item default-A | ||
| 1396 | @itemx default-B | ||
| 1397 | The difference is showing the A or the B state by default, because you | ||
| 1398 | haven't made a choice. All differences start in the default-A state | ||
| 1399 | (and thus the merge buffer is a copy of the A buffer), except those for | ||
| 1400 | which one alternative is ``preferred'' (see below). | ||
| 1401 | |||
| 1402 | When you select a difference, its state changes from default-A or | ||
| 1403 | default-B to plain A or B. Thus, the selected difference never has | ||
| 1404 | state default-A or default-B, and these states are never displayed in | ||
| 1405 | the mode line. | ||
| 1406 | |||
| 1407 | The command @kbd{d a} chooses default-A as the default state, and @kbd{d | ||
| 1408 | b} chooses default-B. This chosen default applies to all differences | ||
| 1409 | which you haven't ever selected and for which no alternative is preferred. | ||
| 1410 | If you are moving through the merge sequentially, the differences you | ||
| 1411 | haven't selected are those following the selected one. Thus, while | ||
| 1412 | moving sequentially, you can effectively make the A version the default | ||
| 1413 | for some sections of the merge buffer and the B version the default for | ||
| 1414 | others by using @kbd{d a} and @kbd{d b} between sections. | ||
| 1415 | |||
| 1416 | @item prefer-A | ||
| 1417 | @itemx prefer-B | ||
| 1418 | The difference is showing the A or B state because it is | ||
| 1419 | @dfn{preferred}. This means that you haven't made an explicit choice, | ||
| 1420 | but one alternative seems likely to be right because the other | ||
| 1421 | alternative agrees with the common ancestor. Thus, where the A buffer | ||
| 1422 | agrees with the common ancestor, the B version is preferred, because | ||
| 1423 | chances are it is the one that was actually changed. | ||
| 1424 | |||
| 1425 | These two states are displayed in the mode line as @samp{A*} and @samp{B*}. | ||
| 1426 | |||
| 1427 | @item combined | ||
| 1428 | The difference is showing a combination of the A and B states, as a | ||
| 1429 | result of the @kbd{x c} or @kbd{x C} commands. | ||
| 1430 | |||
| 1431 | Once a difference is in this state, the @kbd{a} and @kbd{b} commands | ||
| 1432 | don't do anything to it unless you give them a numeric argument. | ||
| 1433 | |||
| 1434 | The mode line displays this state as @samp{comb}. | ||
| 1435 | @end table | ||
| 1436 | |||
| 1437 | @node Merge Commands | ||
| 1438 | @section Merge Commands | ||
| 1439 | |||
| 1440 | Here are the Merge commands for Fast mode; in Edit mode, precede them | ||
| 1441 | with @kbd{C-c C-c}: | ||
| 1442 | |||
| 1443 | @table @kbd | ||
| 1444 | @item p | ||
| 1445 | Select the previous difference. | ||
| 1446 | |||
| 1447 | @item n | ||
| 1448 | Select the next difference. | ||
| 1449 | |||
| 1450 | @item a | ||
| 1451 | Choose the A version of this difference. | ||
| 1452 | |||
| 1453 | @item b | ||
| 1454 | Choose the B version of this difference. | ||
| 1455 | |||
| 1456 | @item C-u @var{n} j | ||
| 1457 | Select difference number @var{n}. | ||
| 1458 | |||
| 1459 | @item . | ||
| 1460 | Select the difference containing point. You can use this command in the | ||
| 1461 | merge buffer or in the A or B buffer. | ||
| 1462 | |||
| 1463 | @item q | ||
| 1464 | Quit---finish the merge. | ||
| 1465 | |||
| 1466 | @item C-] | ||
| 1467 | Abort---exit merging and do not save the output. | ||
| 1468 | |||
| 1469 | @item f | ||
| 1470 | Go into Fast mode. (In Edit mode, this is actually @kbd{C-c C-c f}.) | ||
| 1471 | |||
| 1472 | @item e | ||
| 1473 | Go into Edit mode. | ||
| 1474 | |||
| 1475 | @item l | ||
| 1476 | Recenter (like @kbd{C-l}) all three windows. | ||
| 1477 | |||
| 1478 | @item - | ||
| 1479 | Specify part of a prefix numeric argument. | ||
| 1480 | |||
| 1481 | @item @var{digit} | ||
| 1482 | Also specify part of a prefix numeric argument. | ||
| 1483 | |||
| 1484 | @item d a | ||
| 1485 | Choose the A version as the default from here down in | ||
| 1486 | the merge buffer. | ||
| 1487 | |||
| 1488 | @item d b | ||
| 1489 | Choose the B version as the default from here down in | ||
| 1490 | the merge buffer. | ||
| 1491 | |||
| 1492 | @item c a | ||
| 1493 | Copy the A version of this difference into the kill ring. | ||
| 1494 | |||
| 1495 | @item c b | ||
| 1496 | Copy the B version of this difference into the kill ring. | ||
| 1497 | |||
| 1498 | @item i a | ||
| 1499 | Insert the A version of this difference at point. | ||
| 1500 | |||
| 1501 | @item i b | ||
| 1502 | Insert the B version of this difference at point. | ||
| 1503 | |||
| 1504 | @item m | ||
| 1505 | Put point and mark around the difference. | ||
| 1506 | |||
| 1507 | @item ^ | ||
| 1508 | Scroll all three windows down (like @kbd{M-v}). | ||
| 1509 | |||
| 1510 | @item v | ||
| 1511 | Scroll all three windows up (like @kbd{C-v}). | ||
| 1512 | |||
| 1513 | @item < | ||
| 1514 | Scroll all three windows left (like @kbd{C-x <}). | ||
| 1515 | |||
| 1516 | @item > | ||
| 1517 | Scroll all three windows right (like @kbd{C-x >}). | ||
| 1518 | |||
| 1519 | @item | | ||
| 1520 | Reset horizontal scroll on all three windows. | ||
| 1521 | |||
| 1522 | @item x 1 | ||
| 1523 | Shrink the merge window to one line. (Use @kbd{C-u l} to restore it | ||
| 1524 | to full size.) | ||
| 1525 | |||
| 1526 | @item x c | ||
| 1527 | Combine the two versions of this difference (@pxref{Combining in | ||
| 1528 | Emerge}). | ||
| 1529 | |||
| 1530 | @item x f | ||
| 1531 | Show the names of the files/buffers Emerge is operating on, in a Help | ||
| 1532 | window. (Use @kbd{C-u l} to restore windows.) | ||
| 1533 | |||
| 1534 | @item x j | ||
| 1535 | Join this difference with the following one. | ||
| 1536 | (@kbd{C-u x j} joins this difference with the previous one.) | ||
| 1537 | |||
| 1538 | @item x s | ||
| 1539 | Split this difference into two differences. Before you use this | ||
| 1540 | command, position point in each of the three buffers at the place where | ||
| 1541 | you want to split the difference. | ||
| 1542 | |||
| 1543 | @item x t | ||
| 1544 | Trim identical lines off the top and bottom of the difference. | ||
| 1545 | Such lines occur when the A and B versions are | ||
| 1546 | identical but differ from the ancestor version. | ||
| 1547 | @end table | ||
| 1548 | |||
| 1549 | @node Exiting Emerge | ||
| 1550 | @section Exiting Emerge | ||
| 1551 | |||
| 1552 | The @kbd{q} command (@code{emerge-quit}) finishes the merge, storing | ||
| 1553 | the results into the output file if you specified one. It restores the | ||
| 1554 | A and B buffers to their proper contents, or kills them if they were | ||
| 1555 | created by Emerge and you haven't changed them. It also disables the | ||
| 1556 | Emerge commands in the merge buffer, since executing them later could | ||
| 1557 | damage the contents of the various buffers. | ||
| 1558 | |||
| 1559 | @kbd{C-]} aborts the merge. This means exiting without writing the | ||
| 1560 | output file. If you didn't specify an output file, then there is no | ||
| 1561 | real difference between aborting and finishing the merge. | ||
| 1562 | |||
| 1563 | If the Emerge command was called from another Lisp program, then its | ||
| 1564 | return value is @code{t} for successful completion, or @code{nil} if you | ||
| 1565 | abort. | ||
| 1566 | |||
| 1567 | @node Combining in Emerge | ||
| 1568 | @section Combining the Two Versions | ||
| 1569 | |||
| 1570 | Sometimes you want to keep @emph{both} alternatives for a particular | ||
| 1571 | difference. To do this, use @kbd{x c}, which edits the merge buffer | ||
| 1572 | like this: | ||
| 1573 | |||
| 1574 | @example | ||
| 1575 | @group | ||
| 1576 | #ifdef NEW | ||
| 1577 | @var{version from A buffer} | ||
| 1578 | #else /* not NEW */ | ||
| 1579 | @var{version from B buffer} | ||
| 1580 | #endif /* not NEW */ | ||
| 1581 | @end group | ||
| 1582 | @end example | ||
| 1583 | |||
| 1584 | @noindent | ||
| 1585 | @vindex emerge-combine-versions-template | ||
| 1586 | While this example shows C preprocessor conditionals delimiting the two | ||
| 1587 | alternative versions, you can specify the strings to use by setting | ||
| 1588 | the variable @code{emerge-combine-versions-template} to a string of your | ||
| 1589 | choice. In the string, @samp{%a} says where to put version A, and | ||
| 1590 | @samp{%b} says where to put version B. The default setting, which | ||
| 1591 | produces the results shown above, looks like this: | ||
| 1592 | |||
| 1593 | @example | ||
| 1594 | @group | ||
| 1595 | "#ifdef NEW\n%a#else /* not NEW */\n%b#endif /* not NEW */\n" | ||
| 1596 | @end group | ||
| 1597 | @end example | ||
| 1598 | |||
| 1599 | @node Fine Points of Emerge | ||
| 1600 | @section Fine Points of Emerge | ||
| 1601 | |||
| 1602 | During the merge, you mustn't try to edit the A and B buffers yourself. | ||
| 1603 | Emerge modifies them temporarily, but ultimately puts them back the way | ||
| 1604 | they were. | ||
| 1605 | |||
| 1606 | You can have any number of merges going at once---just don't use any one | ||
| 1607 | buffer as input to more than one merge at once, since the temporary | ||
| 1608 | changes made in these buffers would get in each other's way. | ||
| 1609 | |||
| 1610 | Starting Emerge can take a long time because it needs to compare the | ||
| 1611 | files fully. Emacs can't do anything else until @code{diff} finishes. | ||
| 1612 | Perhaps in the future someone will change Emerge to do the comparison in | ||
| 1613 | the background when the input files are large---then you could keep on | ||
| 1614 | doing other things with Emacs until Emerge is ready to accept | ||
| 1615 | commands. | ||
| 1616 | |||
| 1617 | @vindex emerge-startup-hook | ||
| 1618 | After setting up the merge, Emerge runs the hook | ||
| 1619 | @code{emerge-startup-hook}. @xref{Hooks,,, emacs, the Emacs Manual}. | ||
| 1620 | |||
| 1621 | @node Picture Mode | ||
| 1622 | @chapter Editing Pictures | ||
| 1623 | @cindex pictures | ||
| 1624 | @cindex making pictures out of text characters | ||
| 1625 | @findex edit-picture | ||
| 1626 | |||
| 1627 | To edit a picture made out of text characters (for example, a picture | ||
| 1628 | of the division of a register into fields, as a comment in a program), | ||
| 1629 | use the command @kbd{M-x edit-picture} to enter Picture mode. | ||
| 1630 | |||
| 1631 | In Picture mode, editing is based on the @dfn{quarter-plane} model of | ||
| 1632 | text, according to which the text characters lie studded on an area that | ||
| 1633 | stretches infinitely far to the right and downward. The concept of the end | ||
| 1634 | of a line does not exist in this model; the most you can say is where the | ||
| 1635 | last nonblank character on the line is found. | ||
| 1636 | |||
| 1637 | Of course, Emacs really always considers text as a sequence of | ||
| 1638 | characters, and lines really do have ends. But Picture mode replaces | ||
| 1639 | the most frequently-used commands with variants that simulate the | ||
| 1640 | quarter-plane model of text. They do this by inserting spaces or by | ||
| 1641 | converting tabs to spaces. | ||
| 1642 | |||
| 1643 | Most of the basic editing commands of Emacs are redefined by Picture mode | ||
| 1644 | to do essentially the same thing but in a quarter-plane way. In addition, | ||
| 1645 | Picture mode defines various keys starting with the @kbd{C-c} prefix to | ||
| 1646 | run special picture editing commands. | ||
| 1647 | |||
| 1648 | One of these keys, @kbd{C-c C-c}, is particularly important. Often a | ||
| 1649 | picture is part of a larger file that is usually edited in some other | ||
| 1650 | major mode. @kbd{M-x edit-picture} records the name of the previous | ||
| 1651 | major mode so you can use the @kbd{C-c C-c} command | ||
| 1652 | (@code{picture-mode-exit}) later to go back to that mode. @kbd{C-c C-c} | ||
| 1653 | also deletes spaces from the ends of lines, unless given a numeric | ||
| 1654 | argument. | ||
| 1655 | |||
| 1656 | The special commands of Picture mode all work in other modes (provided | ||
| 1657 | the @file{picture} library is loaded), but are not bound to keys except | ||
| 1658 | in Picture mode. The descriptions below talk of moving ``one column'' | ||
| 1659 | and so on, but all the picture mode commands handle numeric arguments as | ||
| 1660 | their normal equivalents do. | ||
| 1661 | |||
| 1662 | @vindex picture-mode-hook | ||
| 1663 | Turning on Picture mode runs the hook @code{picture-mode-hook}. | ||
| 1664 | Additional extensions to Picture mode can be found in | ||
| 1665 | @file{artist.el}. | ||
| 1666 | |||
| 1667 | @menu | ||
| 1668 | * Basic Picture:: Basic concepts and simple commands of Picture Mode. | ||
| 1669 | * Insert in Picture:: Controlling direction of cursor motion | ||
| 1670 | after "self-inserting" characters. | ||
| 1671 | * Tabs in Picture:: Various features for tab stops and indentation. | ||
| 1672 | * Rectangles in Picture:: Clearing and superimposing rectangles. | ||
| 1673 | @end menu | ||
| 1674 | |||
| 1675 | @node Basic Picture | ||
| 1676 | @section Basic Editing in Picture Mode | ||
| 1677 | |||
| 1678 | @findex picture-forward-column | ||
| 1679 | @findex picture-backward-column | ||
| 1680 | @findex picture-move-down | ||
| 1681 | @findex picture-move-up | ||
| 1682 | @cindex editing in Picture mode | ||
| 1683 | |||
| 1684 | Most keys do the same thing in Picture mode that they usually do, but | ||
| 1685 | do it in a quarter-plane style. For example, @kbd{C-f} is rebound to | ||
| 1686 | run @code{picture-forward-column}, a command which moves point one | ||
| 1687 | column to the right, inserting a space if necessary so that the actual | ||
| 1688 | end of the line makes no difference. @kbd{C-b} is rebound to run | ||
| 1689 | @code{picture-backward-column}, which always moves point left one | ||
| 1690 | column, converting a tab to multiple spaces if necessary. @kbd{C-n} and | ||
| 1691 | @kbd{C-p} are rebound to run @code{picture-move-down} and | ||
| 1692 | @code{picture-move-up}, which can either insert spaces or convert tabs | ||
| 1693 | as necessary to make sure that point stays in exactly the same column. | ||
| 1694 | @kbd{C-e} runs @code{picture-end-of-line}, which moves to after the last | ||
| 1695 | nonblank character on the line. There is no need to change @kbd{C-a}, | ||
| 1696 | as the choice of screen model does not affect beginnings of | ||
| 1697 | lines. | ||
| 1698 | |||
| 1699 | @findex picture-newline | ||
| 1700 | Insertion of text is adapted to the quarter-plane screen model | ||
| 1701 | through the use of Overwrite mode (@pxref{Minor Modes,,, emacs, the | ||
| 1702 | Emacs Manual}.) Self-inserting characters replace existing text, | ||
| 1703 | column by column, rather than pushing existing text to the right. | ||
| 1704 | @key{RET} runs @code{picture-newline}, which just moves to the | ||
| 1705 | beginning of the following line so that new text will replace that | ||
| 1706 | line. | ||
| 1707 | |||
| 1708 | @findex picture-backward-clear-column | ||
| 1709 | @findex picture-clear-column | ||
| 1710 | @findex picture-clear-line | ||
| 1711 | In Picture mode, the commands that normally delete or kill text, | ||
| 1712 | instead erase text (replacing it with spaces). @key{DEL} | ||
| 1713 | (@code{picture-backward-clear-column}) replaces the preceding | ||
| 1714 | character with a space rather than removing it; this moves point | ||
| 1715 | backwards. @kbd{C-d} (@code{picture-clear-column}) replaces the next | ||
| 1716 | character or characters with spaces, but does not move point. (If you | ||
| 1717 | want to clear characters to spaces and move forward over them, use | ||
| 1718 | @key{SPC}.) @kbd{C-k} (@code{picture-clear-line}) really kills the | ||
| 1719 | contents of lines, but does not delete the newlines from the buffer. | ||
| 1720 | |||
| 1721 | @findex picture-open-line | ||
| 1722 | To do actual insertion, you must use special commands. @kbd{C-o} | ||
| 1723 | (@code{picture-open-line}) creates a blank line after the current | ||
| 1724 | line; it never splits a line. @kbd{C-M-o} (@code{split-line}) makes | ||
| 1725 | sense in Picture mode, so it is not changed. @kbd{C-j} | ||
| 1726 | (@code{picture-duplicate-line}) inserts another line with the same | ||
| 1727 | contents below the current line. | ||
| 1728 | |||
| 1729 | @kindex C-c C-d @r{(Picture mode)} | ||
| 1730 | To do actual deletion in Picture mode, use @kbd{C-w}, @kbd{C-c C-d} | ||
| 1731 | (which is defined as @code{delete-char}, as @kbd{C-d} is in other | ||
| 1732 | modes), or one of the picture rectangle commands (@pxref{Rectangles in | ||
| 1733 | Picture}). | ||
| 1734 | |||
| 1735 | @node Insert in Picture | ||
| 1736 | @section Controlling Motion after Insert | ||
| 1737 | |||
| 1738 | @findex picture-movement-up | ||
| 1739 | @findex picture-movement-down | ||
| 1740 | @findex picture-movement-left | ||
| 1741 | @findex picture-movement-right | ||
| 1742 | @findex picture-movement-nw | ||
| 1743 | @findex picture-movement-ne | ||
| 1744 | @findex picture-movement-sw | ||
| 1745 | @findex picture-movement-se | ||
| 1746 | @kindex C-c < @r{(Picture mode)} | ||
| 1747 | @kindex C-c > @r{(Picture mode)} | ||
| 1748 | @kindex C-c ^ @r{(Picture mode)} | ||
| 1749 | @kindex C-c . @r{(Picture mode)} | ||
| 1750 | @kindex C-c ` @r{(Picture mode)} | ||
| 1751 | @kindex C-c ' @r{(Picture mode)} | ||
| 1752 | @kindex C-c / @r{(Picture mode)} | ||
| 1753 | @kindex C-c \ @r{(Picture mode)} | ||
| 1754 | Since ``self-inserting'' characters in Picture mode overwrite and move | ||
| 1755 | point, there is no essential restriction on how point should be moved. | ||
| 1756 | Normally point moves right, but you can specify any of the eight | ||
| 1757 | orthogonal or diagonal directions for motion after a ``self-inserting'' | ||
| 1758 | character. This is useful for drawing lines in the buffer. | ||
| 1759 | |||
| 1760 | @table @kbd | ||
| 1761 | @item C-c < | ||
| 1762 | @itemx C-c @key{LEFT} | ||
| 1763 | Move left after insertion (@code{picture-movement-left}). | ||
| 1764 | @item C-c > | ||
| 1765 | @itemx C-c @key{RIGHT} | ||
| 1766 | Move right after insertion (@code{picture-movement-right}). | ||
| 1767 | @item C-c ^ | ||
| 1768 | @itemx C-c @key{UP} | ||
| 1769 | Move up after insertion (@code{picture-movement-up}). | ||
| 1770 | @item C-c . | ||
| 1771 | @itemx C-c @key{DOWN} | ||
| 1772 | Move down after insertion (@code{picture-movement-down}). | ||
| 1773 | @item C-c ` | ||
| 1774 | @itemx C-c @key{HOME} | ||
| 1775 | Move up and left (``northwest'') after insertion (@code{picture-movement-nw}). | ||
| 1776 | @item C-c ' | ||
| 1777 | @itemx C-c @key{PAGEUP} | ||
| 1778 | Move up and right (``northeast'') after insertion | ||
| 1779 | (@code{picture-movement-ne}). | ||
| 1780 | @item C-c / | ||
| 1781 | @itemx C-c @key{END} | ||
| 1782 | Move down and left (``southwest'') after insertion | ||
| 1783 | @*(@code{picture-movement-sw}). | ||
| 1784 | @item C-c \ | ||
| 1785 | @itemx C-c @key{PAGEDOWN} | ||
| 1786 | Move down and right (``southeast'') after insertion | ||
| 1787 | @*(@code{picture-movement-se}). | ||
| 1788 | @end table | ||
| 1789 | |||
| 1790 | @kindex C-c C-f @r{(Picture mode)} | ||
| 1791 | @kindex C-c C-b @r{(Picture mode)} | ||
| 1792 | @findex picture-motion | ||
| 1793 | @findex picture-motion-reverse | ||
| 1794 | Two motion commands move based on the current Picture insertion | ||
| 1795 | direction. The command @kbd{C-c C-f} (@code{picture-motion}) moves in the | ||
| 1796 | same direction as motion after ``insertion'' currently does, while @kbd{C-c | ||
| 1797 | C-b} (@code{picture-motion-reverse}) moves in the opposite direction. | ||
| 1798 | |||
| 1799 | @node Tabs in Picture | ||
| 1800 | @section Picture Mode Tabs | ||
| 1801 | |||
| 1802 | @kindex M-TAB @r{(Picture mode)} | ||
| 1803 | @findex picture-tab-search | ||
| 1804 | @vindex picture-tab-chars | ||
| 1805 | Two kinds of tab-like action are provided in Picture mode. Use | ||
| 1806 | @kbd{M-@key{TAB}} (@code{picture-tab-search}) for context-based tabbing. | ||
| 1807 | With no argument, it moves to a point underneath the next | ||
| 1808 | ``interesting'' character that follows whitespace in the previous | ||
| 1809 | nonblank line. ``Next'' here means ``appearing at a horizontal position | ||
| 1810 | greater than the one point starts out at.'' With an argument, as in | ||
| 1811 | @kbd{C-u M-@key{TAB}}, this command moves to the next such interesting | ||
| 1812 | character in the current line. @kbd{M-@key{TAB}} does not change the | ||
| 1813 | text; it only moves point. ``Interesting'' characters are defined by | ||
| 1814 | the variable @code{picture-tab-chars}, which should define a set of | ||
| 1815 | characters. The syntax for this variable is like the syntax used inside | ||
| 1816 | of @samp{[@dots{}]} in a regular expression---but without the @samp{[} | ||
| 1817 | and the @samp{]}. Its default value is @code{"!-~"}. | ||
| 1818 | |||
| 1819 | @findex picture-tab | ||
| 1820 | @key{TAB} itself runs @code{picture-tab}, which operates based on the | ||
| 1821 | current tab stop settings; it is the Picture mode equivalent of | ||
| 1822 | @code{tab-to-tab-stop}. Normally it just moves point, but with a numeric | ||
| 1823 | argument it clears the text that it moves over. | ||
| 1824 | |||
| 1825 | @kindex C-c TAB @r{(Picture mode)} | ||
| 1826 | @findex picture-set-tab-stops | ||
| 1827 | The context-based and tab-stop-based forms of tabbing are brought | ||
| 1828 | together by the command @kbd{C-c @key{TAB}} (@code{picture-set-tab-stops}). | ||
| 1829 | This command sets the tab stops to the positions which @kbd{M-@key{TAB}} | ||
| 1830 | would consider significant in the current line. The use of this command, | ||
| 1831 | together with @key{TAB}, can get the effect of context-based tabbing. But | ||
| 1832 | @kbd{M-@key{TAB}} is more convenient in the cases where it is sufficient. | ||
| 1833 | |||
| 1834 | It may be convenient to prevent use of actual tab characters in | ||
| 1835 | pictures. For example, this prevents @kbd{C-x @key{TAB}} from messing | ||
| 1836 | up the picture. You can do this by setting the variable | ||
| 1837 | @code{indent-tabs-mode} to @code{nil}. | ||
| 1838 | |||
| 1839 | @node Rectangles in Picture | ||
| 1840 | @section Picture Mode Rectangle Commands | ||
| 1841 | @cindex rectangles and Picture mode | ||
| 1842 | @cindex Picture mode and rectangles | ||
| 1843 | |||
| 1844 | Picture mode defines commands for working on rectangular pieces of | ||
| 1845 | the text in ways that fit with the quarter-plane model. The standard | ||
| 1846 | rectangle commands may also be useful. @xref{Rectangles,,, emacs, the | ||
| 1847 | Emacs Manual}. | ||
| 1848 | |||
| 1849 | @table @kbd | ||
| 1850 | @item C-c C-k | ||
| 1851 | Clear out the region-rectangle with spaces | ||
| 1852 | (@code{picture-clear-rectangle}). With argument, delete the text. | ||
| 1853 | @item C-c C-w @var{r} | ||
| 1854 | Similar, but save rectangle contents in register @var{r} first | ||
| 1855 | (@code{picture-clear-rectangle-to-register}). | ||
| 1856 | @item C-c C-y | ||
| 1857 | Copy last killed rectangle into the buffer by overwriting, with upper | ||
| 1858 | left corner at point (@code{picture-yank-rectangle}). With argument, | ||
| 1859 | insert instead. | ||
| 1860 | @item C-c C-x @var{r} | ||
| 1861 | Similar, but use the rectangle in register @var{r} | ||
| 1862 | (@code{picture-yank-rectangle-from-register}). | ||
| 1863 | @end table | ||
| 1864 | |||
| 1865 | @kindex C-c C-k @r{(Picture mode)} | ||
| 1866 | @kindex C-c C-w @r{(Picture mode)} | ||
| 1867 | @findex picture-clear-rectangle | ||
| 1868 | @findex picture-clear-rectangle-to-register | ||
| 1869 | The picture rectangle commands @kbd{C-c C-k} | ||
| 1870 | (@code{picture-clear-rectangle}) and @kbd{C-c C-w} | ||
| 1871 | (@code{picture-clear-rectangle-to-register}) differ from the standard | ||
| 1872 | rectangle commands in that they normally clear the rectangle instead of | ||
| 1873 | deleting it; this is analogous with the way @kbd{C-d} is changed in Picture | ||
| 1874 | mode. | ||
| 1875 | |||
| 1876 | However, deletion of rectangles can be useful in Picture mode, so | ||
| 1877 | these commands delete the rectangle if given a numeric argument. | ||
| 1878 | @kbd{C-c C-k} either with or without a numeric argument saves the | ||
| 1879 | rectangle for @kbd{C-c C-y}. | ||
| 1880 | |||
| 1881 | @kindex C-c C-y @r{(Picture mode)} | ||
| 1882 | @kindex C-c C-x @r{(Picture mode)} | ||
| 1883 | @findex picture-yank-rectangle | ||
| 1884 | @findex picture-yank-rectangle-from-register | ||
| 1885 | The Picture mode commands for yanking rectangles differ from the | ||
| 1886 | standard ones in that they overwrite instead of inserting. This is | ||
| 1887 | the same way that Picture mode insertion of other text differs from | ||
| 1888 | other modes. @kbd{C-c C-y} (@code{picture-yank-rectangle}) inserts | ||
| 1889 | (by overwriting) the rectangle that was most recently killed, while | ||
| 1890 | @kbd{C-c C-x} (@code{picture-yank-rectangle-from-register}) does | ||
| 1891 | likewise for the rectangle found in a specified register. | ||
| 1892 | |||
| 1893 | @node Advanced VC Usage | ||
| 1894 | @chapter Advanced VC Usage | ||
| 1895 | |||
| 1896 | Commonly used features of Emacs' version control (VC) support are | ||
| 1897 | described in the main Emacs manual (@pxref{Version Control,,,emacs, | ||
| 1898 | the Emacs Manual}). This chapter describes more advanced VC usage. | ||
| 1899 | |||
| 1900 | @menu | ||
| 1901 | * VC Dired Mode:: Listing files managed by version control. | ||
| 1902 | * VC Dired Commands:: Commands to use in a VC Dired buffer. | ||
| 1903 | * Remote Repositories:: Efficient access to remote CVS servers. | ||
| 1904 | * Snapshots:: Sets of file versions treated as a unit. | ||
| 1905 | * Miscellaneous VC:: Various other commands and features of VC. | ||
| 1906 | * Customizing VC:: Variables that change VC's behavior. | ||
| 1907 | @end menu | ||
| 1908 | |||
| 1909 | @node VC Dired Mode | ||
| 1910 | @section Dired under VC | ||
| 1911 | |||
| 1912 | @cindex PCL-CVS | ||
| 1913 | @pindex cvs | ||
| 1914 | @cindex CVS Dired Mode | ||
| 1915 | The VC Dired Mode described here works with all the version control | ||
| 1916 | systems that VC supports. Another more powerful facility, designed | ||
| 1917 | specifically for CVS, is called PCL-CVS. @xref{Top, , About PCL-CVS, | ||
| 1918 | pcl-cvs, PCL-CVS --- The Emacs Front-End to CVS}. | ||
| 1919 | |||
| 1920 | @kindex C-x v d | ||
| 1921 | @findex vc-directory | ||
| 1922 | When you are working on a large program, it is often useful to find | ||
| 1923 | out which files have changed within an entire directory tree, or to view | ||
| 1924 | the status of all files under version control at once, and to perform | ||
| 1925 | version control operations on collections of files. You can use the | ||
| 1926 | command @kbd{C-x v d} (@code{vc-directory}) to make a directory listing | ||
| 1927 | that includes only files relevant for version control. | ||
| 1928 | |||
| 1929 | @vindex vc-dired-terse-display | ||
| 1930 | @kbd{C-x v d} creates a buffer which uses VC Dired Mode. This looks | ||
| 1931 | much like an ordinary Dired buffer (@pxref{Dired,,,emacs, the | ||
| 1932 | Emacs Manual}); however, normally it shows only the noteworthy files | ||
| 1933 | (those locked or not up-to-date). This is called @dfn{terse display}. | ||
| 1934 | If you set the variable @code{vc-dired-terse-display} to @code{nil}, | ||
| 1935 | then VC Dired shows all relevant files---those managed under version | ||
| 1936 | control, plus all subdirectories (@dfn{full display}). The command | ||
| 1937 | @kbd{v t} in a VC Dired buffer toggles between terse display and full | ||
| 1938 | display (@pxref{VC Dired Commands}). | ||
| 1939 | |||
| 1940 | @vindex vc-dired-recurse | ||
| 1941 | By default, VC Dired produces a recursive listing of noteworthy or | ||
| 1942 | relevant files at or below the given directory. You can change this by | ||
| 1943 | setting the variable @code{vc-dired-recurse} to @code{nil}; then VC | ||
| 1944 | Dired shows only the files in the given directory. | ||
| 1945 | |||
| 1946 | The line for an individual file shows the version control state in the | ||
| 1947 | place of the hard link count, owner, group, and size of the file. If | ||
| 1948 | the file is unmodified, in sync with the master file, the version | ||
| 1949 | control state shown is blank. Otherwise it consists of text in | ||
| 1950 | parentheses. Under RCS and SCCS, the name of the user locking the file | ||
| 1951 | is shown; under CVS, an abbreviated version of the @samp{cvs status} | ||
| 1952 | output is used. Here is an example using RCS: | ||
| 1953 | |||
| 1954 | @smallexample | ||
| 1955 | @group | ||
| 1956 | /home/jim/project: | ||
| 1957 | |||
| 1958 | -rw-r--r-- (jim) Apr 2 23:39 file1 | ||
| 1959 | -r--r--r-- Apr 5 20:21 file2 | ||
| 1960 | @end group | ||
| 1961 | @end smallexample | ||
| 1962 | |||
| 1963 | @noindent | ||
| 1964 | The files @samp{file1} and @samp{file2} are under version control, | ||
| 1965 | @samp{file1} is locked by user jim, and @samp{file2} is unlocked. | ||
| 1966 | |||
| 1967 | Here is an example using CVS: | ||
| 1968 | |||
| 1969 | @smallexample | ||
| 1970 | @group | ||
| 1971 | /home/joe/develop: | ||
| 1972 | |||
| 1973 | -rw-r--r-- (modified) Aug 2 1997 file1.c | ||
| 1974 | -rw-r--r-- Apr 4 20:09 file2.c | ||
| 1975 | -rw-r--r-- (merge) Sep 13 1996 file3.c | ||
| 1976 | @end group | ||
| 1977 | @end smallexample | ||
| 1978 | |||
| 1979 | Here @samp{file1.c} is modified with respect to the repository, and | ||
| 1980 | @samp{file2.c} is not. @samp{file3.c} is modified, but other changes | ||
| 1981 | have also been checked in to the repository---you need to merge them | ||
| 1982 | with the work file before you can check it in. | ||
| 1983 | |||
| 1984 | @vindex vc-stay-local | ||
| 1985 | @vindex vc-cvs-stay-local | ||
| 1986 | In the above, if the repository were on a remote machine, VC would | ||
| 1987 | only contact it when the variable @code{vc-stay-local} (or | ||
| 1988 | @code{vc-cvs-stay-local}) is nil (@pxref{CVS Options}). This is | ||
| 1989 | because access to the repository may be slow, or you may be working | ||
| 1990 | offline and not have access to the repository at all. As a | ||
| 1991 | consequence, VC would not be able to tell you that @samp{file3.c} is | ||
| 1992 | in the ``merge'' state; you would learn that only when you try to | ||
| 1993 | check-in your modified copy of the file, or use a command such as | ||
| 1994 | @kbd{C-x v m}. | ||
| 1995 | |||
| 1996 | In practice, this is not a problem because CVS handles this case | ||
| 1997 | consistently whenever it arises. In VC, you'll simply get prompted to | ||
| 1998 | merge the remote changes into your work file first. The benefits of | ||
| 1999 | less network communication usually outweigh the disadvantage of not | ||
| 2000 | seeing remote changes immediately. | ||
| 2001 | |||
| 2002 | @vindex vc-directory-exclusion-list | ||
| 2003 | When VC Dired displays subdirectories (in the ``full'' display mode), | ||
| 2004 | it omits some that should never contain any files under version control. | ||
| 2005 | By default, this includes Version Control subdirectories such as | ||
| 2006 | @samp{RCS} and @samp{CVS}; you can customize this by setting the | ||
| 2007 | variable @code{vc-directory-exclusion-list}. | ||
| 2008 | |||
| 2009 | You can fine-tune VC Dired's format by typing @kbd{C-u C-x v d}---as in | ||
| 2010 | ordinary Dired, that allows you to specify additional switches for the | ||
| 2011 | @samp{ls} command. | ||
| 2012 | |||
| 2013 | @node VC Dired Commands | ||
| 2014 | @section VC Dired Commands | ||
| 2015 | |||
| 2016 | All the usual Dired commands work normally in VC Dired mode, except | ||
| 2017 | for @kbd{v}, which is redefined as the version control prefix. You can | ||
| 2018 | invoke VC commands such as @code{vc-diff} and @code{vc-print-log} by | ||
| 2019 | typing @kbd{v =}, or @kbd{v l}, and so on. Most of these commands apply | ||
| 2020 | to the file name on the current line. | ||
| 2021 | |||
| 2022 | The command @kbd{v v} (@code{vc-next-action}) operates on all the | ||
| 2023 | marked files, so that you can lock or check in several files at once. | ||
| 2024 | If it operates on more than one file, it handles each file according to | ||
| 2025 | its current state; thus, it might lock one file, but check in another | ||
| 2026 | file. This could be confusing; it is up to you to avoid confusing | ||
| 2027 | behavior by marking a set of files that are in a similar state. If no | ||
| 2028 | files are marked, @kbd{v v} operates on the file in the current line. | ||
| 2029 | |||
| 2030 | If any files call for check-in, @kbd{v v} reads a single log entry, | ||
| 2031 | then uses it for all the files being checked in. This is convenient for | ||
| 2032 | registering or checking in several files at once, as part of the same | ||
| 2033 | change. | ||
| 2034 | |||
| 2035 | @findex vc-dired-toggle-terse-mode | ||
| 2036 | @findex vc-dired-mark-locked | ||
| 2037 | You can toggle between terse display (only locked files, or files not | ||
| 2038 | up-to-date) and full display at any time by typing @kbd{v t} | ||
| 2039 | (@code{vc-dired-toggle-terse-mode}). There is also a special command | ||
| 2040 | @kbd{* l} (@code{vc-dired-mark-locked}), which marks all files currently | ||
| 2041 | locked (or, with CVS, all files not up-to-date). Thus, typing @kbd{* l | ||
| 2042 | t k} is another way to delete from the buffer all files except those | ||
| 2043 | currently locked. | ||
| 2044 | |||
| 2045 | @node Remote Repositories | ||
| 2046 | @section Remote Repositories | ||
| 2047 | @cindex remote repositories (CVS) | ||
| 2048 | |||
| 2049 | A common way of using CVS is to set up a central CVS repository on | ||
| 2050 | some Internet host, then have each developer check out a personal | ||
| 2051 | working copy of the files on his local machine. Committing changes to | ||
| 2052 | the repository, and picking up changes from other users into one's own | ||
| 2053 | working area, then works by direct interactions with the CVS server. | ||
| 2054 | |||
| 2055 | One difficulty is that access to the CVS server is often slow, and | ||
| 2056 | that developers might need to work off-line as well. VC is designed | ||
| 2057 | to reduce the amount of network interaction necessary. | ||
| 2058 | |||
| 2059 | @menu | ||
| 2060 | * Version Backups:: Keeping local copies of repository versions. | ||
| 2061 | * Local Version Control:: Using another version system for local editing. | ||
| 2062 | @end menu | ||
| 2063 | |||
| 2064 | @node Version Backups | ||
| 2065 | @subsection Version Backups | ||
| 2066 | @cindex version backups | ||
| 2067 | |||
| 2068 | @cindex automatic version backups | ||
| 2069 | When VC sees that the CVS repository for a file is on a remote | ||
| 2070 | machine, it automatically makes local backups of unmodified versions | ||
| 2071 | of the file---@dfn{automatic version backups}. This means that you | ||
| 2072 | can compare the file to the repository version (@kbd{C-x v =}), or | ||
| 2073 | revert to that version (@kbd{C-x v u}), without any network | ||
| 2074 | interactions. | ||
| 2075 | |||
| 2076 | The local copy of the unmodified file is called a @dfn{version | ||
| 2077 | backup} to indicate that it corresponds exactly to a version that is | ||
| 2078 | stored in the repository. Note that version backups are not the same | ||
| 2079 | as ordinary Emacs backup files (@pxref{Backup,,,emacs, the Emacs | ||
| 2080 | Manual}). But they follow a similar naming convention. | ||
| 2081 | |||
| 2082 | For a file that comes from a remote CVS repository, VC makes a | ||
| 2083 | version backup whenever you save the first changes to the file, and | ||
| 2084 | removes it after you have committed your modified version to the | ||
| 2085 | repository. You can disable the making of automatic version backups by | ||
| 2086 | setting @code{vc-cvs-stay-local} to @code{nil} (@pxref{CVS Options}). | ||
| 2087 | |||
| 2088 | @cindex manual version backups | ||
| 2089 | The name of the automatic version backup for version @var{version} | ||
| 2090 | of file @var{file} is @code{@var{file}.~@var{version}.~}. This is | ||
| 2091 | almost the same as the name used by @kbd{C-x v ~} (@pxref{Old | ||
| 2092 | Versions,,,emacs, the Emacs Manual}), the only difference being | ||
| 2093 | the additional dot (@samp{.}) after the version number. This | ||
| 2094 | similarity is intentional, because both kinds of files store the same | ||
| 2095 | kind of information. The file made by @kbd{C-x v ~} acts as a | ||
| 2096 | @dfn{manual version backup}. | ||
| 2097 | |||
| 2098 | All the VC commands that operate on old versions of a file can use | ||
| 2099 | both kinds of version backups. For instance, @kbd{C-x v ~} uses | ||
| 2100 | either an automatic or a manual version backup, if possible, to get | ||
| 2101 | the contents of the version you request. Likewise, @kbd{C-x v =} and | ||
| 2102 | @kbd{C-x v u} use either an automatic or a manual version backup, if | ||
| 2103 | one of them exists, to get the contents of a version to compare or | ||
| 2104 | revert to. If you changed a file outside of Emacs, so that no | ||
| 2105 | automatic version backup was created for the previous text, you can | ||
| 2106 | create a manual backup of that version using @kbd{C-x v ~}, and thus | ||
| 2107 | obtain the benefit of the local copy for Emacs commands. | ||
| 2108 | |||
| 2109 | The only difference in Emacs's handling of manual and automatic | ||
| 2110 | version backups, once they exist, is that Emacs deletes automatic | ||
| 2111 | version backups when you commit to the repository. By contrast, | ||
| 2112 | manual version backups remain until you delete them. | ||
| 2113 | |||
| 2114 | @node Local Version Control | ||
| 2115 | @subsection Local Version Control | ||
| 2116 | @cindex local version control | ||
| 2117 | @cindex local back end (version control) | ||
| 2118 | |||
| 2119 | When you make many changes to a file that comes from a remote | ||
| 2120 | repository, it can be convenient to have version control on your local | ||
| 2121 | machine as well. You can then record intermediate versions, revert to | ||
| 2122 | a previous state, etc., before you actually commit your changes to the | ||
| 2123 | remote server. | ||
| 2124 | |||
| 2125 | VC lets you do this by putting a file under a second, local version | ||
| 2126 | control system, so that the file is effectively registered in two | ||
| 2127 | systems at the same time. For the description here, we will assume | ||
| 2128 | that the remote system is CVS, and you use RCS locally, although the | ||
| 2129 | mechanism works with any combination of version control systems | ||
| 2130 | (@dfn{back ends}). | ||
| 2131 | |||
| 2132 | To make it work with other back ends, you must make sure that the | ||
| 2133 | ``more local'' back end comes before the ``more remote'' back end in | ||
| 2134 | the setting of @code{vc-handled-backends} (@pxref{Customizing VC}). By | ||
| 2135 | default, this variable is set up so that you can use remote CVS and | ||
| 2136 | local RCS as described here. | ||
| 2137 | |||
| 2138 | To start using local RCS for a file that comes from a remote CVS | ||
| 2139 | server, you must @emph{register the file in RCS}, by typing @kbd{C-u | ||
| 2140 | C-x v v rcs @key{RET}}. (In other words, use @code{vc-next-action} with a | ||
| 2141 | prefix argument, and specify RCS as the back end.) | ||
| 2142 | |||
| 2143 | You can do this at any time; it does not matter whether you have | ||
| 2144 | already modified the file with respect to the version in the CVS | ||
| 2145 | repository. If possible, VC tries to make the RCS master start with | ||
| 2146 | the unmodified repository version, then checks in any local changes | ||
| 2147 | as a new version. This works if you have not made any changes yet, or | ||
| 2148 | if the unmodified repository version exists locally as a version | ||
| 2149 | backup (@pxref{Version Backups}). If the unmodified version is not | ||
| 2150 | available locally, the RCS master starts with the modified version; | ||
| 2151 | the only drawback to this is that you cannot compare your changes | ||
| 2152 | locally to what is stored in the repository. | ||
| 2153 | |||
| 2154 | The version number of the RCS master is derived from the current CVS | ||
| 2155 | version, starting a branch from it. For example, if the current CVS | ||
| 2156 | version is 1.23, the local RCS branch will be 1.23.1. Version 1.23 in | ||
| 2157 | the RCS master will be identical to version 1.23 under CVS; your first | ||
| 2158 | changes are checked in as 1.23.1.1. (If the unmodified file is not | ||
| 2159 | available locally, VC will check in the modified file twice, both as | ||
| 2160 | 1.23 and 1.23.1.1, to make the revision numbers consistent.) | ||
| 2161 | |||
| 2162 | If you do not use locking under CVS (the default), locking is also | ||
| 2163 | disabled for RCS, so that editing under RCS works exactly as under | ||
| 2164 | CVS. | ||
| 2165 | |||
| 2166 | When you are done with local editing, you can commit the final version | ||
| 2167 | back to the CVS repository by typing @kbd{C-u C-x v v cvs @key{RET}}. | ||
| 2168 | This initializes the log entry buffer (@pxref{Log Buffer,,,emacs, the | ||
| 2169 | Emacs Manual}) to contain all the log entries you have recorded in the | ||
| 2170 | RCS master; you can edit them as you wish, and then commit in CVS by | ||
| 2171 | typing @kbd{C-c C-c}. If the commit is successful, VC removes the RCS | ||
| 2172 | master, so that the file is once again registered under CVS only. | ||
| 2173 | (The RCS master is not actually deleted, just renamed by appending | ||
| 2174 | @samp{~} to the name, so that you can refer to it later if you wish.) | ||
| 2175 | |||
| 2176 | While using local RCS, you can pick up recent changes from the CVS | ||
| 2177 | repository into your local file, or commit some of your changes back | ||
| 2178 | to CVS, without terminating local RCS version control. To do this, | ||
| 2179 | switch to the CVS back end temporarily, with the @kbd{C-x v b} command: | ||
| 2180 | |||
| 2181 | @table @kbd | ||
| 2182 | @item C-x v b | ||
| 2183 | Switch to another back end that the current file is registered | ||
| 2184 | under (@code{vc-switch-backend}). | ||
| 2185 | |||
| 2186 | @item C-u C-x v b @var{backend} @key{RET} | ||
| 2187 | Switch to @var{backend} for the current file. | ||
| 2188 | @end table | ||
| 2189 | |||
| 2190 | @kindex C-x v b | ||
| 2191 | @findex vc-switch-backend | ||
| 2192 | @kbd{C-x v b} does not change the buffer contents, or any files; it | ||
| 2193 | only changes VC's perspective on how to handle the file. Any | ||
| 2194 | subsequent VC commands for that file will operate on the back end that | ||
| 2195 | is currently selected. | ||
| 2196 | |||
| 2197 | If the current file is registered in more than one back end, typing | ||
| 2198 | @kbd{C-x v b} ``cycles'' through all of these back ends. With a | ||
| 2199 | prefix argument, it asks for the back end to use in the minibuffer. | ||
| 2200 | |||
| 2201 | Thus, if you are using local RCS, and you want to pick up some recent | ||
| 2202 | changes in the file from remote CVS, first visit the file, then type | ||
| 2203 | @kbd{C-x v b} to switch to CVS, and finally use @kbd{C-x v m | ||
| 2204 | @key{RET}} to merge the news (@pxref{Merging,,,emacs, the Emacs | ||
| 2205 | Manual}). You can then switch back to RCS by typing @kbd{C-x v b} | ||
| 2206 | again, and continue to edit locally. | ||
| 2207 | |||
| 2208 | But if you do this, the revision numbers in the RCS master no longer | ||
| 2209 | correspond to those of CVS. Technically, this is not a problem, but | ||
| 2210 | it can become difficult to keep track of what is in the CVS repository | ||
| 2211 | and what is not. So we suggest that you return from time to time to | ||
| 2212 | CVS-only operation, by committing your local changes back to the | ||
| 2213 | repository using @kbd{C-u C-x v v cvs @key{RET}}. | ||
| 2214 | |||
| 2215 | @node Snapshots | ||
| 2216 | @section Snapshots | ||
| 2217 | @cindex snapshots and version control | ||
| 2218 | |||
| 2219 | A @dfn{snapshot} is a named set of file versions (one for each | ||
| 2220 | registered file) that you can treat as a unit. One important kind of | ||
| 2221 | snapshot is a @dfn{release}, a (theoretically) stable version of the | ||
| 2222 | system that is ready for distribution to users. | ||
| 2223 | |||
| 2224 | @menu | ||
| 2225 | * Making Snapshots:: The snapshot facilities. | ||
| 2226 | * Snapshot Caveats:: Things to be careful of when using snapshots. | ||
| 2227 | @end menu | ||
| 2228 | |||
| 2229 | @node Making Snapshots | ||
| 2230 | @subsection Making and Using Snapshots | ||
| 2231 | |||
| 2232 | There are two basic commands for snapshots; one makes a | ||
| 2233 | snapshot with a given name, the other retrieves a named snapshot. | ||
| 2234 | |||
| 2235 | @table @code | ||
| 2236 | @kindex C-x v s | ||
| 2237 | @findex vc-create-snapshot | ||
| 2238 | @item C-x v s @var{name} @key{RET} | ||
| 2239 | Define the last saved versions of every registered file in or under the | ||
| 2240 | current directory as a snapshot named @var{name} | ||
| 2241 | (@code{vc-create-snapshot}). | ||
| 2242 | |||
| 2243 | @kindex C-x v r | ||
| 2244 | @findex vc-retrieve-snapshot | ||
| 2245 | @item C-x v r @var{name} @key{RET} | ||
| 2246 | For all registered files at or below the current directory level, select | ||
| 2247 | whatever versions correspond to the snapshot @var{name} | ||
| 2248 | (@code{vc-retrieve-snapshot}). | ||
| 2249 | |||
| 2250 | This command reports an error if any files are locked at or below the | ||
| 2251 | current directory, without changing anything; this is to avoid | ||
| 2252 | overwriting work in progress. | ||
| 2253 | @end table | ||
| 2254 | |||
| 2255 | A snapshot uses a very small amount of resources---just enough to record | ||
| 2256 | the list of file names and which version belongs to the snapshot. Thus, | ||
| 2257 | you need not hesitate to create snapshots whenever they are useful. | ||
| 2258 | |||
| 2259 | You can give a snapshot name as an argument to @kbd{C-x v =} or | ||
| 2260 | @kbd{C-x v ~} (@pxref{Old Versions,,,emacs, the Emacs Manual}). | ||
| 2261 | Thus, you can use it to compare a snapshot against the current files, | ||
| 2262 | or two snapshots against each other, or a snapshot against a named | ||
| 2263 | version. | ||
| 2264 | |||
| 2265 | @node Snapshot Caveats | ||
| 2266 | @subsection Snapshot Caveats | ||
| 2267 | |||
| 2268 | @cindex named configurations (RCS) | ||
| 2269 | VC's snapshot facilities are modeled on RCS's named-configuration | ||
| 2270 | support. They use RCS's native facilities for this, so | ||
| 2271 | snapshots made using RCS through VC are visible even when you bypass VC. | ||
| 2272 | |||
| 2273 | With CVS, Meta-CVS, and Subversion, VC also uses the native | ||
| 2274 | mechanism provided by that back end to make snapshots and retrieve them | ||
| 2275 | (@dfn{tags} for CVS and Meta-CVS, @dfn{copies} for Subversion). | ||
| 2276 | |||
| 2277 | @c worded verbosely to avoid overfull hbox. | ||
| 2278 | For SCCS, VC implements snapshots itself. The files it uses contain | ||
| 2279 | name/file/version-number triples. These snapshots are visible only | ||
| 2280 | through VC. | ||
| 2281 | |||
| 2282 | There is no support for VC snapshots using GNU Arch yet. | ||
| 2283 | |||
| 2284 | A snapshot is a set of checked-in versions. So make sure that all the | ||
| 2285 | files are checked in and not locked when you make a snapshot. | ||
| 2286 | |||
| 2287 | File renaming and deletion can create some difficulties with snapshots. | ||
| 2288 | This is not a VC-specific problem, but a general design issue in version | ||
| 2289 | control systems that no one has solved very well yet. | ||
| 2290 | |||
| 2291 | If you rename a registered file, you need to rename its master along | ||
| 2292 | with it (the command @code{vc-rename-file} does this automatically). If | ||
| 2293 | you are using SCCS, you must also update the records of the snapshot, to | ||
| 2294 | mention the file by its new name (@code{vc-rename-file} does this, | ||
| 2295 | too). An old snapshot that refers to a master file that no longer | ||
| 2296 | exists under the recorded name is invalid; VC can no longer retrieve | ||
| 2297 | it. It would be beyond the scope of this manual to explain enough about | ||
| 2298 | RCS and SCCS to explain how to update the snapshots by hand. | ||
| 2299 | |||
| 2300 | Using @code{vc-rename-file} makes the snapshot remain valid for | ||
| 2301 | retrieval, but it does not solve all problems. For example, some of the | ||
| 2302 | files in your program probably refer to others by name. At the very | ||
| 2303 | least, the makefile probably mentions the file that you renamed. If you | ||
| 2304 | retrieve an old snapshot, the renamed file is retrieved under its new | ||
| 2305 | name, which is not the name that the makefile expects. So the program | ||
| 2306 | won't really work as retrieved. | ||
| 2307 | |||
| 2308 | @node Miscellaneous VC | ||
| 2309 | @section Miscellaneous Commands and Features of VC | ||
| 2310 | |||
| 2311 | This section explains the less-frequently-used features of VC. | ||
| 2312 | |||
| 2313 | @menu | ||
| 2314 | * Change Logs and VC:: Generating a change log file from log entries. | ||
| 2315 | * Renaming and VC:: A command to rename both the source and master | ||
| 2316 | file correctly. | ||
| 2317 | * Version Headers:: Inserting version control headers into working files. | ||
| 2318 | @end menu | ||
| 2319 | |||
| 2320 | @node Change Logs and VC | ||
| 2321 | @subsection Change Logs and VC | ||
| 2322 | |||
| 2323 | If you use RCS or CVS for a program and also maintain a change log | ||
| 2324 | file for it (@pxref{Change Log,,,emacs, the Emacs Manual}), you | ||
| 2325 | can generate change log entries automatically from the version control | ||
| 2326 | log entries: | ||
| 2327 | |||
| 2328 | @table @kbd | ||
| 2329 | @item C-x v a | ||
| 2330 | @kindex C-x v a | ||
| 2331 | @findex vc-update-change-log | ||
| 2332 | Visit the current directory's change log file and, for registered files | ||
| 2333 | in that directory, create new entries for versions checked in since the | ||
| 2334 | most recent entry in the change log file. | ||
| 2335 | (@code{vc-update-change-log}). | ||
| 2336 | |||
| 2337 | This command works with RCS or CVS only, not with any of the other | ||
| 2338 | back ends. | ||
| 2339 | |||
| 2340 | @item C-u C-x v a | ||
| 2341 | As above, but only find entries for the current buffer's file. | ||
| 2342 | |||
| 2343 | @item M-1 C-x v a | ||
| 2344 | As above, but find entries for all the currently visited files that are | ||
| 2345 | maintained with version control. This works only with RCS, and it puts | ||
| 2346 | all entries in the log for the default directory, which may not be | ||
| 2347 | appropriate. | ||
| 2348 | @end table | ||
| 2349 | |||
| 2350 | For example, suppose the first line of @file{ChangeLog} is dated | ||
| 2351 | 1999-04-10, and that the only check-in since then was by Nathaniel | ||
| 2352 | Bowditch to @file{rcs2log} on 1999-05-22 with log text @samp{Ignore log | ||
| 2353 | messages that start with `#'.}. Then @kbd{C-x v a} visits | ||
| 2354 | @file{ChangeLog} and inserts text like this: | ||
| 2355 | |||
| 2356 | @iftex | ||
| 2357 | @medbreak | ||
| 2358 | @end iftex | ||
| 2359 | @smallexample | ||
| 2360 | @group | ||
| 2361 | 1999-05-22 Nathaniel Bowditch <nat@@apn.org> | ||
| 2362 | |||
| 2363 | * rcs2log: Ignore log messages that start with `#'. | ||
| 2364 | @end group | ||
| 2365 | @end smallexample | ||
| 2366 | @iftex | 95 | @iftex |
| 2367 | @medbreak | 96 | @c ``Picture Mode'' is a chapter, not a section, so it's outside @raisesections. |
| 2368 | @end iftex | 97 | @include picture-xtra.texi |
| 2369 | 98 | ||
| 2370 | @noindent | 99 | @raisesections |
| 2371 | You can then edit the new change log entry further as you wish. | 100 | @include arevert-xtra.texi |
| 2372 | 101 | ||
| 2373 | Some of the new change log entries may duplicate what's already in | 102 | @include dired-xtra.texi |
| 2374 | ChangeLog. You will have to remove these duplicates by hand. | ||
| 2375 | 103 | ||
| 2376 | Normally, the log entry for file @file{foo} is displayed as @samp{* | 104 | @include cal-xtra.texi |
| 2377 | foo: @var{text of log entry}}. The @samp{:} after @file{foo} is omitted | ||
| 2378 | if the text of the log entry starts with @w{@samp{(@var{functionname}): | ||
| 2379 | }}. For example, if the log entry for @file{vc.el} is | ||
| 2380 | @samp{(vc-do-command): Check call-process status.}, then the text in | ||
| 2381 | @file{ChangeLog} looks like this: | ||
| 2382 | 105 | ||
| 2383 | @iftex | 106 | @include emerge-xtra.texi |
| 2384 | @medbreak | ||
| 2385 | @end iftex | ||
| 2386 | @smallexample | ||
| 2387 | @group | ||
| 2388 | 1999-05-06 Nathaniel Bowditch <nat@@apn.org> | ||
| 2389 | |||
| 2390 | * vc.el (vc-do-command): Check call-process status. | ||
| 2391 | @end group | ||
| 2392 | @end smallexample | ||
| 2393 | @iftex | ||
| 2394 | @medbreak | ||
| 2395 | @end iftex | ||
| 2396 | 107 | ||
| 2397 | When @kbd{C-x v a} adds several change log entries at once, it groups | 108 | @include vc-xtra.texi |
| 2398 | related log entries together if they all are checked in by the same | ||
| 2399 | author at nearly the same time. If the log entries for several such | ||
| 2400 | files all have the same text, it coalesces them into a single entry. | ||
| 2401 | For example, suppose the most recent check-ins have the following log | ||
| 2402 | entries: | ||
| 2403 | 109 | ||
| 2404 | @flushleft | 110 | @include fortran-xtra.texi |
| 2405 | @bullet{} For @file{vc.texinfo}: @samp{Fix expansion typos.} | ||
| 2406 | @bullet{} For @file{vc.el}: @samp{Don't call expand-file-name.} | ||
| 2407 | @bullet{} For @file{vc-hooks.el}: @samp{Don't call expand-file-name.} | ||
| 2408 | @end flushleft | ||
| 2409 | 111 | ||
| 2410 | @noindent | 112 | @include msdog-xtra.texi |
| 2411 | They appear like this in @file{ChangeLog}: | ||
| 2412 | 113 | ||
| 2413 | @iftex | 114 | @lowersections |
| 2414 | @medbreak | ||
| 2415 | @end iftex | ||
| 2416 | @smallexample | ||
| 2417 | @group | ||
| 2418 | 1999-04-01 Nathaniel Bowditch <nat@@apn.org> | ||
| 2419 | |||
| 2420 | * vc.texinfo: Fix expansion typos. | ||
| 2421 | |||
| 2422 | * vc.el, vc-hooks.el: Don't call expand-file-name. | ||
| 2423 | @end group | ||
| 2424 | @end smallexample | ||
| 2425 | @iftex | ||
| 2426 | @medbreak | ||
| 2427 | @end iftex | 115 | @end iftex |
| 2428 | 116 | ||
| 2429 | Normally, @kbd{C-x v a} separates log entries by a blank line, but you | ||
| 2430 | can mark several related log entries to be clumped together (without an | ||
| 2431 | intervening blank line) by starting the text of each related log entry | ||
| 2432 | with a label of the form @w{@samp{@{@var{clumpname}@} }}. The label | ||
| 2433 | itself is not copied to @file{ChangeLog}. For example, suppose the log | ||
| 2434 | entries are: | ||
| 2435 | |||
| 2436 | @flushleft | ||
| 2437 | @bullet{} For @file{vc.texinfo}: @samp{@{expand@} Fix expansion typos.} | ||
| 2438 | @bullet{} For @file{vc.el}: @samp{@{expand@} Don't call expand-file-name.} | ||
| 2439 | @bullet{} For @file{vc-hooks.el}: @samp{@{expand@} Don't call expand-file-name.} | ||
| 2440 | @end flushleft | ||
| 2441 | |||
| 2442 | @noindent | ||
| 2443 | Then the text in @file{ChangeLog} looks like this: | ||
| 2444 | |||
| 2445 | @iftex | ||
| 2446 | @medbreak | ||
| 2447 | @end iftex | ||
| 2448 | @smallexample | ||
| 2449 | @group | ||
| 2450 | 1999-04-01 Nathaniel Bowditch <nat@@apn.org> | ||
| 2451 | |||
| 2452 | * vc.texinfo: Fix expansion typos. | ||
| 2453 | * vc.el, vc-hooks.el: Don't call expand-file-name. | ||
| 2454 | @end group | ||
| 2455 | @end smallexample | ||
| 2456 | @iftex | ||
| 2457 | @medbreak | ||
| 2458 | @end iftex | ||
| 2459 | |||
| 2460 | A log entry whose text begins with @samp{#} is not copied to | ||
| 2461 | @file{ChangeLog}. For example, if you merely fix some misspellings in | ||
| 2462 | comments, you can log the change with an entry beginning with @samp{#} | ||
| 2463 | to avoid putting such trivia into @file{ChangeLog}. | ||
| 2464 | |||
| 2465 | @node Renaming and VC | ||
| 2466 | @subsection Renaming VC Work Files and Master Files | ||
| 2467 | |||
| 2468 | @findex vc-rename-file | ||
| 2469 | When you rename a registered file, you must also rename its master | ||
| 2470 | file correspondingly to get proper results. Use @code{vc-rename-file} | ||
| 2471 | to rename the source file as you specify, and rename its master file | ||
| 2472 | accordingly. It also updates any snapshots (@pxref{Snapshots}) that | ||
| 2473 | mention the file, so that they use the new name; despite this, the | ||
| 2474 | snapshot thus modified may not completely work (@pxref{Snapshot | ||
| 2475 | Caveats}). | ||
| 2476 | |||
| 2477 | Some back ends do not provide an explicit rename operation to their | ||
| 2478 | repositories. After issuing @code{vc-rename-file}, use @kbd{C-x v v} | ||
| 2479 | on the original and renamed buffers and provide the necessary edit | ||
| 2480 | log. | ||
| 2481 | |||
| 2482 | You cannot use @code{vc-rename-file} on a file that is locked by | ||
| 2483 | someone else. | ||
| 2484 | |||
| 2485 | @node Version Headers | ||
| 2486 | @subsection Inserting Version Control Headers | ||
| 2487 | |||
| 2488 | Sometimes it is convenient to put version identification strings | ||
| 2489 | directly into working files. Certain special strings called | ||
| 2490 | @dfn{version headers} are replaced in each successive version by the | ||
| 2491 | number of that version, the name of the user who created it, and other | ||
| 2492 | relevant information. All of the back ends that VC supports have such | ||
| 2493 | a mechanism, except GNU Arch. | ||
| 2494 | |||
| 2495 | VC does not normally use the information contained in these headers. | ||
| 2496 | The exception is RCS---with RCS, version headers are sometimes more | ||
| 2497 | reliable than the master file to determine which version of the file | ||
| 2498 | you are editing. Note that in a multi-branch environment, version | ||
| 2499 | headers are necessary to make VC behave correctly (@pxref{Multi-User | ||
| 2500 | Branching,,,emacs, the Emacs Manual}). | ||
| 2501 | |||
| 2502 | Searching for RCS version headers is controlled by the variable | ||
| 2503 | @code{vc-consult-headers}. If it is non-@code{nil} (the default), | ||
| 2504 | Emacs searches for headers to determine the version number you are | ||
| 2505 | editing. Setting it to @code{nil} disables this feature. | ||
| 2506 | |||
| 2507 | Note that although CVS uses the same kind of version headers as RCS | ||
| 2508 | does, VC never searches for these headers if you are using CVS, | ||
| 2509 | regardless of the above setting. | ||
| 2510 | |||
| 2511 | @kindex C-x v h | ||
| 2512 | @findex vc-insert-headers | ||
| 2513 | You can use the @kbd{C-x v h} command (@code{vc-insert-headers}) to | ||
| 2514 | insert a suitable header string. | ||
| 2515 | |||
| 2516 | @table @kbd | ||
| 2517 | @item C-x v h | ||
| 2518 | Insert headers in a file for use with your version-control system. | ||
| 2519 | @end table | ||
| 2520 | |||
| 2521 | @vindex vc-@var{backend}-header | ||
| 2522 | The default header string is @samp{@w{$}Id$} for RCS and | ||
| 2523 | @samp{@w{%}W%} for SCCS. You can specify other headers to insert by | ||
| 2524 | setting the variables @code{vc-@var{backend}-header} where | ||
| 2525 | @var{backend} is @code{rcs} or @code{sccs}. | ||
| 2526 | |||
| 2527 | Instead of a single string, you can specify a list of strings; then | ||
| 2528 | each string in the list is inserted as a separate header on a line of | ||
| 2529 | its own. | ||
| 2530 | |||
| 2531 | It may be necessary to use apparently-superfluous backslashes when | ||
| 2532 | writing the strings that you put in this variable. For instance, you | ||
| 2533 | might write @code{"$Id\$"} rather than @code{"$Id@w{$}"}. The extra | ||
| 2534 | backslash prevents the string constant from being interpreted as a | ||
| 2535 | header, if the Emacs Lisp file containing it is maintained with | ||
| 2536 | version control. | ||
| 2537 | |||
| 2538 | @vindex vc-comment-alist | ||
| 2539 | Each header is inserted surrounded by tabs, inside comment delimiters, | ||
| 2540 | on a new line at point. Normally the ordinary comment | ||
| 2541 | start and comment end strings of the current mode are used, but for | ||
| 2542 | certain modes, there are special comment delimiters for this purpose; | ||
| 2543 | the variable @code{vc-comment-alist} specifies them. Each element of | ||
| 2544 | this list has the form @code{(@var{mode} @var{starter} @var{ender})}. | ||
| 2545 | |||
| 2546 | @vindex vc-static-header-alist | ||
| 2547 | The variable @code{vc-static-header-alist} specifies further strings | ||
| 2548 | to add based on the name of the buffer. Its value should be a list of | ||
| 2549 | elements of the form @code{(@var{regexp} . @var{format})}. Whenever | ||
| 2550 | @var{regexp} matches the buffer name, @var{format} is inserted as part | ||
| 2551 | of the header. A header line is inserted for each element that matches | ||
| 2552 | the buffer name, and for each string specified by | ||
| 2553 | @code{vc-@var{backend}-header}. The header line is made by processing the | ||
| 2554 | string from @code{vc-@var{backend}-header} with the format taken from the | ||
| 2555 | element. The default value for @code{vc-static-header-alist} is as follows: | ||
| 2556 | |||
| 2557 | @example | ||
| 2558 | @group | ||
| 2559 | (("\\.c$" . | ||
| 2560 | "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\ | ||
| 2561 | #endif /* lint */\n")) | ||
| 2562 | @end group | ||
| 2563 | @end example | ||
| 2564 | |||
| 2565 | @noindent | ||
| 2566 | It specifies insertion of text of this form: | ||
| 2567 | |||
| 2568 | @example | ||
| 2569 | @group | ||
| 2570 | |||
| 2571 | #ifndef lint | ||
| 2572 | static char vcid[] = "@var{string}"; | ||
| 2573 | #endif /* lint */ | ||
| 2574 | @end group | ||
| 2575 | @end example | ||
| 2576 | |||
| 2577 | @noindent | ||
| 2578 | Note that the text above starts with a blank line. | ||
| 2579 | |||
| 2580 | If you use more than one version header in a file, put them close | ||
| 2581 | together in the file. The mechanism in @code{revert-buffer} that | ||
| 2582 | preserves markers may not handle markers positioned between two version | ||
| 2583 | headers. | ||
| 2584 | |||
| 2585 | @node Customizing VC | ||
| 2586 | @section Customizing VC | ||
| 2587 | |||
| 2588 | @vindex vc-handled-backends | ||
| 2589 | The variable @code{vc-handled-backends} determines which version | ||
| 2590 | control systems VC should handle. The default value is @code{(RCS CVS | ||
| 2591 | SVN SCCS Arch MCVS)}, so it contains all six version systems that are | ||
| 2592 | currently supported. If you want VC to ignore one or more of these | ||
| 2593 | systems, exclude its name from the list. To disable VC entirely, set | ||
| 2594 | this variable to @code{nil}. | ||
| 2595 | |||
| 2596 | The order of systems in the list is significant: when you visit a file | ||
| 2597 | registered in more than one system (@pxref{Local Version Control}), VC | ||
| 2598 | uses the system that comes first in @code{vc-handled-backends} by | ||
| 2599 | default. The order is also significant when you register a file for | ||
| 2600 | the first time, @pxref{Registering,,,emacs, the Emacs Manual} for | ||
| 2601 | details. | ||
| 2602 | |||
| 2603 | @menu | ||
| 2604 | * General VC Options:: Options that apply to multiple back ends. | ||
| 2605 | * RCS and SCCS:: Options for RCS and SCCS. | ||
| 2606 | * CVS Options:: Options for CVS. | ||
| 2607 | @end menu | ||
| 2608 | |||
| 2609 | @node General VC Options | ||
| 2610 | @subsection General Options | ||
| 2611 | |||
| 2612 | @vindex vc-make-backup-files | ||
| 2613 | Emacs normally does not save backup files for source files that are | ||
| 2614 | maintained with version control. If you want to make backup files even | ||
| 2615 | for files that use version control, set the variable | ||
| 2616 | @code{vc-make-backup-files} to a non-@code{nil} value. | ||
| 2617 | |||
| 2618 | @vindex vc-keep-workfiles | ||
| 2619 | Normally the work file exists all the time, whether it is locked or | ||
| 2620 | not. If you set @code{vc-keep-workfiles} to @code{nil}, then checking | ||
| 2621 | in a new version with @kbd{C-x v v} deletes the work file; but any | ||
| 2622 | attempt to visit the file with Emacs creates it again. (With CVS, work | ||
| 2623 | files are always kept.) | ||
| 2624 | |||
| 2625 | @vindex vc-follow-symlinks | ||
| 2626 | Editing a version-controlled file through a symbolic link can be | ||
| 2627 | dangerous. It bypasses the version control system---you can edit the | ||
| 2628 | file without locking it, and fail to check your changes in. Also, | ||
| 2629 | your changes might overwrite those of another user. To protect against | ||
| 2630 | this, VC checks each symbolic link that you visit, to see if it points | ||
| 2631 | to a file under version control. | ||
| 2632 | |||
| 2633 | The variable @code{vc-follow-symlinks} controls what to do when a | ||
| 2634 | symbolic link points to a version-controlled file. If it is @code{nil}, | ||
| 2635 | VC only displays a warning message. If it is @code{t}, VC automatically | ||
| 2636 | follows the link, and visits the real file instead, telling you about | ||
| 2637 | this in the echo area. If the value is @code{ask} (the default), VC | ||
| 2638 | asks you each time whether to follow the link. | ||
| 2639 | |||
| 2640 | @vindex vc-suppress-confirm | ||
| 2641 | If @code{vc-suppress-confirm} is non-@code{nil}, then @kbd{C-x v v} | ||
| 2642 | and @kbd{C-x v i} can save the current buffer without asking, and | ||
| 2643 | @kbd{C-x v u} also operates without asking for confirmation. (This | ||
| 2644 | variable does not affect @kbd{C-x v c}; that operation is so drastic | ||
| 2645 | that it should always ask for confirmation.) | ||
| 2646 | |||
| 2647 | @vindex vc-command-messages | ||
| 2648 | VC mode does much of its work by running the shell commands for RCS, | ||
| 2649 | CVS and SCCS. If @code{vc-command-messages} is non-@code{nil}, VC | ||
| 2650 | displays messages to indicate which shell commands it runs, and | ||
| 2651 | additional messages when the commands finish. | ||
| 2652 | |||
| 2653 | @vindex vc-path | ||
| 2654 | You can specify additional directories to search for version control | ||
| 2655 | programs by setting the variable @code{vc-path}. These directories | ||
| 2656 | are searched before the usual search path. It is rarely necessary to | ||
| 2657 | set this variable, because VC normally finds the proper files | ||
| 2658 | automatically. | ||
| 2659 | |||
| 2660 | @node RCS and SCCS | ||
| 2661 | @subsection Options for RCS and SCCS | ||
| 2662 | |||
| 2663 | @cindex non-strict locking (RCS) | ||
| 2664 | @cindex locking, non-strict (RCS) | ||
| 2665 | By default, RCS uses locking to coordinate the activities of several | ||
| 2666 | users, but there is a mode called @dfn{non-strict locking} in which | ||
| 2667 | you can check-in changes without locking the file first. Use | ||
| 2668 | @samp{rcs -U} to switch to non-strict locking for a particular file, | ||
| 2669 | see the @code{rcs} manual page for details. | ||
| 2670 | |||
| 2671 | When deducing the version control state of an RCS file, VC first | ||
| 2672 | looks for an RCS version header string in the file (@pxref{Version | ||
| 2673 | Headers}). If there is no header string, VC normally looks at the | ||
| 2674 | file permissions of the work file; this is fast. But there might be | ||
| 2675 | situations when the file permissions cannot be trusted. In this case | ||
| 2676 | the master file has to be consulted, which is rather expensive. Also | ||
| 2677 | the master file can only tell you @emph{if} there's any lock on the | ||
| 2678 | file, but not whether your work file really contains that locked | ||
| 2679 | version. | ||
| 2680 | |||
| 2681 | @vindex vc-consult-headers | ||
| 2682 | You can tell VC not to use version headers to determine the file | ||
| 2683 | status by setting @code{vc-consult-headers} to @code{nil}. VC then | ||
| 2684 | always uses the file permissions (if it is supposed to trust them), or | ||
| 2685 | else checks the master file. | ||
| 2686 | |||
| 2687 | @vindex vc-mistrust-permissions | ||
| 2688 | You can specify the criterion for whether to trust the file | ||
| 2689 | permissions by setting the variable @code{vc-mistrust-permissions}. | ||
| 2690 | Its value can be @code{t} (always mistrust the file permissions and | ||
| 2691 | check the master file), @code{nil} (always trust the file | ||
| 2692 | permissions), or a function of one argument which makes the decision. | ||
| 2693 | The argument is the directory name of the @file{RCS} subdirectory. A | ||
| 2694 | non-@code{nil} value from the function says to mistrust the file | ||
| 2695 | permissions. If you find that the file permissions of work files are | ||
| 2696 | changed erroneously, set @code{vc-mistrust-permissions} to @code{t}. | ||
| 2697 | Then VC always checks the master file to determine the file's status. | ||
| 2698 | |||
| 2699 | VC determines the version control state of files under SCCS much as | ||
| 2700 | with RCS. It does not consider SCCS version headers, though. Thus, | ||
| 2701 | the variable @code{vc-mistrust-permissions} affects SCCS use, but | ||
| 2702 | @code{vc-consult-headers} does not. | ||
| 2703 | |||
| 2704 | @node CVS Options | ||
| 2705 | @subsection Options specific for CVS | ||
| 2706 | |||
| 2707 | @cindex locking (CVS) | ||
| 2708 | By default, CVS does not use locking to coordinate the activities of | ||
| 2709 | several users; anyone can change a work file at any time. However, | ||
| 2710 | there are ways to restrict this, resulting in behavior that resembles | ||
| 2711 | locking. | ||
| 2712 | |||
| 2713 | @cindex CVSREAD environment variable (CVS) | ||
| 2714 | For one thing, you can set the @env{CVSREAD} environment variable | ||
| 2715 | (the value you use makes no difference). If this variable is defined, | ||
| 2716 | CVS makes your work files read-only by default. In Emacs, you must | ||
| 2717 | type @kbd{C-x v v} to make the file writable, so that editing works | ||
| 2718 | in fact similar as if locking was used. Note however, that no actual | ||
| 2719 | locking is performed, so several users can make their files writable | ||
| 2720 | at the same time. When setting @env{CVSREAD} for the first time, make | ||
| 2721 | sure to check out all your modules anew, so that the file protections | ||
| 2722 | are set correctly. | ||
| 2723 | |||
| 2724 | @cindex cvs watch feature | ||
| 2725 | @cindex watching files (CVS) | ||
| 2726 | Another way to achieve something similar to locking is to use the | ||
| 2727 | @dfn{watch} feature of CVS. If a file is being watched, CVS makes it | ||
| 2728 | read-only by default, and you must also use @kbd{C-x v v} in Emacs to | ||
| 2729 | make it writable. VC calls @code{cvs edit} to make the file writable, | ||
| 2730 | and CVS takes care to notify other developers of the fact that you | ||
| 2731 | intend to change the file. See the CVS documentation for details on | ||
| 2732 | using the watch feature. | ||
| 2733 | |||
| 2734 | @vindex vc-stay-local | ||
| 2735 | @vindex vc-cvs-stay-local | ||
| 2736 | @cindex remote repositories (CVS) | ||
| 2737 | When a file's repository is on a remote machine, VC tries to keep | ||
| 2738 | network interactions to a minimum. This is controlled by the variable | ||
| 2739 | @code{vc-cvs-stay-local}. There is another variable, | ||
| 2740 | @code{vc-stay-local}, which enables the feature also for other back | ||
| 2741 | ends that support it, including CVS. In the following, we will talk | ||
| 2742 | only about @code{vc-cvs-stay-local}, but everything applies to | ||
| 2743 | @code{vc-stay-local} as well. | ||
| 2744 | |||
| 2745 | If @code{vc-cvs-stay-local} is @code{t} (the default), then VC uses | ||
| 2746 | only the entry in the local CVS subdirectory to determine the file's | ||
| 2747 | state (and possibly information returned by previous CVS commands). | ||
| 2748 | One consequence of this is that when you have modified a file, and | ||
| 2749 | somebody else has already checked in other changes to the file, you | ||
| 2750 | are not notified of it until you actually try to commit. (But you can | ||
| 2751 | try to pick up any recent changes from the repository first, using | ||
| 2752 | @kbd{C-x v m @key{RET}}, @pxref{Merging,,,emacs, the Emacs Manual}). | ||
| 2753 | |||
| 2754 | When @code{vc-cvs-stay-local} is @code{t}, VC also makes local | ||
| 2755 | version backups, so that simple diff and revert operations are | ||
| 2756 | completely local (@pxref{Version Backups}). | ||
| 2757 | |||
| 2758 | On the other hand, if you set @code{vc-cvs-stay-local} to @code{nil}, | ||
| 2759 | then VC queries the remote repository @emph{before} it decides what to | ||
| 2760 | do in @code{vc-next-action} (@kbd{C-x v v}), just as it does for local | ||
| 2761 | repositories. It also does not make any version backups. | ||
| 2762 | |||
| 2763 | You can also set @code{vc-cvs-stay-local} to a regular expression | ||
| 2764 | that is matched against the repository host name; VC then stays local | ||
| 2765 | only for repositories from hosts that match the pattern. | ||
| 2766 | |||
| 2767 | @vindex vc-cvs-global-switches | ||
| 2768 | You can specify additional command line options to pass to all CVS | ||
| 2769 | operations in the variable @code{vc-cvs-global-switches}. These | ||
| 2770 | switches are inserted immediately after the @code{cvs} command, before | ||
| 2771 | the name of the operation to invoke. | ||
| 2772 | |||
| 2773 | |||
| 2774 | @node Fortran | ||
| 2775 | @chapter Fortran Mode | ||
| 2776 | @cindex Fortran mode | ||
| 2777 | @cindex mode, Fortran | ||
| 2778 | |||
| 2779 | Fortran mode provides special motion commands for Fortran statements | ||
| 2780 | and subprograms, and indentation commands that understand Fortran | ||
| 2781 | conventions of nesting, line numbers and continuation statements. | ||
| 2782 | Fortran mode has support for Auto Fill mode that breaks long lines into | ||
| 2783 | proper Fortran continuation lines. | ||
| 2784 | |||
| 2785 | Special commands for comments are provided because Fortran comments | ||
| 2786 | are unlike those of other languages. Built-in abbrevs optionally save | ||
| 2787 | typing when you insert Fortran keywords. | ||
| 2788 | |||
| 2789 | Use @kbd{M-x fortran-mode} to switch to this major mode. This | ||
| 2790 | command runs the hook @code{fortran-mode-hook}. @xref{Hooks,,, emacs, | ||
| 2791 | the Emacs Manual}. | ||
| 2792 | |||
| 2793 | @cindex Fortran77 and Fortran90 | ||
| 2794 | @findex f90-mode | ||
| 2795 | @findex fortran-mode | ||
| 2796 | Fortran mode is meant for editing Fortran77 ``fixed format'' (and also | ||
| 2797 | ``tab format'') source code. For editing the modern Fortran90 or | ||
| 2798 | Fortran95 ``free format'' source code, use F90 mode (@code{f90-mode}). | ||
| 2799 | Emacs normally uses Fortran mode for files with extension @samp{.f}, | ||
| 2800 | @samp{.F} or @samp{.for}, and F90 mode for the extension @samp{.f90} and | ||
| 2801 | @samp{.f95}. GNU Fortran supports both kinds of format. | ||
| 2802 | |||
| 2803 | @menu | ||
| 2804 | * Motion: Fortran Motion. Moving point by statements or subprograms. | ||
| 2805 | * Indent: Fortran Indent. Indentation commands for Fortran. | ||
| 2806 | * Comments: Fortran Comments. Inserting and aligning comments. | ||
| 2807 | * Autofill: Fortran Autofill. Auto fill support for Fortran. | ||
| 2808 | * Columns: Fortran Columns. Measuring columns for valid Fortran. | ||
| 2809 | * Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords. | ||
| 2810 | @end menu | ||
| 2811 | |||
| 2812 | @node Fortran Motion | ||
| 2813 | @section Motion Commands | ||
| 2814 | |||
| 2815 | In addition to the normal commands for moving by and operating on | ||
| 2816 | ``defuns'' (Fortran subprograms---functions and subroutines, as well as | ||
| 2817 | modules for F90 mode), Fortran mode provides special commands to move by | ||
| 2818 | statements and other program units. | ||
| 2819 | |||
| 2820 | @table @kbd | ||
| 2821 | @kindex C-c C-n @r{(Fortran mode)} | ||
| 2822 | @findex fortran-next-statement | ||
| 2823 | @findex f90-next-statement | ||
| 2824 | @item C-c C-n | ||
| 2825 | Move to the beginning of the next statement | ||
| 2826 | (@code{fortran-next-statement}/@code{f90-next-statement}). | ||
| 2827 | |||
| 2828 | @kindex C-c C-p @r{(Fortran mode)} | ||
| 2829 | @findex fortran-previous-statement | ||
| 2830 | @findex f90-previous-statement | ||
| 2831 | @item C-c C-p | ||
| 2832 | Move to the beginning of the previous statement | ||
| 2833 | (@code{fortran-previous-statement}/@code{f90-previous-statement}). | ||
| 2834 | If there is no previous statement (i.e. if called from the first | ||
| 2835 | statement in the buffer), move to the start of the buffer. | ||
| 2836 | |||
| 2837 | @kindex C-c C-e @r{(F90 mode)} | ||
| 2838 | @findex f90-next-block | ||
| 2839 | @item C-c C-e | ||
| 2840 | Move point forward to the start of the next code block | ||
| 2841 | (@code{f90-next-block}). A code block is a subroutine, | ||
| 2842 | @code{if}--@code{endif} statement, and so forth. This command exists | ||
| 2843 | for F90 mode only, not Fortran mode. With a numeric argument, this | ||
| 2844 | moves forward that many blocks. | ||
| 2845 | |||
| 2846 | @kindex C-c C-a @r{(F90 mode)} | ||
| 2847 | @findex f90-previous-block | ||
| 2848 | @item C-c C-a | ||
| 2849 | Move point backward to the previous code block | ||
| 2850 | (@code{f90-previous-block}). This is like @code{f90-next-block}, but | ||
| 2851 | moves backwards. | ||
| 2852 | |||
| 2853 | @kindex C-M-n @r{(Fortran mode)} | ||
| 2854 | @findex fortran-end-of-block | ||
| 2855 | @findex f90-end-of-block | ||
| 2856 | @item C-M-n | ||
| 2857 | Move to the end of the current code block | ||
| 2858 | (@code{fortran-end-of-block}/@code{f90-end-of-block}). With a numeric | ||
| 2859 | agument, move forward that number of blocks. The mark is set before | ||
| 2860 | moving point. The F90 mode version of this command checks for | ||
| 2861 | consistency of block types and labels (if present), but it does not | ||
| 2862 | check the outermost block since that may be incomplete. | ||
| 2863 | |||
| 2864 | @kindex C-M-p @r{(Fortran mode)} | ||
| 2865 | @findex fortran-beginning-of-block | ||
| 2866 | @findex f90-beginning-of-block | ||
| 2867 | @item C-M-p | ||
| 2868 | Move to the start of the current code block | ||
| 2869 | (@code{fortran-beginning-of-block}/@code{f90-beginning-of-block}). This | ||
| 2870 | is like @code{fortran-end-of-block}, but moves backwards. | ||
| 2871 | @end table | ||
| 2872 | |||
| 2873 | @node Fortran Indent | ||
| 2874 | @section Fortran Indentation | ||
| 2875 | |||
| 2876 | Special commands and features are needed for indenting Fortran code in | ||
| 2877 | order to make sure various syntactic entities (line numbers, comment line | ||
| 2878 | indicators and continuation line flags) appear in the columns that are | ||
| 2879 | required for standard, fixed (or tab) format Fortran. | ||
| 2880 | |||
| 2881 | @menu | ||
| 2882 | * Commands: ForIndent Commands. Commands for indenting and filling Fortran. | ||
| 2883 | * Contline: ForIndent Cont. How continuation lines indent. | ||
| 2884 | * Numbers: ForIndent Num. How line numbers auto-indent. | ||
| 2885 | * Conv: ForIndent Conv. Conventions you must obey to avoid trouble. | ||
| 2886 | * Vars: ForIndent Vars. Variables controlling Fortran indent style. | ||
| 2887 | @end menu | ||
| 2888 | |||
| 2889 | @node ForIndent Commands | ||
| 2890 | @subsection Fortran Indentation and Filling Commands | ||
| 2891 | |||
| 2892 | @table @kbd | ||
| 2893 | @item C-M-j | ||
| 2894 | Break the current line at point and set up a continuation line | ||
| 2895 | (@code{fortran-split-line}). | ||
| 2896 | @item M-^ | ||
| 2897 | Join this line to the previous line (@code{fortran-join-line}). | ||
| 2898 | @item C-M-q | ||
| 2899 | Indent all the lines of the subprogram point is in | ||
| 2900 | (@code{fortran-indent-subprogram}). | ||
| 2901 | @item M-q | ||
| 2902 | Fill a comment block or statement. | ||
| 2903 | @end table | ||
| 2904 | |||
| 2905 | @kindex C-M-q @r{(Fortran mode)} | ||
| 2906 | @findex fortran-indent-subprogram | ||
| 2907 | The key @kbd{C-M-q} runs @code{fortran-indent-subprogram}, a command | ||
| 2908 | to reindent all the lines of the Fortran subprogram (function or | ||
| 2909 | subroutine) containing point. | ||
| 2910 | |||
| 2911 | @kindex C-M-j @r{(Fortran mode)} | ||
| 2912 | @findex fortran-split-line | ||
| 2913 | The key @kbd{C-M-j} runs @code{fortran-split-line}, which splits | ||
| 2914 | a line in the appropriate fashion for Fortran. In a non-comment line, | ||
| 2915 | the second half becomes a continuation line and is indented | ||
| 2916 | accordingly. In a comment line, both halves become separate comment | ||
| 2917 | lines. | ||
| 2918 | |||
| 2919 | @kindex M-^ @r{(Fortran mode)} | ||
| 2920 | @kindex C-c C-d @r{(Fortran mode)} | ||
| 2921 | @findex fortran-join-line | ||
| 2922 | @kbd{M-^} or @kbd{C-c C-d} runs the command @code{fortran-join-line}, | ||
| 2923 | which joins a continuation line back to the previous line, roughly as | ||
| 2924 | the inverse of @code{fortran-split-line}. The point must be on a | ||
| 2925 | continuation line when this command is invoked. | ||
| 2926 | |||
| 2927 | @kindex M-q @r{(Fortran mode)} | ||
| 2928 | @kbd{M-q} in Fortran mode fills the comment block or statement that | ||
| 2929 | point is in. This removes any excess statement continuations. | ||
| 2930 | |||
| 2931 | @node ForIndent Cont | ||
| 2932 | @subsection Continuation Lines | ||
| 2933 | @cindex Fortran continuation lines | ||
| 2934 | |||
| 2935 | @vindex fortran-continuation-string | ||
| 2936 | Most Fortran77 compilers allow two ways of writing continuation lines. | ||
| 2937 | If the first non-space character on a line is in column 5, then that | ||
| 2938 | line is a continuation of the previous line. We call this @dfn{fixed | ||
| 2939 | format}. (In GNU Emacs we always count columns from 0; but note that | ||
| 2940 | the Fortran standard counts from 1.) The variable | ||
| 2941 | @code{fortran-continuation-string} specifies what character to put in | ||
| 2942 | column 5. A line that starts with a tab character followed by any digit | ||
| 2943 | except @samp{0} is also a continuation line. We call this style of | ||
| 2944 | continuation @dfn{tab format}. (Fortran90 introduced ``free format'', | ||
| 2945 | with another style of continuation lines). | ||
| 2946 | |||
| 2947 | @vindex indent-tabs-mode @r{(Fortran mode)} | ||
| 2948 | @vindex fortran-analyze-depth | ||
| 2949 | @vindex fortran-tab-mode-default | ||
| 2950 | Fortran mode can use either style of continuation line. When you | ||
| 2951 | enter Fortran mode, it tries to deduce the proper continuation style | ||
| 2952 | automatically from the buffer contents. It does this by scanning up to | ||
| 2953 | @code{fortran-analyze-depth} (default 100) lines from the start of the | ||
| 2954 | buffer. The first line that begins with either a tab character or six | ||
| 2955 | spaces determines the choice. If the scan fails (for example, if the | ||
| 2956 | buffer is new and therefore empty), the value of | ||
| 2957 | @code{fortran-tab-mode-default} (@code{nil} for fixed format, and | ||
| 2958 | non-@code{nil} for tab format) is used. @samp{/t} in the mode line | ||
| 2959 | indicates tab format is selected. Fortran mode sets the value of | ||
| 2960 | @code{indent-tabs-mode} accordingly. | ||
| 2961 | |||
| 2962 | If the text on a line starts with the Fortran continuation marker | ||
| 2963 | @samp{$}, or if it begins with any non-whitespace character in column | ||
| 2964 | 5, Fortran mode treats it as a continuation line. When you indent a | ||
| 2965 | continuation line with @key{TAB}, it converts the line to the current | ||
| 2966 | continuation style. When you split a Fortran statement with | ||
| 2967 | @kbd{C-M-j}, the continuation marker on the newline is created according | ||
| 2968 | to the continuation style. | ||
| 2969 | |||
| 2970 | The setting of continuation style affects several other aspects of | ||
| 2971 | editing in Fortran mode. In fixed format mode, the minimum column | ||
| 2972 | number for the body of a statement is 6. Lines inside of Fortran | ||
| 2973 | blocks that are indented to larger column numbers always use only the | ||
| 2974 | space character for whitespace. In tab format mode, the minimum | ||
| 2975 | column number for the statement body is 8, and the whitespace before | ||
| 2976 | column 8 must always consist of one tab character. | ||
| 2977 | |||
| 2978 | @node ForIndent Num | ||
| 2979 | @subsection Line Numbers | ||
| 2980 | |||
| 2981 | If a number is the first non-whitespace in the line, Fortran | ||
| 2982 | indentation assumes it is a line number and moves it to columns 0 | ||
| 2983 | through 4. (Columns always count from 0 in GNU Emacs.) | ||
| 2984 | |||
| 2985 | @vindex fortran-line-number-indent | ||
| 2986 | Line numbers of four digits or less are normally indented one space. | ||
| 2987 | The variable @code{fortran-line-number-indent} controls this; it | ||
| 2988 | specifies the maximum indentation a line number can have. The default | ||
| 2989 | value of the variable is 1. Fortran mode tries to prevent line number | ||
| 2990 | digits passing column 4, reducing the indentation below the specified | ||
| 2991 | maximum if necessary. If @code{fortran-line-number-indent} has the | ||
| 2992 | value 5, line numbers are right-justified to end in column 4. | ||
| 2993 | |||
| 2994 | @vindex fortran-electric-line-number | ||
| 2995 | Simply inserting a line number is enough to indent it according to | ||
| 2996 | these rules. As each digit is inserted, the indentation is recomputed. | ||
| 2997 | To turn off this feature, set the variable | ||
| 2998 | @code{fortran-electric-line-number} to @code{nil}. | ||
| 2999 | |||
| 3000 | |||
| 3001 | @node ForIndent Conv | ||
| 3002 | @subsection Syntactic Conventions | ||
| 3003 | |||
| 3004 | Fortran mode assumes that you follow certain conventions that simplify | ||
| 3005 | the task of understanding a Fortran program well enough to indent it | ||
| 3006 | properly: | ||
| 3007 | |||
| 3008 | @itemize @bullet | ||
| 3009 | @item | ||
| 3010 | Two nested @samp{do} loops never share a @samp{continue} statement. | ||
| 3011 | |||
| 3012 | @item | ||
| 3013 | Fortran keywords such as @samp{if}, @samp{else}, @samp{then}, @samp{do} | ||
| 3014 | and others are written without embedded whitespace or line breaks. | ||
| 3015 | |||
| 3016 | Fortran compilers generally ignore whitespace outside of string | ||
| 3017 | constants, but Fortran mode does not recognize these keywords if they | ||
| 3018 | are not contiguous. Constructs such as @samp{else if} or @samp{end do} | ||
| 3019 | are acceptable, but the second word should be on the same line as the | ||
| 3020 | first and not on a continuation line. | ||
| 3021 | @end itemize | ||
| 3022 | |||
| 3023 | @noindent | ||
| 3024 | If you fail to follow these conventions, the indentation commands may | ||
| 3025 | indent some lines unaesthetically. However, a correct Fortran program | ||
| 3026 | retains its meaning when reindented even if the conventions are not | ||
| 3027 | followed. | ||
| 3028 | |||
| 3029 | @node ForIndent Vars | ||
| 3030 | @subsection Variables for Fortran Indentation | ||
| 3031 | |||
| 3032 | @vindex fortran-do-indent | ||
| 3033 | @vindex fortran-if-indent | ||
| 3034 | @vindex fortran-structure-indent | ||
| 3035 | @vindex fortran-continuation-indent | ||
| 3036 | @vindex fortran-check-all-num@dots{} | ||
| 3037 | @vindex fortran-minimum-statement-indent@dots{} | ||
| 3038 | Several additional variables control how Fortran indentation works: | ||
| 3039 | |||
| 3040 | @table @code | ||
| 3041 | @item fortran-do-indent | ||
| 3042 | Extra indentation within each level of @samp{do} statement (default 3). | ||
| 3043 | |||
| 3044 | @item fortran-if-indent | ||
| 3045 | Extra indentation within each level of @samp{if}, @samp{select case}, or | ||
| 3046 | @samp{where} statements (default 3). | ||
| 3047 | |||
| 3048 | @item fortran-structure-indent | ||
| 3049 | Extra indentation within each level of @samp{structure}, @samp{union}, | ||
| 3050 | @samp{map}, or @samp{interface} statements (default 3). | ||
| 3051 | |||
| 3052 | @item fortran-continuation-indent | ||
| 3053 | Extra indentation for bodies of continuation lines (default 5). | ||
| 3054 | |||
| 3055 | @item fortran-check-all-num-for-matching-do | ||
| 3056 | In Fortran77, a numbered @samp{do} statement is ended by any statement | ||
| 3057 | with a matching line number. It is common (but not compulsory) to use a | ||
| 3058 | @samp{continue} statement for this purpose. If this variable has a | ||
| 3059 | non-@code{nil} value, indenting any numbered statement must check for a | ||
| 3060 | @samp{do} that ends there. If you always end @samp{do} statements with | ||
| 3061 | a @samp{continue} line (or if you use the more modern @samp{enddo}), | ||
| 3062 | then you can speed up indentation by setting this variable to | ||
| 3063 | @code{nil}. The default is @code{nil}. | ||
| 3064 | |||
| 3065 | @item fortran-blink-matching-if | ||
| 3066 | If this is @code{t}, indenting an @samp{endif} (or @samp{enddo} | ||
| 3067 | statement moves the cursor momentarily to the matching @samp{if} (or | ||
| 3068 | @samp{do}) statement to show where it is. The default is @code{nil}. | ||
| 3069 | |||
| 3070 | @item fortran-minimum-statement-indent-fixed | ||
| 3071 | Minimum indentation for Fortran statements when using fixed format | ||
| 3072 | continuation line style. Statement bodies are never indented less than | ||
| 3073 | this much. The default is 6. | ||
| 3074 | |||
| 3075 | @item fortran-minimum-statement-indent-tab | ||
| 3076 | Minimum indentation for Fortran statements for tab format continuation line | ||
| 3077 | style. Statement bodies are never indented less than this much. The | ||
| 3078 | default is 8. | ||
| 3079 | @end table | ||
| 3080 | |||
| 3081 | The variables controlling the indentation of comments are described in | ||
| 3082 | the following section. | ||
| 3083 | |||
| 3084 | @node Fortran Comments | ||
| 3085 | @section Fortran Comments | ||
| 3086 | |||
| 3087 | The usual Emacs comment commands assume that a comment can follow a | ||
| 3088 | line of code. In Fortran77, the standard comment syntax requires an | ||
| 3089 | entire line to be just a comment. Therefore, Fortran mode replaces the | ||
| 3090 | standard Emacs comment commands and defines some new variables. | ||
| 3091 | |||
| 3092 | @vindex fortran-comment-line-start | ||
| 3093 | Fortran mode can also handle the Fortran90 comment syntax where comments | ||
| 3094 | start with @samp{!} and can follow other text. Because only some Fortran77 | ||
| 3095 | compilers accept this syntax, Fortran mode will not insert such comments | ||
| 3096 | unless you have said in advance to do so. To do this, set the variable | ||
| 3097 | @code{fortran-comment-line-start} to @samp{"!"}. | ||
| 3098 | |||
| 3099 | @table @kbd | ||
| 3100 | @item M-; | ||
| 3101 | Align comment or insert new comment (@code{fortran-indent-comment}). | ||
| 3102 | |||
| 3103 | @item C-x ; | ||
| 3104 | Applies to nonstandard @samp{!} comments only. | ||
| 3105 | |||
| 3106 | @item C-c ; | ||
| 3107 | Turn all lines of the region into comments, or (with argument) turn them back | ||
| 3108 | into real code (@code{fortran-comment-region}). | ||
| 3109 | @end table | ||
| 3110 | |||
| 3111 | @findex fortran-indent-comment | ||
| 3112 | @kbd{M-;} in Fortran mode is redefined as the command | ||
| 3113 | @code{fortran-indent-comment}. Like the usual @kbd{M-;} command, this | ||
| 3114 | recognizes any kind of existing comment and aligns its text appropriately; | ||
| 3115 | if there is no existing comment, a comment is inserted and aligned. But | ||
| 3116 | inserting and aligning comments are not the same in Fortran mode as in | ||
| 3117 | other modes. | ||
| 3118 | |||
| 3119 | When a new comment must be inserted, if the current line is blank, a | ||
| 3120 | full-line comment is inserted. On a non-blank line, a nonstandard @samp{!} | ||
| 3121 | comment is inserted if you have said you want to use them. Otherwise a | ||
| 3122 | full-line comment is inserted on a new line before the current line. | ||
| 3123 | |||
| 3124 | Nonstandard @samp{!} comments are aligned like comments in other | ||
| 3125 | languages, but full-line comments are different. In a standard full-line | ||
| 3126 | comment, the comment delimiter itself must always appear in column zero. | ||
| 3127 | What can be aligned is the text within the comment. You can choose from | ||
| 3128 | three styles of alignment by setting the variable | ||
| 3129 | @code{fortran-comment-indent-style} to one of these values: | ||
| 3130 | |||
| 3131 | @vindex fortran-comment-indent-style | ||
| 3132 | @vindex fortran-comment-line-extra-indent | ||
| 3133 | @table @code | ||
| 3134 | @item fixed | ||
| 3135 | Align the text at a fixed column, which is the sum of | ||
| 3136 | @code{fortran-comment-line-extra-indent} and the minimum statement | ||
| 3137 | indentation. This is the default. | ||
| 3138 | |||
| 3139 | The minimum statement indentation is | ||
| 3140 | @code{fortran-minimum-statement-indent-fixed} for fixed format | ||
| 3141 | continuation line style and @code{fortran-minimum-statement-indent-tab} | ||
| 3142 | for tab format style. | ||
| 3143 | |||
| 3144 | @item relative | ||
| 3145 | Align the text as if it were a line of code, but with an additional | ||
| 3146 | @code{fortran-comment-line-extra-indent} columns of indentation. | ||
| 3147 | |||
| 3148 | @item nil | ||
| 3149 | Don't move text in full-line comments automatically. | ||
| 3150 | @end table | ||
| 3151 | |||
| 3152 | @vindex fortran-comment-indent-char | ||
| 3153 | In addition, you can specify the character to be used to indent within | ||
| 3154 | full-line comments by setting the variable | ||
| 3155 | @code{fortran-comment-indent-char} to the single-character string you want | ||
| 3156 | to use. | ||
| 3157 | |||
| 3158 | @vindex fortran-directive-re | ||
| 3159 | Compiler directive lines, or preprocessor lines, have much the same | ||
| 3160 | appearance as comment lines. It is important, though, that such lines | ||
| 3161 | never be indented at all, no matter what the value of | ||
| 3162 | @code{fortran-comment-indent-style}. The variable | ||
| 3163 | @code{fortran-directive-re} is a regular expression that specifies which | ||
| 3164 | lines are directives. Matching lines are never indented, and receive | ||
| 3165 | distinctive font-locking. | ||
| 3166 | |||
| 3167 | The normal Emacs comment command @kbd{C-x ;} has not been redefined. If | ||
| 3168 | you use @samp{!} comments, this command can be used with them. Otherwise | ||
| 3169 | it is useless in Fortran mode. | ||
| 3170 | |||
| 3171 | @kindex C-c ; @r{(Fortran mode)} | ||
| 3172 | @findex fortran-comment-region | ||
| 3173 | @vindex fortran-comment-region | ||
| 3174 | The command @kbd{C-c ;} (@code{fortran-comment-region}) turns all the | ||
| 3175 | lines of the region into comments by inserting the string @samp{C$$$} at | ||
| 3176 | the front of each one. With a numeric argument, it turns the region | ||
| 3177 | back into live code by deleting @samp{C$$$} from the front of each line | ||
| 3178 | in it. The string used for these comments can be controlled by setting | ||
| 3179 | the variable @code{fortran-comment-region}. Note that here we have an | ||
| 3180 | example of a command and a variable with the same name; these two uses | ||
| 3181 | of the name never conflict because in Lisp and in Emacs it is always | ||
| 3182 | clear from the context which one is meant. | ||
| 3183 | |||
| 3184 | @node Fortran Autofill | ||
| 3185 | @section Auto Fill in Fortran Mode | ||
| 3186 | |||
| 3187 | Fortran mode has specialized support for Auto Fill mode, which is a | ||
| 3188 | minor mode that automatically splits statements as you insert them | ||
| 3189 | when they become too wide. Splitting a statement involves making | ||
| 3190 | continuation lines using @code{fortran-continuation-string} | ||
| 3191 | (@pxref{ForIndent Cont}). This splitting happens when you type | ||
| 3192 | @key{SPC}, @key{RET}, or @key{TAB}, and also in the Fortran | ||
| 3193 | indentation commands. You activate Auto Fill in Fortran mode in the | ||
| 3194 | normal way. @xref{Auto Fill,,, emacs, the Emacs Manual}. | ||
| 3195 | |||
| 3196 | @vindex fortran-break-before-delimiters | ||
| 3197 | Auto Fill breaks lines at spaces or delimiters when the lines get | ||
| 3198 | longer than the desired width (the value of @code{fill-column}). The | ||
| 3199 | delimiters (besides whitespace) that Auto Fill can break at are | ||
| 3200 | @samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, @samp{<}, @samp{>}, | ||
| 3201 | and @samp{,}. The line break comes after the delimiter if the | ||
| 3202 | variable @code{fortran-break-before-delimiters} is @code{nil}. | ||
| 3203 | Otherwise (and by default), the break comes before the delimiter. | ||
| 3204 | |||
| 3205 | To enable Auto Fill in all Fortran buffers, add | ||
| 3206 | @code{turn-on-auto-fill} to @code{fortran-mode-hook}. @xref{Hooks,,, | ||
| 3207 | emacs, the Emacs Manual}. | ||
| 3208 | |||
| 3209 | @node Fortran Columns | ||
| 3210 | @section Checking Columns in Fortran | ||
| 3211 | |||
| 3212 | @table @kbd | ||
| 3213 | @item C-c C-r | ||
| 3214 | Display a ``column ruler'' momentarily above the current line | ||
| 3215 | (@code{fortran-column-ruler}). | ||
| 3216 | @item C-c C-w | ||
| 3217 | Split the current window horizontally temporarily so that it is 72 | ||
| 3218 | columns wide (@code{fortran-window-create-momentarily}). This may | ||
| 3219 | help you avoid making lines longer than the 72-character limit that | ||
| 3220 | some Fortran compilers impose. | ||
| 3221 | @item C-u C-c C-w | ||
| 3222 | Split the current window horizontally so that it is 72 columns wide | ||
| 3223 | (@code{fortran-window-create}). You can then continue editing. | ||
| 3224 | @item M-x fortran-strip-sequence-nos | ||
| 3225 | Delete all text in column 72 and beyond. | ||
| 3226 | @end table | ||
| 3227 | |||
| 3228 | @kindex C-c C-r @r{(Fortran mode)} | ||
| 3229 | @findex fortran-column-ruler | ||
| 3230 | The command @kbd{C-c C-r} (@code{fortran-column-ruler}) shows a column | ||
| 3231 | ruler momentarily above the current line. The comment ruler is two lines | ||
| 3232 | of text that show you the locations of columns with special significance in | ||
| 3233 | Fortran programs. Square brackets show the limits of the columns for line | ||
| 3234 | numbers, and curly brackets show the limits of the columns for the | ||
| 3235 | statement body. Column numbers appear above them. | ||
| 3236 | |||
| 3237 | Note that the column numbers count from zero, as always in GNU Emacs. | ||
| 3238 | As a result, the numbers may be one less than those you are familiar | ||
| 3239 | with; but the positions they indicate in the line are standard for | ||
| 3240 | Fortran. | ||
| 3241 | |||
| 3242 | @vindex fortran-column-ruler-fixed | ||
| 3243 | @vindex fortran-column-ruler-tabs | ||
| 3244 | The text used to display the column ruler depends on the value of the | ||
| 3245 | variable @code{indent-tabs-mode}. If @code{indent-tabs-mode} is | ||
| 3246 | @code{nil}, then the value of the variable | ||
| 3247 | @code{fortran-column-ruler-fixed} is used as the column ruler. | ||
| 3248 | Otherwise, the value of the variable @code{fortran-column-ruler-tab} is | ||
| 3249 | displayed. By changing these variables, you can change the column ruler | ||
| 3250 | display. | ||
| 3251 | |||
| 3252 | @kindex C-c C-w @r{(Fortran mode)} | ||
| 3253 | @findex fortran-window-create-momentarily | ||
| 3254 | @kbd{C-c C-w} (@code{fortran-window-create-momentarily}) temporarily | ||
| 3255 | splits the current window horizontally, making a window 72 columns | ||
| 3256 | wide, so you can see any lines that are too long. Type a space to | ||
| 3257 | restore the normal width. | ||
| 3258 | |||
| 3259 | @kindex C-u C-c C-w @r{(Fortran mode)} | ||
| 3260 | @findex fortran-window-create | ||
| 3261 | You can also split the window horizontally and continue editing with | ||
| 3262 | the split in place. To do this, use @kbd{C-u C-c C-w} (@code{M-x | ||
| 3263 | fortran-window-create}). By editing in this window you can | ||
| 3264 | immediately see when you make a line too wide to be correct Fortran. | ||
| 3265 | |||
| 3266 | @findex fortran-strip-sequence-nos | ||
| 3267 | The command @kbd{M-x fortran-strip-sequence-nos} deletes all text in | ||
| 3268 | column 72 and beyond, on all lines in the current buffer. This is the | ||
| 3269 | easiest way to get rid of old sequence numbers. | ||
| 3270 | |||
| 3271 | @node Fortran Abbrev | ||
| 3272 | @section Fortran Keyword Abbrevs | ||
| 3273 | |||
| 3274 | Fortran mode provides many built-in abbrevs for common keywords and | ||
| 3275 | declarations. These are the same sort of abbrev that you can define | ||
| 3276 | yourself. To use them, you must turn on Abbrev mode. | ||
| 3277 | @xref{Abbrevs,,, emacs, the Emacs Manual}. | ||
| 3278 | |||
| 3279 | The built-in abbrevs are unusual in one way: they all start with a | ||
| 3280 | semicolon. You cannot normally use semicolon in an abbrev, but Fortran | ||
| 3281 | mode makes this possible by changing the syntax of semicolon to ``word | ||
| 3282 | constituent.'' | ||
| 3283 | |||
| 3284 | For example, one built-in Fortran abbrev is @samp{;c} for | ||
| 3285 | @samp{continue}. If you insert @samp{;c} and then insert a punctuation | ||
| 3286 | character such as a space or a newline, the @samp{;c} expands automatically | ||
| 3287 | to @samp{continue}, provided Abbrev mode is enabled.@refill | ||
| 3288 | |||
| 3289 | Type @samp{;?} or @samp{;C-h} to display a list of all the built-in | ||
| 3290 | Fortran abbrevs and what they stand for. | ||
| 3291 | |||
| 3292 | |||
| 3293 | @node MS-DOS | ||
| 3294 | @chapter Emacs and MS-DOS | ||
| 3295 | @cindex MS-DOG | ||
| 3296 | @cindex MS-DOS peculiarities | ||
| 3297 | |||
| 3298 | This section briefly describes the peculiarities of using Emacs on | ||
| 3299 | the MS-DOS ``operating system'' (also known as ``MS-DOG''). | ||
| 3300 | Information about Emacs and Microsoft's current operating system | ||
| 3301 | Windows (also known as ``Losedows) is in the main Emacs manual | ||
| 3302 | (@pxref{Microsoft Systems,,, emacs, the Emacs Manual}). | ||
| 3303 | |||
| 3304 | If you build Emacs for MS-DOS, the binary will also run on Windows | ||
| 3305 | 3.X, Windows NT, Windows 9X/ME, Windows 2000, or OS/2 as a DOS | ||
| 3306 | application; all of this chapter applies for all of those systems, if | ||
| 3307 | you use an Emacs that was built for MS-DOS. | ||
| 3308 | |||
| 3309 | @xref{Text and Binary,,,emacs, the Emacs Manual}, for information | ||
| 3310 | about Emacs' special handling of text files under MS-DOS (and | ||
| 3311 | Windows). | ||
| 3312 | |||
| 3313 | @menu | ||
| 3314 | * Keyboard: MS-DOS Keyboard. Keyboard conventions on MS-DOS. | ||
| 3315 | * Mouse: MS-DOS Mouse. Mouse conventions on MS-DOS. | ||
| 3316 | * Display: MS-DOS Display. Fonts, frames and display size on MS-DOS. | ||
| 3317 | * Files: MS-DOS File Names. File name conventions on MS-DOS. | ||
| 3318 | * Printing: MS-DOS Printing. Printing specifics on MS-DOS. | ||
| 3319 | * I18N: MS-DOS and MULE. Support for internationalization on MS-DOS. | ||
| 3320 | * Processes: MS-DOS Processes. Running subprocesses on MS-DOS. | ||
| 3321 | @end menu | ||
| 3322 | |||
| 3323 | @node MS-DOS Keyboard | ||
| 3324 | @section Keyboard Usage on MS-DOS | ||
| 3325 | |||
| 3326 | @kindex DEL @r{(MS-DOS)} | ||
| 3327 | @kindex BS @r{(MS-DOS)} | ||
| 3328 | The key that is called @key{DEL} in Emacs (because that's how it is | ||
| 3329 | designated on most workstations) is known as @key{BS} (backspace) on a | ||
| 3330 | PC. That is why the PC-specific terminal initialization remaps the | ||
| 3331 | @key{BS} key to act as @key{DEL}; the @key{DELETE} key is remapped to act | ||
| 3332 | as @kbd{C-d} for the same reasons. | ||
| 3333 | |||
| 3334 | @kindex C-g @r{(MS-DOS)} | ||
| 3335 | @kindex C-BREAK @r{(MS-DOS)} | ||
| 3336 | @cindex quitting on MS-DOS | ||
| 3337 | Emacs built for MS-DOS recognizes @kbd{C-@key{BREAK}} as a quit | ||
| 3338 | character, just like @kbd{C-g}. This is because Emacs cannot detect | ||
| 3339 | that you have typed @kbd{C-g} until it is ready for more input. As a | ||
| 3340 | consequence, you cannot use @kbd{C-g} to stop a running command | ||
| 3341 | (@pxref{Quitting,,,emacs, the Emacs Manual}). By contrast, | ||
| 3342 | @kbd{C-@key{BREAK}} @emph{is} detected as soon as you type it (as | ||
| 3343 | @kbd{C-g} is on other systems), so it can be used to stop a running | ||
| 3344 | command and for emergency escape (@pxref{Emergency Escape,,,emacs, the | ||
| 3345 | Emacs Manual}). | ||
| 3346 | |||
| 3347 | @cindex Meta (under MS-DOS) | ||
| 3348 | @cindex Hyper (under MS-DOS) | ||
| 3349 | @cindex Super (under MS-DOS) | ||
| 3350 | @vindex dos-super-key | ||
| 3351 | @vindex dos-hyper-key | ||
| 3352 | The PC keyboard maps use the left @key{ALT} key as the @key{META} key. | ||
| 3353 | You have two choices for emulating the @key{SUPER} and @key{HYPER} keys: | ||
| 3354 | choose either the right @key{CTRL} key or the right @key{ALT} key by | ||
| 3355 | setting the variables @code{dos-hyper-key} and @code{dos-super-key} to 1 | ||
| 3356 | or 2 respectively. If neither @code{dos-super-key} nor | ||
| 3357 | @code{dos-hyper-key} is 1, then by default the right @key{ALT} key is | ||
| 3358 | also mapped to the @key{META} key. However, if the MS-DOS international | ||
| 3359 | keyboard support program @file{KEYB.COM} is installed, Emacs will | ||
| 3360 | @emph{not} map the right @key{ALT} to @key{META}, since it is used for | ||
| 3361 | accessing characters like @kbd{~} and @kbd{@@} on non-US keyboard | ||
| 3362 | layouts; in this case, you may only use the left @key{ALT} as @key{META} | ||
| 3363 | key. | ||
| 3364 | |||
| 3365 | @kindex C-j @r{(MS-DOS)} | ||
| 3366 | @vindex dos-keypad-mode | ||
| 3367 | The variable @code{dos-keypad-mode} is a flag variable that controls | ||
| 3368 | what key codes are returned by keys in the numeric keypad. You can also | ||
| 3369 | define the keypad @key{ENTER} key to act like @kbd{C-j}, by putting the | ||
| 3370 | following line into your @file{_emacs} file: | ||
| 3371 | |||
| 3372 | @smallexample | ||
| 3373 | ;; @r{Make the @key{ENTER} key from the numeric keypad act as @kbd{C-j}.} | ||
| 3374 | (define-key function-key-map [kp-enter] [?\C-j]) | ||
| 3375 | @end smallexample | ||
| 3376 | |||
| 3377 | @node MS-DOS Mouse | ||
| 3378 | @section Mouse Usage on MS-DOS | ||
| 3379 | |||
| 3380 | @cindex mouse support under MS-DOS | ||
| 3381 | Emacs on MS-DOS supports a mouse (on the default terminal only). | ||
| 3382 | The mouse commands work as documented, including those that use menus | ||
| 3383 | and the menu bar (@pxref{Menu Bar,,,emacs, the Emacs Manual}). Scroll | ||
| 3384 | bars don't work in MS-DOS Emacs. PC mice usually have only two | ||
| 3385 | buttons; these act as @kbd{Mouse-1} and @kbd{Mouse-2}, but if you | ||
| 3386 | press both of them together, that has the effect of @kbd{Mouse-3}. If | ||
| 3387 | the mouse does have 3 buttons, Emacs detects that at startup, and all | ||
| 3388 | the 3 buttons function normally, as on X. | ||
| 3389 | |||
| 3390 | Help strings for menu-bar and pop-up menus are displayed in the echo | ||
| 3391 | area when the mouse pointer moves across the menu items. Highlighting | ||
| 3392 | of mouse-sensitive text (@pxref{Mouse References,,,emacs, the Emacs | ||
| 3393 | Manual}) is also supported. | ||
| 3394 | |||
| 3395 | @cindex mouse, set number of buttons | ||
| 3396 | @findex msdos-set-mouse-buttons | ||
| 3397 | Some versions of mouse drivers don't report the number of mouse | ||
| 3398 | buttons correctly. For example, mice with a wheel report that they | ||
| 3399 | have 3 buttons, but only 2 of them are passed to Emacs; the clicks on | ||
| 3400 | the wheel, which serves as the middle button, are not passed. In | ||
| 3401 | these cases, you can use the @kbd{M-x msdos-set-mouse-buttons} command | ||
| 3402 | to tell Emacs how many mouse buttons to expect. You could make such a | ||
| 3403 | setting permanent by adding this fragment to your @file{_emacs} init | ||
| 3404 | file: | ||
| 3405 | |||
| 3406 | @example | ||
| 3407 | ;; @r{Treat the mouse like a 2-button mouse.} | ||
| 3408 | (msdos-set-mouse-buttons 2) | ||
| 3409 | @end example | ||
| 3410 | |||
| 3411 | @cindex Windows clipboard support | ||
| 3412 | Emacs built for MS-DOS supports clipboard operations when it runs on | ||
| 3413 | Windows. Commands that put text on the kill ring, or yank text from | ||
| 3414 | the ring, check the Windows clipboard first, just as Emacs does on the | ||
| 3415 | X Window System (@pxref{Mouse Commands,,,emacs, the Emacs Manual}). | ||
| 3416 | Only the primary selection and the cut buffer are supported by MS-DOS | ||
| 3417 | Emacs on Windows; the secondary selection always appears as empty. | ||
| 3418 | |||
| 3419 | Due to the way clipboard access is implemented by Windows, the | ||
| 3420 | length of text you can put into the clipboard is limited by the amount | ||
| 3421 | of free DOS memory that is available to Emacs. Usually, up to 620KB of | ||
| 3422 | text can be put into the clipboard, but this limit depends on the system | ||
| 3423 | configuration and is lower if you run Emacs as a subprocess of | ||
| 3424 | another program. If the killed text does not fit, Emacs outputs a | ||
| 3425 | message saying so, and does not put the text into the clipboard. | ||
| 3426 | |||
| 3427 | Null characters also cannot be put into the Windows clipboard. If the | ||
| 3428 | killed text includes null characters, Emacs does not put such text into | ||
| 3429 | the clipboard, and displays in the echo area a message to that effect. | ||
| 3430 | |||
| 3431 | @vindex dos-display-scancodes | ||
| 3432 | The variable @code{dos-display-scancodes}, when non-@code{nil}, | ||
| 3433 | directs Emacs to display the @acronym{ASCII} value and the keyboard scan code of | ||
| 3434 | each keystroke; this feature serves as a complement to the | ||
| 3435 | @code{view-lossage} command, for debugging. | ||
| 3436 | |||
| 3437 | @node MS-DOS Display | ||
| 3438 | @section Display on MS-DOS | ||
| 3439 | @cindex faces under MS-DOS | ||
| 3440 | @cindex fonts, emulating under MS-DOS | ||
| 3441 | |||
| 3442 | Display on MS-DOS cannot use font variants, like bold or italic, but | ||
| 3443 | it does support multiple faces, each of which can specify a foreground | ||
| 3444 | and a background color. Therefore, you can get the full functionality | ||
| 3445 | of Emacs packages that use fonts (such as @code{font-lock}, Enriched | ||
| 3446 | Text mode, and others) by defining the relevant faces to use different | ||
| 3447 | colors. Use the @code{list-colors-display} command (@pxref{Frame | ||
| 3448 | Parameters,,,emacs, the Emacs Manual}) and the | ||
| 3449 | @code{list-faces-display} command (@pxref{Faces,,,emacs, the Emacs | ||
| 3450 | Manual}) to see what colors and faces are available and what they look | ||
| 3451 | like. | ||
| 3452 | |||
| 3453 | @xref{MS-DOS and MULE}, later in this chapter, for information on | ||
| 3454 | how Emacs displays glyphs and characters that aren't supported by the | ||
| 3455 | native font built into the DOS display. | ||
| 3456 | |||
| 3457 | @cindex cursor shape on MS-DOS | ||
| 3458 | When Emacs starts, it changes the cursor shape to a solid box. This | ||
| 3459 | is for compatibility with other systems, where the box cursor is the | ||
| 3460 | default in Emacs. This default shape can be changed to a bar by | ||
| 3461 | specifying the @code{cursor-type} parameter in the variable | ||
| 3462 | @code{default-frame-alist} (@pxref{Creating Frames,,,emacs, the Emacs | ||
| 3463 | Manual}). The MS-DOS terminal doesn't support a vertical-bar cursor, | ||
| 3464 | so the bar cursor is horizontal, and the @code{@var{width}} parameter, | ||
| 3465 | if specified by the frame parameters, actually determines its height. | ||
| 3466 | For this reason, the @code{bar} and @code{hbar} cursor types produce | ||
| 3467 | the same effect on MS-DOS. As an extension, the bar cursor | ||
| 3468 | specification can include the starting scan line of the cursor as well | ||
| 3469 | as its width, like this: | ||
| 3470 | |||
| 3471 | @example | ||
| 3472 | '(cursor-type bar @var{width} . @var{start}) | ||
| 3473 | @end example | ||
| 3474 | |||
| 3475 | @noindent | ||
| 3476 | In addition, if the @var{width} parameter is negative, the cursor bar | ||
| 3477 | begins at the top of the character cell. | ||
| 3478 | |||
| 3479 | @cindex frames on MS-DOS | ||
| 3480 | The MS-DOS terminal can only display a single frame at a time. The | ||
| 3481 | Emacs frame facilities work on MS-DOS much as they do on text-only | ||
| 3482 | terminals (@pxref{Frames,,,emacs, the Emacs Manual}). When you run | ||
| 3483 | Emacs from a DOS window on MS-Windows, you can make the visible frame | ||
| 3484 | smaller than the full screen, but Emacs still cannot display more than | ||
| 3485 | a single frame at a time. | ||
| 3486 | |||
| 3487 | @cindex frame size under MS-DOS | ||
| 3488 | @findex mode4350 | ||
| 3489 | @findex mode25 | ||
| 3490 | The @code{mode4350} command switches the display to 43 or 50 | ||
| 3491 | lines, depending on your hardware; the @code{mode25} command switches | ||
| 3492 | to the default 80x25 screen size. | ||
| 3493 | |||
| 3494 | By default, Emacs only knows how to set screen sizes of 80 columns by | ||
| 3495 | 25, 28, 35, 40, 43 or 50 rows. However, if your video adapter has | ||
| 3496 | special video modes that will switch the display to other sizes, you can | ||
| 3497 | have Emacs support those too. When you ask Emacs to switch the frame to | ||
| 3498 | @var{n} rows by @var{m} columns dimensions, it checks if there is a | ||
| 3499 | variable called @code{screen-dimensions-@var{n}x@var{m}}, and if so, | ||
| 3500 | uses its value (which must be an integer) as the video mode to switch | ||
| 3501 | to. (Emacs switches to that video mode by calling the BIOS @code{Set | ||
| 3502 | Video Mode} function with the value of | ||
| 3503 | @code{screen-dimensions-@var{n}x@var{m}} in the @code{AL} register.) | ||
| 3504 | For example, suppose your adapter will switch to 66x80 dimensions when | ||
| 3505 | put into video mode 85. Then you can make Emacs support this screen | ||
| 3506 | size by putting the following into your @file{_emacs} file: | ||
| 3507 | |||
| 3508 | @example | ||
| 3509 | (setq screen-dimensions-66x80 85) | ||
| 3510 | @end example | ||
| 3511 | |||
| 3512 | Since Emacs on MS-DOS can only set the frame size to specific | ||
| 3513 | supported dimensions, it cannot honor every possible frame resizing | ||
| 3514 | request. When an unsupported size is requested, Emacs chooses the next | ||
| 3515 | larger supported size beyond the specified size. For example, if you | ||
| 3516 | ask for 36x80 frame, you will get 40x80 instead. | ||
| 3517 | |||
| 3518 | The variables @code{screen-dimensions-@var{n}x@var{m}} are used only | ||
| 3519 | when they exactly match the specified size; the search for the next | ||
| 3520 | larger supported size ignores them. In the above example, even if your | ||
| 3521 | VGA supports 38x80 dimensions and you define a variable | ||
| 3522 | @code{screen-dimensions-38x80} with a suitable value, you will still get | ||
| 3523 | 40x80 screen when you ask for a 36x80 frame. If you want to get the | ||
| 3524 | 38x80 size in this case, you can do it by setting the variable named | ||
| 3525 | @code{screen-dimensions-36x80} with the same video mode value as | ||
| 3526 | @code{screen-dimensions-38x80}. | ||
| 3527 | |||
| 3528 | Changing frame dimensions on MS-DOS has the effect of changing all the | ||
| 3529 | other frames to the new dimensions. | ||
| 3530 | |||
| 3531 | @node MS-DOS File Names | ||
| 3532 | @section File Names on MS-DOS | ||
| 3533 | @cindex file names under MS-DOS | ||
| 3534 | @cindex init file, default name under MS-DOS | ||
| 3535 | |||
| 3536 | On MS-DOS, file names are case-insensitive and limited to eight | ||
| 3537 | characters, plus optionally a period and three more characters. Emacs | ||
| 3538 | knows enough about these limitations to handle file names that were | ||
| 3539 | meant for other operating systems. For instance, leading dots | ||
| 3540 | @samp{.} in file names are invalid in MS-DOS, so Emacs transparently | ||
| 3541 | converts them to underscores @samp{_}; thus your default init file | ||
| 3542 | (@pxref{Init File,,,emacs, the Emacs Manual}) is called @file{_emacs} | ||
| 3543 | on MS-DOS. Excess characters before or after the period are generally | ||
| 3544 | ignored by MS-DOS itself; thus, if you visit the file | ||
| 3545 | @file{LongFileName.EvenLongerExtension}, you will silently get | ||
| 3546 | @file{longfile.eve}, but Emacs will still display the long file name | ||
| 3547 | on the mode line. Other than that, it's up to you to specify file | ||
| 3548 | names which are valid under MS-DOS; the transparent conversion as | ||
| 3549 | described above only works on file names built into Emacs. | ||
| 3550 | |||
| 3551 | @cindex backup file names on MS-DOS | ||
| 3552 | The above restrictions on the file names on MS-DOS make it almost | ||
| 3553 | impossible to construct the name of a backup file (@pxref{Backup | ||
| 3554 | Names,,,emacs, the Emacs Manual}) without losing some of the original | ||
| 3555 | file name characters. For example, the name of a backup file for | ||
| 3556 | @file{docs.txt} is @file{docs.tx~} even if single backup is used. | ||
| 3557 | |||
| 3558 | @cindex file names under Windows 95/NT | ||
| 3559 | @cindex long file names in DOS box under Windows 95/NT | ||
| 3560 | If you run Emacs as a DOS application under Windows 9X, Windows ME, or | ||
| 3561 | Windows 2000, you can turn on support for long file names. If you do | ||
| 3562 | that, Emacs doesn't truncate file names or convert them to lower case; | ||
| 3563 | instead, it uses the file names that you specify, verbatim. To enable | ||
| 3564 | long file name support, set the environment variable @env{LFN} to | ||
| 3565 | @samp{y} before starting Emacs. Unfortunately, Windows NT doesn't allow | ||
| 3566 | DOS programs to access long file names, so Emacs built for MS-DOS will | ||
| 3567 | only see their short 8+3 aliases. | ||
| 3568 | |||
| 3569 | @cindex @env{HOME} directory under MS-DOS | ||
| 3570 | MS-DOS has no notion of home directory, so Emacs on MS-DOS pretends | ||
| 3571 | that the directory where it is installed is the value of the @env{HOME} | ||
| 3572 | environment variable. That is, if your Emacs binary, | ||
| 3573 | @file{emacs.exe}, is in the directory @file{c:/utils/emacs/bin}, then | ||
| 3574 | Emacs acts as if @env{HOME} were set to @samp{c:/utils/emacs}. In | ||
| 3575 | particular, that is where Emacs looks for the init file @file{_emacs}. | ||
| 3576 | With this in mind, you can use @samp{~} in file names as an alias for | ||
| 3577 | the home directory, as you would on GNU or Unix. You can also set | ||
| 3578 | @env{HOME} variable in the environment before starting Emacs; its | ||
| 3579 | value will then override the above default behavior. | ||
| 3580 | |||
| 3581 | Emacs on MS-DOS handles the directory name @file{/dev} specially, | ||
| 3582 | because of a feature in the emulator libraries of DJGPP that pretends | ||
| 3583 | I/O devices have names in that directory. We recommend that you avoid | ||
| 3584 | using an actual directory named @file{/dev} on any disk. | ||
| 3585 | |||
| 3586 | @node MS-DOS Printing | ||
| 3587 | @section Printing and MS-DOS | ||
| 3588 | |||
| 3589 | Printing commands, such as @code{lpr-buffer} | ||
| 3590 | (@pxref{Printing,,,emacs, the Emacs Manual}) and | ||
| 3591 | @code{ps-print-buffer} (@pxref{PostScript,,,emacs, the Emacs Manual}) | ||
| 3592 | can work on MS-DOS by sending the output to one of the printer ports, | ||
| 3593 | if a Posix-style @code{lpr} program is unavailable. The same Emacs | ||
| 3594 | variables control printing on all systems, but in some cases they have | ||
| 3595 | different default values on MS-DOS. | ||
| 3596 | |||
| 3597 | @xref{MS-Windows Printing,,,emacs, the Emacs Manual}, for details. | ||
| 3598 | |||
| 3599 | Some printers expect DOS codepage encoding of non-@acronym{ASCII} text, even | ||
| 3600 | though they are connected to a Windows machine which uses a different | ||
| 3601 | encoding for the same locale. For example, in the Latin-1 locale, DOS | ||
| 3602 | uses codepage 850 whereas Windows uses codepage 1252. @xref{MS-DOS and | ||
| 3603 | MULE}. When you print to such printers from Windows, you can use the | ||
| 3604 | @kbd{C-x RET c} (@code{universal-coding-system-argument}) command before | ||
| 3605 | @kbd{M-x lpr-buffer}; Emacs will then convert the text to the DOS | ||
| 3606 | codepage that you specify. For example, @kbd{C-x RET c cp850-dos RET | ||
| 3607 | M-x lpr-region RET} will print the region while converting it to the | ||
| 3608 | codepage 850 encoding. You may need to create the @code{cp@var{nnn}} | ||
| 3609 | coding system with @kbd{M-x codepage-setup}. | ||
| 3610 | |||
| 3611 | @vindex dos-printer | ||
| 3612 | @vindex dos-ps-printer | ||
| 3613 | For backwards compatibility, the value of @code{dos-printer} | ||
| 3614 | (@code{dos-ps-printer}), if it has a value, overrides the value of | ||
| 3615 | @code{printer-name} (@code{ps-printer-name}), on MS-DOS. | ||
| 3616 | |||
| 3617 | |||
| 3618 | @node MS-DOS and MULE | ||
| 3619 | @section International Support on MS-DOS | ||
| 3620 | @cindex international support @r{(MS-DOS)} | ||
| 3621 | |||
| 3622 | Emacs on MS-DOS supports the same international character sets as it | ||
| 3623 | does on GNU, Unix and other platforms (@pxref{International,,,emacs, | ||
| 3624 | the Emacs Manual}), including coding systems for converting between | ||
| 3625 | the different character sets. However, due to incompatibilities | ||
| 3626 | between MS-DOS/MS-Windows and other systems, there are several | ||
| 3627 | DOS-specific aspects of this support that you should be aware of. | ||
| 3628 | This section describes these aspects. | ||
| 3629 | |||
| 3630 | The description below is largely specific to the MS-DOS port of | ||
| 3631 | Emacs, especially where it talks about practical implications for | ||
| 3632 | Emacs users. For other operating systems, see the @file{code-pages.el} | ||
| 3633 | package, which implements support for MS-DOS- and MS-Windows-specific | ||
| 3634 | encodings for all platforms other than MS-DOS. | ||
| 3635 | |||
| 3636 | @table @kbd | ||
| 3637 | @item M-x dos-codepage-setup | ||
| 3638 | Set up Emacs display and coding systems as appropriate for the current | ||
| 3639 | DOS codepage. | ||
| 3640 | |||
| 3641 | @item M-x codepage-setup | ||
| 3642 | Create a coding system for a certain DOS codepage. | ||
| 3643 | @end table | ||
| 3644 | |||
| 3645 | @cindex codepage, MS-DOS | ||
| 3646 | @cindex DOS codepages | ||
| 3647 | MS-DOS is designed to support one character set of 256 characters at | ||
| 3648 | any given time, but gives you a variety of character sets to choose | ||
| 3649 | from. The alternative character sets are known as @dfn{DOS codepages}. | ||
| 3650 | Each codepage includes all 128 @acronym{ASCII} characters, but the other 128 | ||
| 3651 | characters (codes 128 through 255) vary from one codepage to another. | ||
| 3652 | Each DOS codepage is identified by a 3-digit number, such as 850, 862, | ||
| 3653 | etc. | ||
| 3654 | |||
| 3655 | In contrast to X, which lets you use several fonts at the same time, | ||
| 3656 | MS-DOS normally doesn't allow use of several codepages in a single | ||
| 3657 | session. MS-DOS was designed to load a single codepage at system | ||
| 3658 | startup, and require you to reboot in order to change | ||
| 3659 | it@footnote{Normally, one particular codepage is burnt into the | ||
| 3660 | display memory, while other codepages can be installed by modifying | ||
| 3661 | system configuration files, such as @file{CONFIG.SYS}, and rebooting. | ||
| 3662 | While there is third-party software that allows changing the codepage | ||
| 3663 | without rebooting, we describe here how a stock MS-DOS system | ||
| 3664 | behaves.}. Much the same limitation applies when you run DOS | ||
| 3665 | executables on other systems such as MS-Windows. | ||
| 3666 | |||
| 3667 | @cindex unibyte operation @r{(MS-DOS)} | ||
| 3668 | If you invoke Emacs on MS-DOS with the @samp{--unibyte} option | ||
| 3669 | (@pxref{Initial Options,,,emacs, the Emacs Manual}), Emacs does not | ||
| 3670 | perform any conversion of non-@acronym{ASCII} characters. Instead, it | ||
| 3671 | reads and writes any non-@acronym{ASCII} characters verbatim, and | ||
| 3672 | sends their 8-bit codes to the display verbatim. Thus, unibyte Emacs | ||
| 3673 | on MS-DOS supports the current codepage, whatever it may be, but | ||
| 3674 | cannot even represent any other characters. | ||
| 3675 | |||
| 3676 | @vindex dos-codepage | ||
| 3677 | For multibyte operation on MS-DOS, Emacs needs to know which | ||
| 3678 | characters the chosen DOS codepage can display. So it queries the | ||
| 3679 | system shortly after startup to get the chosen codepage number, and | ||
| 3680 | stores the number in the variable @code{dos-codepage}. Some systems | ||
| 3681 | return the default value 437 for the current codepage, even though the | ||
| 3682 | actual codepage is different. (This typically happens when you use the | ||
| 3683 | codepage built into the display hardware.) You can specify a different | ||
| 3684 | codepage for Emacs to use by setting the variable @code{dos-codepage} in | ||
| 3685 | your init file. | ||
| 3686 | |||
| 3687 | @cindex language environment, automatic selection on @r{MS-DOS} | ||
| 3688 | Multibyte Emacs supports only certain DOS codepages: those which can | ||
| 3689 | display Far-Eastern scripts, like the Japanese codepage 932, and those | ||
| 3690 | that encode a single ISO 8859 character set. | ||
| 3691 | |||
| 3692 | The Far-Eastern codepages can directly display one of the MULE | ||
| 3693 | character sets for these countries, so Emacs simply sets up to use the | ||
| 3694 | appropriate terminal coding system that is supported by the codepage. | ||
| 3695 | The special features described in the rest of this section mostly | ||
| 3696 | pertain to codepages that encode ISO 8859 character sets. | ||
| 3697 | |||
| 3698 | For the codepages which correspond to one of the ISO character sets, | ||
| 3699 | Emacs knows the character set name based on the codepage number. Emacs | ||
| 3700 | automatically creates a coding system to support reading and writing | ||
| 3701 | files that use the current codepage, and uses this coding system by | ||
| 3702 | default. The name of this coding system is @code{cp@var{nnn}}, where | ||
| 3703 | @var{nnn} is the codepage number.@footnote{The standard Emacs coding | ||
| 3704 | systems for ISO 8859 are not quite right for the purpose, because | ||
| 3705 | typically the DOS codepage does not match the standard ISO character | ||
| 3706 | codes. For example, the letter @samp{@,{c}} (@samp{c} with cedilla) has | ||
| 3707 | code 231 in the standard Latin-1 character set, but the corresponding | ||
| 3708 | DOS codepage 850 uses code 135 for this glyph.} | ||
| 3709 | |||
| 3710 | @cindex mode line @r{(MS-DOS)} | ||
| 3711 | All the @code{cp@var{nnn}} coding systems use the letter @samp{D} | ||
| 3712 | (for ``DOS'') as their mode-line mnemonic. Since both the terminal | ||
| 3713 | coding system and the default coding system for file I/O are set to | ||
| 3714 | the proper @code{cp@var{nnn}} coding system at startup, it is normal | ||
| 3715 | for the mode line on MS-DOS to begin with @samp{-DD\-}. @xref{Mode | ||
| 3716 | Line,,,emacs, the Emacs Manual}. Far-Eastern DOS terminals do not use | ||
| 3717 | the @code{cp@var{nnn}} coding systems, and thus their initial mode | ||
| 3718 | line looks like the Emacs default. | ||
| 3719 | |||
| 3720 | Since the codepage number also indicates which script you are using, | ||
| 3721 | Emacs automatically runs @code{set-language-environment} to select the | ||
| 3722 | language environment for that script (@pxref{Language | ||
| 3723 | Environments,,,emacs, the Emacs Manual}). | ||
| 3724 | |||
| 3725 | If a buffer contains a character belonging to some other ISO 8859 | ||
| 3726 | character set, not the one that the chosen DOS codepage supports, Emacs | ||
| 3727 | displays it using a sequence of @acronym{ASCII} characters. For example, if the | ||
| 3728 | current codepage doesn't have a glyph for the letter @samp{@`o} (small | ||
| 3729 | @samp{o} with a grave accent), it is displayed as @samp{@{`o@}}, where | ||
| 3730 | the braces serve as a visual indication that this is a single character. | ||
| 3731 | (This may look awkward for some non-Latin characters, such as those from | ||
| 3732 | Greek or Hebrew alphabets, but it is still readable by a person who | ||
| 3733 | knows the language.) Even though the character may occupy several | ||
| 3734 | columns on the screen, it is really still just a single character, and | ||
| 3735 | all Emacs commands treat it as one. | ||
| 3736 | |||
| 3737 | @cindex IBM graphics characters (MS-DOS) | ||
| 3738 | @cindex box-drawing characters (MS-DOS) | ||
| 3739 | @cindex line-drawing characters (MS-DOS) | ||
| 3740 | Not all characters in DOS codepages correspond to ISO 8859 | ||
| 3741 | characters---some are used for other purposes, such as box-drawing | ||
| 3742 | characters and other graphics. Emacs maps these characters to two | ||
| 3743 | special character sets called @code{eight-bit-control} and | ||
| 3744 | @code{eight-bit-graphic}, and displays them as their IBM glyphs. | ||
| 3745 | However, you should be aware that other systems might display these | ||
| 3746 | characters differently, so you should avoid them in text that might be | ||
| 3747 | copied to a different operating system, or even to another DOS machine | ||
| 3748 | that uses a different codepage. | ||
| 3749 | |||
| 3750 | @vindex dos-unsupported-character-glyph | ||
| 3751 | Emacs supports many other characters sets aside from ISO 8859, but it | ||
| 3752 | cannot display them on MS-DOS. So if one of these multibyte characters | ||
| 3753 | appears in a buffer, Emacs on MS-DOS displays them as specified by the | ||
| 3754 | @code{dos-unsupported-character-glyph} variable; by default, this glyph | ||
| 3755 | is an empty triangle. Use the @kbd{C-u C-x =} command to display the | ||
| 3756 | actual code and character set of such characters. @xref{Position | ||
| 3757 | Info,,,emacs, the Emacs Manual}. | ||
| 3758 | |||
| 3759 | @findex codepage-setup | ||
| 3760 | By default, Emacs defines a coding system to support the current | ||
| 3761 | codepage. To define a coding system for some other codepage (e.g., to | ||
| 3762 | visit a file written on a DOS machine in another country), use the | ||
| 3763 | @kbd{M-x codepage-setup} command. It prompts for the 3-digit code of | ||
| 3764 | the codepage, with completion, then creates the coding system for the | ||
| 3765 | specified codepage. You can then use the new coding system to read and | ||
| 3766 | write files, but you must specify it explicitly for the file command | ||
| 3767 | when you want to use it (@pxref{Text Coding,,,emacs, the Emacs Manual}). | ||
| 3768 | |||
| 3769 | These coding systems are also useful for visiting a file encoded using | ||
| 3770 | a DOS codepage, using Emacs running on some other operating system. | ||
| 3771 | |||
| 3772 | @cindex MS-Windows codepages | ||
| 3773 | MS-Windows provides its own codepages, which are different from the | ||
| 3774 | DOS codepages for the same locale. For example, DOS codepage 850 | ||
| 3775 | supports the same character set as Windows codepage 1252; DOS codepage | ||
| 3776 | 855 supports the same character set as Windows codepage 1251, etc. | ||
| 3777 | The MS-Windows version of Emacs uses the current codepage for display | ||
| 3778 | when invoked with the @samp{-nw} option. Support for codepages in the | ||
| 3779 | Windows port of Emacs is part of the @file{code-pages.el} package. | ||
| 3780 | |||
| 3781 | @node MS-DOS Processes | ||
| 3782 | @section Subprocesses on MS-DOS | ||
| 3783 | |||
| 3784 | @cindex compilation under MS-DOS | ||
| 3785 | @cindex inferior processes under MS-DOS | ||
| 3786 | @findex compile @r{(MS-DOS)} | ||
| 3787 | @findex grep @r{(MS-DOS)} | ||
| 3788 | Because MS-DOS is a single-process ``operating system,'' | ||
| 3789 | asynchronous subprocesses are not available. In particular, Shell | ||
| 3790 | mode and its variants do not work. Most Emacs features that use | ||
| 3791 | asynchronous subprocesses also don't work on MS-DOS, including | ||
| 3792 | Shell mode and GUD. When in doubt, try and see; commands that | ||
| 3793 | don't work output an error message saying that asynchronous processes | ||
| 3794 | aren't supported. | ||
| 3795 | |||
| 3796 | Compilation under Emacs with @kbd{M-x compile}, searching files with | ||
| 3797 | @kbd{M-x grep} and displaying differences between files with @kbd{M-x | ||
| 3798 | diff} do work, by running the inferior processes synchronously. This | ||
| 3799 | means you cannot do any more editing until the inferior process | ||
| 3800 | finishes. | ||
| 3801 | |||
| 3802 | Spell checking also works, by means of special support for synchronous | ||
| 3803 | invocation of the @code{ispell} program. This is slower than the | ||
| 3804 | asynchronous invocation on other platforms | ||
| 3805 | |||
| 3806 | Instead of the Shell mode, which doesn't work on MS-DOS, you can use | ||
| 3807 | the @kbd{M-x eshell} command. This invokes the Eshell package that | ||
| 3808 | implements a Posix-like shell entirely in Emacs Lisp. | ||
| 3809 | |||
| 3810 | By contrast, Emacs compiled as a native Windows application | ||
| 3811 | @strong{does} support asynchronous subprocesses. @xref{Windows | ||
| 3812 | Processes,,,emacs, the Emacs Manual}. | ||
| 3813 | |||
| 3814 | @cindex printing under MS-DOS | ||
| 3815 | Printing commands, such as @code{lpr-buffer} | ||
| 3816 | (@pxref{Printing,,,emacs, the Emacs Manual}) and | ||
| 3817 | @code{ps-print-buffer} (@pxref{PostScript,,,emacs, the Emacs Manual}), | ||
| 3818 | work in MS-DOS by sending the output to one of the printer ports. | ||
| 3819 | @xref{MS-DOS Printing,,,emacs, the Emacs Manual}. | ||
| 3820 | |||
| 3821 | When you run a subprocess synchronously on MS-DOS, make sure the | ||
| 3822 | program terminates and does not try to read keyboard input. If the | ||
| 3823 | program does not terminate on its own, you will be unable to terminate | ||
| 3824 | it, because MS-DOS provides no general way to terminate a process. | ||
| 3825 | Pressing @kbd{C-c} or @kbd{C-@key{BREAK}} might sometimes help in these | ||
| 3826 | cases. | ||
| 3827 | |||
| 3828 | Accessing files on other machines is not supported on MS-DOS. Other | ||
| 3829 | network-oriented commands such as sending mail, Web browsing, remote | ||
| 3830 | login, etc., don't work either, unless network access is built into | ||
| 3831 | MS-DOS with some network redirector. | ||
| 3832 | |||
| 3833 | @cindex directory listing on MS-DOS | ||
| 3834 | @vindex dired-listing-switches @r{(MS-DOS)} | ||
| 3835 | Dired on MS-DOS uses the @code{ls-lisp} package where other | ||
| 3836 | platforms use the system @code{ls} command. Therefore, Dired on | ||
| 3837 | MS-DOS supports only some of the possible options you can mention in | ||
| 3838 | the @code{dired-listing-switches} variable. The options that work are | ||
| 3839 | @samp{-A}, @samp{-a}, @samp{-c}, @samp{-i}, @samp{-r}, @samp{-S}, | ||
| 3840 | @samp{-s}, @samp{-t}, and @samp{-u}. | ||
| 3841 | |||
| 3842 | |||
| 3843 | @node Index | 117 | @node Index |
| 3844 | @unnumbered Index | 118 | @unnumbered Index |
| 3845 | 119 | ||