summaryrefslogtreecommitdiff
path: root/man/emacs.texi
diff options
context:
space:
mode:
Diffstat (limited to 'man/emacs.texi')
-rw-r--r--man/emacs.texi19241
1 files changed, 19241 insertions, 0 deletions
diff --git a/man/emacs.texi b/man/emacs.texi
new file mode 100644
index 00000000000..069f919f1be
--- /dev/null
+++ b/man/emacs.texi
@@ -0,0 +1,19241 @@
+\input texinfo.tex @c -*-texinfo-*-
+@c %**start of header
+@setfilename ../info/emacs
+@settitle GNU Emacs Manual
+@setchapternewpage odd
+@smallbook
+@c %**end of header
+
+@finalout
+
+@c
+@tex
+%%%% This is special for the Emacs Manual %%%%
+%%%% Robert J. Chassell 10 June 1992
+
+%%%% Use less indentation for Table of Contents
+\global\tocindent = 1.5pc
+\global\def\labelspace{\hskip.5em \relax}
+@end tex
+@c
+
+@ifinfo
+This file documents the GNU Emacs editor.
+
+Copyright (C) 1985, 1986, 1988, 1992 Richard M. Stallman.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+@ignore
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+sections entitled ``The GNU Manifesto'', ``Distribution'' and ``GNU
+General Public License'' are included exactly as in the original, and
+provided that the entire resulting derived work is distributed under the
+terms of a permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that the sections entitled ``The GNU Manifesto'',
+``Distribution'' and ``GNU General Public License'' may be included in a
+translation approved by the author instead of in the original English.
+@end ifinfo
+@c
+@c
+@titlepage
+@sp 6
+@center @titlefont{GNU Emacs Manual}
+@sp 4
+@center Seventh Edition, Emacs Version 18.58
+@sp 1
+@center for Unix Users
+@sp 1
+@center February 1988, revised September 1992
+@center (General Public License upgraded, January 1991)
+@sp 5
+@center Richard M. Stallman
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1985, 1986, 1988, 1992 Richard M. Stallman.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+sections entitled ``The GNU Manifesto'', ``Distribution'' and ``GNU
+General Public License'' are included exactly as in the original, and
+provided that the entire resulting derived work is distributed under the
+terms of a permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that the sections entitled ``The GNU Manifesto'',
+``Distribution'' and ``GNU General Public License'' may be included in a
+translation approved by the author instead of in the original English.
+@sp 2
+Cover art by Etienne Suvasa.
+@end titlepage
+@page
+@ifinfo
+@node Top, Distrib,, (DIR)
+@top The Emacs Editor
+
+Emacs is the extensible, customizable, self-documenting real-time
+display editor. This Info file describes how to edit with Emacs
+and some of how to customize it, but not how to extend it.
+
+@end ifinfo
+@menu
+* Distrib:: How to get the latest Emacs distribution.
+* License:: The GNU General Public License gives you permission
+ to redistribute GNU Emacs on certain terms; and also
+ explains that there is no warranty.
+* Intro:: An introduction to Emacs concepts.
+* Glossary:: The glossary.
+* Version 19:: Changes coming in Emacs version 19, to be released.
+* Manifesto:: What's GNU? Gnu's Not Unix!
+
+Indexes, nodes containing large menus
+* Key Index:: An item for each standard Emacs key sequence.
+* Command Index:: An item for each command name.
+* Variable Index:: An item for each documented variable.
+* Concept Index:: An item for each concept.
+
+Important General Concepts
+* Screen:: How to interpret what you see on the screen.
+* Characters:: Emacs's character sets for file contents and for keyboard.
+* Keys:: Key sequences: what you type to request one editing action.
+* Commands:: Commands: named functions run by key sequences to do editing.
+* Entering Emacs:: Starting Emacs from the shell.
+* Command Switches:: Hairy startup options.
+* Exiting:: Stopping or killing Emacs.
+* Basic:: The most basic editing commands.
+* Undo:: Undoing recently made changes in the text.
+* Minibuffer:: Entering arguments that are prompted for.
+* M-x:: Invoking commands by their names.
+* Help:: Commands for asking Emacs about its commands.
+
+Important Text-Changing Commands
+* Mark:: The mark: how to delimit a ``region'' of text.
+* Killing:: Killing text.
+* Yanking:: Recovering killed text. Moving text.
+* Accumulating Text::
+ Other ways of copying text.
+* Rectangles:: Operating on the text inside a rectangle on the screen.
+* Registers:: Saving a text string or a location in the buffer.
+* Display:: Controlling what text is displayed.
+* Search:: Finding or replacing occurrences of a string.
+* Fixit:: Commands especially useful for fixing typos.
+
+Larger Units of Text
+* Files:: All about handling files.
+* Buffers:: Multiple buffers; editing several files at once.
+* Windows:: Viewing two pieces of text at once.
+
+Advanced Features
+* Major Modes:: Text mode vs. Lisp mode vs. C mode ...
+* Indentation:: Editing the white space at the beginnings of lines.
+* Text:: Commands and modes for editing English.
+* Programs:: Commands and modes for editing programs.
+* Compiling/Testing::
+ Compiling, running and debugging programs.
+* Abbrevs:: How to define text abbreviations to reduce
+ the number of characters you must type.
+* Picture:: Editing pictures made up of characters
+ using the quarter-plane screen model.
+* Sending Mail::Sending mail in Emacs.
+* Rmail:: Reading mail in Emacs.
+* Recursive Edit::
+ A command can allow you to do editing
+ "within the command". This is called a
+ `recursive editing level'.
+* Narrowing:: Restricting display and editing to a portion
+ of the buffer.
+* Sorting:: Sorting lines, paragraphs or pages within Emacs.
+* Shell:: Executing shell commands from Emacs.
+* Hardcopy:: Printing buffers or regions.
+* Dissociated Press:: Dissociating text for fun.
+* Amusements:: Various games and hacks.
+* Emulation:: Emulating some other editors with Emacs.
+* Customization:: Modifying the behavior of Emacs.
+
+Recovery from Problems.
+* Quitting:: Quitting and aborting.
+* Lossage:: What to do if Emacs is hung or malfunctioning.
+* Bugs:: How and when to report a bug.
+
+Here are some other nodes which are really inferiors of the ones
+already listed, mentioned here so you can get to them in one step:
+
+Subnodes of Screen
+* Point:: The place in the text where editing commands operate.
+* Echo Area:: Short messages appear at the bottom of the screen.
+* Mode Line:: Interpreting the mode line.
+
+Subnodes of Basic
+* Blank Lines:: Commands to make or delete blank lines.
+* Continuation Lines:: Lines too wide for the screen.
+* Position Info:: What page, line, row, or column is point on?
+* Arguments:: Giving numeric arguments to commands.
+
+Subnodes of Minibuffer
+* Minibuffer File:: Entering file names with the minibuffer.
+* Minibuffer Edit:: How to edit in the minibuffer.
+* Completion:: An abbreviation facility for minibuffer input.
+* Repetition:: Re-executing previous commands that used the minibuffer.
+
+Subnodes of Mark
+* Setting Mark:: Commands to set the mark.
+* Using Region:: Summary of ways to operate on contents of the region.
+* Marking Objects:: Commands to put region around textual units.
+* Mark Ring:: Previous mark positions saved so you can go back there.
+
+Subnodes of Yanking
+* Kill Ring:: Where killed text is stored. Basic yanking.
+* Appending Kills:: Several kills in a row all yank together.
+* Earlier Kills:: Yanking something killed some time ago.
+
+Subnodes of Registers
+* RegPos:: Saving positions in registers.
+* RegText:: Saving text in registers.
+* RegRect:: Saving rectangles in registers.
+
+Subnodes of Display
+* Scrolling:: Moving text up and down in a window.
+* Horizontal Scrolling:: Moving text left and right in a window.
+* Selective Display:: Hiding lines with lots of indentation.
+* Display Vars:: Information on variables for customizing display.
+
+Subnodes of Search
+* Incremental Search:: Search happens as you type the string.
+* Nonincremental Search:: Specify entire string and then search.
+* Word Search:: Search for sequence of words.
+* Regexp Search:: Search for match for a regexp.
+* Regexps:: Syntax of regular expressions.
+* Search Case:: To ignore case while searching, or not.
+* Replace:: Search, and replace some or all matches.
+* Unconditional Replace:: Everything about replacement except for querying.
+* Query Replace:: How to use querying.
+* Other Repeating Search:: Operating on all matches for some regexp.
+
+Subnodes of Fixit
+* Kill Errors:: Commands to kill a batch of recently entered text.
+* Transpose:: Exchanging two characters, words, lines, lists...
+* Fixing Case:: Correcting case of last word entered.
+* Spelling:: Apply spelling checker to a word, or a whole file.
+
+Subnodes of Files
+* File Names:: How to type and edit file name arguments.
+* Visiting:: Visiting a file prepares Emacs to edit the file.
+* Saving:: Saving makes your changes permanent.
+* Backup:: How Emacs saves the old version of your file.
+* Interlocking::How Emacs protects against simultaneous editing
+ of one file by two users.
+* Reverting:: Reverting cancels all the changes not saved.
+* Auto Save:: Auto Save periodically protects against loss of data.
+* ListDir:: Listing the contents of a file directory.
+* Dired:: ``Editing'' a directory to delete, rename, etc.
+ the files in it.
+* Misc File Ops:: Other things you can do on files.
+
+Subnodes of Buffers
+* Select Buffer:: Creating a new buffer or reselecting an old one.
+* List Buffers:: Getting a list of buffers that exist.
+* Misc Buffer:: Renaming; changing read-only status.
+* Kill Buffer:: Killing buffers you no longer need.
+* Several Buffers:: How to go through the list of all buffers
+ and operate variously on several of them.
+
+Subnodes of Windows
+* Basic Window:: Introduction to Emacs windows.
+* Split Window:: New windows are made by splitting existing windows.
+* Other Window:: Moving to another window or doing something to it.
+* Pop Up Window:: Finding a file or buffer in another window.
+* Change Window:: Deleting windows and changing their sizes.
+
+Subnodes of Indentation
+* Indentation Commands:: Various commands and techniques for indentation.
+* Tab Stops:: You can set arbitrary "tab stops" and then
+ indent to the next tab stop when you want to.
+* Just Spaces:: You can request indentation using just spaces.
+
+Subnodes of Text
+* Text Mode:: The major mode for editing text files.
+* Nroff Mode:: The major mode for editing input to the formatter nroff.
+* TeX Mode:: The major mode for editing input to the formatter TeX.
+* Texinfo Mode::The major mode for editing input to the formatter Texinfo.
+* Outline Mode::The major mode for editing outlines.
+* Words:: Moving over and killing words.
+* Sentences:: Moving over and killing sentences.
+* Paragraphs:: Moving over paragraphs.
+* Pages:: Moving over pages.
+* Filling:: Filling or justifying text
+* Case:: Changing the case of text
+
+Subnodes of Programs
+* Program Modes:: Major modes for editing programs.
+* Lists:: Expressions with balanced parentheses.
+ There are editing commands to operate on them.
+* Defuns:: Each program is made up of separate functions.
+ There are editing commands to operate on them.
+* Grinding:: Adjusting indentation to show the nesting.
+* Matching:: Insertion of a close-delimiter flashes matching open.
+* Comments:: Inserting, killing and aligning comments.
+* Balanced Editing:: Inserting two matching parentheses at once, etc.
+* Lisp Completion:: Completion on symbol names in Lisp code.
+* Documentation:: Getting documentation of functions you plan to call.
+* Change Log:: Maintaining a change history for your program.
+* Tags:: Go direct to any function in your program in one
+ command. Tags remembers which file it is in.
+* Fortran:: Fortran mode and its special features.
+
+Subnodes of Compiling/Testing
+* Compilation:: Compiling programs in languages other than Lisp
+ (C, Pascal, etc.)
+* Lisp Modes:: Various modes for editing Lisp programs, with
+ different facilities for running the Lisp programs.
+* Lisp Libraries:: Creating Lisp programs to run in Emacs.
+* Lisp Interaction:: Executing Lisp in an Emacs buffer.
+* Lisp Eval:: Executing a single Lisp expression in Emacs.
+* Lisp Debug:: Debugging Lisp programs running in Emacs.
+* External Lisp:: Communicating through Emacs with a separate Lisp.
+
+Subnodes of Abbrevs
+* Defining Abbrevs:: Defining an abbrev, so it will expand when typed.
+* Expanding Abbrevs:: Controlling expansion: prefixes, canceling expansion.
+* Editing Abbrevs:: Viewing or editing the entire list of defined abbrevs.
+* Saving Abbrevs:: Saving the entire list of abbrevs for another session.
+* Dynamic Abbrevs:: Abbreviations for words already in the buffer.
+
+Subnodes of Picture
+* Basic Picture:: Basic concepts and simple commands of Picture mode.
+* Insert in Picture:: Controlling direction of cursor motion
+ after "self-inserting" characters.
+* Tabs in Picture:: Various features for tab stops and indentation.
+* Rectangles in Picture:: Clearing and superimposing rectangles.
+
+Subnodes of Sending Mail
+* Mail Format:: Format of the mail being composed.
+* Mail Headers:: Details of allowed mail header fields.
+* Mail Mode:: Special commands for editing mail being composed.
+
+Subnodes of Rmail
+* Rmail Scrolling:: Scrolling through a message.
+* Rmail Motion:: Moving to another message.
+* Rmail Deletion:: Deleting and expunging messages.
+* Rmail Inbox:: How mail gets into the Rmail file.
+* Rmail Files:: Using multiple Rmail files.
+* Rmail Output:: Copying message out to files.
+* Rmail Labels:: Classifying messages by labeling them.
+* Rmail Summary:: Summaries show brief info on many messages.
+* Rmail Reply:: Sending replies to messages you are viewing.
+* Rmail Editing:: Editing message text and headers in Rmail.
+* Rmail Digest:: Extracting the messages from a digest message.
+
+Subnodes of Shell
+* Single Shell:: Commands to run one shell command and return.
+* Interactive Shell:: Permanent shell taking input via Emacs.
+* Shell Mode:: Special Emacs commands used with permanent shell.
+
+Subnodes of Customization
+* Minor Modes:: Each minor mode is one feature you can turn on
+ independently of any others.
+* Variables:: Many Emacs commands examine Emacs variables
+ to decide what to do; by setting variables,
+ you can control their functioning.
+* Examining:: Examining or setting one variable's value.
+* Edit Options:: Examining or editing list of all variables' values.
+* Locals:: Per-buffer values of variables.
+* File Variables:: How files can specify variable values.
+* Keyboard Macros:: A keyboard macro records a sequence of keystrokes
+ to be replayed with a single command.
+* Key Bindings:: The keymaps say what command each key runs.
+ By changing them, you can "redefine keys".
+* Keymaps:: Definition of the keymap data structure.
+* Rebinding:: How to redefine one key's meaning conveniently.
+* Disabling:: Disabling a command means confirmation is required
+ before it can be executed. This is done to protect
+ beginners from surprises.
+* Syntax:: The syntax table controls how words and expressions
+ are parsed.
+* Init File:: How to write common customizations in the `.emacs' file.
+
+Subnodes of Lossage (and recovery)
+* Stuck Recursive:: `[...]' in mode line around the parentheses.
+* Screen Garbled:: Garbage on the screen.
+* Text Garbled:: Garbage in the text.
+* Unasked-for Search::Spontaneous entry to incremental search.
+* Emergency Escape:: Emergency escape---
+ What to do if Emacs stops responding.
+* Total Frustration:: When you are at your wits' end.
+@end menu
+
+@iftex
+@unnumbered Preface
+
+ This manual documents the use and simple customization of the
+Emacs editor. The reader is not expected to be a programmer. Even simple
+customizations do not require programming skill, but the user who is not
+interested in customizing can ignore the scattered customization hints.
+
+ This is primarily a reference manual, but can also be used as a
+primer. However, I recommend that the newcomer first use the on-line,
+learn-by-doing tutorial, which you get by running Emacs and typing
+@kbd{C-h t}. With it, you learn Emacs by using Emacs on a specially
+designed file which describes commands, tells you when to try them,
+and then explains the results you see. This gives a more vivid
+introduction than a printed manual.
+
+ On first reading, just skim chapters one and two, which describe the
+notational conventions of the manual and the general appearance of the
+Emacs display screen. Note which questions are answered in these chapters,
+so you can refer back later. After reading chapter four you should
+practice the commands there. The next few chapters describe fundamental
+techniques and concepts that are used constantly. You need to understand
+them thoroughly, experimenting with them if necessary.
+
+ To find the documentation on a particular command, look in the index.
+Keys (character commands) and command names have separate indexes. There
+is also a glossary, with a cross reference for each term.
+
+@ignore
+ If you know vaguely what the command
+does, look in the command summary. The command summary contains a line or
+two about each command, and a cross reference to the section of the
+manual that describes the command in more detail; related commands
+are grouped together.
+@end ignore
+
+ This manual comes in two forms: the published form and the Info form.
+The Info form is for on-line perusal with the @code{info} program; it is
+distributed along with GNU Emacs. Both forms contain substantially the
+same text and are generated from a common source file, which is also
+distributed along with GNU Emacs.
+
+ GNU Emacs is a member of the Emacs editor family. There are many Emacs
+editors, all sharing common principles of organization. For information on
+the underlying philosophy of Emacs and the lessons learned from its
+development, write for a copy of AI memo 519a, ``Emacs, the Extensible,
+Customizable Self-Documenting Display Editor'', to Publications Department,
+Artificial Intelligence Lab, 545 Tech Square, Cambridge, MA 02139, USA. At
+last report they charge $2.25 per copy. Another useful publication is LCS
+TM-165, ``A Cookbook for an Emacs'', by Craig Finseth, available from
+Publications Department, Laboratory for Computer Science, 545 Tech Square,
+Cambridge, MA 02139, USA. The price today is $3.
+
+This edition of the manual is intended for use with GNU Emacs installed on
+Unix systems. GNU Emacs can also be used on VMS systems, which have
+different file name syntax and do not support all GNU Emacs features. A
+VMS edition of this manual may appear in the future.
+@end iftex
+
+@node Distrib, License, Top, Top
+@unnumbered Distribution
+
+GNU Emacs is @dfn{free}; this means that everyone is free to use it and
+free to redistribute it on a free basis. GNU Emacs is not in the public
+domain; it is copyrighted and there are restrictions on its
+distribution, but these restrictions are designed to permit everything
+that a good cooperating citizen would want to do. What is not allowed
+is to try to prevent others from further sharing any version of GNU
+Emacs that they might get from you. The precise conditions are found in
+the GNU General Public License that comes with Emacs and also appears
+following this section.
+
+The easiest way to get a copy of GNU Emacs is from someone else who has it.
+You need not ask for permission to do so, or tell any one else; just copy
+it.
+
+If you have access to the Internet, you can get the latest distribution
+version of GNU Emacs from host @file{prep.ai.mit.edu} using anonymous
+login. See the file @file{/u2/emacs/GETTING.GNU.SOFTWARE} on that host
+to find out about your options for copying and which files to use.
+
+You may also receive GNU Emacs when you buy a computer. Computer
+manufacturers are free to distribute copies on the same terms that apply to
+everyone else. These terms require them to give you the full sources,
+including whatever changes they may have made, and to permit you to
+redistribute the GNU Emacs received from them under the usual terms of the
+General Public License. In other words, the program must be free for you
+when you get it, not just free for the manufacturer.
+
+If you cannot get a copy in any of those ways, you can order one from the
+Free Software Foundation. Though Emacs itself is free, our distribution
+service is not. An order form is included at the end of manuals printed by
+the Foundation. It is also included in the file @file{etc/DISTRIB} in the
+Emacs distribution. For further information, write to
+
+@display
+Free Software Foundation
+675 Mass Ave
+Cambridge, MA 02139
+USA
+@end display
+
+The income from distribution fees goes to support the foundation's
+purpose: the development of more free software to distribute just like
+GNU Emacs.
+
+If you find GNU Emacs useful, please @b{send a donation} to the Free
+Software Foundation. This will help support development of the rest of the
+GNU system, and other useful software beyond that. Your donation is tax
+deductible.
+
+@node License, Intro, Distrib, Top
+@unnumbered GNU GENERAL PUBLIC LICENSE
+@center Version 1, February 1989
+@cindex license to copy Emacs
+@cindex General Public License
+
+@display
+Copyright @copyright{} 1989 Free Software Foundation, Inc.
+675 Mass Ave, Cambridge, MA 02139, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@unnumberedsec Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software---to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+@tex
+\global\baselineskip 11.5pt
+@end tex
+
+@iftex
+@unnumberedsec TERMS AND CONDITIONS
+@end iftex
+@ifinfo
+@center TERMS AND CONDITIONS
+@end ifinfo
+
+@enumerate
+@item
+This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+``Program'', below, refers to any such program or work, and a ``work based
+on the Program'' means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as ``you''.
+
+@item
+@cindex Distribution
+You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+@item
+You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+@itemize @bullet
+@item
+cause the modified files to carry prominent notices stating that
+you changed the files and the date of any change; and
+
+@item
+cause the whole of any work that you distribute or publish, that
+in whole or in part contains the Program or any part thereof, either
+with or without modifications, to be licensed at no charge to all
+third parties under the terms of this General Public License (except
+that you may choose to grant warranty protection to some or all
+third parties, at your option).
+
+@item
+If the modified program normally reads commands interactively when
+run, you must cause it, when started running for such interactive use
+in the simplest and most usual way, to print or display an
+announcement including an appropriate copyright notice and a notice
+that there is no warranty (or else, saying that you provide a
+warranty) and that users may redistribute the program under these
+conditions, and telling the user how to view a copy of this General
+Public License.
+
+@item
+You may charge a fee for the physical act of transferring a
+copy, and you may at your option offer warranty protection in
+exchange for a fee.
+@end itemize
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+@item
+You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+@itemize @bullet
+@item
+accompany it with the complete corresponding machine-readable
+source code, which must be distributed under the terms of
+Paragraphs 1 and 2 above; or,
+
+@item
+accompany it with a written offer, valid for at least three
+years, to give any third party free (except for a nominal charge
+for the cost of distribution) a complete machine-readable copy of the
+corresponding source code, to be distributed under the terms of
+Paragraphs 1 and 2 above; or,
+
+@item
+accompany it with the information you received as to where the
+corresponding source code may be obtained. (This alternative is
+allowed only for noncommercial distribution and only if you
+received the program in object code or executable form alone.)
+@end itemize
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+@item
+You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+@item
+By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+@item
+Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+@item
+The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and ``any
+later version'', you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+@item
+If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+@iftex
+@heading NO WARRANTY
+@end iftex
+@ifinfo
+@center NO WARRANTY
+@end ifinfo
+
+@item
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+@item
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
+LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
+SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
+WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+@end enumerate
+
+@iftex
+@heading END OF TERMS AND CONDITIONS
+@end iftex
+@ifinfo
+@center END OF TERMS AND CONDITIONS
+@end ifinfo
+
+@tex
+\global\baselineskip 12pt
+@end tex
+
+@page
+@unnumberedsec How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+``copyright'' line and a pointer to where the full notice is found.
+
+@smallexample
+@var{one line to give the program's name and a brief idea of what it does.}
+Copyright (C) 19@var{yy} @var{name of author}
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+@end smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+@smallexample
+Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'. This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c'
+for details.
+@end smallexample
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items---whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the program, if
+necessary. Here is a sample; alter the names:
+
+@example
+Yoyodyne, Inc., hereby disclaims all copyright
+interest in the program `Gnomovision'
+(a program to direct compilers to make passes
+at assemblers) written by James Hacker.
+
+@group
+@var{signature of Ty Coon}, 1 April 1989
+Ty Coon, President of Vice
+@end group
+@end example
+
+That's all there is to it!
+
+@node Intro, Glossary, License, Top
+@unnumbered Introduction
+
+ You are reading about GNU Emacs, the GNU incarnation of the advanced,
+self-documenting, customizable, extensible real-time display editor Emacs.
+(The `G' in `GNU' is not silent.)
+
+ We say that Emacs is a @dfn{display} editor because normally the text
+being edited is visible on the screen and is updated automatically as you
+type your commands. @xref{Screen,Display}.
+
+ We call it a @dfn{real-time} editor because the display is updated very
+frequently, usually after each character or pair of characters you
+type. This minimizes the amount of information you must keep in your
+head as you edit. @xref{Basic,Real-time,Basic Editing}.
+
+ We call Emacs advanced because it provides facilities that go beyond
+simple insertion and deletion: filling of text; automatic indentation of
+programs; viewing two or more files at once; and dealing in terms of
+characters, words, lines, sentences, paragraphs, and pages, as well as
+expressions and comments in several different programming languages. It is
+much easier to type one command meaning ``go to the end of the paragraph''
+than to find that spot with simple cursor keys.
+
+ @dfn{Self-documenting} means that at any time you can type a special
+character, @kbd{Control-h}, to find out what your options are. You can
+also use it to find out what any command does, or to find all the commands
+that pertain to a topic. @xref{Help}.
+
+ @dfn{Customizable} means that you can change the definitions of Emacs
+commands in little ways. For example, if you use a programming language in
+which comments start with @samp{<**} and end with @samp{**>}, you can tell
+the Emacs comment manipulation commands to use those strings
+(@pxref{Comments}). Another sort of customization is rearrangement of the
+command set. For example, if you prefer the four basic cursor motion
+commands (up, down, left and right) on keys in a diamond pattern on the
+keyboard, you can have it. @xref{Customization}.
+
+ @dfn{Extensible} means that you can go beyond simple customization and
+write entirely new commands, programs in the Lisp language to be run by
+Emacs's own Lisp interpreter. Emacs is an ``on-line extensible'' system,
+which means that it is divided into many functions that call each other,
+any of which can be redefined in the middle of an editing session. Any
+part of Emacs can be replaced without making a separate copy of all of
+Emacs. Most of the editing commands of Emacs are written in Lisp already;
+the few exceptions could have been written in Lisp but are written in C for
+efficiency. Although only a programmer can write an extension, anybody can
+use it afterward.
+
+@node Screen, Characters, Concept Index, Top
+@chapter The Organization of the Screen
+@cindex screen
+
+ Emacs divides the screen into several areas, each of which contains
+its own sorts of information. The biggest area, of course, is the one
+in which you usually see the text you are editing.
+
+ When you are using Emacs, the screen is divided into a number of
+@dfn{windows}. Initially there is one text window occupying all but the
+last line, plus the special @dfn{echo area} or @dfn{minibuffer window} in
+the last line. The text window can be subdivided horizontally or
+vertically into multiple text windows, each of which can be used for a
+different file (@pxref{Windows}). The window that the cursor is in is the
+@dfn{selected window}, in which editing takes place. The other windows are
+just for reference unless you select one of them.
+
+ Each text window's last line is a @dfn{mode line} which describes what is
+going on in that window. It is in inverse video if the terminal supports
+that, and contains text that starts like @samp{-----Emacs:@: @var{something}}. Its
+purpose is to indicate what buffer is being displayed above it in the
+window; what major and minor modes are in use; and whether the buffer's
+text has been changed.
+
+@menu
+* Point:: The place in the text where editing commands operate.
+* Echo Area:: Short messages appear at the bottom of the screen.
+* Mode Line:: Interpreting the mode line.
+@end menu
+
+@node Point, Echo Area, Screen, Screen
+@section Point
+@cindex point
+@cindex cursor
+
+ When Emacs is running, the terminal's cursor shows the location at
+which editing commands will take effect. This location is called
+@dfn{point}. Other commands move point through the text, so that you
+can edit at different places in it.
+
+ While the cursor appears to point @var{at} a character, point should be
+thought of as @var{between} two characters; it points @var{before} the character
+that the cursor appears on top of. Sometimes people speak of ``the
+cursor'' when they mean ``point'', or speak of commands that move point as
+``cursor motion'' commands.
+
+ Terminals have only one cursor, and when output is in progress it must
+appear where the typing is being done. This does not mean that point is
+moving. It is only that Emacs has no way to show you the location of point
+except when the terminal is idle.
+
+ If you are editing several files in Emacs, each file has its own point
+location. A file that is not being displayed remembers where point is so
+that it can be seen when you look at that file again.
+
+ When there are multiple text windows, each window has its own point
+location. The cursor shows the location of point in the selected window.
+This also is how you can tell which window is selected. If the same buffer
+appears in more than one window, point can be moved in each window
+independently.
+
+ The term `point' comes from the character @samp{.}, which was the
+command in @sc{teco} (the language in which the original Emacs was written)
+for accessing the value now called `point'.
+
+@node Echo Area, Mode Line, Point, Screen
+@section The Echo Area
+@cindex echo area
+
+ The line at the bottom of the screen (below the mode line) is the
+@dfn{echo area}. It is used to display small amounts of text for several
+purposes.
+
+ @dfn{Echoing} means printing out the characters that you type. Emacs
+never echoes single-character commands, and multi-character commands are
+echoed only if you pause while typing them. As soon as you pause for more
+than a second in the middle of a command, all the characters of the command
+so far are echoed. This is intended to @dfn{prompt} you for the rest of
+the command. Once echoing has started, the rest of the command is echoed
+immediately when you type it. This behavior is designed to give confident
+users fast response, while giving hesitant users maximum feedback. You
+can change this behavior by setting a variable (@pxref{Display Vars}).
+
+ If a command cannot be executed, it may print an @dfn{error message} in
+the echo area. Error messages are accompanied by a beep or by flashing the
+screen. Also, any input you have typed ahead is thrown away when an error
+happens.
+
+ Some commands print informative messages in the echo area. These
+messages look much like error messages, but they are not announced with a
+beep and do not throw away input. Sometimes the message tells you what the
+command has done, when this is not obvious from looking at the text being
+edited. Sometimes the sole purpose of a command is to print a message
+giving you specific information. For example, the command @kbd{C-x =} is
+used to print a message describing the character position of point in the
+text and its current column in the window. Commands that take a long time
+often display messages ending in @samp{...} while they are working, and
+add @samp{done} at the end when they are finished.
+
+ The echo area is also used to display the @dfn{minibuffer}, a window that
+is used for reading arguments to commands, such as the name of a file to be
+edited. When the minibuffer is in use, the echo area begins with a prompt
+string that usually ends with a colon; also, the cursor appears in that line
+because it is the selected window. You can always get out of the
+minibuffer by typing @kbd{C-g}. @xref{Minibuffer}.
+
+@node Mode Line,, Echo Area, Screen
+@section The Mode Line
+@cindex mode line
+@cindex top level
+
+ Each text window's last line is a @dfn{mode line} which describes what is
+going on in that window. When there is only one text window, the mode line
+appears right above the echo area. The mode line is in inverse video if
+the terminal supports that, starts and ends with dashes, and contains text
+like @samp{Emacs:@: @var{something}}.
+
+ If a mode line has something else in place of @samp{Emacs:@: @var{something}},
+then the window above it is in a special subsystem such as Dired. The mode
+line then indicates the status of the subsystem.
+
+ Normally, the mode line has the following appearance:
+
+@example
+--@var{ch}-Emacs: @var{buf} (@var{major} @var{minor})----@var{pos}------
+@end example
+
+@noindent
+This gives information about the buffer being displayed in the window: the
+buffer's name, what major and minor modes are in use, whether the buffer's
+text has been changed, and how far down the buffer you are currently
+looking.
+
+ @var{ch} contains two stars @samp{**} if the text in the buffer has been
+edited (the buffer is ``modified''), or @samp{--} if the buffer has not been
+edited. Exception: for a read-only buffer, it is @samp{%%}.
+
+ @var{buf} is the name of the window's chosen @dfn{buffer}. The chosen buffer
+in the selected window (the window that the cursor is in) is also Emacs's
+selected buffer, the one that editing takes place in. When we speak of
+what some command does to ``the buffer'', we are talking about the
+currently selected buffer. @xref{Buffers}.
+
+ @var{pos} tells you whether there is additional text above the top of the
+screen, or below the bottom. If your file is small and it is all on the
+screen, @var{pos} is @samp{All}. Otherwise, it is @samp{Top} if you are
+looking at the beginning of the file, @samp{Bot} if you are looking at the
+end of the file, or @samp{@var{nn}%}, where @var{nn} is the percentage of
+the file above the top of the screen.@refill
+
+ @var{major} is the name of the @dfn{major mode} in effect in the buffer. At
+any time, each buffer is in one and only one of the possible major modes.
+The major modes available include Fundamental mode (the least specialized),
+Text mode, Lisp mode, and C mode. @xref{Major Modes}, for details
+of how the modes differ and how to select one.@refill
+
+ @var{minor} is a list of some of the @dfn{minor modes} that are turned on
+at the moment in the window's chosen buffer. @samp{Fill} means that Auto
+Fill mode is on. @samp{Abbrev} means that Word Abbrev mode is on.
+@samp{Ovwrt} means that Overwrite mode is on. @xref{Minor Modes}, for more
+information. @samp{Narrow} means that the buffer being displayed has
+editing restricted to only a portion of its text. This is not really a
+minor mode, but is like one. @xref{Narrowing}. @samp{Def} means that a
+keyboard macro is being defined. @xref{Keyboard Macros}.
+
+ Some buffers display additional information after the minor modes. For
+example, Rmail buffers display the current message number and the total
+number of messages. Compilation buffers and Shell mode display the status
+of the subprocess.
+
+ In addition, if Emacs is currently inside a recursive editing level,
+square brackets (@samp{[@dots{}]}) appear around the parentheses that
+surround the modes. If Emacs is in one recursive editing level within
+another, double square brackets appear, and so on. Since this information
+pertains to Emacs in general and not to any one buffer, the square brackets
+appear in every mode line on the screen or not in any of them.
+@xref{Recursive Edit}.@refill
+
+@cindex display time
+@cindex time displayed in mode line
+@findex display-time
+ Emacs can optionally display the time and system load in all mode lines.
+To enable this feature, type @kbd{M-x display-time}. The information added
+to the mode line usually appears after the file name, before the mode names
+and their parentheses. It looks like this:
+
+@example
+@var{hh}:@var{mm}pm @var{l.ll} [@var{d}]
+@end example
+
+@noindent
+(Some fields may be missing if your operating system cannot support them.)
+@var{hh} and @var{mm} are the hour and minute, followed always by @samp{am}
+or @samp{pm}. @var{l.ll} is the average number of running processes in the
+whole system recently. @var{d} is an approximate index of the ratio of
+disk activity to cpu activity for all users.
+
+@cindex mail arrival
+The word @samp{Mail} appears after the load level if there is mail for
+you that you have not read yet.
+
+@vindex mode-line-inverse-video
+ Customization note: the user variable @code{mode-line-inverse-video} controls
+whether the mode line is displayed in inverse video (assuming the
+terminal supports it); @code{nil} means no inverse video. The default
+is @code{t}.
+
+@iftex
+@chapter Characters, Keys and Commands
+
+ This chapter explains the character set used by Emacs for input commands
+and for the contents of files, and also explains the concepts of
+@dfn{keys} and @dfn{commands} which are necessary for understanding how
+your keyboard input is understood by Emacs.
+@end iftex
+
+@node Characters, Keys, Screen, Top
+@section The Emacs Character Set
+@cindex character set
+@cindex ASCII
+
+ GNU Emacs uses the @sc{ascii} character set, which defines 128 different
+character codes. Some of these codes are assigned graphic symbols such
+as @samp{a} and @samp{=}; the rest are control characters, such as
+@kbd{Control-a} (also called @kbd{C-a} for short). @kbd{C-a} gets its name
+from the fact that you type it by holding down the @key{CTRL} key and
+then pressing @kbd{a}. There is no distinction between @kbd{C-a} and
+@kbd{C-A}; they are the same character.@refill
+
+ Some control characters have special names, and special keys you can
+type them with: @key{RET}, @key{TAB}, @key{LFD}, @key{DEL} and @key{ESC}.
+The space character is usually referred to below as @key{SPC}, even though
+strictly speaking it is a graphic character whose graphic happens to be
+blank.@refill
+
+ Emacs extends the 7-bit @sc{ascii} code to an 8-bit code by adding an extra
+bit to each character. This makes 256 possible command characters. The
+additional bit is called Meta. Any @sc{ascii} character can be made Meta;
+examples of Meta characters include @kbd{Meta-a} (@kbd{M-a}, for short),
+@kbd{M-A} (not the same character as @kbd{M-a}, but those two characters
+normally have the same meaning in Emacs), @kbd{M-@key{RET}}, and
+@kbd{M-C-a}. For traditional reasons, @kbd{M-C-a} is usually called
+@kbd{C-M-a}; logically speaking, the order in which the modifier keys
+@key{CTRL} and @key{META} are mentioned does not matter.@refill
+
+@cindex Control
+@cindex Meta
+@cindex C-
+@cindex M-
+@cindex ESC replacing META key
+ Some terminals have a @key{META} key, and allow you to type Meta
+characters by holding this key down. Thus, @kbd{Meta-a} is typed by
+holding down @key{META} and pressing @kbd{a}. The @key{META} key works
+much like the @key{SHIFT} key. Such a key is not always labeled
+@key{META}, however, as this function is often a special option for a key
+with some other primary purpose.@refill
+
+ If there is no @key{META} key, you
+can still type Meta characters using two-character sequences starting with
+@key{ESC}. Thus, to enter @kbd{M-a}, you could type @kbd{@key{ESC} a}. To
+enter @kbd{C-M-a}, you would type @kbd{@key{ESC} C-a}. @key{ESC} is
+allowed on terminals with Meta keys, too, in case you have formed a habit
+of using it.@refill
+
+@vindex meta-flag
+ Emacs believes the terminal has a @key{META} key if the variable
+@code{meta-flag} is non-@code{nil}. Normally this is set automatically
+according to the termcap entry for your terminal type. However, sometimes
+the termcap entry is wrong, and then it is useful to set this variable
+yourself. @xref{Variables}, for how to do this.
+
+ Emacs buffers also use an 8-bit character set, because bytes have 8 bits,
+but only the @sc{ascii} characters are considered meaningful.
+@sc{ascii} graphic characters in Emacs buffers are displayed with
+their graphics. @key{LFD} is the same as a newline character; it is
+displayed by starting a new line. @key{TAB} is displayed by moving to
+the next tab stop column (usually every 8 columns). Other control
+characters are displayed as a caret (@samp{^}) followed by the
+non-control version of the character; thus, @kbd{C-a} is displayed as
+@samp{^A}. Non-@sc{ascii} characters 128 and up are displayed with octal
+escape sequences; thus, character code 243 (octal), also called
+@kbd{M-#} when used as an input character, is displayed as
+@samp{\243}.
+@c !! need glossary definition of octal escape sequence
+
+@node Keys, Commands, Characters, Top
+@section Keys
+
+@cindex key
+@cindex prefix key
+ A @dfn{complete key}---where `key' is short for @dfn{key sequence}---is a
+sequence of keystrokes that are understood by Emacs as a unit, as a single
+command (possibly undefined). Most single characters constitute complete
+keys in the standard Emacs command set; there are also some multi-character
+keys. Examples of complete keys are @kbd{C-a}, @kbd{X}, @key{RET},
+@kbd{C-x C-f} and @kbd{C-x 4 C-f}.@refill
+
+@kindex C-c
+@kindex C-x
+@kindex C-h
+@kindex ESC
+ A @dfn{prefix key} is a sequence of keystrokes that are the beginning of
+a complete key, but not a whole one. Prefix keys and complete keys are
+collectively called @dfn{keys}.
+
+ A prefix key is the beginning of a series of longer sequences that are
+valid keys; adding any single character to the end of the prefix gives a
+valid key, which could be defined as an Emacs command, or could be a prefix
+itself. For example, @kbd{C-x} is standardly defined as a prefix, so
+@kbd{C-x} and the next input character combine to make a two-character key.
+There are 256 different two-character keys starting with @kbd{C-x}, one for
+each possible second character. Many of these two-character keys starting
+with @kbd{C-x} are standardly defined as Emacs commands. Notable examples
+include @kbd{C-x C-f} and @kbd{C-x s} (@pxref{Files}).
+
+ Adding one character to a prefix key does not have to form a complete
+key. It could make another, longer prefix. For example, @kbd{C-x 4} is
+itself a prefix that leads to 256 different three-character keys, including
+@kbd{C-x 4 f}, @w{@kbd{C-x 4 b}} and so on. It would be possible to define one
+of those three-character sequences as a prefix, creating a series of
+four-character keys, but we did not define any of them this way.
+
+ By contrast, the two-character sequence @kbd{C-f C-k} is not a key,
+because the @kbd{C-f} is a complete key in itself. It's impossible to give
+@kbd{C-f C-k} an independent meaning as a command as long as @kbd{C-f}
+retains its meaning. @kbd{C-f C-k} is two commands.@refill
+
+ All told, the prefix keys in Emacs are @kbd{C-c}, @kbd{C-x}, @kbd{C-h},
+@kbd{C-x 4}, and @key{ESC}. But this is not built in; it is just a matter
+of Emacs's standard key bindings. In customizing Emacs, you could make
+new prefix keys, or eliminate these. @xref{Key Bindings}.@refill
+
+ Whether a sequence is a key can be changed by customization. For
+example, if you redefine @kbd{C-f} as a prefix, @kbd{C-f C-k} automatically
+becomes a key (complete, unless you define it too as a prefix).
+Conversely, if you remove the prefix definition of @kbd{C-x 4}, then
+@kbd{C-x 4 f} (or @kbd{C-x 4 @var{anything}}) is no longer a key.
+
+@node Commands, Entering Emacs, Keys, Top
+@section Keys and Commands
+
+@cindex binding
+@cindex customization
+@cindex keymap
+@cindex function
+@cindex command
+ This manual is full of passages that tell you what particular keys do.
+But Emacs does not assign meanings to keys directly. Instead, Emacs
+assigns meanings to @dfn{functions}, and then gives keys their meanings by
+@dfn{binding} them to functions.
+
+ A function is a Lisp object that can be executed as a program. Usually
+it is a Lisp symbol which has been given a function definition; every
+symbol has a name, usually made of a few English words separated by
+dashes, such as @code{next-line} or @code{forward-word}. It also has a
+@dfn{definition} which is a Lisp program; this is what makes the
+function do what it does. Only some functions can be the bindings of
+keys; these are functions whose definitions use @code{interactive} to
+specify how to call them interactively. Such functions are called
+@dfn{commands}, and their names are @dfn{command names}.
+@xref{Defining Commands, , Defining Commands, elisp, The GNU Emacs Lisp
+Manual}, for more information.
+
+ The bindings between keys and functions are recorded in various tables
+called @dfn{keymaps}. @xref{Keymaps}.
+
+ When we say that ``@kbd{C-n} moves down vertically one line'' we are
+glossing over a distinction that is irrelevant in ordinary use but is vital
+in understanding how to customize Emacs. It is the function
+@code{next-line} that is programmed to move down vertically. @kbd{C-n} has
+this effect @i{because} it is bound to that function. If you rebind
+@kbd{C-n} to the function @code{forward-word} then @kbd{C-n} will move
+forward by words instead. Rebinding keys is a common method of
+customization.@refill
+
+ In the rest of this manual, we usually ignore this subtlety to keep
+things simple. To give the customizer the information he needs, we
+state the name of the command which really does the work in parentheses
+after mentioning the key that runs it. For example, we will say that
+``The command @kbd{C-n} (@code{next-line}) moves point vertically down,''
+meaning that @code{next-line} is a command that moves vertically down
+and @kbd{C-n} is a key that is standardly bound to it.
+
+ While we are on the subject of information for customization only, it's a
+good time to tell you about @dfn{variables}. Often the description of a
+command will say, ``To change this, set the variable @code{mumble-foo}.''
+A variable is a name used to remember a value. Most of the variables
+documented in this manual exist just to facilitate customization: some
+command or other part of Emacs examines the variable and behaves
+differently accordingly. Until you are interested in customizing, you can
+ignore the information about variables. When you are ready to be
+interested, read the basic information on variables, and then the
+information on individual variables will make sense. @xref{Variables}.
+
+@node Entering Emacs, Exiting, Commands, Top
+@chapter Entering and Exiting Emacs
+@cindex entering Emacs
+
+ The usual way to invoke Emacs is just to type @kbd{emacs @key{RET}} at
+the shell. Emacs clears the screen and then displays an initial advisor
+message and copyright notice. You can begin typing Emacs commands
+immediately afterward.
+
+ Some operating systems insist on discarding all type-ahead when Emacs
+starts up; they give Emacs no way to prevent this. Therefore, it is
+wise to wait until Emacs clears the screen before typing your first
+editing command.
+
+@vindex initial-major-mode
+ Before Emacs reads the first command, you have not had a chance to give a
+command to specify a file to edit. But Emacs must always have a current
+buffer for editing. In an attempt to do something useful, Emacs presents a
+buffer named @samp{*scratch*} which is in Lisp Interaction mode; you can
+use it to type Lisp expressions and evaluate them, or you can ignore that
+capability and simply doodle. (You can specify a different major mode for
+this buffer by setting the variable @code{initial-major-mode} in your init
+file. @xref{Init File}.)
+
+ It is also possible to specify files to be visited, Lisp files to be
+loaded, and functions to be called, by giving Emacs arguments in the
+shell command line. @xref{Command Switches}.
+
+@node Exiting, Command Switches, Entering Emacs, Top
+@section Exiting Emacs
+@cindex exiting
+@cindex killing Emacs
+@cindex suspending
+
+ There are two commands for exiting Emacs because there are two kinds of
+exiting: @dfn{suspending} Emacs and @dfn{killing} Emacs. @dfn{Suspending} means
+stopping Emacs temporarily and returning control to its superior (usually
+the shell), allowing you to resume editing later in the same Emacs job,
+with the same files, same kill ring, same undo history, and so on. This is
+the usual way to exit. @dfn{Killing} Emacs means destroying the Emacs job.
+You can run Emacs again later, but you will get a fresh Emacs; there is no
+way to resume the same editing session after it has been killed.
+
+@table @kbd
+@item C-z
+Suspend Emacs (@code{suspend-emacs}).
+@item C-x C-c
+Kill Emacs (@code{save-buffers-kill-emacs}).
+@end table
+
+@kindex C-z
+@findex suspend-emacs
+ To suspend Emacs, type @kbd{C-z} (@code{suspend-emacs}). This takes
+you back to the shell from which you invoked Emacs. You can resume
+Emacs with the command @code{%emacs} if you are using the C shell or the
+Bourne-Again shell.
+
+ On systems that do not permit programs to be suspended, @kbd{C-z} runs an
+inferior shell that communicates directly with the terminal, and Emacs
+waits until you exit the subshell. The only way on these systems to get
+back to the shell from which Emacs was run (to log out, for example) is to
+kill Emacs. @kbd{C-d} or @code{exit} are typical commands to exit a
+subshell.
+
+@kindex C-x C-c
+@findex save-buffers-kill-emacs
+ To kill Emacs, type @kbd{C-x C-c} (@code{save-buffers-kill-emacs}). A
+two-character key is used for this to make it harder to type. Unless a
+numeric argument is used, this command first offers to save any modified
+buffers. If you do not save them all, it asks for reconfirmation with
+@kbd{yes} before killing Emacs, since any changes not saved before that will be
+lost forever. Also, if any subprocesses are still running, @kbd{C-x C-c}
+asks for confirmation about them, since killing Emacs will kill the
+subprocesses immediately.
+
+ In most programs running on Unix, certain characters may instantly
+suspend or kill the program. (In Berkeley Unix these characters are
+normally @kbd{C-z} and @kbd{C-c}.) @b{This Unix feature is turned off
+while you are in Emacs.} The meanings of @kbd{C-z} and @kbd{C-x C-c} as
+keys in Emacs were inspired by the standard Berkeley Unix meanings of
+@kbd{C-z} and @kbd{C-c}, but that is their only relationship with
+Unix. You could customize these keys to do anything (@pxref{Keymaps}).
+
+@node Command Switches, Basic, Exiting, Top
+@section Command Line Switches and Arguments
+@cindex command line arguments
+@cindex arguments (from shell)
+
+
+ GNU Emacs supports command line arguments to request various actions
+when invoking Emacs. These are for compatibility with other editors and
+for sophisticated activities. They are not needed for ordinary editing
+with Emacs, so new users can skip this section.
+
+ You may be used to using command line arguments with other editors
+to specify which file to edit. That's because many other editors are
+designed to be started afresh each time you want to edit. You
+edit one file and then exit the editor. The next time you want to edit
+either another file or the same one, you must run the editor again.
+With these editors, it makes sense to use a command line argument
+to say which file to edit.
+
+ The recommended way to use GNU Emacs is to start it only once, just after
+you log in, and do all your editing in the same Emacs process. Each time
+you want to edit a different file, you visit it with the existing Emacs,
+which eventually comes to have many files in it ready for editing. Usually
+you do not kill the Emacs until you are about to log out.
+
+ In the usual style of Emacs use, files are nearly always read by
+typing commands to an editor that is already running. So command line
+arguments for specifying a file when the editor is started are seldom
+used.
+
+ Emacs accepts command-line arguments that specify files to visit,
+functions to call, and other activities and operating modes.
+
+ The command arguments are processed in the order they appear in the
+command argument list; however, certain arguments (the ones in the second
+table) must be at the front of the list if they are used.
+
+ Here are the arguments allowed:
+
+@table @samp
+@item @var{file}
+Visit @var{file} using @code{find-file}. @xref{Visiting}.
+
+@item +@var{linenum} @var{file}
+Visit @var{file} using @code{find-file}, then go to line number
+@var{linenum} in it.
+
+@item -l @var{file}
+@itemx -load @var{file}
+Load a file @var{file} of Lisp code with the function @code{load}.
+@xref{Lisp Libraries}.
+
+@item -f @var{function}
+@itemx -funcall @var{function}
+Call Lisp function @var{function} with no arguments.
+
+@item -i @var{file}
+@itemx -insert @var{file}
+Insert the contents of @var{file} into the current buffer.
+This is like what @kbd{M-x insert-buffer} does; see @ref{Misc File Ops}.
+
+@item -kill
+Exit from Emacs without asking for confirmation.
+@end table
+
+ The following switches are recognized only at the beginning of the
+command line. If more than one of them appears, they must appear in the
+order that they appear in this table.
+
+@table @samp
+@item -t @var{device}
+Use @var{device} as the device for terminal input and output.
+
+@item -d @var{display}
+When running with the X window system, use the display named
+@var{display} to make Emacs's X window.
+
+@item -nw
+Don't use a window system; display text only, using an ordinary terminal
+device. Thus, if you run an X-capable Emacs in an Xterm with
+@samp{emacs -nw}, it displays in the Xterm's own window instead of
+making its own.
+
+@cindex batch mode
+@item -batch
+Run Emacs in @dfn{batch mode}, which means that the text being edited is
+not displayed and the standard Unix interrupt characters such as @kbd{C-z}
+and @kbd{C-c} continue to have their normal effect. Emacs in batch mode
+outputs to @code{stdout} only what would normally be printed in the echo
+area under program control.
+
+Batch mode is used for running programs written in Emacs Lisp from
+shell scripts, makefiles, and so on. Normally the @samp{-l} switch
+or @samp{-f} switch will be used as well, to invoke a Lisp program
+to do the batch processing.
+
+@samp{-batch} implies @samp{-q} (do not load an init file). It also
+causes Emacs to exit after all command switches have been processed. In
+addition, auto-saving is not done except in buffers for which it has
+been explicitly requested.
+
+@item -q
+@itemx -no-init-file
+Do not load your Emacs init file @file{~/.emacs}.
+
+@item -u @var{user}
+@itemx -user @var{user}
+Load @var{user}'s Emacs init file @file{~@var{user}/.emacs} instead of
+your own.
+@end table
+
+ With X Windows, you can use these additional options to specify how to
+display the window. Each option has a corresponding resource name (used
+with @samp{emacs} unless you specify another name with @samp{-rn
+@var{name}}), listed with the option, which lets you specify the same
+parameter using the usual X Windows defaulting mechanism. The
+corresponding generic resource name (used with @samp{Emacs}) is usually
+made by capitalizing the first letter of the individual resource name,
+but in some cases it is a completely different string (which is listed
+below).
+
+@table @code
+@item -rn @var{name}
+Use @var{name} instead of @samp{emacs} when looking for X resources.
+
+@item -font @var{fontname}
+@itemx -fn @var{fontname}
+Use font @var{fontname}.@*
+(Resource @samp{font}.)
+
+@item -wn @var{name}
+Name the window @var{name}.@*
+(Resource @samp{title}.)
+
+@item -i
+Use a bitmap icon (showing the kitchen sink)
+rather than a textual icon.@*
+(Resource @samp{bitmapIcon}.)
+
+@item -in @var{name}
+Name the icon @var{name}. (Resource @samp{iconName}; @samp{Title}).
+
+@item -geometry @var{coords}
+@itemx -w @var{coords}
+Specify the shape and optionally the position
+of the Emacs window in the usual X way.@*
+(Resource @samp{geometry}.)
+
+@item -b @var{width}
+Specify that the window border is @var{width} pixels thick.@*
+(Resource @samp{borderWidth}.)
+
+@item -ib @var{width}
+Leave @var{width} blank pixels between the border
+and the window contents.@*
+(Resource @samp{internalBorder}; @samp{BorderWidth}.)
+
+@item -r
+Use reverse video.@*
+(Resource @samp{reverseVideo}.)
+
+@item -fg @var{color}
+Use color @var{color} for text in the window.@*
+(Resource @samp{foreground}.)
+
+@item -bg @var{color}
+Use the color @var{color} for the background of the window.@*
+(Resource @samp{background}.)
+
+@item -bd @var{color}
+Use color @var{color} for the window border.@*
+(Resource @samp{borderColor}.)
+
+@item -cr @var{color}
+Specify the color, @var{color}, to use for the cursor.@*
+(Resource @samp{cursorColor}; @samp{Foreground}.)
+
+@item -ms @var{color}
+Use color @var{color} for the mouse cursor.@*
+(Resource @samp{pointerColor}; @samp{Foreground}.)
+@end table
+
+@vindex command-line-args
+ The init file can get access to the command line argument values as
+the elements of a list in the variable @code{command-line-args}. (The
+arguments in the second table above will already have been processed and
+will not be in the list.) The init file can override the normal
+processing of the other arguments by setting this variable.
+
+ One way to use command arguments is to visit many files automatically:
+
+@example
+emacs *.c
+@end example
+
+@noindent
+passes each @code{.c} file as a separate argument to Emacs, so that Emacs
+visits each file (@pxref{Visiting}).
+
+ Here is an advanced example that assumes you have a Lisp program
+file called @file{hack-c-program.el} which, when loaded, performs some
+useful operation on current buffer, expected to be a C program.
+
+@smallexample
+emacs -batch foo.c -l hack-c-program -f save-buffer -kill > log
+@end smallexample
+
+@noindent
+This says to visit @file{foo.c}, load @file{hack-c-program.el} (which
+makes changes in the visited file), save @file{foo.c} (note that
+@code{save-buffer} is the function that @kbd{C-x C-s} is bound to), and
+then exit to the shell that this command was done with. @samp{-batch}
+guarantees there will be no problem redirecting output to @file{log},
+because Emacs will not assume that it has a display terminal to work
+with.
+
+@node Basic, Undo, Command Switches, Top
+@chapter Basic Editing Commands
+
+@kindex C-h t
+@findex help-with-tutorial
+ We now give the basics of how to enter text, make corrections, and
+save the text in a file. If this material is new to you, you might
+learn it more easily by running the Emacs learn-by-doing tutorial. To
+do this, type @w{@kbd{Control-h t}} (@code{help-with-tutorial}).
+
+@section Inserting Text
+
+@cindex insertion
+@cindex point
+@cindex cursor
+@cindex graphic characters
+ To insert printing characters into the text you are editing, just type
+them. This inserts the character into the buffer at the cursor (that is,
+at @dfn{point}; @pxref{Point}). The cursor moves forward. Any characters
+after the cursor move forward too. If the text in the buffer is
+@samp{FOOBAR}, with the cursor before the @samp{B}, then if you type
+@kbd{XX}, you get @samp{FOOXXBAR}, with the cursor still before the
+@samp{B}.
+
+@kindex DEL
+@cindex deletion
+ To @dfn{delete} text you have just inserted, use @key{DEL}. @key{DEL}
+deletes the character @var{before} the cursor (not the one that the cursor
+is on top of or under; that is the character @var{after} the cursor). The
+cursor and all characters after it move backwards. Therefore, if you type
+a printing character and then type @key{DEL}, they cancel out.
+
+@kindex RET
+@cindex newline
+ To end a line and start typing a new one, type @key{RET}. This inserts
+a newline character in the buffer. If point is in the middle of a line,
+@key{RET} splits the line. Typing @key{DEL} when the cursor is at the
+beginning of a line rubs out the newline before the line, thus joining the
+line with the preceding line.
+
+ Emacs will split lines automatically when they become too long, if you
+turn on a special mode called @dfn{Auto Fill} mode. @xref{Filling}, for
+how to use Auto Fill mode.
+
+@findex delete-backward-char
+@findex newline
+@findex self-insert
+ Customization information: @key{DEL} in most modes runs the command named
+@code{delete-backward-char}; @key{RET} runs the command @code{newline}, and
+self-inserting printing characters run the command @code{self-insert},
+which inserts whatever character was typed to invoke it. Some major modes
+rebind @key{DEL} to other commands.
+
+@cindex quoting
+@kindex C-q
+@findex quoted-insert
+ Direct insertion works for printing characters and @key{SPC}, but other
+characters act as editing commands and do not insert themselves. If you
+need to insert a control character or a character whose code is above 200
+octal, you must @dfn{quote} it by typing the character @kbd{control-q}
+(@code{quoted-insert}) first. There are two ways to use @kbd{C-q}:@refill
+
+@itemize @bullet
+@item
+@kbd{Control-q} followed by any non-graphic character (even @kbd{C-g})
+inserts that character.
+@item
+@kbd{Control-q} followed by three octal digits inserts the character
+with the specified character code.
+@end itemize
+
+@noindent
+A numeric argument to @kbd{C-q} specifies how many copies of the
+quoted character should be inserted (@pxref{Arguments}).
+
+ If you prefer to have text characters replace (overwrite) existing
+text rather than shove it to the right, you can enable Overwrite mode,
+a minor mode. @xref{Minor Modes}.
+
+@section Changing the Location of Point
+
+ To do more than insert characters, you have to know how to move
+point (@pxref{Point}). Here are a few of the commands for doing that.
+
+@kindex C-a
+@kindex C-e
+@kindex C-f
+@kindex C-b
+@kindex C-n
+@kindex C-p
+@kindex C-l
+@kindex C-t
+@kindex M->
+@kindex M-<
+@kindex M-r
+@findex beginning-of-line
+@findex end-of-line
+@findex forward-char
+@findex backward-char
+@findex next-line
+@findex previous-line
+@findex recenter
+@findex transpose-chars
+@findex beginning-of-buffer
+@findex end-of-buffer
+@findex goto-char
+@findex goto-line
+@findex move-to-window-line
+@table @kbd
+@item C-a
+Move to the beginning of the line (@code{beginning-of-line}).
+@item C-e
+Move to the end of the line (@code{end-of-line}).
+@item C-f
+Move forward one character (@code{forward-char}).
+@item C-b
+Move backward one character (@code{backward-char}).
+@item M-f
+Move forward one word (@code{forward-word}).
+@item M-b
+Move backward one word (@code{backward-word}).
+@item C-n
+Move down one line, vertically (@code{next-line}). This command
+attempts to keep the horizontal position unchanged, so if you start in
+the middle of one line, you end in the middle of the next. When on
+the last line of text, @kbd{C-n} creates a new line and moves onto it.
+@item C-p
+Move up one line, vertically (@code{previous-line}).
+@item C-l
+Clear the screen and reprint everything (@code{recenter}). Text moves
+on the screen to bring point to the center of the window.
+@item M-r
+Move point to left margin on the line halfway down the screen or
+window (@code{move-to-window-line}). Text does not move on the
+screen. A numeric argument says how many screen lines down from the
+top of the window (zero for the top). A negative argument counts from
+the bottom (@minus{}1 for the bottom).
+@item C-t
+Transpose two characters, the ones before and after the cursor
+(@code{transpose-chars}).
+@item M-<
+Move to the top of the buffer (@code{beginning-of-buffer}). With
+numeric argument @var{n}, move to @var{n}/10 of the way from the top.
+@xref{Arguments}, for more information on numeric arguments.@refill
+@item M->
+Move to the end of the buffer (@code{end-of-buffer}).
+@item M-x goto-char
+Read a number @var{n} and move cursor to character number @var{n}.
+Position 1 is the beginning of the buffer.
+@item M-x goto-line
+Read a number @var{n} and move cursor to line number @var{n}. Line 1
+is the beginning of the buffer.
+@item C-x C-n
+@findex set-goal-column
+@cindex goal column
+Use the current column of point as the @dfn{semipermanent goal column} for
+@kbd{C-n} and @kbd{C-p} (@code{set-goal-column}). Henceforth, those
+commands always move to this column in each line moved into, or as
+close as possible given the contents of the line. This goal column remains
+in effect until canceled.
+@item C-u C-x C-n
+Cancel the goal column. Henceforth, @kbd{C-n} and @kbd{C-p} once
+again try to avoid changing the horizontal position, as usual.
+@end table
+
+@vindex track-eol
+ If you set the variable @code{track-eol} to a non-@code{nil} value, then
+@kbd{C-n} and @kbd{C-p} when at the end of the starting line move to the
+end of the line. Normally, @code{track-eol} is @code{nil}.
+
+@section Erasing Text
+
+@table @kbd
+@item @key{DEL}
+Delete the character before the cursor (@code{delete-backward-char}).
+@item C-d
+Delete the character after the cursor (@code{delete-char}).
+@item C-k
+Kill to the end of the line (@code{kill-line}).
+@item M-d
+Kill forward to the end of the next word (@code{kill-word}).
+@item M-@key{DEL}
+Kill back to the beginning of the previous word
+(@code{backward-kill-word}).
+@end table
+
+ You already know about the @key{DEL} key which deletes the character
+before the cursor. Another key, @kbd{Control-d}, deletes the character
+after the cursor, causing the rest of the text on the line to shift left.
+If @kbd{Control-d} is typed at the end of a line, that line and the next
+line are joined together.
+
+ To erase a larger amount of text, use the @kbd{Control-k} key, which
+kills a line at a time. If @kbd{C-k} is done at the beginning or middle of
+a line, it kills all the text up to the end of the line. If @kbd{C-k} is
+done at the end of a line, it joins that line and the next line.
+
+ @xref{Killing}, for more flexible ways of killing text.
+
+@section Files
+
+@cindex files
+ The commands above are sufficient for creating and altering text in an
+Emacs buffer; the more advanced Emacs commands just make things easier.
+But to keep any text permanently you must put it in a @dfn{file}. Files
+are named units of text which are stored by the operating system for you to
+retrieve later by name. To look at or use the contents of a file in any
+way, including editing the file with Emacs, you must specify the file name.
+
+ Consider a file named @file{/usr/rms/foo.c}. In Emacs, to begin editing
+this file, type
+
+@example
+C-x C-f /usr/rms/foo.c @key{RET}
+@end example
+
+@noindent
+Here the file name is given as an @dfn{argument} to the command @kbd{C-x
+C-f} (@code{find-file}). That command uses the @dfn{minibuffer} to
+read the argument, and you type @key{RET} to terminate the argument
+(@pxref{Minibuffer}).@refill
+
+ Emacs obeys the command by @dfn{visiting} the file: creating a buffer,
+copying the contents of the file into the buffer, and then displaying the
+buffer for you to edit. You can make changes in it, and then @dfn{save}
+the file by typing @kbd{C-x C-s} (@code{save-buffer}). This makes the
+changes permanent by copying the altered contents of the buffer back into
+the file @file{/usr/rms/foo.c}. Until then, the changes are only inside
+your Emacs, and the file @file{foo.c} is not changed.@refill
+
+ To create a file, just visit the file with @kbd{C-x C-f} as if it already
+existed. Emacs will make an empty buffer in which you can insert the text
+you want to put in the file. When you save your text with @kbd{C-x C-s},
+the file will be created.
+
+ Of course, there is a lot more to learn about using files. @xref{Files}.
+
+@section Help
+
+ If you forget what a key does, you can find out with the Help character,
+which is @kbd{C-h}. Type @kbd{C-h k} followed by the key you want to know
+about; for example, @kbd{C-h k C-n} tells you all about what @kbd{C-n}
+does. @kbd{C-h} is a prefix key; @kbd{C-h k} is just one of its
+subcommands (the command @code{describe-key}). The other subcommands of
+@kbd{C-h} provide different kinds of help. Type @kbd{C-h} three times
+to get a description of all the help facilities. @xref{Help}.@refill
+
+@menu
+* Blank Lines:: Commands to make or delete blank lines.
+* Continuation Lines:: Lines too wide for the screen.
+* Position Info:: What page, line, row, or column is point on?
+* Arguments:: Numeric arguments for repeating a command.
+@end menu
+
+@page
+@node Blank Lines, Continuation Lines, Basic, Basic
+@section Blank Lines
+
+ Here are special commands and techniques for putting in and taking out
+blank lines.
+
+@c widecommands
+@table @kbd
+@item C-o
+Insert one or more blank lines after the cursor (@code{open-line}).
+@item C-x C-o
+Delete all but one of many consecutive blank lines
+(@code{delete-blank-lines}).
+@end table
+
+@kindex C-o
+@kindex C-x C-o
+@cindex blank lines
+@findex open-line
+@findex delete-blank-lines
+ When you want to insert a new line of text before an existing line, you
+can do it by typing the new line of text, followed by @key{RET}. However,
+it may be easier to see what you are doing if you first make a blank line
+and then insert the desired text into it. This is easy to do using the key
+@kbd{C-o} (@code{open-line}), which inserts a newline after point but leaves
+point in front of the newline. After @kbd{C-o}, type the text for the new
+line. @kbd{C-o F O O} has the same effect as @w{@kbd{F O O @key{RET}},} except for
+the final location of point.
+
+ You can make several blank lines by typing @kbd{C-o} several times, or by
+giving it an argument to tell it how many blank lines to make.
+@xref{Arguments}, for how.
+
+ If you have many blank lines in a row and want to get rid of them, use
+@kbd{C-x C-o} (@code{delete-blank-lines}). When point is on a blank line which
+is adjacent to at least one other blank line, @kbd{C-x C-o} deletes all but
+one of the consecutive blank lines, leaving exactly one. With point on a
+blank line with no other blank line adjacent to it, the sole blank line is
+deleted, leaving none. When point is on a nonblank line, @kbd{C-x C-o}
+deletes any blank lines following that nonblank line.
+
+@node Continuation Lines, Position Info, Blank Lines, Basic
+@section Continuation Lines
+
+@cindex continuation line
+ If you add too many characters to one line, without breaking it with a
+@key{RET}, the line will grow to occupy two (or more) lines on the screen,
+with a @samp{\} at the extreme right margin of all but the last of them.
+The @samp{\} says that the following screen line is not really a distinct
+line in the text, but just the @dfn{continuation} of a line too long to fit
+the screen. Sometimes it is nice to have Emacs insert newlines
+automatically when a line gets too long; for this, use Auto Fill mode
+(@pxref{Filling}).
+
+@vindex truncate-lines
+@cindex truncation
+ Instead of continuation, long lines can be displayed by @dfn{truncation}.
+This means that all the characters that do not fit in the width of the
+screen or window do not appear at all. They remain in the buffer,
+temporarily invisible. @samp{$} is used in the last column instead of
+@samp{\} to inform you that truncation is in effect.
+
+ Continuation can be turned off for a particular buffer by setting the
+variable @code{truncate-lines} to non-@code{nil} in that buffer.
+Truncation instead of continuation also happens whenever horizontal
+scrolling is in use, and optionally whenever side-by-side windows are in
+use (@pxref{Windows}). Altering the value of @code{truncate-lines} makes
+it local to the current buffer; until that time, the default value is in
+effect. The default is initially @code{nil}. @xref{Locals}.@refill
+
+@node Position Info, Arguments, Continuation Lines, Basic
+@section Cursor Position Information
+
+ If you are accustomed to other display editors, you may be surprised that
+Emacs does not always display the page number or line number of point in
+the mode line. This is because the text is stored in a way that makes it
+difficult to compute this information. Displaying them all the time would
+be intolerably slow. They are not needed very often in Emacs anyway,
+but there are commands to compute them and print them.
+
+@table @kbd
+@item M-x what-page
+Print page number of point, and line number within page.
+@item M-x what-line
+Print line number of point in the buffer.
+@item M-=
+Print number of lines in the current region (@code{count-lines-region}).
+@item C-x =
+Print character code of character after point, character position of
+point, and column of point (@code{what-cursor-position}).
+@end table
+
+@findex what-page
+@findex what-line
+@cindex line number
+ There are two commands for printing line numbers. @kbd{M-x what-line}
+counts lines from the beginning of the file and prints the line number
+point is on. The first line of the file is line number 1. These numbers
+can be used as arguments to @kbd{M-x goto-line}. By contrast, @kbd{M-x
+what-page} counts pages from the beginning of the file, and counts lines
+within the page, printing both of them. @xref{Pages}.
+
+@kindex M-=
+@findex count-lines-region
+ While on this subject, we might as well mention @kbd{M-=} (@code{count-lines-region}),
+which prints the number of lines in the region (@pxref{Mark}).
+@xref{Pages}, for the command @kbd{C-x l} which counts the lines in the
+current page.
+
+@kindex C-x =
+@findex what-cursor-position
+ The command @kbd{C-x =} (@code{what-cursor-position}) can be used to find out
+the column that the cursor is in, and other miscellaneous information about
+point. It prints a line in the echo area that looks like this:
+
+@example
+Char: x (0170) point=65986 of 563027(12%) x=44
+@end example
+
+@noindent
+(In fact, this is the output produced when point is before the @samp{x=44}
+in the example.)
+
+ The two values after @samp{Char:} describe the character following point,
+first by showing it and second by giving its octal character code.
+
+ @samp{point=} is followed by the position of point expressed as a character
+count. The front of the buffer counts as position 1, one character later
+as 2, and so on. The next, larger number is the total number of characters
+in the buffer. Afterward in parentheses comes the position expressed as a
+percentage of the total size.
+
+ @samp{x=} is followed by the horizontal position of point, in columns from the
+left edge of the window.
+
+ If the buffer has been narrowed, making some of the text at the beginning and
+the end temporarily invisible, @kbd{C-x =} prints additional text describing the
+current visible range. For example, it might say
+
+@smallexample
+Char: x (0170) point=65986 of 563025(12%) <65102 - 68533> x=44
+@end smallexample
+
+@noindent
+where the two extra numbers give the smallest and largest character position
+that point is allowed to assume. The characters between those two positions
+are the visible ones. @xref{Narrowing}.
+
+ If point is at the end of the buffer (or the end of the visible part),
+@kbd{C-x =} omits any description of the character after point.
+The output looks like
+
+@smallexample
+point=563026 of 563025(100%) x=0
+@end smallexample
+
+@node Arguments,, Position Info, Basic
+@section Numeric Arguments
+@cindex numeric arguments
+@cindex prefix arguments
+@cindex arguments, prefix and numeric
+
+ Any Emacs command can be given a @dfn{numeric argument}. Some commands
+interpret the argument as a repetition count. For example, giving an
+argument of ten to the key @kbd{C-f} (the command @code{forward-char}, move
+forward one character) moves forward ten characters. With these commands,
+no argument is equivalent to an argument of one. Negative arguments are
+allowed. Often they tell a command to move or act backwards.
+
+@kindex M-1
+@kindex M-@t{-}
+@findex digit-argument
+@findex negative-argument
+ If your terminal keyboard has a @key{META} key, the easiest way to
+specify a numeric argument is to type digits and/or a minus sign while
+holding down the @key{META} key. For example,
+@example
+M-5 C-n
+@end example
+@noindent
+would move down five lines. The characters @kbd{Meta-1}, @kbd{Meta-2}, and
+so on, as well as @kbd{Meta--}, do this because they are keys bound to
+commands (@code{digit-argument} and @code{negative-argument}) that are
+defined to contribute to an argument for the next command.
+
+@kindex C-u
+@findex universal-argument
+@cindex universal argument
+ Another way of specifying an argument is to use the @kbd{C-u}
+(@code{universal-argument}) command followed by the digits of the argument.
+With @kbd{C-u}, you can type the argument digits without holding
+down shift keys. To type a negative argument, start with a minus sign.
+Just a minus sign normally means @minus{}1. @kbd{C-u} works on all terminals.
+
+ @kbd{C-u} followed by a character which is neither a digit nor a minus
+sign has the special meaning of ``multiply by four''. It multiplies the
+argument for the next command by four. @kbd{C-u} twice multiplies it by
+sixteen. Thus, @kbd{C-u C-u C-f} moves forward sixteen characters. This
+is a good way to move forward ``fast'', since it moves about 1/5 of a line
+in the usual size screen. Other useful combinations are @kbd{C-u C-n},
+@kbd{C-u C-u C-n} (move down a good fraction of a screen), @kbd{C-u C-u
+C-o} (make ``a lot'' of blank lines), and @kbd{C-u C-k} (kill four
+lines).@refill
+
+ Some commands care only about whether there is an argument, and not about
+its value. For example, the command @kbd{M-q} (@code{fill-paragraph}) with
+no argument fills text; with an argument, it justifies the text as well.
+(@xref{Filling}, for more information on @kbd{M-q}.) Just @kbd{C-u} is a
+handy way of providing an argument for such commands.
+
+ Some commands use the value of the argument as a repeat count, but do
+something peculiar when there is no argument. For example, the command
+@kbd{C-k} (@code{kill-line}) with argument @var{n} kills @var{n} lines,
+including their terminating newlines. But @kbd{C-k} with no argument is
+special: it kills the text up to the next newline, or, if point is right at
+the end of the line, it kills the newline itself. Thus, two @kbd{C-k}
+commands with no arguments can kill a nonblank line, just like @kbd{C-k}
+with an argument of one. (@xref{Killing}, for more information on
+@kbd{C-k}.)@refill
+
+ A few commands treat a plain @kbd{C-u} differently from an ordinary
+argument. A few others may treat an argument of just a minus sign
+differently from an argument of @minus{}1. These unusual cases will be
+described when they come up; they are always for reasons of convenience
+of use of the individual command.
+
+ To insert multiple copies of a digit, you can type @kbd{C-u
+@var{count} C-u @var{digit}}. The second @kbd{C-u} ends the numeric
+argument, so that the following character always acts a key sequence
+to be executed.
+
+@c section Autoarg Mode
+@ignore
+@cindex Autoarg mode
+ Users of @sc{ascii} keyboards may prefer to use Autoarg mode. Autoarg mode
+means that you don't need to type C-U to specify a numeric argument.
+Instead, you type just the digits. Digits followed by an ordinary
+inserting character are themselves inserted, but digits followed by an
+Escape or Control character serve as an argument to it and are not
+inserted. A minus sign can also be part of an argument, but only at the
+beginning. If you type a minus sign following some digits, both the digits
+and the minus sign are inserted.
+
+ To use Autoarg mode, set the variable @code{autoarg-mode} nonzero.
+@xref{Variables}.
+
+ Autoargument digits echo at the bottom of the screen; the first nondigit
+causes them to be inserted or uses them as an argument. To insert some
+digits and nothing else, you must follow them with a Space and then rub it
+out. C-G cancels the digits, while Delete inserts them all and then rubs
+out the last.
+@end ignore
+
+@node Undo, Minibuffer, Basic, Top
+@chapter Undoing Changes
+@cindex undo
+@cindex mistakes, correcting
+
+ Emacs allows all changes made in the text of a buffer to be undone,
+up to a certain amount of change (8000 characters). Each buffer records
+changes individually, and the undo command always applies to the
+current buffer. Usually each editing command makes a separate entry
+in the undo records, but some commands such as @code{query-replace}
+make many entries, and very simple commands such as self-inserting
+characters are often grouped to make undoing less tedious.
+
+@table @kbd
+@item C-x u
+Undo one batch of changes (usually, one command worth) (@code{undo}).
+@item C-_
+The same.
+@end table
+
+@kindex C-x u
+@kindex C-_
+@findex undo
+ The command @kbd{C-x u} or @kbd{C-_} is how you undo. The first time you give
+this command, it undoes the last change. Point moves to the text
+affected by the undo, so you can see what was undone.
+
+ Consecutive repetitions of the @kbd{C-_} or @kbd{C-x u} commands undo earlier
+and earlier changes, back to the limit of what has been recorded. If all
+recorded changes have already been undone, the undo command prints an error
+message and does nothing.
+
+ Any command other than an undo command breaks the sequence of undo
+commands. Starting at this moment, the previous undo commands are
+considered ordinary changes that can themselves be undone. Thus, to
+redo changes you have undone, type @kbd{C-f} or any other command that
+will have no important effect, and then give more undo commands.
+
+ If you notice that a buffer has been modified accidentally, the easiest
+way to recover is to type @kbd{C-_} repeatedly until the stars disappear
+from the front of the mode line. At this time, all the modifications you
+made have been cancelled. If you do not remember whether you changed the
+buffer deliberately, type @kbd{C-_} once, and when you see the last change
+you made undone, you will remember why you made it. If it was an accident,
+leave it undone. If it was deliberate, redo the change as described in the
+preceding paragraph.
+
+ Whenever an undo command makes the stars disappear from the mode line,
+it means that the buffer contents are the same as they were when the
+file was last read in or saved.
+
+@findex buffer-enable-undo
+ Not all buffers record undo information. Buffers whose names start with
+spaces don't; these buffers are used internally by Emacs and its extensions
+to hold text that users don't normally look at or edit. Also, minibuffers,
+help buffers and documentation buffers don't record undo information.
+Use the command @code{buffer-enable-undo} to enable recording undo information
+in the current buffer.
+
+ As editing continues, undo lists get longer and longer. To prevent
+them from using up all available memory space, garbage collection trims
+back their sizes to thresholds you can set. (For this purpose, the
+``size'' of an undo list measures the cons cells that make up the list,
+plus the strings of deleted text.)
+
+@vindex undo-limit
+@vindex undo-strong-limit
+ Two variables control the range of acceptable sizes: @code{undo-limit}
+and @code{undo-strong-limit}. Normally, the most recent changes are
+kept until their size exceeds @code{undo-limit}; all older changes are
+discarded. But if a change pushes the size above
+@code{undo-strong-limit}, it is discarded as well as all older changes.
+One exception: the most recent set of changes is sacred; garbage
+collection never discards that. (In Emacs versions 18.57 and 18.58,
+these variables are called @code{undo-threshold} and
+@code{undo-high-threshold}.)
+
+ The reason the @code{undo} command has two keys, @kbd{C-x u} and
+@kbd{C-_}, set up to run it is that it is worthy of a single-character
+key, but the way to type @kbd{C-_} on some keyboards is not obvious.
+@kbd{C-x u} is an alternative you can type in the same fashion on any
+terminal.
+
+@node Minibuffer, M-x, Undo, Top
+@chapter The Minibuffer
+@cindex minibuffer
+
+ The @dfn{minibuffer} is the facility used by Emacs commands to read
+arguments more complicated than a single number. Minibuffer arguments can
+be file names, buffer names, Lisp function names, Emacs command names, Lisp
+expressions, and many other things, depending on the command reading the
+argument. The usual Emacs editing commands can be used in the minibuffer
+to edit the argument.
+
+@cindex prompt
+ When the minibuffer is in use, it appears in the echo area, and the
+terminal's cursor moves there. The beginning of the minibuffer line
+displays a @dfn{prompt} which says what kind of input you should supply and
+how it will be used. Often this prompt is derived from the name of the
+command that the argument is for. The prompt normally ends with a colon.
+
+@cindex default argument
+ Sometimes a @dfn{default argument} appears in parentheses after the
+colon; it too is part of the prompt. The default will be used as the
+argument value if you enter an empty argument (e.g., just type @key{RET}).
+For example, commands that read buffer names always show a default, which
+is the name of the buffer that will be used if you type just @key{RET}.
+
+@kindex C-g
+ The simplest way to give a minibuffer argument is to type the text you
+want, terminated by @key{RET} which exits the minibuffer. You can get out
+of the minibuffer, canceling the command that it was for, by typing
+@kbd{C-g}.
+
+ Since the minibuffer uses the screen space of the echo area, it can
+conflict with other ways Emacs customarily uses the echo area. Here is how
+Emacs handles such conflicts:
+
+@itemize @bullet
+@item
+If a command gets an error while you are in the minibuffer, this does
+not cancel the minibuffer. However, the echo area is needed for the
+error message and therefore the minibuffer itself is hidden for a
+while. It comes back after a few seconds, or as soon as you type
+anything.
+
+@item
+If in the minibuffer you use a command whose purpose is to print a
+message in the echo area, such as @kbd{C-x =}, the message is printed
+normally, and the minibuffer is hidden for a while. It comes back
+after a few seconds, or as soon as you type anything.
+
+@item
+Echoing of keystrokes does not take place while the minibuffer is in
+use.
+@end itemize
+
+@menu
+* File: Minibuffer File. Entering file names with the minibuffer.
+* Edit: Minibuffer Edit. How to edit in the minibuffer.
+* Completion:: An abbreviation facility for minibuffer input.
+* Repetition:: Re-executing commands that used the minibuffer.
+@end menu
+
+@node Minibuffer File, Minibuffer Edit, Minibuffer, Minibuffer
+@section Minibuffers for File Names
+
+ Sometimes the minibuffer starts out with text in it. For example, when
+you are supposed to give a file name, the minibuffer starts out containing
+the @dfn{default directory}, which ends with a slash. This is to inform
+you which directory the file will be found in if you do not specify a
+directory. For example, the minibuffer might start out with
+
+@example
+Find File: /u2/emacs/src/
+@end example
+
+@noindent
+where @samp{Find File:@: } is the prompt. Typing @kbd{buffer.c} specifies
+the file @file{/u2/emacs/src/buffer.c}. To find files in nearby
+directories, use @kbd{..}; thus, if you type @kbd{../lisp/simple.el}, the
+file that you visit will be the one named @file{/u2/emacs/lisp/simple.el}.
+Alternatively, you can kill with @kbd{M-@key{DEL}} the directory names you
+don't want (@pxref{Words}).@refill
+
+ You can also type an absolute file name, one starting with a slash or a
+tilde, ignoring the default directory. For example, to find the file
+@file{/etc/termcap}, just type the name, giving
+
+@example
+Find File: /u2/emacs/src//etc/termcap
+@end example
+
+@noindent
+Two slashes in a row are not normally meaningful in Unix file names, but
+they are allowed in GNU Emacs. They mean, ``ignore everything before the
+second slash in the pair.'' Thus, @samp{/u2/emacs/src/} is ignored, and
+you get the file @file{/etc/termcap}.
+
+@vindex insert-default-directory
+ If you set @code{insert-default-directory} to @code{nil}, the default directory
+is not inserted in the minibuffer. This way, the minibuffer starts out
+empty. But the name you type, if relative, is still interpreted with
+respect to the same default directory.
+
+@node Minibuffer Edit, Completion, Minibuffer File, Minibuffer
+@section Editing in the Minibuffer
+
+ The minibuffer is an Emacs buffer (albeit a peculiar one), and the usual
+Emacs commands are available for editing the text of an argument you are
+entering.
+
+ Since @key{RET} in the minibuffer is defined to exit the minibuffer,
+inserting a newline into the minibuffer must be done with @kbd{C-o} or with
+@kbd{C-q @key{LFD}}. (Recall that a newline is really the @key{LFD}
+character.)
+
+ The minibuffer has its own window which always has space on the screen
+but acts as if it were not there when the minibuffer is not in use. When
+the minibuffer is in use, its window is just like the others; you can
+switch to another window with @kbd{C-x o}, edit text in other windows and
+perhaps even visit more files, before returning to the minibuffer to submit
+the argument. You can kill text in another window, return to the
+minibuffer window, and then yank the text to use it in the argument.
+@xref{Windows}.
+
+ There are some restrictions on the use of the minibuffer window, however.
+You cannot switch buffers in it---the minibuffer and its window are
+permanently attached. Also, you cannot split or kill the minibuffer
+window. But you can make it taller in the normal fashion with
+@kbd{C-x ^} (@pxref{Change Window}).
+
+@kindex C-M-v
+ If while in the minibuffer you issue a command that displays help text
+of any sort in another window, then that window is identified as the
+one to scroll if you type @kbd{C-M-v} while in the minibuffer. This
+lasts until you exit the minibuffer. This feature comes into play
+if a completing minibuffer gives you a list of possible completions.
+
+@cindex recursive minibuffer
+ Recursive use of the minibuffer is supported by Emacs. However, it is
+easy to do this by accident (because of autorepeating keyboards, for
+example) and get confused. Therefore, most Emacs commands that use the
+minibuffer refuse to operate if the minibuffer window is selected. If the
+minibuffer is active but you have switched to a different window, recursive
+use of the minibuffer is allowed---if you know enough to try to do this,
+you probably will not get confused.
+
+@vindex enable-recursive-minibuffers
+ If you set the variable @code{enable-recursive-minibuffers} to be
+non-@code{nil}, recursive use of the minibuffer is always allowed.
+
+@node Completion, Repetition, Minibuffer Edit, Minibuffer
+@section Completion
+@cindex completion
+
+ When appropriate, the minibuffer provides a @dfn{completion} facility.
+This means that you type enough of the argument to determine the rest,
+based on Emacs's knowledge of which arguments make sense, and Emacs visibly
+fills in the rest, or as much as can be determined from the part you have
+typed.
+
+ When completion is available, certain keys---@key{TAB}, @key{RET}, and @key{SPC}---are
+redefined to complete an abbreviation present in the minibuffer into a
+longer string that it stands for, by matching it against a set of
+@dfn{completion alternatives} provided by the command reading the argument.
+@kbd{?} is defined to display a list of possible completions of what you
+have inserted.
+
+ For example, when the minibuffer is being used by @kbd{Meta-x} to read
+the name of a command, it is given a list of all available Emacs command
+names to complete against. The completion keys match the text in the
+minibuffer against all the command names, find any additional characters of
+the name that are implied by the ones already present in the minibuffer,
+and add those characters to the ones you have given.
+
+ Case is normally significant in completion, because it is significant in
+most of the names that you can complete (buffer names, file names and
+command names). Thus, @samp{fo} will not complete to @samp{Foo}. When you
+are completing a name in which case does not matter, case may be ignored
+for completion's sake if the program said to do so.
+
+@subsection Completion Example
+
+@kindex TAB
+@findex minibuffer-complete
+ A concrete example may help here. If you type @kbd{Meta-x au @key{TAB}},
+the @key{TAB} looks for alternatives (in this case, command names) that
+start with @samp{au}. There are only two: @code{auto-fill-mode} and
+@code{auto-save-mode}. These are the same as far as @code{auto-}, so the
+@samp{au} in the minibuffer changes to @samp{auto-}.@refill
+
+ If you type @key{TAB} again immediately, there are multiple possibilities
+for the very next character---it could be @samp{s} or @samp{f}---so no more
+characters are added; but a list of all possible completions is displayed
+in another window.
+
+ If you go on to type @kbd{f @key{TAB}}, this @key{TAB} sees
+@samp{auto-f}. The only command name starting this way is
+@code{auto-fill-mode}, so completion inserts the rest of that. You
+now have @samp{auto-fill-mode} in the minibuffer after typing just @kbd{au
+@key{TAB} f @key{TAB}}. Note that @key{TAB} has this effect because in the
+minibuffer it is bound to the function @code{minibuffer-complete} when
+completion is supposed to be done.@refill
+
+@subsection Completion Commands
+
+ Here is a list of all the completion commands, defined in the minibuffer
+when completion is available.
+
+@table @kbd
+@item @key{TAB}
+@c !!! added @* to prevent overfull hbox
+Complete the text in the minibuffer as much as possible@*
+(@code{minibuffer-complete}).
+@item @key{SPC}
+Complete the text in the minibuffer but don't add or fill out more
+than one word (@code{minibuffer-complete-word}).
+@item @key{RET}
+Submit the text in the minibuffer as the argument, possibly completing
+first as described below (@code{minibuffer-complete-and-exit}).
+@item ?
+Print a list of all possible completions of the text in the minibuffer
+(@code{minibuffer-list-completions}).
+@end table
+
+@kindex SPC
+@findex minibuffer-complete-word
+ @key{SPC} completes much like @key{TAB}, but never goes beyond the
+next hyphen or space. If you have @samp{auto-f} in the minibuffer and type
+@key{SPC}, it finds that the completion is @samp{auto-fill-mode}, but it
+stops completing after @samp{fill-}. This gives @samp{auto-fill-}.
+Another @key{SPC} at this point completes all the way to
+@samp{auto-fill-mode}. @key{SPC} in the minibuffer runs the function
+@code{minibuffer-complete-word} when completion is available.@refill
+
+ There are three different ways that @key{RET} can work in completing
+minibuffers, depending on how the argument will be used.
+
+@itemize @bullet
+@item
+@dfn{Strict} completion is used when it is meaningless to give any
+argument except one of the known alternatives. For example, when
+@kbd{C-x k} reads the name of a buffer to kill, it is meaningless to
+give anything but the name of an existing buffer. In strict
+completion, @key{RET} refuses to exit if the text in the minibuffer
+does not complete to an exact match.
+
+@item
+@dfn{Cautious} completion is similar to strict completion, except that
+@key{RET} exits only if the text was an exact match already, not
+needing completion. If the text is not an exact match, @key{RET} does
+not exit, but it does complete the text. If it completes to an exact
+match, a second @key{RET} will exit.
+
+Cautious completion is used for reading file names for files that must
+already exist.
+
+@item
+@dfn{Permissive} completion is used when any string whatever is
+meaningful, and the list of completion alternatives is just a guide.
+For example, when @kbd{C-x C-f} reads the name of a file to visit, any
+file name is allowed, in case you want to create a file. In
+permissive completion, @key{RET} takes the text in the minibuffer
+exactly as given, without completing it.
+@end itemize
+
+ The completion commands display a list of all possible completions in a
+window whenever there is more than one possibility for the very next
+character. Also, typing @kbd{?} explicitly requests such a list. The
+list of completions counts as help text, so @kbd{C-M-v} typed in the
+minibuffer scrolls the list.
+
+@vindex completion-ignored-extensions
+ When completion is done on file names, certain file names are usually
+ignored. The variable @code{completion-ignored-extensions} contains a list
+of strings; a file whose name ends in any of those strings is ignored as a
+possible completion. The standard value of this variable has several
+elements including @code{".o"}, @code{".elc"}, @code{".dvi"} and @code{"~"}.
+The effect is that, for example, @samp{foo} can complete to @samp{foo.c}
+even though @samp{foo.o} exists as well. If the only possible completions
+are files that end in ``ignored'' strings, then they are not ignored.@refill
+
+@vindex completion-auto-help
+ Normally, a completion command that finds the next character is undetermined
+automatically displays a list of all possible completions. If the variable
+@code{completion-auto-help} is set to @code{nil}, this does not happen,
+and you must type @kbd{?} to display the possible completions.
+
+@node Repetition,, Completion, Minibuffer
+@section Repeating Minibuffer Commands
+@cindex command history
+@cindex history of commands
+
+ Every command that uses the minibuffer at least once is recorded on a
+special history list, together with the values of the minibuffer arguments,
+so that you can repeat the command easily. In particular, every
+use of @kbd{Meta-x} is recorded, since @kbd{M-x} uses the minibuffer to
+read the command name.
+
+@findex list-command-history
+@c widecommands
+@table @kbd
+@c !!! following generates acceptable underfull hbox
+@item C-x @key{ESC}
+Re-execute a recent minibuffer command @code{repeat-complex-command}).
+@item M-p
+@c !!! added @* to prevent overfull hbox
+Within @kbd{C-x @key{ESC}}, move to the previous recorded command@*
+(@code{previous-complex-command}).
+@item M-n
+Within @kbd{C-x @key{ESC}}, move to the next (more recent) recorded
+command (@code{next-complex-command}).
+@item M-x list-command-history
+Display the entire command history, showing all the commands
+@kbd{C-x @key{ESC}} can repeat, most recent first.
+@end table
+
+@kindex C-x ESC
+@findex repeat-complex-command
+ @kbd{C-x @key{ESC}} is used to re-execute a recent minibuffer-using
+command. With no argument, it repeats the last such command. A numeric
+argument specifies which command to repeat; 1 means the last one, and
+larger numbers specify earlier ones.
+
+ @kbd{C-x @key{ESC}} works by turning the previous command into a Lisp
+expression and then entering a minibuffer initialized with the text for
+that expression. If you type just @key{RET}, the command is repeated as
+before. You can also change the command by editing the Lisp expression.
+Whatever expression you finally submit is what will be executed. The
+repeated command is added to the front of the command history unless it is
+identical to the most recently executed command already there.
+
+ Even if you don't understand Lisp syntax, it will probably be obvious
+which command is displayed for repetition. If you do not change the text,
+you can be sure it will repeat exactly as before.
+
+@kindex M-n
+@kindex M-p
+@findex next-complex-command
+@findex previous-complex-command
+ Once inside the minibuffer for @kbd{C-x @key{ESC}}, if the command shown
+to you is not the one you want to repeat, you can move around the list of
+previous commands using @kbd{M-n} and @kbd{M-p}. @kbd{M-p} replaces the
+contents of the minibuffer with the next earlier recorded command, and
+@kbd{M-n} replaces them with the next later command. After finding the
+desired previous command, you can edit its expression as usual and then
+resubmit it by typing @key{RET} as usual. Any editing you have done on the
+command to be repeated is lost if you use @kbd{M-n} or @kbd{M-p}.
+
+ @kbd{M-p} is more useful than @kbd{M-n}, since more often you will
+initially request to repeat the most recent command and then decide to
+repeat an older one instead. These keys are specially defined within
+@kbd{C-x @key{ESC}} to run the commands @code{previous-complex-command} and
+@code{next-complex-command}.
+
+@vindex command-history
+ The list of previous minibuffer-using commands is stored as a Lisp list
+in the variable @code{command-history}. Each element is a Lisp expression
+which describes one command and its arguments. Lisp programs can reexecute
+a command by feeding the corresponding @code{command-history} element to
+@code{eval}.
+
+@node M-x, Help, Minibuffer, Top
+@chapter Running Commands by Name
+
+ The Emacs commands that are used often or that must be quick to type are
+bound to keys---short sequences of characters---for convenient use. Other
+Emacs commands that do not need to be brief are not bound to keys; to run
+them, you must refer to them by name.
+
+ A command name is, by convention, made up of one or more words, separated
+by hyphens; for example, @code{auto-fill-mode} or @code{manual-entry}. The
+use of English words makes the command name easier to remember than a key
+made up of obscure characters, even though it is more characters to type.
+Any command can be run by name, even if it is also runnable by keys.
+
+@kindex M-x
+@cindex minibuffer
+ The way to run a command by name is to start with @kbd{M-x}, type the
+command name, and finish it with @key{RET}. @kbd{M-x} uses the minibuffer
+to read the command name. @key{RET} exits the minibuffer and runs the
+command.
+
+ Emacs uses the minibuffer for reading input for many different purposes;
+on this occasion, the string @samp{M-x} is displayed at the beginning of
+the minibuffer as a @dfn{prompt} to remind you that your input should be
+the name of a command to be run. @xref{Minibuffer}, for full information
+on the features of the minibuffer.
+
+ You can use completion to enter the command name. For example, the
+command @code{forward-char} can be invoked by name by typing
+
+@example
+M-x forward-char @key{RET}
+
+@exdent or
+
+M-x fo @key{TAB} c @key{RET}
+@end example
+
+@noindent
+Note that @code{forward-char} is the same command that you invoke with
+the key @kbd{C-f}. Any command (interactively callable function) defined
+in Emacs can be called by its name using @kbd{M-x} whether or not any
+keys are bound to it.
+
+ If you type @kbd{C-g} while the command name is being read, you cancel
+the @kbd{M-x} command and get out of the minibuffer, ending up at top level.
+
+ To pass a numeric argument to the command you are invoking with
+@kbd{M-x}, specify the numeric argument before the @kbd{M-x}. @kbd{M-x}
+passes the argument along to the function which it calls. The argument
+value appears in the prompt while the command name is being read.
+
+ Normally, when describing a command that is run by name, we omit the
+@key{RET} that is needed to terminate the name. Thus we might speak of
+@kbd{M-x auto-fill-mode} rather than @kbd{M-x auto-fill-mode @key{RET}}.
+We mention the @key{RET} only when there is a need to emphasize its
+presence, such as when describing a sequence of input that contains a
+command name and arguments that follow it.
+
+@findex execute-extended-command
+ @kbd{M-x} is defined to run the command @code{execute-extended-command},
+which is responsible for reading the name of another command and invoking
+it.
+
+@node Help, Mark, M-x, Top
+@chapter Help
+@kindex Help
+@cindex help
+@cindex self-documentation
+
+ Emacs provides extensive help features which revolve around a single
+character, @kbd{C-h}. @kbd{C-h} is a prefix key that is used only for
+documentation-printing commands. The characters that you can type after
+@kbd{C-h} are called @dfn{help options}. One help option is @kbd{C-h};
+that is how you ask for help about using @kbd{C-h}.
+
+ @kbd{C-h C-h} prints a list of the possible help options, and then asks
+you to go ahead and type the option. It prompts with a string
+
+@smallexample
+A B C F I K L M N S T V W C-c C-d C-n C-w. Type C-h again for more help:
+@end smallexample
+
+@noindent
+and you should type one of those characters.
+
+ Typing a third @kbd{C-h} displays a description of what the options mean;
+it still waits for you to type an option. To cancel, type @kbd{C-g}.
+
+ Here is a summary of the defined help commands.
+
+@table @kbd
+@item C-h a @var{string} @key{RET}
+@c !!! added @* to prevent overfull hbox
+Display a list of commands whose names contain @var{string}@*
+(@code{command-apropos}).
+@item C-h b
+Display a table of all key bindings in effect now; local bindings of
+the current major mode first, followed by all global bindings
+(@code{describe-bindings}).
+@item C-h c @var{key}
+Print the name of the command that @var{key} runs (@code{describe-key-briefly}).
+@kbd{c} is for `character'. For more extensive information on @var{key},
+use @kbd{C-h k}.
+@item C-h f @var{function} @key{RET}
+Display documentation on the Lisp function named @var{function}
+(@code{describe-function}). Note that commands are Lisp functions, so
+a command name may be used.
+@item C-h i
+Run Info, the program for browsing documentation files (@code{info}).
+The complete Emacs manual is available on-line in Info.
+@item C-h k @var{key}
+Display name and documentation of the command @var{key} runs (@code{describe-key}).
+@item C-h l
+Display a description of the last 100 characters you typed
+(@code{view-lossage}).
+@item C-h m
+Display documentation of the current major mode (@code{describe-mode}).
+@item C-h n
+Display documentation of Emacs changes, most recent first
+(@code{view-emacs-news}).
+@item C-h s
+Display current contents of the syntax table, plus an explanation of
+what they mean (@code{describe-syntax}).
+@item C-h t
+Display the Emacs tutorial (@code{help-with-tutorial}).
+@item C-h v @var{var} @key{RET}
+Display the documentation of the Lisp variable @var{var}
+(@code{describe-variable}).
+@item C-h w @var{command} @key{RET}
+Print which keys run the command named @var{command} (@code{where-is}).
+@end table
+
+@section Documentation for a Key
+
+@kindex C-h c
+@findex describe-key-briefly
+ The most basic @kbd{C-h} options are @kbd{C-h c}
+(@code{describe-key-briefly}) and @w{@kbd{C-h k}} (@code{describe-key}).
+@kbd{C-h c @var{key}} prints in the echo area the name of the command that
+@var{key} is bound to. For example, @kbd{C-h c C-f} prints
+@samp{forward-char}. Since command names are chosen to describe what the
+command does, this is a good way to get a very brief description of what
+@var{key} does.@refill
+
+@kindex C-h k
+@findex describe-key
+ @kbd{C-h k @var{key}} is similar but gives more information. It displays
+the documentation string of the command @var{key} is bound to as well as
+its name. This is too big for the echo area, so a window is used for the
+display.
+
+@section Help by Command or Variable Name
+
+@kindex C-h f
+@findex describe-function
+ @kbd{C-h f} (@code{describe-function}) reads the name of a Lisp function
+using the minibuffer, then displays that function's documentation string
+in a window. Since commands are Lisp functions, you can use this to get
+the documentation of a command that is known by name. For example,
+
+@example
+C-h f auto-fill-mode @key{RET}
+@end example
+
+@noindent
+displays the documentation of @code{auto-fill-mode}. This is the only
+way to see the documentation of a command that is not bound to any key
+(one which you would normally call using @kbd{M-x}).
+
+ @kbd{C-h f} is also useful for Lisp functions that you are planning to
+use in a Lisp program. For example, if you have just written the code
+@code{(make-vector len)} and want to be sure that you are using
+@code{make-vector} properly, type
+@w{@kbd{C-h f make-vector @key{RET}}}. Because @kbd{C-h f} allows
+all function names, not just command names, you may find that some of
+your favorite abbreviations that work in @kbd{M-x} don't work in
+@kbd{C-h f}. An abbreviation may be unique among command names yet
+fail to be unique when other function names are allowed.
+
+ The function name for @kbd{C-h f} to describe has a default which is
+used if you type @key{RET} leaving the minibuffer empty. The default is
+the function called by the innermost Lisp expression in the buffer around
+point, @i{provided} that is a valid, defined Lisp function name. For
+example, if point is located following the text @samp{(make-vector (car
+x)}, the innermost list containing point is the one that starts with
+@samp{(make-vector}, so the default is to describe the function
+@code{make-vector}.
+
+ @kbd{C-h f} is often useful just to verify that you have the right
+spelling for the function name. If @kbd{C-h f} mentions a default in the
+prompt, you have typed the name of a defined Lisp function. If that tells
+you what you want to know, just type @kbd{C-g} to cancel the @kbd{C-h f}
+command and go on editing.
+
+@kindex C-h w
+@findex where-is
+ @kbd{C-h w @var{command} @key{RET}} tells you what keys are bound to
+@var{command}. It prints a list of the keys in the echo area.
+Alternatively, it says that the command is not on any keys, which implies
+that you must use @kbd{M-x} to call it.@refill
+
+@kindex C-h v
+@findex describe-variable
+ @kbd{C-h v} (@code{describe-variable}) is like @kbd{C-h f} but describes
+Lisp variables instead of Lisp functions. Its default is the Lisp symbol
+around or before point, but only if that is the name of a known Lisp
+variable. @xref{Variables}.@refill
+
+@section Apropos
+
+@kindex C-h a
+@findex command-apropos
+@cindex apropos
+ A more sophisticated sort of question to ask is, ``What are the commands
+for working with files?'' For this, type @kbd{C-h a file @key{RET}}, which
+displays a list of all command names that contain @samp{file}, such as
+@code{copy-file}, @code{find-file}, and so on. With each command name
+appears a brief description of how to use the command, and what keys you
+can currently invoke it with. For example, it would say that you can
+invoke @code{find-file} by typing @kbd{C-x C-f}. The @kbd{a} in @kbd{C-h
+a} stands for `Apropos'; @kbd{C-h a} runs the Lisp function
+@code{command-apropos}.@refill
+
+ Because @kbd{C-h a} looks only for functions whose names contain the
+string which you specify, you must use ingenuity in choosing the string.
+If you are looking for commands for killing backwards and @kbd{C-h a
+kill-backwards @key{RET}} doesn't reveal any, don't give up. Try just
+@kbd{kill}, or just @kbd{backwards}, or just @kbd{back}. Be persistent.
+Pretend you are playing Adventure. Also note that you can use a
+regular expression as the argument (@pxref{Regexps}).
+
+ Here is a set of arguments to give to @kbd{C-h a} that covers many
+classes of Emacs commands, since there are strong conventions for naming
+the standard Emacs commands. By giving you a feel for the naming
+conventions, this set should also serve to aid you in developing a
+technique for picking @code{apropos} strings.
+
+@quotation
+char, line, word, sentence, paragraph, region, page, sexp, list, defun,
+buffer, screen, window, file, dir, register, mode,
+beginning, end, forward, backward, next, previous, up, down, search, goto,
+kill, delete, mark, insert, yank, fill, indent, case,
+change, set, what, list, find, view, describe.
+@end quotation
+
+@findex apropos
+ To list all Lisp symbols that contain a match for a regexp, not just
+the ones that are defined as commands, use the command @kbd{M-x apropos}
+instead of @kbd{C-h a}.
+
+@section Other Help Commands
+
+@kindex C-h i
+@findex info
+ @kbd{C-h i} (@code{info}) runs the Info program, which is used for
+browsing through structured documentation files. The entire Emacs manual
+is available within Info. Eventually all the documentation of the GNU
+system will be available. Type @kbd{h} after entering Info to run
+a tutorial on using Info.
+
+@kindex C-h l
+@findex view-lossage
+ If something surprising happens, and you are not sure what commands you
+typed, use @kbd{C-h l} (@code{view-lossage}). @kbd{C-h l} prints the last
+100 command characters you typed in. If you see commands that you don't
+know, you can use @kbd{C-h c} to find out what they do.
+
+@kindex C-h m
+@findex describe-mode
+ Emacs has several major modes, each of which redefines a few keys and
+makes a few other changes in how editing works. @kbd{C-h m} (@code{describe-mode})
+prints documentation on the current major mode, which normally describes
+all the commands that are changed in this mode.
+
+@kindex C-h b
+@findex describe-bindings
+ @kbd{C-h b} (@code{describe-bindings}) and @kbd{C-h s}
+(@code{describe-syntax}) present other information about the current
+Emacs mode. @kbd{C-h b} displays a list of all the key bindings now
+in effect; the local bindings of the current major mode first,
+followed by the global bindings (@pxref{Key Bindings}). @kbd{C-h s}
+displays the contents of the syntax table, with explanations of each
+character's syntax (@pxref{Syntax}).@refill
+
+@kindex C-h n
+@findex view-emacs-news
+@kindex C-h t
+@findex help-with-tutorial
+@kindex C-h C-c
+@findex describe-copying
+@kindex C-h C-d
+@findex describe-distribution
+@kindex C-h C-w
+@findex describe-no-warranty
+ The other @kbd{C-h} options display various files of useful
+information. @w{@kbd{C-h C-w}} displays the full details on the complete
+absence of warranty for GNU Emacs. @kbd{C-h n} (@code{view-emacs-news})
+displays the file @file{emacs/etc/NEWS}, which contains documentation on
+Emacs changes arranged chronologically. @kbd{C-h t}
+(@code{help-with-tutorial}) displays the learn-by-doing Emacs tutorial.
+@kbd{C-h C-c} (@code{describe-copying}) displays the file
+@file{emacs/etc/COPYING}, which tells you the conditions you must obey
+in distributing copies of Emacs. @kbd{C-h C-d}
+(@code{describe-distribution}) displays another file named
+@file{emacs/etc/DISTRIB}, which tells you how you can order a copy of
+the latest version of Emacs.
+
+@node Mark, Killing, Help, Top
+@chapter The Mark and the Region
+@cindex mark
+@cindex region
+
+ There are many Emacs commands which operate on an arbitrary contiguous
+part of the current buffer. To specify the text for such a command to
+operate on, you set the @dfn{mark} at one end of it, and move point to the
+other end. The text between point and the mark is called the @dfn{region}.
+You can move point or the mark to adjust the boundaries of the region. It
+doesn't matter which one is set first chronologically, or which one comes
+earlier in the text.
+
+ Once the mark has been set, it remains until it is set again at another
+place. The mark remains fixed with respect to the preceding character if
+text is inserted or deleted in the buffer. Each Emacs buffer has its own
+mark, so that when you return to a buffer that had been selected
+previously, it has the same mark it had before.
+
+ Many commands that insert text, such as @kbd{C-y} (@code{yank}) and
+@kbd{M-x insert-buffer}, position the mark at one end of the inserted
+text---the opposite end from where point is positioned, so that the region
+contains the text just inserted.
+
+ Aside from delimiting the region, the mark is also useful for remembering
+a spot that you may want to go back to. To make this feature more useful,
+Emacs remembers 16 previous locations of the mark, in the @code{mark ring}.
+
+@menu
+* Setting Mark:: Commands to set the mark.
+* Using Region:: Summary of ways to operate on contents of the region.
+* Marking Objects:: Commands to put region around textual units.
+* Mark Ring:: Previous mark positions saved so you can go back there.
+@end menu
+
+@node Setting Mark, Using Region, Mark, Mark
+@section Setting the Mark
+
+ Here are some commands for setting the mark:
+
+@c WideCommands
+@table @kbd
+@item C-@key{SPC}
+Set the mark where point is (@code{set-mark-command}).
+@item C-@@
+The same.
+@item C-x C-x
+Interchange mark and point (@code{exchange-point-and-mark}).
+@end table
+
+ For example, if you wish to convert part of the buffer to all upper-case,
+you can use the @kbd{C-x C-u} (@code{upcase-region}) command, which operates
+on the text in the region. You can first go to the beginning of the text
+to be capitalized, type @kbd{C-@key{SPC}} to put the mark there, move to
+the end, and then type @kbd{C-x C-u}. Or, you can set the mark at the end
+of the text, move to the beginning, and then type @kbd{C-x C-u}. Most
+commands that operate on the text in the region have the word @code{region}
+in their names.
+
+@kindex C-SPC
+@findex set-mark-command
+ The most common way to set the mark is with the @kbd{C-@key{SPC}} command
+(@code{set-mark-command}). This sets the mark where point is. Then you
+can move point away, leaving the mark behind. It is actually incorrect to
+speak of the character @kbd{C-@key{SPC}}; there is no such character. When
+you type @key{SPC} while holding down @key{CTRL}, what you get on most
+terminals is the character @kbd{C-@@}. This is the key actually bound to
+@code{set-mark-command}. But unless you are unlucky enough to have a
+terminal where typing @kbd{C-@key{SPC}} does not produce @kbd{C-@@}, you
+might as well think of this character as @kbd{C-@key{SPC}}.
+
+@kindex C-x C-x
+@findex exchange-point-and-mark
+ Since terminals have only one cursor, there is no way for Emacs to show
+you where the mark is located. You have to remember. The usual solution
+to this problem is to set the mark and then use it soon, before you forget
+where it is. But you can see where the mark is with the command @w{@kbd{C-x
+C-x}} (@code{exchange-point-and-mark}) which puts the mark where point was and
+point where the mark was. The extent of the region is unchanged, but the
+cursor and point are now at the previous location of the mark.
+
+ @kbd{C-x C-x} is also useful when you are satisfied with the location of
+point but want to move the mark; do @kbd{C-x C-x} to put point there and
+then you can move it. A second use of @kbd{C-x C-x}, if necessary, puts
+the mark at the new location with point back at its original location.
+
+@node Using Region, Marking Objects, Setting Mark, Mark
+@section Operating on the Region
+
+ Once you have created an active region, you can do many things to
+the text in it:
+@itemize @bullet
+@item
+Kill it with @kbd{C-w} (@pxref{Killing}).
+@item
+Save it in a register with @kbd{C-x x} (@pxref{Registers}).
+@item
+Save it in a buffer or a file (@pxref{Accumulating Text}).
+@item
+@c !!! added @* to prevent overfull hbox
+Convert case with @kbd{C-x C-l} or @kbd{C-x C-u}@*
+(@pxref{Case}).
+@item
+Evaluate it as Lisp code with @kbd{M-x eval-region} (@pxref{Lisp Eval}).
+@item
+Fill it as text with @kbd{M-g} (@pxref{Filling}).
+@item
+Print hardcopy with @kbd{M-x print-region} (@pxref{Hardcopy}).
+@item
+@c !!! added @* to prevent overfull hbox
+Indent it with @kbd{C-x @key{TAB}} or @kbd{C-M-\}@*
+(@pxref{Indentation}).
+@end itemize
+
+@node Marking Objects, Mark Ring, Using Region, Mark
+@section Commands to Mark Textual Objects
+
+ There are commands for placing point and the mark around a textual
+object such as a word, list, paragraph or page.
+
+@table @kbd
+@item M-@@
+Set mark after end of next word (@code{mark-word}). This command and
+the following one do not move point.
+@item C-M-@@
+Set mark after end of next Lisp expression (@code{mark-sexp}).
+@item M-h
+Put region around current paragraph (@code{mark-paragraph}).
+@item C-M-h
+Put region around current Lisp defun (@code{mark-defun}).
+@item C-x h
+Put region around entire buffer (@code{mark-whole-buffer}).
+@item C-x C-p
+Put region around current page (@code{mark-page}).
+@end table
+
+@kindex M-@@
+@kindex C-M-@@
+@findex mark-word
+@findex mark-sexp
+@kbd{M-@@} (@code{mark-word}) puts the mark at the end of the next word,
+while @kbd{C-M-@@} (@code{mark-sexp}) puts it at the end of the next Lisp
+expression. These characters allow you to save a little typing or
+redisplay, sometimes.
+
+@kindex M-h
+@kindex C-M-h
+@kindex C-x C-p
+@kindex C-x h
+@findex mark-paragraph
+@findex mark-defun
+@findex mark-page
+@findex mark-whole-buffer
+ Other commands set both point and mark, to delimit an object in the
+buffer. @kbd{M-h} (@code{mark-paragraph}) moves point to the beginning of
+the paragraph that surrounds or follows point, and puts the mark at the end
+of that paragraph (@pxref{Paragraphs}). @kbd{M-h} does all that's
+necessary if you wish to indent, case-convert, or kill a whole paragraph.
+@kbd{C-M-h} (@code{mark-defun}) similarly puts point before and the mark
+after the current or following defun (@pxref{Defuns}). @kbd{C-x C-p}
+(@code{mark-page}) puts point before the current page (or the next or
+previous, according to the argument), and mark at the end (@pxref{Pages}).
+The mark goes after the terminating page delimiter (to include it), while
+point goes after the preceding page delimiter (to exclude it). Finally,
+@w{@kbd{C-x h}} (@code{mark-whole-buffer}) sets up the entire buffer as the
+region, by putting point at the beginning and the mark at the end.
+
+@node Mark Ring,, Marking Objects, Mark
+@section The Mark Ring
+
+@kindex C-u C-SPC
+@cindex mark ring
+@kindex C-u C-@@
+ Aside from delimiting the region, the mark is also useful for remembering
+a spot that you may want to go back to. To make this feature more useful,
+Emacs remembers 16 previous locations of the mark, in the @dfn{mark ring}.
+Most commands that set the mark push the old mark onto this ring. To
+return to a marked location, use @kbd{C-u C-@key{SPC}} (or @kbd{C-u C-@@}); this is
+the command @code{set-mark-command} given a numeric argument. It moves
+point to where the mark was, and restores the mark from the ring of former
+marks. So repeated use of this command moves point to all of the old marks
+on the ring, one by one. The marks you see go to the end of the ring,
+so no marks are lost.
+
+ Each buffer has its own mark ring. All editing commands use the current
+buffer's mark ring. In particular, @kbd{C-u C-@key{SPC}} always stays in
+the same buffer.
+
+ Many commands that can move long distances, such as @kbd{M-<}
+(@code{beginning-of-buffer}), start by setting the mark and saving the old
+mark on the mark ring. This is to make it easier for you to move back
+later. Searches do this except when they do not actually move point. You
+can tell when a command sets the mark because @samp{Mark Set} is printed in
+the echo area.
+
+ Another way of remembering positions so you can go back to them is with
+registers (@pxref{RegPos}).
+
+@vindex mark-ring-max
+ The variable @code{mark-ring-max} is the maximum number of entries to
+keep in the mark ring. If that many entries exist and another one is
+pushed, the last one in the list is discarded. Repeating @kbd{C-u
+C-@key{SPC}} circulates through the limited number of entries that are
+currently in the ring.
+
+@vindex mark-ring
+ The variable @code{mark-ring} holds the mark ring itself, as a list of
+marker objects in the order most recent first. This variable is local
+in every buffer.
+
+@iftex
+@chapter Killing and Moving Text
+
+ @dfn{Killing} means erasing text and copying it into the @dfn{kill ring},
+from which it can be retrieved by @dfn{yanking} it. Some other systems
+that have recently become popular use the terms ``cutting'' and ``pasting''
+for these operations.
+
+ The commonest way of moving or copying text with Emacs is to kill it and
+later yank it in one or more places. This is very safe because all the
+text killed recently is remembered, and it is versatile, because the many
+commands for killing syntactic units can also be used for moving those
+units. There are also other ways of copying text for special purposes.
+
+ Emacs has only one kill ring, so you can kill text in one buffer and yank
+it in another buffer.
+
+@end iftex
+
+@node Killing, Yanking, Mark, Top
+@section Deletion and Killing
+@findex delete-char
+@c ??? Should be backward-delete-char
+@findex delete-backward-char
+
+@cindex killing
+@cindex cutting
+@cindex clipping text
+@cindex deletion
+@kindex C-d
+@kindex DEL
+ Most commands which erase text from the buffer save it so that you can
+get it back if you change your mind, or move or copy it to other parts of
+the buffer. These commands are known as @dfn{kill} commands. The rest of
+the commands that erase text do not save it; they are known as @dfn{delete}
+commands. (This distinction is made only for erasure of text in the
+buffer.)
+
+@c !!! following generates acceptable underfull hbox
+ The delete commands include @kbd{C-d} (@code{delete-char}) and
+@key{DEL} (@code{delete-backward-char}), which delete only one character at
+a time, and those commands that delete only spaces or newlines. Commands
+that can destroy significant amounts of nontrivial data generally kill.
+The commands' names and individual descriptions use the words @samp{kill}
+and @samp{delete} to say which they do. If you do a kill or delete command
+by mistake, you can use the @w{@kbd{C-x u}} (@code{undo}) command to undo it
+(@pxref{Undo}).
+
+@subsection Deletion
+
+@table @kbd
+@item C-d
+Delete next character (@code{delete-char}).
+@item @key{DEL}
+Delete previous character (@code{delete-backward-char}).
+@item M-\
+Delete spaces and tabs around point (@code{delete-horizontal-space}).
+@item M-@key{SPC}
+Delete spaces and tabs around point, leaving one space
+(@code{just-one-space}).
+@item C-x C-o
+Delete blank lines around the current line (@code{delete-blank-lines}).
+@item M-^
+Join two lines by deleting the intervening newline, and any indentation
+following it (@code{delete-indentation}).
+@end table
+
+ The most basic delete commands are @kbd{C-d} (@code{delete-char}) and
+@key{DEL} (@code{delete-backward-char}). @kbd{C-d} deletes the character
+after point, the one the cursor is ``on top of''. Point doesn't move.
+@key{DEL} deletes the character before the cursor, and moves point back.
+Newlines can be deleted like any other characters in the buffer; deleting a
+newline joins two lines. Actually, @kbd{C-d} and @key{DEL} aren't always
+delete commands; if given an argument, they kill instead, since they can
+erase more than one character this way.
+
+@kindex M-\
+@findex delete-horizontal-space
+@kindex M-SPC
+@findex just-one-space
+@kindex C-x C-o
+@findex delete-blank-lines
+@kindex M-^
+@findex delete-indentation
+ The other delete commands are those which delete only formatting
+characters: spaces, tabs and newlines. @kbd{M-\} (@code{delete-horizontal-space})
+deletes all the spaces and tab characters before and after point.
+@kbd{M-@key{SPC}} (@code{just-one-space}) does likewise but leaves a single
+space after point, regardless of the number of spaces that existed
+previously (even zero).
+
+ @kbd{C-x C-o} (@code{delete-blank-lines}) deletes all blank lines after
+the current line, and if the current line is blank deletes all blank lines
+preceding the current line as well (leaving one blank line, the current
+line). @kbd{M-^} (@code{delete-indentation}) joins the current line and
+the previous line, or the current line and the next line if given an
+argument, by deleting a newline and all surrounding spaces, possibly
+leaving a single space. @xref{Indentation,M-^}.
+
+@subsection Killing by Lines
+
+@table @kbd
+@item C-k
+Kill rest of line or one or more lines (@code{kill-line}).
+@end table
+
+@kindex C-k
+@findex kill-line
+ The simplest kill command is @kbd{C-k}. If given at the beginning of a
+line, it kills all the text on the line, leaving it blank. If given on a
+blank line, the blank line disappears. As a consequence, if you go to the
+front of a non-blank line and type @kbd{C-k} twice, the line disappears
+completely.
+
+ More generally, @kbd{C-k} kills from point up to the end of the line,
+unless it is at the end of a line. In that case it kills the newline
+following the line, thus merging the next line into the current one.
+Invisible spaces and tabs at the end of the line are ignored when deciding
+which case applies, so if point appears to be at the end of the line, you
+can be sure the newline will be killed.
+
+ If @kbd{C-k} is given a positive argument, it kills that many lines and
+the newlines that follow them (however, text on the current line before
+point is spared). With a negative argument, it kills back to a number of
+line beginnings. An argument of @minus{}2 means kill back to the second line
+beginning. If point is at the beginning of a line, that line beginning
+doesn't count, so @w{@kbd{C-u - 2 C-k}} with point at the front of a line kills
+the two previous lines.
+
+ @kbd{C-k} with an argument of zero kills all the text before point on the
+current line.
+
+@subsection Other Kill Commands
+@findex kill-line
+@findex kill-region
+@findex kill-word
+@findex backward-kill-word
+@findex kill-sexp
+@findex kill-sentence
+@findex backward-kill-sentence
+@kindex M-d
+@kindex M-DEL
+@kindex C-M-k
+@kindex C-x DEL
+@kindex M-k
+@kindex C-k
+@kindex C-w
+
+@c DoubleWideCommands
+@table @kbd
+@item C-w
+Kill region (from point to the mark) (@code{kill-region}).
+@xref{Words}.
+@item M-d
+Kill word (@code{kill-word}).
+@item M-@key{DEL}
+Kill word backwards (@code{backward-kill-word}).
+@item C-x @key{DEL}
+Kill back to beginning of sentence (@code{backward-kill-sentence}).
+@xref{Sentences}.
+@item M-k
+Kill to end of sentence (@code{kill-sentence}).
+@item C-M-k
+Kill sexp (@code{kill-sexp}). @xref{Lists}.
+@item M-z @var{char}
+Kill up to next occurrence of @var{char} (@code{zap-to-char}).
+@end table
+
+ A kill command which is very general is @kbd{C-w} (@code{kill-region}),
+which kills everything between point and the mark. With this command, you
+can kill any contiguous sequence of characters, if you first set the mark
+at one end of them and go to the other end.
+
+@kindex M-z
+@findex zap-to-char
+ A convenient way of killing is combined with searching: @kbd{M-z}
+(@code{zap-to-char}) reads a character and kills from point up to (but not
+including) the next occurrence of that character in the buffer. If there
+is no next occurrence, killing goes to the end of the buffer. A numeric
+argument acts as a repeat count. A negative argument means to search
+backward and kill text before point.
+
+ Other syntactic units can be killed: words, with @kbd{M-@key{DEL}} and
+@kbd{M-d} (@pxref{Words}); sexps, with @kbd{C-M-k} (@pxref{Lists}); and
+sentences, with @kbd{C-x @key{DEL}} and @kbd{M-k}
+(@pxref{Sentences}).@refill
+
+@node Yanking, Accumulating Text, Killing, Top
+@section Yanking
+@cindex moving text
+@cindex copying text
+@cindex kill ring
+@cindex yanking
+@cindex pasting
+
+ @dfn{Yanking} is getting back text which was killed. This is what some
+systems call ``pasting''. The usual way to move or copy text is to kill it
+and then yank it one or more times.
+
+@table @kbd
+@item C-y
+Yank last killed text (@code{yank}).
+@item M-y
+Replace re-inserted killed text with the previously killed text
+(@code{yank-pop}).
+@item M-w
+Save region as last killed text without actually killing it
+(@code{copy-region-as-kill}).
+@item C-M-w
+Append next kill to last batch of killed text (@code{append-next-kill}).
+@end table
+
+@menu
+* Kill Ring:: Where killed text is stored. Basic yanking.
+* Appending Kills:: Several kills in a row all yank together.
+* Earlier Kills:: Yanking something killed some time ago.
+@end menu
+
+@node Kill Ring, Appending Kills, Yanking, Yanking
+@subsection The Kill Ring
+
+@kindex C-y
+@findex Yank
+ All killed text is recorded in the @dfn{kill ring}, a list of blocks of
+text that have been killed. There is only one kill ring, used in all
+buffers, so you can kill text in one buffer and yank it in another buffer.
+This is the usual way to move text from one file to another.
+(@xref{Accumulating Text}, for some other ways.)
+
+ The command @kbd{C-y} (@code{yank}) reinserts the text of the most recent
+kill. It leaves the cursor at the end of the text. It sets the mark at
+the beginning of the text. @xref{Mark}.
+
+ @kbd{C-u C-y} leaves the cursor in front of the text, and sets the mark
+after it. This is only if the argument is specified with just a @kbd{C-u},
+precisely. Any other sort of argument, including @kbd{C-u} and digits, has
+an effect described below (under ``Yanking Earlier Kills'').
+
+@kindex M-w
+@findex copy-region-as-kill
+ If you wish to copy a block of text, you might want to use @kbd{M-w}
+(@code{copy-region-as-kill}), which copies the region into the kill ring
+without removing it from the buffer. This is approximately equivalent to
+@kbd{C-w} followed by @kbd{C-y}, except that @kbd{M-w} does not mark the
+buffer as ``modified'' and does not temporarily change the screen.
+
+@node Appending Kills, Earlier Kills, Kill Ring, Yanking
+@subsection Appending Kills
+
+@cindex television
+ Normally, each kill command pushes a new block onto the kill ring.
+However, two or more kill commands in a row combine their text into a
+single entry, so that a single @kbd{C-y} gets it all back as it was before
+it was killed. This means that you don't have to kill all the text in one
+command; you can keep killing line after line, or word after word, until
+you have killed it all, and you can still get it all back at once. (Thus
+we join television in leading people to kill thoughtlessly.)
+
+ Commands that kill forward from point add onto the end of the previous
+killed text. Commands that kill backward from point add onto the
+beginning. This way, any sequence of mixed forward and backward kill
+commands puts all the killed text into one entry without rearrangement.
+Numeric arguments do not break the sequence of appending kills. For
+example, suppose the buffer contains
+
+@example
+This is the first
+line of sample text
+and here is the third.
+@end example
+
+@noindent
+with point at the beginning of the second line. If you type @kbd{C-k C-u 2
+M-@key{DEL} C-k}, the first @kbd{C-k} kills the text @samp{line of sample
+text}, @kbd{C-u 2 M-@key{DEL}} kills @samp{the first} with the newline that
+followed it, and the second @kbd{C-k} kills the newline after the second
+line. The result is that the buffer contains @samp{This is and here is the
+third.} and a single kill entry contains @samp{the first@key{RET}line of
+sample text@key{RET}}---all the killed text, in its original order.
+
+@kindex C-M-w
+@findex append-next-kill
+ If a kill command is separated from the last kill command by other
+commands (not just numeric arguments), it starts a new entry on the kill
+ring. But you can force it to append by first typing the command
+@kbd{C-M-w} (@code{append-next-kill}) in front of it. The @kbd{C-M-w}
+tells the following command, if it is a kill command, to append the text it
+kills to the last killed text, instead of starting a new entry. With
+@kbd{C-M-w}, you can kill several separated pieces of text and accumulate
+them to be yanked back in one place.@refill
+
+@node Earlier Kills,, Appending Kills, Yanking
+@subsection Yanking Earlier Kills
+
+@kindex M-y
+@findex yank-pop
+ To recover killed text that is no longer the most recent kill, you need
+the @kbd{Meta-y} (@code{yank-pop}) command. @kbd{M-y} can be used only
+after a @kbd{C-y} or another @kbd{M-y}. It takes the text previously
+yanked and replaces it with the text from an earlier kill. So, to recover
+the text of the next-to-the-last kill, you first use @kbd{C-y} to recover
+the last kill, and then use @kbd{M-y} to replace it with the previous
+kill.@refill
+
+ You can think in terms of a ``last yank'' pointer which points at an item
+in the kill ring. Each time you kill, the ``last yank'' pointer moves to
+the newly made item at the front of the ring. @kbd{C-y} yanks the item
+which the ``last yank'' pointer points to. @kbd{M-y} moves the ``last
+yank'' pointer to a different item, and the text in the buffer changes to
+match. Enough @kbd{M-y} commands can move the pointer to any item in the
+ring, so you can get any item into the buffer. Eventually the pointer
+reaches the end of the ring; the next @kbd{M-y} moves it to the first item
+again.
+
+ Yanking moves the ``last yank'' pointer around the ring, but it does not
+change the order of the entries in the ring, which always runs from the
+most recent kill at the front to the oldest one still remembered.
+
+ @kbd{M-y} can take a numeric argument, which tells it how many items to
+advance the ``last yank'' pointer by. A negative argument moves the
+pointer toward the front of the ring; from the front of the ring, it moves
+to the last entry and starts moving forward from there.
+
+ Once the text you are looking for is brought into the buffer, you can
+stop doing @kbd{M-y} commands and it will stay there. It's just a copy of
+the kill ring item, so editing it in the buffer does not change what's in
+the ring. As long as no new killing is done, the ``last yank'' pointer
+remains at the same place in the kill ring, so repeating @kbd{C-y} will
+yank another copy of the same old kill.
+
+ If you know how many @kbd{M-y} commands it would take to find the
+text you want, you can yank that text in one step using @kbd{C-y} with
+a numeric argument. @kbd{C-y} with an argument greater than one
+restores the text the specified number of entries back in the kill
+ring. Thus, @kbd{C-u 2 C-y} gets the next to the last block of killed
+text. It is equivalent to @kbd{C-y M-y}. @kbd{C-y} with a numeric
+argument starts counting from the ``last yank'' pointer, and sets the
+``last yank'' pointer to the entry that it yanks.
+
+@vindex kill-ring-max
+ The length of the kill ring is controlled by the variable
+@code{kill-ring-max}; no more than that many blocks of killed text are
+saved.
+
+@node Accumulating Text, Rectangles, Yanking, Top
+@section Accumulating Text
+@kindex C-x a
+@findex append-to-buffer
+@findex prepend-to-buffer
+@findex copy-to-buffer
+@findex append-to-file
+
+ Usually we copy or move text by killing it and yanking it, but there are
+other ways that are useful for copying one block of text in many places, or
+for copying many scattered blocks of text into one place.
+
+ You can accumulate blocks of text from scattered locations either into a
+buffer or into a file if you like. These commands are described here. You
+can also use Emacs registers for storing and accumulating text.
+@xref{Registers}.
+
+@table @kbd
+@item C-x a
+Append region to contents of specified buffer (@code{append-to-buffer}).
+@item M-x prepend-to-buffer
+Prepend region to contents of specified buffer.
+@item M-x copy-to-buffer
+Copy region into specified buffer, deleting that buffer's old contents.
+@item M-x insert-buffer
+Insert contents of specified buffer into current buffer at point.
+@item M-x append-to-file
+Append region to contents of specified file, at the end.
+@end table
+
+ To accumulate text into a buffer, use the command @kbd{C-x a @var{buffername}}
+(@code{append-to-buffer}), which inserts a copy of the region into the
+buffer @var{buffername}, at the location of point in that buffer. If there
+is no buffer with that name, one is created. If you append text into a
+buffer which has been used for editing, the copied text goes into the
+middle of the text of the buffer, wherever point happens to be in it.
+
+ Point in that buffer is left at the end of the copied text, so successive
+uses of @kbd{C-x a} accumulate the text in the specified buffer in the same
+order as they were copied. Strictly speaking, @kbd{C-x a} does not always
+append to the text already in the buffer; but if @kbd{C-x a} is the only
+command used to alter a buffer, it does always append to the existing text
+because point is always at the end.
+
+ @kbd{M-x prepend-to-buffer} is just like @kbd{C-x a} except that point in
+the other buffer is left before the copied text, so successive prependings
+add text in reverse order. @kbd{M-x copy-to-buffer} is similar except that
+any existing text in the other buffer is deleted, so the buffer is left
+containing just the text newly copied into it.
+
+ You can retrieve the accumulated text from that buffer with @kbd{M-x
+insert-buffer}; this too takes @var{buffername} as an argument. It inserts
+a copy of the text in buffer @var{buffername} into the selected buffer.
+You could alternatively select the other buffer for editing, perhaps moving
+text from it by killing or with @kbd{C-x a}. @xref{Buffers}, for
+background information on buffers.
+
+ Instead of accumulating text within Emacs, in a buffer, you can append
+text directly into a file with @kbd{M-x append-to-file}, which takes
+@var{file-name} as an argument. It adds the text of the region to the end
+of the specified file. The file is changed immediately on disk. This
+command is normally used with files that are @i{not} being visited in
+Emacs. Using it on a file that Emacs is visiting can produce confusing
+results, because the text inside Emacs for that file will not change
+while the file itself changes.
+
+@node Rectangles, Registers, Accumulating Text, Top
+@section Rectangles
+@cindex rectangles
+
+ The rectangle commands affect rectangular areas of the text: all the
+characters between a certain pair of columns, in a certain range of lines.
+Commands are provided to kill rectangles, yank killed rectangles, clear
+them out, or delete them. Rectangle commands are useful with text in
+multicolumnar formats, such as perhaps code with comments at the right,
+or for changing text into or out of such formats.
+
+ When you must specify a rectangle for a command to work on, you do
+it by putting the mark at one corner and point at the opposite corner.
+The rectangle thus specified is called the @dfn{region-rectangle}
+because it is controlled about the same way the region is controlled.
+But remember that a given combination of point and mark values can be
+interpreted either as specifying a region or as specifying a
+rectangle; it is up to the command that uses them to choose the
+interpretation.
+
+@table @kbd
+@item M-x delete-rectangle
+Delete the text of the region-rectangle, moving any following text on
+each line leftward to the left edge of the region-rectangle.
+@item M-x kill-rectangle
+Similar, but also save the contents of the region-rectangle as the
+``last killed rectangle''.
+@item M-x yank-rectangle
+Yank the last killed rectangle with its upper left corner at point.
+@item M-x open-rectangle
+Insert blank space to fill the space of the region-rectangle.
+The previous contents of the region-rectangle are pushed rightward.
+@item M-x clear-rectangle
+Clear the region-rectangle by replacing its contents with spaces.
+@end table
+
+ The rectangle operations fall into two classes: commands deleting and
+moving rectangles, and commands for blank rectangles.
+
+@findex delete-rectangle
+@findex kill-rectangle
+ There are two ways to get rid of the text in a rectangle: you can discard
+the text (delete it) or save it as the ``last killed'' rectangle. The
+commands for these two ways are @kbd{M-x delete-rectangle} and @kbd{M-x
+kill-rectangle}. In either case, the portion of each line that falls inside
+the rectangle's boundaries is deleted, causing following text (if any) on
+the line to move left.
+
+ Note that ``killing'' a rectangle is not killing in the usual sense; the
+rectangle is not stored in the kill ring, but in a special place that
+can only record the most recent rectangle killed. This is because yanking
+a rectangle is so different from yanking linear text that different yank
+commands have to be used and yank-popping is hard to make sense of.
+
+ Inserting a rectangle is the opposite of deleting one. All you need to
+specify is where to put the upper left corner; that is done by putting
+point there. The rectangle's first line is inserted there, the rectangle's
+second line is inserted at a point one line vertically down, and so on.
+The number of lines affected is determined by the height of the saved
+rectangle.
+
+@findex yank-rectangle
+ To insert the last killed rectangle, type @kbd{M-x yank-rectangle}.
+This can be used to convert single-column lists into double-column
+lists; kill the second half of the list as a rectangle and then
+yank it beside the first line of the list.
+
+@findex open-rectangle
+@findex clear-rectangle
+ There are two commands for working with blank rectangles: @kbd{M-x
+clear-rectangle} to blank out existing text, and @kbd{M-x open-rectangle}
+to insert a blank rectangle. Clearing a rectangle is equivalent to
+deleting it and then inserting as blank rectangle of the same size.
+
+ Rectangles can also be copied into and out of registers.
+@xref{RegRect,,Rectangle Registers}.
+
+@node Registers, Display, Rectangles, Top
+@chapter Registers
+@cindex registers
+
+ Emacs @dfn{registers} are places you can save text or positions for
+later use. Text saved in a register can be copied into the buffer
+once or many times; a position saved in a register is used by moving
+point to that position. Rectangles can also be copied into and out of
+registers (@pxref{Rectangles}).
+
+ Each register has a name, which is a single character. A register can
+store either a piece of text or a position or a rectangle, but only one
+thing at any given time. Whatever you store in a register remains
+there until you store something else in that register.
+
+@menu
+* RegPos:: Saving positions in registers.
+* RegText:: Saving text in registers.
+* RegRect:: Saving rectangles in registers.
+@end menu
+
+@table @kbd
+@item M-x view-register @key{RET} @var{r}
+Display a description of what register @var{r} contains.
+@end table
+
+@findex view-register
+ @kbd{M-x view-register} reads a register name as an argument and then
+displays the contents of the specified register.
+
+@node RegPos, RegText, Registers, Registers
+@section Saving Positions in Registers
+
+ Saving a position records a spot in a buffer so that you can move
+back there later. Moving to a saved position reselects the buffer
+and moves point to the spot.
+
+@table @kbd
+@item C-x / @var{r}
+Save location of point in register @var{r} (@code{point-to-register}).
+@item C-x j @var{r}
+Jump to the location saved in register @var{r} (@code{register-to-point}).
+@end table
+
+@kindex C-x /
+@findex point-to-register
+ To save the current location of point in a register, choose a name
+@var{r} and type @kbd{C-x / @var{r}}. The register @var{r} retains
+the location thus saved until you store something else in that
+register.@refill
+
+@kindex C-x j
+@findex register-to-point
+ The command @kbd{C-x j @var{r}} moves point to the location recorded
+in register @var{r}. The register is not affected; it continues to
+record the same location. You can jump to the same position using the
+same register any number of times.
+
+@node RegText, RegRect, RegPos, Registers
+@section Saving Text in Registers
+
+ When you want to insert a copy of the same piece of text frequently, it
+may be impractical to use the kill ring, since each subsequent kill moves
+the piece of text further down on the ring. It becomes hard to keep track
+of what argument is needed to retrieve the same text with @kbd{C-y}. An
+alternative is to store the text in a register with @kbd{C-x x}
+(@code{copy-to-register}) and then retrieve it with @kbd{C-x g}
+(@code{insert-register}).
+
+@table @kbd
+@item C-x x @var{r}
+Copy region into register @var{r} (@code{copy-to-register}).
+@item C-x g @var{r}
+Insert text contents of register @var{r} (@code{insert-register}).
+@end table
+
+@kindex C-x x
+@kindex C-x g
+@findex copy-to-register
+@findex insert-register
+ @kbd{C-x x @var{r}} stores a copy of the text of the region into the
+register named @var{r}. Given a numeric argument, @kbd{C-x x} deletes the
+text from the buffer as well.
+
+ @kbd{C-x g @var{r}} inserts in the buffer the text from register @var{r}.
+Normally it leaves point before the text and places the mark after, but
+with a numeric argument it puts point after the text and the mark before.
+
+@node RegRect,, RegText, Registers
+@section Saving Rectangles in Registers
+
+ A register can contain a rectangle instead of linear text. The rectangle
+is represented as a list of strings. @xref{Rectangles}, for basic
+information on rectangles and how rectangles in the buffer are specified.
+
+@table @kbd
+@c !!! following generates acceptable underfull hbox
+@item C-x r @var{r}
+Copy the region-rectangle into register @var{r} (@code{copy-region-to-rectangle}).
+With numeric argument, delete it as well.
+@item C-x g @var{r}
+Insert the rectangle stored in register @var{r} (if it contains a
+rectangle) (@code{insert-register}).
+@end table
+
+ The @kbd{C-x g} command inserts linear text if the register contains
+that, or inserts a rectangle if the register contains one.
+
+@node Display, Search, Registers, Top
+@chapter Controlling the Display
+
+ Since only part of a large buffer fits in the window, Emacs tries to show
+the part that is likely to be interesting. The display control commands
+allow you to specify which part of the text you want to see.
+
+@table @kbd
+@item C-l
+Clear screen and redisplay, scrolling the selected window to center
+point vertically within it (@code{recenter}).
+@item C-v
+Scroll forward (a windowful or a specified number of lines) (@code{scroll-up}).
+@item M-v
+Scroll backward (@code{scroll-down}).
+@item @var{arg} C-l
+Scroll so point is on line @var{arg} (@code{recenter}).
+@item C-x <
+Scroll text in current window to the left (@code{scroll-left}).
+@item C-x >
+Scroll to the right (@code{scroll-right}).
+@item C-x $
+Make deeply indented lines invisible (@code{set-selective-display}).
+@end table
+
+@menu
+* Scrolling:: Moving text up and down in a window.
+* Horizontal Scrolling:: Moving text left and right in a window.
+* Selective Display:: Hiding lines with lots of indentation.
+* Display Vars:: Information on variables for customizing display.
+@end menu
+
+@node Scrolling, Horizontal Scrolling, Display, Display
+@section Scrolling
+
+ If a buffer contains text that is too large to fit entirely within a
+window that is displaying the buffer, Emacs shows a contiguous section of
+the text. The section shown always contains point.
+
+@cindex scrolling
+ @dfn{Scrolling} means moving text up or down in the window so that
+different parts of the text are visible. Scrolling forward means that text
+moves up, and new text appears at the bottom. Scrolling backward moves
+text down and new text appears at the top.
+
+ Scrolling happens automatically if you move point past the bottom or top
+of the window. You can also explicitly request scrolling with the commands
+in this section.
+
+@ifinfo
+@table @kbd
+@item C-l
+Clear screen and redisplay, scrolling the selected window to center
+point vertically within it (@code{recenter}).
+@item C-v
+Scroll forward (a windowful or a specified number of lines) (@code{scroll-up}).
+@item M-v
+Scroll backward (@code{scroll-down}).
+@item @var{arg} C-l
+Scroll so point is on line @var{arg} (@code{recenter}).
+@end table
+@end ifinfo
+
+@kindex C-l
+@findex recenter
+ The most basic scrolling command is @kbd{C-l} (@code{recenter}) with no
+argument. It clears the entire screen and redisplays all windows. In
+addition, the selected window is scrolled so that point is halfway down
+from the top of the window.
+
+@kindex C-v
+@kindex M-v
+@findex scroll-up
+@findex scroll-down
+ The scrolling commands @kbd{C-v} and @kbd{M-v} let you move all the text
+in the window up or down a few lines. @kbd{C-v} (@code{scroll-up}) with an
+argument shows you that many more lines at the bottom of the window, moving
+the text and point up together as @kbd{C-l} might. @kbd{C-v} with a
+negative argument shows you more lines at the top of the window.
+@kbd{Meta-v} (@code{scroll-down}) is like @kbd{C-v}, but moves in the
+opposite direction.@refill
+
+@vindex next-screen-context-lines
+ To read the buffer a windowful at a time, use @kbd{C-v} with no argument.
+It takes the last two lines at the bottom of the window and puts them at
+the top, followed by nearly a whole windowful of lines not previously
+visible. If point was in the text scrolled off the top, it moves to the
+new top of the window. @kbd{M-v} with no argument moves backward with
+overlap similarly. The number of lines of overlap across a @kbd{C-v} or
+@kbd{M-v} is controlled by the variable @code{next-screen-context-lines}; by
+default, it is two.
+
+ Another way to do scrolling is with @kbd{C-l} with a numeric argument.
+@kbd{C-l} does not clear the screen when given an argument; it only scrolls
+the selected window. With a positive argument @var{n}, it repositions text
+to put point @var{n} lines down from the top. An argument of zero puts
+point on the very top line. Point does not move with respect to the text;
+rather, the text and point move rigidly on the screen. @kbd{C-l} with a
+negative argument puts point that many lines from the bottom of the window.
+For example, @kbd{C-u - 1 C-l} puts point on the bottom line, and @kbd{C-u
+- 5 C-l} puts it five lines from the bottom. Just @kbd{C-u} as argument,
+as in @kbd{C-u C-l}, scrolls point to the center of the screen.
+
+@vindex scroll-step
+ Scrolling happens automatically if point has moved out of the visible
+portion of the text when it is time to display. Usually the scrolling is
+done so as to put point vertically centered within the window. However, if
+the variable @code{scroll-step} has a nonzero value, an attempt is made to
+scroll the buffer by that many lines; if that is enough to bring point back
+into visibility, that is what is done.
+
+@node Horizontal Scrolling,, Scrolling, Display
+@section Horizontal Scrolling
+
+@ifinfo
+@table @kbd
+@item C-x <
+Scroll text in current window to the left (@code{scroll-left}).
+@item C-x >
+Scroll to the right (@code{scroll-right}).
+@end table
+@end ifinfo
+
+@kindex C-x <
+@kindex C-x >
+@findex scroll-left
+@findex scroll-right
+@cindex horizontal scrolling
+ The text in a window can also be scrolled horizontally. This means that
+each line of text is shifted sideways in the window, and one or more
+characters at the beginning of each line are not displayed at all. When a
+window has been scrolled horizontally in this way, text lines are truncated
+rather than continued (@pxref{Continuation Lines}), with a @samp{$} appearing
+in the first column when there is text truncated to the left, and in the
+last column when there is text truncated to the right.
+
+ The command @kbd{C-x <} (@code{scroll-left}) scrolls the selected window
+to the left by @var{n} columns with argument @var{n}. With no argument, it scrolls
+by almost the full width of the window (two columns less, to be precise).
+@kbd{C-x >} (@code{scroll-right}) scrolls similarly to the right.
+The window cannot be scrolled any farther to the right once it is
+displaying normally (with each line starting at the window's left margin);
+attempting to do so has no effect.
+
+@node Selective Display, Display Vars, Display, Display
+@section Selective Display
+@findex set-selective-display
+@kindex C-x $
+
+ Emacs has the ability to hide lines indented more than a certain number
+of columns (you specify how many columns). You can use this to get an
+overview of a part of a program.
+
+ To hide lines, type @kbd{C-x $} (@code{set-selective-display}) with a
+numeric argument @var{n}. (@xref{Arguments}, for how to give the
+argument.) Then lines with at least @var{n} columns of indentation
+disappear from the screen. The only indication of their presence is that
+three dots (@samp{@dots{}}) appear at the end of each visible line that is
+followed by one or more invisible ones.@refill
+
+ The invisible lines are still present in the buffer, and most editing
+commands see them as usual, so it is very easy to put point in the middle
+of invisible text. When this happens, the cursor appears at the end of the
+previous line, after the three dots. If point is at the end of the visible
+line, before the newline that ends it, the cursor appears before the three
+dots.
+
+ The commands @kbd{C-n} and @kbd{C-p} move across the invisible lines as if they
+were not there.
+
+ To make everything visible again, type @kbd{C-x $} with no argument.
+
+@node Display Vars,, Selective Display, Display
+@section Variables Controlling Display
+
+ This section contains information for customization only. Beginning
+users should skip it.
+
+@vindex mode-line-inverse-video
+ The variable @code{mode-line-inverse-video} controls whether the mode
+line is displayed in inverse video (assuming the terminal supports it);
+@code{nil} means don't do so. @xref{Mode Line}.
+
+@vindex inverse-video
+ If the variable @code{inverse-video} is non-@code{nil}, Emacs attempts
+to invert all the lines of the display from what they normally are.
+
+@vindex visible-bell
+ If the variable @code{visible-bell} is non-@code{nil}, Emacs attempts
+to make the whole screen blink when it would normally make an audible bell
+sound. This variable has no effect if your terminal does not have a way
+to make the screen blink.@refill
+
+@vindex no-redraw-on-reenter
+ When you reenter Emacs after suspending, Emacs normally clears the screen
+and redraws the entire display. On some terminals with more than one page
+of memory, it is possible to arrange the termcap entry so that the
+@samp{ti} and @samp{te} strings (output to the terminal when Emacs is
+entered and exited, respectively) switch between pages of memory so as to
+use one page for Emacs and another page for other output. Then you might
+want to set the variable @code{no-redraw-on-reenter} non-@code{nil} so that
+Emacs will assume, when resumed, that the screen page it is using still
+contains what Emacs last wrote there.
+
+@vindex echo-keystrokes
+ The variable @code{echo-keystrokes} controls the echoing of multi-character
+keys; its value is the number of seconds of pause required to cause echoing
+to start, or zero meaning don't echo at all. @xref{Echo Area}.
+
+@vindex ctl-arrow
+ If the variable @code{ctl-arrow} is @code{nil}, control characters in the
+buffer are displayed with octal escape sequences, all except newline and
+tab. Altering the value of @code{ctl-arrow} makes it local to the current
+buffer; until that time, the default value is in effect. The default is
+initially @code{t}. @xref{Locals}.
+
+@vindex tab-width
+ Normally, a tab character in the buffer is displayed as whitespace which
+extends to the next display tab stop position, and display tab stops come
+at intervals equal to eight spaces. The number of spaces per tab is
+controlled by the variable @code{tab-width}, which is made local by
+changing it, just like @code{ctl-arrow}. Note that how the tab character
+in the buffer is displayed has nothing to do with the definition of
+@key{TAB} as a command.
+
+@vindex selective-display-ellipses
+ If you set the variable @code{selective-display-ellipses} to @code{nil},
+the three dots do not appear at the end of a line that precedes invisible
+lines. Then there is no visible indication of the invisible lines.
+This variable too becomes local automatically when set.
+
+@node Search, Fixit, Display, Top
+@chapter Searching and Replacement
+@cindex searching
+
+ Like other editors, Emacs has commands for searching for occurrences of
+a string. The principal search command is unusual in that it is
+@dfn{incremental}; it begins to search before you have finished typing the
+search string. There are also nonincremental search commands more like
+those of other editors.
+
+ Besides the usual @code{replace-string} command that finds all
+occurrences of one string and replaces them with another, Emacs has a fancy
+replacement command called @code{query-replace} which asks interactively
+which occurrences to replace.
+
+@menu
+* Incremental Search:: Search happens as you type the string.
+* Nonincremental Search:: Specify entire string and then search.
+* Word Search:: Search for sequence of words.
+* Regexp Search:: Search for match for a regexp.
+* Regexps:: Syntax of regular expressions.
+* Search Case:: To ignore case while searching, or not.
+* Replace:: Search, and replace some or all matches.
+* Other Repeating Search:: Operating on all matches for some regexp.
+@end menu
+
+@node Incremental Search, Nonincremental Search, Search, Search
+@section Incremental Search
+
+ An incremental search begins searching as soon as you type the first
+character of the search string. As you type in the search string, Emacs
+shows you where the string (as you have typed it so far) would be found.
+When you have typed enough characters to identify the place you want, you
+can stop. Depending on what you will do next, you may or may not need to
+terminate the search explicitly with an @key{ESC} first.
+
+@c WideCommands
+@table @kbd
+@item C-s
+Incremental search forward (@code{isearch-forward}).
+@item C-r
+Incremental search backward (@code{isearch-backward}).
+@end table
+
+@kindex C-s
+@kindex C-r
+@findex isearch-forward
+@findex isearch-backward
+ @kbd{C-s} starts an incremental search. @kbd{C-s} reads characters from
+the keyboard and positions the cursor at the first occurrence of the
+characters that you have typed. If you type @kbd{C-s} and then @kbd{F},
+the cursor moves right after the first @samp{F}. Type an @kbd{O}, and see
+the cursor move to after the first @samp{FO}. After another @kbd{O}, the
+cursor is after the first @samp{FOO} after the place where you started the
+search. Meanwhile, the search string @samp{FOO} has been echoed in the
+echo area.@refill
+
+ The echo area display ends with three dots when actual searching is going
+on. When search is waiting for more input, the three dots are removed.
+(On slow terminals, the three dots are not displayed.)
+
+ If you make a mistake in typing the search string, you can erase
+characters with @key{DEL}. Each @key{DEL} cancels the last character of
+search string. This does not happen until Emacs is ready to read another
+input character; first it must either find, or fail to find, the character
+you want to erase. If you do not want to wait for this to happen, use
+@kbd{C-g} as described below.@refill
+
+ When you are satisfied with the place you have reached, you can type
+@key{ESC}, which stops searching, leaving the cursor where the search
+brought it. Also, any command not specially meaningful in searches stops
+the searching and is then executed. Thus, typing @kbd{C-a} would exit the
+search and then move to the beginning of the line. @key{ESC} is necessary
+only if the next command you want to type is a printing character,
+@key{DEL}, @key{ESC}, or another control character that is special within
+searches (@kbd{C-q}, @kbd{C-w}, @kbd{C-r}, @kbd{C-s} or @kbd{C-y}).
+
+ Sometimes you search for @samp{FOO} and find it, but not the one you
+expected to find. There was a second @samp{FOO} that you forgot about,
+before the one you were looking for. In this event, type another @kbd{C-s}
+to move to the next occurrence of the search string. This can be done any
+number of times. If you overshoot, you can cancel some @kbd{C-s}
+characters with @key{DEL}.
+
+ After you exit a search, you can search for the same string again by
+typing just @kbd{C-s C-s}: the first @kbd{C-s} is the key that invokes
+incremental search, and the second @kbd{C-s} means ``search again''.
+
+ If your string is not found at all, the echo area says @samp{Failing
+I-Search}. The cursor is after the place where Emacs found as much of your
+string as it could. Thus, if you search for @samp{FOOT}, and there is no
+@samp{FOOT}, you might see the cursor after the @samp{FOO} in @samp{FOOL}.
+At this point there are several things you can do. If your string was
+mistyped, you can rub some of it out and correct it. If you like the place
+you have found, you can type @key{ESC} or some other Emacs command to
+``accept what the search offered''. Or you can type @kbd{C-g}, which
+removes from the search string the characters that could not be found (the
+@samp{T} in @samp{FOOT}), leaving those that were found (the @samp{FOO} in
+@samp{FOOT}). A second @kbd{C-g} at that point cancels the search
+entirely, returning point to where it was when the search started.
+
+ If a search is failing and you ask to repeat it by typing another
+@kbd{C-s}, it starts again from the beginning of the buffer. Repeating
+a failing reverse search with @kbd{C-r} starts again from the end. This
+is called @dfn{wrapping around}. @samp{Wrapped} appears in the search
+prompt once this has happened.
+
+@cindex quitting (in search)
+ The @kbd{C-g} ``quit'' character does special things during searches;
+just what it does depends on the status of the search. If the search has
+found what you specified and is waiting for input, @kbd{C-g} cancels the
+entire search. The cursor moves back to where you started the search. If
+@kbd{C-g} is typed when there are characters in the search string that have
+not been found---because Emacs is still searching for them, or because it
+has failed to find them---then the search string characters which have not
+been found are discarded from the search string. With them gone, the
+search is now successful and waiting for more input, so a second @kbd{C-g}
+will cancel the entire search.
+
+ To search for a control character such as @kbd{C-s} or @key{DEL} or
+@key{ESC}, you must quote it by typing @kbd{C-q} first. This function
+of @kbd{C-q} is analogous to its meaning as an Emacs command: it causes
+the following character to be treated the way a graphic character would
+normally be treated in the same context. You can also specify a quoted
+character in octal while searching, just as you can for insertion.
+@xref{Basic}.
+
+ You can change to searching backwards with @kbd{C-r}. If a search fails
+because the place you started was too late in the file, you should do this.
+Repeated @w{@kbd{C-r}} keeps looking for more occurrences backwards. A
+@kbd{C-s} starts going forwards again. @kbd{C-r} in a search can be cancelled
+with @key{DEL}.
+
+ If you know initially that you want to search backwards, you can
+use @kbd{C-r} instead of @kbd{C-s} to start the search, because @kbd{C-r}
+is also a key running a command (@code{isearch-backward}) to search
+backward.
+
+ The characters @kbd{C-y} and @kbd{C-w} can be used in incremental search
+to grab text from the buffer into the search string. This makes it
+convenient to search for another occurrence of text at point. @kbd{C-w}
+copies the word after point as part of the search string, advancing
+point over that word. Another @kbd{C-s} to repeat the search will then
+search for a string including that word. @kbd{C-y} is similar to @kbd{C-w}
+but copies all the rest of the current line into the search string.
+
+ All the characters special in incremental search can be changed by setting
+the following variables:
+
+@vindex search-delete-char
+@vindex search-exit-char
+@vindex search-quote-char
+@vindex search-repeat-char
+@vindex search-reverse-char
+@vindex search-yank-line-char
+@vindex search-yank-word-char
+@table @code
+@item search-delete-char
+Character to delete from incremental search string (normally @key{DEL}).
+@item search-exit-char
+Character to exit incremental search (normally @key{ESC}).
+@item search-quote-char
+Character to quote special characters for incremental search (normally
+@kbd{C-q}).
+@item search-repeat-char
+Character to repeat incremental search forwards (normally @w{@kbd{C-s}}).
+@item search-reverse-char
+Character to repeat incremental search backwards (normally @w{@kbd{C-r}}).
+@item search-yank-line-char
+Character to pull rest of line from buffer into search string
+(normally @kbd{C-y}).
+@item search-yank-word-char
+Character to pull next word from buffer into search string (normally
+@kbd{C-w}).
+@end table
+
+@subsection Slow Terminal Incremental Search
+
+ Incremental search on a slow terminal uses a modified style of display
+that is designed to take less time. Instead of redisplaying the buffer at
+each place the search gets to, it creates a new single-line window and uses
+that to display the line that the search has found. The single-line window
+comes into play as soon as point gets outside of the text that is already
+on the screen.
+
+ When the search is terminated, the single-line window is removed. Only
+at this time is the window in which the search was done redisplayed to show
+its new value of point.
+
+ The three dots at the end of the search string, normally used to indicate
+that searching is going on, are not displayed in slow style display.
+
+@vindex search-slow-speed
+ The slow terminal style of display is used when the terminal baud rate is
+less than or equal to the value of the variable @code{search-slow-speed},
+initially 1200.
+
+@vindex search-slow-window-lines
+ The number of lines to use in slow terminal search display is controlled
+by the variable @code{search-slow-window-lines}. 1 is its normal value.
+
+@node Nonincremental Search, Word Search, Incremental Search, Search
+@section Nonincremental Search
+@cindex nonincremental search
+
+ Emacs also has conventional nonincremental search commands, which require
+you to type the entire search string before searching begins.
+
+@table @kbd
+@item C-s @key{ESC} @var{string} @key{RET}
+Search for @var{string}.
+@item C-r @key{ESC} @var{string} @key{RET}
+Search backward for @var{string}.
+@end table
+
+ To do a nonincremental search, first type @kbd{C-s @key{ESC}}. This
+enters the minibuffer to read the search string; terminate the string with
+@key{RET}, and then the search is done. If the string is not found the
+search command gets an error.
+
+ The way @kbd{C-s @key{ESC}} works is that the @kbd{C-s} invokes
+incremental search, which is specially programmed to invoke nonincremental
+search if the argument you give it is empty. (Such an empty argument would
+otherwise be useless.) @kbd{C-r @key{ESC}} also works this way.
+
+@findex search-forward
+@findex search-backward
+ Forward and backward nonincremental searches are implemented by the
+commands @code{search-forward} and @code{search-backward}. These commands
+may be bound to keys in the usual manner. The reason that incremental
+search is programmed to invoke them as well is that @kbd{C-s @key{ESC}}
+is the traditional sequence of characters used in Emacs to invoke
+nonincremental search.
+
+ However, nonincremental searches performed using @kbd{C-s @key{ESC}} do
+not call @code{search-forward} right away. The first thing done is to see
+if the next character is @kbd{C-w}, which requests a word search.
+@ifinfo
+@xref{Word Search}.
+@end ifinfo
+
+@node Word Search, Regexp Search, Nonincremental Search, Search
+@section Word Search
+@cindex word search
+
+ Word search searches for a sequence of words without regard to how the
+words are separated. More precisely, you type a string of many words,
+using single spaces to separate them, and the string can be found even if
+there are multiple spaces, newlines or other punctuation between the words.
+
+ Word search is useful in editing documents formatted by text formatters.
+If you edit while looking at the printed, formatted version, you can't tell
+where the line breaks are in the source file. With word search, you can
+search without having to know them.
+
+@table @kbd
+@item C-s @key{ESC} C-w @var{words} @key{RET}
+Search for @var{words}, ignoring differences in punctuation.
+@item C-r @key{ESC} C-w @var{words} @key{RET}
+Search backward for @var{words}, ignoring differences in punctuation.
+@end table
+
+ Word search is a special case of nonincremental search and is invoked
+with @kbd{C-s @key{ESC} C-w}. This is followed by the search string, which
+must always be terminated with @key{RET}. Being nonincremental, this
+search does not start until the argument is terminated. It works by
+constructing a regular expression and searching for that. @xref{Regexp
+Search}.
+
+ A backward word search can be done by @kbd{C-r @key{ESC} C-w}.
+
+@findex word-search-forward
+@findex word-search-backward
+ Forward and backward word searches are implemented by the commands
+@code{word-search-forward} and @code{word-search-backward}. These commands
+may be bound to keys in the usual manner. The reason that incremental
+search is programmed to invoke them as well is that @kbd{C-s @key{ESC} C-w}
+is the traditional Emacs sequence of keys for word search.
+
+@node Regexp Search, Regexps, Word Search, Search
+@section Regular Expression Search
+@cindex regular expression
+@cindex expressions, regular
+@cindex regexp
+
+ A @dfn{regular expression} (@dfn{regexp}, for short) is a pattern that
+denotes a set of strings, possibly an infinite set. Searching for matches
+for a regexp is a very powerful operation that editors on Unix systems have
+traditionally offered. In GNU Emacs, you can search for the next match for
+a regexp either incrementally or not.
+
+@kindex C-M-s
+@findex isearch-forward-regexp
+@findex isearch-backward-regexp
+ Incremental search for a regexp is done by typing @kbd{C-M-s}
+(@code{isearch-forward-regexp}). This command reads a search string
+incrementally just like @kbd{C-s}, but it treats the search string as a
+regexp rather than looking for an exact match against the text in the
+buffer. Each time you add text to the search string, you make the regexp
+longer, and the new regexp is searched for. A reverse regexp search command,
+@code{isearch-backward-regexp}, also exists but no key runs it.
+
+ All of the control characters that do special things within an ordinary
+incremental search have the same function in incremental regexp search.
+Typing @kbd{C-s} or @kbd{C-r} immediately after starting the search
+retrieves the last incremental search regexp used; that is to say,
+incremental regexp and non-regexp searches have independent defaults.
+
+ Note that adding characters to the regexp in an incremental regexp search
+does not make the cursor move back and start again. Perhaps it ought to; I
+am not sure. As it stands, if you have searched for @samp{foo} and you
+add @samp{\|bar}, the search will not check for a @samp{bar} in the
+buffer before the @samp{foo}.
+
+@findex re-search-forward
+@findex re-search-backward
+ Nonincremental search for a regexp is done by the functions
+@code{re-search-forward} and @code{re-search-backward}. You can invoke
+these with @kbd{M-x}, or bind them to keys. Also, you can call
+@code{re-search-forward} by way of incremental regexp search with
+@kbd{C-M-s @key{ESC}}.
+
+@node Regexps, Search Case, Regexp Search, Search
+@section Syntax of Regular Expressions
+
+Regular expressions have a syntax in which a few characters are special
+constructs and the rest are @dfn{ordinary}. An ordinary character is a
+simple regular expression which matches that character and nothing else.
+The special characters are @samp{$}, @samp{^}, @samp{.}, @samp{*},
+@samp{+}, @samp{?}, @samp{[}, @samp{]} and @samp{\}; no new special
+characters will be defined. Any other character appearing in a regular
+expression is ordinary, unless a @samp{\} precedes it.@refill
+
+For example, @samp{f} is not a special character, so it is ordinary, and
+therefore @samp{f} is a regular expression that matches the string @samp{f}
+and no other string. (It does @i{not} match the string @samp{ff}.) Likewise,
+@samp{o} is a regular expression that matches only @samp{o}.@refill
+
+Any two regular expressions @var{a} and @var{b} can be concatenated. The
+result is a regular expression which matches a string if @var{a} matches
+some amount of the beginning of that string and @var{b} matches the rest of
+the string.@refill
+
+As a simple example, we can concatenate the regular expressions @samp{f}
+and @samp{o} to get the regular expression @samp{fo}, which matches only
+the string @samp{fo}. Still trivial. To do something nontrivial, you
+need to use one of the special characters. Here is a list of them.
+
+@table @kbd
+@item .@: @r{(Period)}
+is a special character that matches any single character except a newline.
+Using concatenation, we can make regular expressions like @samp{a.b} which
+matches any three-character string which begins with @samp{a} and ends with
+@samp{b}.@refill
+
+@item *
+is not a construct by itself; it is a suffix, which means the
+preceding regular expression is to be repeated as many times as
+possible. In @samp{fo*}, the @samp{*} applies to the @samp{o}, so
+@samp{fo*} matches one @samp{f} followed by any number of @samp{o}s.
+The case of zero @samp{o}s is allowed: @samp{fo*} does match
+@samp{f}.@refill
+
+@samp{*} always applies to the @i{smallest} possible preceding
+expression. Thus, @samp{fo*} has a repeating @samp{o}, not a
+repeating @samp{fo}.@refill
+
+The matcher processes a @samp{*} construct by matching, immediately,
+as many repetitions as can be found. Then it continues with the rest
+of the pattern. If that fails, backtracking occurs, discarding some
+of the matches of the @samp{*}-modified construct in case that makes
+it possible to match the rest of the pattern. For example, matching
+@samp{ca*ar} against the string @samp{caaar}, the @samp{a*} first
+tries to match all three @samp{a}s; but the rest of the pattern is
+@samp{ar} and there is only @samp{r} left to match, so this try fails.
+The next alternative is for @samp{a*} to match only two @samp{a}s.
+With this choice, the rest of the regexp matches successfully.@refill
+
+@item +
+Is a suffix character similar to @samp{*} except that it requires that
+the preceding expression be matched at least once. So, for example,
+@samp{ca+r} will match the strings @samp{car} and @samp{caaaar}
+but not the string @samp{cr}, whereas @samp{ca*r} would match all
+three strings.@refill
+
+@item ?
+Is a suffix character similar to @samp{*} except that it can match the
+preceding expression either once or not at all. For example,
+@samp{ca?r} will match @samp{car} or @samp{cr}; nothing else.
+
+@item [ @dots{} ]
+@samp{[} begins a @dfn{character set}, which is terminated by a
+@samp{]}. In the simplest case, the characters between the two form
+the set. Thus, @samp{[ad]} matches either one @samp{a} or one
+@samp{d}, and @samp{[ad]*} matches any string composed of just
+@samp{a}s and @samp{d}s (including the empty string), from which it
+follows that @samp{c[ad]*r} matches @samp{cr}, @samp{car}, @samp{cdr},
+@samp{caddaar}, etc.@refill
+
+Character ranges can also be included in a character set, by writing
+two characters with a @samp{-} between them. Thus, @samp{[a-z]}
+matches any lower-case letter. Ranges may be intermixed freely with
+individual characters, as in @samp{[a-z$%.]}, which matches any lower
+case letter or @samp{$}, @samp{%} or period.@refill
+
+Note that the usual special characters are not special any more inside
+a character set. A completely different set of special characters
+exists inside character sets: @samp{]}, @samp{-} and @samp{^}.@refill
+
+To include a @samp{]} in a character set, you must make it the first
+character. For example, @samp{[]a]} matches @samp{]} or @samp{a}. To
+include a @samp{-}, write @samp{---}, which is a range containing only
+@samp{-}. To include @samp{^}, make it other than the first character
+in the set.@refill
+
+@item [^ @dots{} ]
+@samp{[^} begins a @dfn{complement character set}, which matches any
+character except the ones specified. Thus, @samp{[^a-z0-9A-Z]}
+matches all characters @i{except} letters and digits.@refill
+
+@samp{^} is not special in a character set unless it is the first
+character. The character following the @samp{^} is treated as if it
+were first (@samp{-} and @samp{]} are not special there).
+
+Note that a complement character set can match a newline, unless
+newline is mentioned as one of the characters not to match.
+
+@item ^
+is a special character that matches the empty string, but only if at
+the beginning of a line in the text being matched. Otherwise it fails
+to match anything. Thus, @samp{^foo} matches a @samp{foo} which occurs
+at the beginning of a line.
+
+@item $
+is similar to @samp{^} but matches only at the end of a line. Thus,
+@samp{xx*$} matches a string of one @samp{x} or more at the end of a line.
+
+@item \
+has two functions: it quotes the special characters (including
+@samp{\}), and it introduces additional special constructs.
+
+Because @samp{\} quotes special characters, @samp{\$} is a regular
+expression which matches only @samp{$}, and @samp{\[} is a regular
+expression which matches only @samp{[}, and so on.@refill
+@end table
+
+Note: for historical compatibility, special characters are treated as
+ordinary ones if they are in contexts where their special meanings make no
+sense. For example, @samp{*foo} treats @samp{*} as ordinary since there is
+no preceding expression on which the @samp{*} can act. It is poor practice
+to depend on this behavior; better to quote the special character anyway,
+regardless of where is appears.@refill
+
+For the most part, @samp{\} followed by any character matches only
+that character. However, there are several exceptions: characters
+which, when preceded by @samp{\}, are special constructs. Such
+characters are always ordinary when encountered on their own. Here
+is a table of @samp{\} constructs.
+
+@table @kbd
+@item \|
+specifies an alternative.
+Two regular expressions @var{a} and @var{b} with @samp{\|} in
+between form an expression that matches anything that either @var{a} or
+@var{b} will match.@refill
+
+Thus, @samp{foo\|bar} matches either @samp{foo} or @samp{bar}
+but no other string.@refill
+
+@samp{\|} applies to the largest possible surrounding expressions. Only a
+surrounding @samp{\( @dots{} \)} grouping can limit the grouping power of
+@samp{\|}.@refill
+
+Full backtracking capability exists to handle multiple uses of @samp{\|}.
+
+@item \( @dots{} \)
+is a grouping construct that serves three purposes:
+
+@enumerate
+@item
+To enclose a set of @samp{\|} alternatives for other operations.
+Thus, @samp{\(foo\|bar\)x} matches either @samp{foox} or @samp{barx}.
+
+@item
+To enclose a complicated expression for the postfix @samp{*} to operate on.
+Thus, @samp{ba\(na\)*} matches @samp{bananana}, etc., with any (zero or
+more) number of @samp{na} strings.@refill
+
+@item
+To mark a matched substring for future reference.
+
+@end enumerate
+
+This last application is not a consequence of the idea of a
+parenthetical grouping; it is a separate feature which happens to be
+assigned as a second meaning to the same @samp{\( @dots{} \)} construct
+because there is no conflict in practice between the two meanings.
+Here is an explanation of this feature:
+
+@item \@var{digit}
+after the end of a @samp{\( @dots{} \)} construct, the matcher remembers the
+beginning and end of the text matched by that construct. Then, later on
+in the regular expression, you can use @samp{\} followed by @var{digit}
+to mean ``match the same text matched the @var{digit}'th time by the
+@samp{\( @dots{} \)} construct.''@refill
+
+The strings matching the first nine @samp{\( @dots{} \)} constructs appearing
+in a regular expression are assigned numbers 1 through 9 in order that the
+open-parentheses appear in the regular expression. @samp{\1} through
+@samp{\9} may be used to refer to the text matched by the corresponding
+@samp{\( @dots{} \)} construct.
+
+For example, @samp{\(.*\)\1} matches any newline-free string that is
+composed of two identical halves. The @samp{\(.*\)} matches the first
+half, which may be anything, but the @samp{\1} that follows must match
+the same exact text.
+
+@item \`
+matches the empty string, provided it is at the beginning
+of the buffer.
+
+@item \'
+matches the empty string, provided it is at the end of
+the buffer.
+
+@item \b
+matches the empty string, provided it is at the beginning or
+end of a word. Thus, @samp{\bfoo\b} matches any occurrence of
+@samp{foo} as a separate word. @samp{\bballs?\b} matches
+@samp{ball} or @samp{balls} as a separate word.@refill
+
+@item \B
+matches the empty string, provided it is @i{not} at the beginning or
+end of a word.
+
+@item \<
+matches the empty string, provided it is at the beginning of a word.
+
+@item \>
+matches the empty string, provided it is at the end of a word.
+
+@item \w
+matches any word-constituent character. The editor syntax table
+determines which characters these are.
+
+@item \W
+matches any character that is not a word-constituent.
+
+@item \s@var{code}
+matches any character whose syntax is @var{code}. @var{code} is a
+character which represents a syntax code: thus, @samp{w} for word
+constituent, @samp{-} for whitespace, @samp{(} for open-parenthesis,
+etc. @xref{Syntax}.@refill
+
+@item \S@var{code}
+matches any character whose syntax is not @var{code}.
+@end table
+
+ Here is a complicated regexp, used by Emacs to recognize the end of a
+sentence together with any whitespace that follows. It is given in Lisp
+syntax to enable you to distinguish the spaces from the tab characters. In
+Lisp syntax, the string constant begins and ends with a double-quote.
+@samp{\"} stands for a double-quote as part of the regexp, @samp{\\} for a
+backslash as part of the regexp, @samp{\t} for a tab and @samp{\n} for a
+newline.
+
+@example
+"[.?!][]\"')]*\\($\\|\t\\| \\)[ \t\n]*"
+@end example
+
+@noindent
+This contains four parts in succession: a character set matching period,
+@samp{?} or @samp{!}; a character set matching close-brackets,
+quotes or parentheses, repeated any number of times; an alternative in
+backslash-parentheses that matches end-of-line, a tab or two spaces; and a
+character set matching whitespace characters, repeated any number of times.
+
+ Note that the above example shows how to write this regexp when
+entering it as part of an Emacs Lisp program. To enter the same regexp
+in an interactive command such as @code{re-search-forward} you must
+spell it differently:
+
+@example
+[.?!][]"')]*\($\|^Q^I\| \)[ ^Q^I^Q^J]*
+@end example
+
+@node Search Case, Replace, Regexps, Search
+@section Searching and Case
+
+@vindex case-fold-search
+ All sorts of searches in Emacs normally ignore the case of the text they
+are searching through; if you specify searching for @samp{FOO}, then
+@samp{Foo} and @samp{foo} are also considered a match. Regexps, and in
+particular character sets, are included: @samp{[aB]} would match @samp{a}
+or @samp{A} or @samp{b} or @samp{B}.@refill
+
+ If you do not want this feature, set the variable @code{case-fold-search}
+to @code{nil}. Then all letters must match exactly, including case. This
+is a per-buffer variable; altering the variable affects only the current
+buffer, but there is a default value which you can change as well.
+@xref{Locals}.
+
+@node Replace, Other Repeating Search, Search Case, Search
+@section Replacement Commands
+@cindex replacement
+@cindex string substitution
+@cindex global substitution
+
+ Global search-and-replace operations are not needed as often in Emacs as
+they are in other editors, but they are available. In addition to the
+simple @code{replace-string} command which is like that found in most
+editors, there is a @code{query-replace} command which asks you, for each
+occurrence of the pattern, whether to replace it.
+
+ The replace commands all replace one string (or regexp) with one
+replacement string. It is possible to perform several replacements in
+parallel using the command @code{expand-region-abbrevs}. @xref{Expanding
+Abbrevs}.
+
+@menu
+* Unconditional Replace:: Replacing all matches for a string.
+* Regexp Replace:: Replacing all matches for a regexp.
+* Replacement and Case:: How replacements preserve case of letters.
+* Query Replace:: How to use querying.
+@end menu
+
+@node Unconditional Replace, Regexp Replace, Replace, Replace
+@subsection Unconditional Replacement
+@findex replace-string
+@findex replace-regexp
+
+@table @kbd
+@item M-x replace-string @key{RET} @var{string} @key{RET} @var{newstring} @key{RET}
+Replace every occurrence of @var{string} with @var{newstring}.
+@item M-x replace-regexp @key{RET} @var{regexp} @key{RET} @var{newstring} @key{RET}
+Replace every match for @var{regexp} with @var{newstring}.
+@end table
+
+ To replace every instance of @samp{foo} after point with @samp{bar}, use
+the command @kbd{M-x replace-string} with the two arguments @samp{foo} and
+@samp{bar}. Replacement occurs only after point, so if you want to cover
+the whole buffer you must go to the beginning first. All occurrences up to
+the end of the buffer are replaced; to limit replacement to part of the
+buffer, narrow to that part of the buffer before doing the replacement
+(@pxref{Narrowing}).
+
+ When @code{replace-string} exits, point is left at the last occurrence
+replaced. The value of point when the @code{replace-string} command was
+issued is remembered on the mark ring; @kbd{C-u C-@key{SPC}} moves back
+there.
+
+ A numeric argument restricts replacement to matches that are surrounded
+by word boundaries.
+
+@node Regexp Replace, Replacement and Case, Unconditional Replace, Replace
+@subsection Regexp Replacement
+
+ @code{replace-string} replaces exact matches for a single string. The
+similar command @code{replace-regexp} replaces any match for a specified
+pattern.
+
+ In @code{replace-regexp}, the @var{newstring} need not be constant. It
+can refer to all or part of what is matched by the @var{regexp}. @samp{\&}
+in @var{newstring} stands for the entire text being replaced.
+@samp{\@var{d}} in @var{newstring}, where @var{d} is a digit, stands for
+whatever matched the @var{d}'th parenthesized grouping in @var{regexp}.
+For example,@refill
+
+@example
+M-x replace-regexp @key{RET} c[ad]+r @key{RET} \&-safe @key{RET}
+@end example
+
+@noindent
+would replace (for example) @samp{cadr} with @samp{cadr-safe} and @samp{cddr}
+with @samp{cddr-safe}.
+
+@example
+M-x replace-regexp @key{RET} \(c[ad]+r\)-safe @key{RET} \1 @key{RET}
+@end example
+
+@noindent
+would perform exactly the opposite replacements. To include a @samp{\}
+in the text to replace with, you must give @samp{\\}.
+
+@node Replacement and Case, Query Replace, Regexp Replace, Replace
+@subsection Replace Commands and Case
+
+@vindex case-replace
+@vindex case-fold-search
+ If the arguments to a replace command are in lower case, it preserves
+case when it makes a replacement. Thus, the command
+
+@example
+M-x replace-string @key{RET} foo @key{RET} bar @key{RET}
+@end example
+
+@noindent
+replaces a lower case @samp{foo} with a lower case @samp{bar}, @samp{FOO}
+with @samp{BAR}, and @samp{Foo} with @samp{Bar}. If upper case letters are
+used in the second argument, they remain upper case every time that
+argument is inserted. If upper case letters are used in the first
+argument, the second argument is always substituted exactly as given, with
+no case conversion. Likewise, if the variable @code{case-replace} is set
+to @code{nil}, replacement is done without case conversion. If
+@code{case-fold-search} is set to @code{nil}, case is significant in
+matching occurrences of @samp{foo} to replace; also, case conversion of the
+replacement string is not done.
+
+@node Query Replace,, Replacement and Case, Replace
+@subsection Query Replace
+@cindex query replace
+
+@table @kbd
+@item M-% @var{string} @key{RET} @var{newstring} @key{RET}
+@itemx M-x query-replace @key{RET} @var{string} @key{RET} @var{newstring} @key{RET}
+Replace some occurrences of @var{string} with @var{newstring}.
+@item M-x query-replace-regexp @key{RET} @var{regexp} @key{RET} @var{newstring} @key{RET}
+Replace some matches for @var{regexp} with @var{newstring}.
+@end table
+
+@kindex M-%
+@findex query-replace
+ If you want to change only some of the occurrences of @samp{foo} to
+@samp{bar}, not all of them, then you cannot use an ordinary
+@code{replace-string}. Instead, use @kbd{M-%} (@code{query-replace}).
+This command finds occurrences of @samp{foo} one by one, displays each
+occurrence and asks you whether to replace it. A numeric argument to
+@code{query-replace} tells it to consider only occurrences that are bounded
+by word-delimiter characters.@refill
+
+@findex query-replace-regexp
+ Aside from querying, @code{query-replace} works just like
+@code{replace-string}, and @code{query-replace-regexp} works
+just like @code{replace-regexp}.@refill
+
+ The things you can type when you are shown an occurrence of @var{string}
+or a match for @var{regexp} are:
+
+@kindex SPC (query-replace)
+@kindex DEL (query-replace)
+@kindex , (query-replace)
+@kindex ESC (query-replace)
+@kindex . (query-replace)
+@kindex ! (query-replace)
+@kindex ^ (query-replace)
+@kindex C-r (query-replace)
+@kindex C-w (query-replace)
+@kindex C-l (query-replace)
+
+@c WideCommands
+@table @kbd
+@item @key{SPC}
+to replace the occurrence with @var{newstring}. This preserves case, just
+like @code{replace-string}, provided @code{case-replace} is non-@code{nil},
+as it normally is.@refill
+
+@item @key{DEL}
+to skip to the next occurrence without replacing this one.
+
+@item , @r{(Comma)}
+to replace this occurrence and display the result. You are then asked
+for another input character, except that since the replacement has
+already been made, @key{DEL} and @key{SPC} are equivalent. You could
+type @kbd{C-r} at this point (see below) to alter the replaced text. You
+could also type @kbd{C-x u} to undo the replacement; this exits the
+@code{query-replace}, so if you want to do further replacement you must use
+@kbd{C-x ESC} to restart (@pxref{Repetition}).
+
+@item @key{ESC}
+to exit without doing any more replacements.
+
+@item .@: @r{(Period)}
+to replace this occurrence and then exit.
+
+@item !
+to replace all remaining occurrences without asking again.
+
+@item ^
+to go back to the location of the previous occurrence (or what used to
+be an occurrence), in case you changed it by mistake. This works by
+popping the mark ring. Only one @kbd{^} in a row is allowed, because
+only one previous replacement location is kept during @code{query-replace}.
+
+@item C-r
+to enter a recursive editing level, in case the occurrence needs to be
+edited rather than just replaced with @var{newstring}. When you are
+done, exit the recursive editing level with @kbd{C-M-c} and the next
+occurrence will be displayed. @xref{Recursive Edit}.
+
+@item C-w
+to delete the occurrence, and then enter a recursive editing level as
+in @kbd{C-r}. Use the recursive edit to insert text to replace the
+deleted occurrence of @var{string}. When done, exit the recursive
+editing level with @kbd{C-M-c} and the next occurrence will be
+displayed.
+
+@item C-l
+to redisplay the screen and then give another answer.
+
+@item C-h
+to display a message summarizing these options, then give another
+answer.
+@end table
+
+ If you type any other character, the @code{query-replace} is exited, and
+the character executed as a command. To restart the @code{query-replace},
+use @kbd{C-x @key{ESC}}, which repeats the @code{query-replace} because it
+used the minibuffer to read its arguments. @xref{Repetition, C-x ESC}.
+
+ To replace every occurrence, you can start @code{query-replace} at the
+beginning of the buffer and type @kbd{!}, or you can use the
+@code{replace-string} command at the beginning of the buffer. To
+replace every occurrence in a part of the buffer, narrow to that part
+and then run @code{replace-string} or @code{query-replace} at the
+beginning of it. @xref{Narrowing}.
+
+@node Other Repeating Search,, Replace, Search
+@section Other Search-and-Loop Commands
+
+ Here are some other commands that find matches for a regular expression.
+They all operate from point to the end of the buffer.
+
+@findex list-matching-lines
+@findex occur
+@findex count-matches
+@findex delete-non-matching-lines
+@findex delete-matching-lines
+@c grosscommands
+@table @kbd
+@item M-x occur
+Print each line that follows point and contains a match for the
+specified regexp. A numeric argument specifies the number of context
+lines to print before and after each matching line; the default is
+none.
+
+@kindex C-c C-c (Occur mode)
+The buffer @samp{*Occur*} containing the output serves as a menu for
+finding the occurrences in their original context. Find an occurrence
+as listed in @samp{*Occur*}, position point there and type @kbd{C-c
+C-c}; this switches to the buffer that was searched and moves point to
+the original of the same occurrence.
+
+@item M-x list-matching-lines
+Synonym for @kbd{M-x occur}.
+
+@item M-x count-matches
+Print the number of matches following point for the specified regexp.
+
+@item M-x delete-non-matching-lines
+Delete each line that follows point and does not contain a match for
+the specified regexp.
+
+@item M-x delete-matching-lines
+Delete each line that follows point and contains a match for the
+specified regexp.
+@end table
+
+@node Fixit, Files, Search, Top
+@chapter Commands for Fixing Typos
+@cindex typos
+@cindex mistakes, correcting
+
+ In this chapter we describe the commands that are especially useful for
+the times when you catch a mistake in your text just after you have made
+it, or change your mind while composing text on line.
+
+@menu
+* Kill Errors:: Commands to kill a batch of recently entered text.
+* Transpose:: Exchanging two characters, words, lines, lists...
+* Fixing Case:: Correcting case of last word entered.
+* Spelling:: Apply spelling checker to a word, or a whole file.
+@end menu
+
+@node Kill Errors, Transpose, Fixit, Fixit
+@section Killing Your Mistakes
+
+@table @kbd
+@item @key{DEL}
+Delete last character (@code{delete-backward-char}).
+@item M-@key{DEL}
+Kill last word (@code{backward-kill-word}).
+@item C-x @key{DEL}
+Kill to beginning of sentence (@code{backward-kill-sentence}).
+@end table
+
+@kindex DEL
+@findex delete-backward-char
+ The @key{DEL} character (@code{delete-backward-char}) is the most
+important correction command. When used among graphic (self-inserting)
+characters, it can be thought of as canceling the last character typed.
+
+@kindex M-DEL
+@kindex C-x DEL
+@findex backward-kill-word
+@findex backward-kill-sentence
+ When your mistake is longer than a couple of characters, it might be more
+convenient to use @kbd{M-@key{DEL}} or @kbd{C-x @key{DEL}}.
+@kbd{M-@key{DEL}} kills back to the start of the last word, and @kbd{C-x
+@key{DEL}} kills back to the start of the last sentence. @kbd{C-x
+@key{DEL}} is particularly useful when you are thinking of what to write as
+you type it, in case you change your mind about phrasing.
+@kbd{M-@key{DEL}} and @kbd{C-x @key{DEL}} save the killed text for
+@kbd{C-y} and @kbd{M-y} to retrieve. @xref{Yanking}.@refill
+
+ @kbd{M-@key{DEL}} is often useful even when you have typed only a few
+characters wrong, if you know you are confused in your typing and aren't
+sure exactly what you typed. At such a time, you cannot correct with
+@key{DEL} except by looking at the screen to see what you did. It requires
+less thought to kill the whole word and start over again.
+
+@node Transpose, Fixing Case, Kill Errors, Fixit
+@section Transposing Text
+
+@table @kbd
+@item C-t
+Transpose two characters (@code{transpose-chars}).
+@item M-t
+Transpose two words (@code{transpose-words}).
+@item C-M-t
+Transpose two balanced expressions (@code{transpose-sexps}).
+@item C-x C-t
+Transpose two lines (@code{transpose-lines}).
+@end table
+
+@cindex transposition
+@kindex C-t
+@findex transpose-chars
+ The common error of transposing two characters can be fixed, when they
+are adjacent, with the @kbd{C-t} command (@code{transpose-chars}). Normally,
+@kbd{C-t} transposes the two characters on either side of point. When
+given at the end of a line, rather than transposing the last character of
+the line with the newline, which would be useless, @kbd{C-t} transposes the
+last two characters on the line. So, if you catch your transposition error
+right away, you can fix it with just a @kbd{C-t}. If you don't catch it so
+fast, you must move the cursor back to between the two transposed
+characters. If you transposed a space with the last character of the word
+before it, the word motion commands are a good way of getting there.
+Otherwise, a reverse search (@kbd{C-r}) is often the best way.
+@xref{Search}.
+
+
+@kindex C-x C-t
+@findex transpose-lines
+@kindex M-t
+@findex transpose-words
+@kindex C-M-t
+@findex transpose-sexps
+ @kbd{Meta-t} (@code{transpose-words}) transposes the word before point
+with the word after point. It moves point forward over a word, dragging
+the word preceding or containing point forward as well. The punctuation
+characters between the words do not move. For example, @w{@samp{FOO, BAR}}
+transposes into @w{@samp{BAR, FOO}} rather than @samp{@w{BAR FOO,}}.
+
+ @kbd{C-M-t} (@code{transpose-sexps}) is a similar command for transposing
+two expressions (@pxref{Lists}), and @kbd{C-x C-t} (@code{transpose-lines})
+exchanges lines. They work like @kbd{M-t} except in determining the
+division of the text into syntactic units.
+
+ A numeric argument to a transpose command serves as a repeat count: it
+tells the transpose command to move the character (word, sexp, line) before
+or containing point across several other characters (words, sexps, lines).
+For example, @kbd{C-u 3 C-t} moves the character before point forward
+across three other characters. This is equivalent to repeating @kbd{C-t}
+three times. @kbd{C-u - 4 M-t} moves the word before point backward across
+four words. @kbd{C-u - C-M-t} would cancel the effect of plain
+@kbd{C-M-t}.@refill
+
+ A numeric argument of zero is assigned a special meaning (because
+otherwise a command with a repeat count of zero would do nothing): to
+transpose the character (word, sexp, line) ending after point with the
+one ending after the mark.
+
+@node Fixing Case, Spelling, Transpose, Fixit
+@section Case Conversion
+
+@table @kbd
+@item M-- M-l
+Convert last word to lower case. Note @kbd{Meta--} is Meta-minus.
+@item M-- M-u
+Convert last word to all upper case.
+@item M-- M-c
+Convert last word to lower case with capital initial.
+@end table
+
+@findex downcase-word
+@findex upcase-word
+@findex capitalize-word
+@kindex M-@t{-} M-l
+@kindex M-@t{-} M-u
+@kindex M-@t{-} M-c
+@cindex case conversion
+@cindex words
+ A very common error is to type words in the wrong case. Because of this,
+the word case-conversion commands @kbd{M-l}, @kbd{M-u} and @kbd{M-c} have a
+special feature when used with a negative argument: they do not move the
+cursor. As soon as you see you have mistyped the last word, you can simply
+case-convert it and go on typing. @xref{Case}.@refill
+
+@node Spelling,, Fixing Case, Fixit
+@section Checking and Correcting Spelling
+@cindex spelling
+
+@c doublewidecommands
+@table @kbd
+@item M-$
+Check and correct spelling of word (@code{spell-word}).
+@item M-x spell-buffer
+Check and correct spelling of each word in the buffer.
+@item M-x spell-region
+Check and correct spelling of each word in the region.
+@item M-x spell-string
+Check spelling of specified word.
+@end table
+
+@kindex M-$
+@findex spell-word
+ To check the spelling of the word before point, and optionally correct it
+as well, use the command @kbd{M-$} (@code{spell-word}). This command runs
+an inferior process containing the @code{spell} program to see whether the
+word is correct English. If it is not, it asks you to edit the word (in
+the minibuffer) into a corrected spelling, and then does a @code{query-replace}
+to substitute the corrected spelling for the old one throughout the buffer.
+
+ If you exit the minibuffer without altering the original spelling, it
+means you do not want to do anything to that word. Then the @code{query-replace}
+is not done.
+
+@findex spell-buffer
+ @kbd{M-x spell-buffer} checks each word in the buffer the same way that
+@code{spell-word} does, doing a @code{query-replace} if appropriate for
+every incorrect word.@refill
+
+@findex spell-region
+ @kbd{M-x spell-region} is similar but operates only on the region, not
+the entire buffer.
+
+@findex spell-string
+ @kbd{M-x spell-string} reads a string as an argument and checks whether
+that is a correctly spelled English word. It prints in the echo area a
+message giving the answer.
+
+@node Files, Buffers, Fixit, Top
+@chapter File Handling
+@cindex files
+
+ The basic unit of stored data in Unix is the @dfn{file}. To edit a file,
+you must tell Emacs to examine the file and prepare a buffer containing a
+copy of the file's text. This is called @dfn{visiting} the file. Editing
+commands apply directly to text in the buffer; that is, to the copy inside
+Emacs. Your changes appear in the file itself only when you @dfn{save} the
+buffer back into the file.
+
+ In addition to visiting and saving files, Emacs can delete, copy, rename,
+and append to files, and operate on file directories.
+
+@menu
+* File Names:: How to type and edit file name arguments.
+* Visiting:: Visiting a file prepares Emacs to edit the file.
+* Saving:: Saving makes your changes permanent.
+* Reverting:: Reverting cancels all the changes not saved.
+* Auto Save:: Auto Save periodically protects against loss of data.
+* ListDir:: Listing the contents of a file directory.
+* Dired:: ``Editing'' a directory to delete, rename, etc.
+ the files in it.
+* Misc File Ops:: Other things you can do on files.
+@end menu
+
+@node File Names, Visiting, Files, Files
+@section File Names
+@cindex file names
+
+ Most Emacs commands that operate on a file require you to specify the
+file name. (Saving and reverting are exceptions; the buffer knows which
+file name to use for them.) File names are specified using the minibuffer
+(@pxref{Minibuffer}). @dfn{Completion} is available, to make it easier to
+specify long file names. @xref{Completion}.
+
+ There is always a @dfn{default file name} which will be used if you type
+just @key{RET}, entering an empty argument. Normally the default file name
+is the name of the file visited in the current buffer; this makes it easy
+to operate on that file with any of the Emacs file commands.
+
+@vindex default-directory
+ Each buffer has a default directory, normally the same as the directory
+of the file visited in that buffer. When Emacs reads a file name, if you
+do not specify a directory, the default directory is used. If you specify
+a directory in a relative fashion, with a name that does not start with a
+slash, it is interpreted with respect to the default directory. The
+default directory is kept in the variable @code{default-directory}, which
+has a separate value in every buffer.
+
+ For example, if the default file name is @file{/u/rms/gnu/gnu.tasks} then
+the default directory is @file{/u/rms/gnu/}. If you type just @samp{foo},
+which does not specify a directory, it is short for @file{/u/rms/gnu/foo}.
+@samp{../.login} would stand for @file{/u/rms/.login}. @samp{new/foo}
+would stand for the filename @file{/u/rms/gnu/new/foo}.
+
+ The command @kbd{M-x pwd} prints the current buffer's default directory,
+and the command @kbd{M-x cd} sets it (to a value read using the
+minibuffer). A buffer's default directory changes only when the @code{cd}
+command is used. A file-visiting buffer's default directory is initialized
+to the directory of the file that is visited there. If a buffer is made
+randomly with @kbd{C-x b}, its default directory is copied from that of the
+buffer that was current at the time.
+
+@vindex insert-default-directory
+ The default directory actually appears in the minibuffer when the
+minibuffer becomes active to read a file name. This serves two purposes:
+it shows you what the default is, so that you can type a relative file name
+and know with certainty what it will mean, and it allows you to edit the
+default to specify a different directory. This insertion of the default
+directory is inhibited if the variable @code{insert-default-directory} is
+set to @code{nil}.
+
+ Note that it is legitimate to type an absolute file name after you enter
+the minibuffer, ignoring the presence of the default directory name as part
+of the text. The final minibuffer contents may look invalid, but that is
+not so. @xref{Minibuffer File}.
+
+ @samp{$} in a file name is used to substitute environment variables. For
+example, if you have used the C shell command @samp{setenv FOO
+rms/hacks} to set up an environment variable named @samp{FOO}, then
+you can use @file{/u/$FOO/test.c} or @file{/u/$@{FOO@}/test.c} as an
+abbreviation for @file{/u/rms/hacks/test.c}. (In the Bourne-Again
+shell, write @code{export FOO=rms/hacks} to define @code{FOO}.) The
+environment variable name consists of all the alphanumeric characters
+after the @samp{$}; alternatively, it may be enclosed in braces after
+the @samp{$}. Note that the @samp{setenv} command affects Emacs only
+if done before Emacs is started.
+@ignore
+In @code{sh}
+
+@example
+FOO=rms/hacks
+export FOO
+@end example
+@end ignore
+
+ To access a file with @samp{$} in its name, type @samp{$$}. This pair
+is converted to a single @samp{$} at the same time as variable substitution
+is performed for single @samp{$}. The Lisp function that performs the
+substitution is called @code{substitute-in-file-name}. The substitution
+is performed only on filenames read as such using the minibuffer.
+
+@node Visiting, Saving, File Names, Files
+@section Visiting Files
+@cindex visiting files
+
+@c WideCommands
+@table @kbd
+@item C-x C-f
+Visit a file (@code{find-file}).
+@item C-x C-v
+Visit a different file instead of the one visited last
+(@code{find-alternate-file}).
+@item C-x 4 C-f
+Visit a file, in another window (@code{find-file-other-window}). Don't
+change this window.
+@end table
+
+@cindex files
+@cindex visiting
+@cindex saving
+ @dfn{Visiting} a file means copying its contents into Emacs where you can
+edit them. Emacs makes a new buffer for each file that you visit. We say
+that the buffer is visiting the file that it was created to hold. Emacs
+constructs the buffer name from the file name by throwing away the
+directory, keeping just the name proper. For example, a file named
+@file{/usr/rms/emacs.tex} would get a buffer named @samp{emacs.tex}. If
+there is already a buffer with that name, a unique name is constructed by
+appending @samp{<2>}, @samp{<3>}, or so on, using the lowest number that
+makes a name that is not already in use.
+
+ Each window's mode line shows the name of the buffer that is being displayed
+in that window, so you can always tell what buffer you are editing.
+
+ The changes you make with Emacs are made in the Emacs buffer. They do
+not take effect in the file that you visited, or any place permanent, until
+you @dfn{save} the buffer. Saving the buffer means that Emacs writes the
+current contents of the buffer into its visited file. @xref{Saving}.
+
+@cindex modified (buffer)
+ If a buffer contains changes that have not been saved, the buffer is said
+to be @dfn{modified}. This is important because it implies that some
+changes will be lost if the buffer is not saved. The mode line displays
+two stars near the left margin if the buffer is modified.
+
+@kindex C-x C-f
+@findex find-file
+ To visit a file, use the command @kbd{C-x C-f} (@code{find-file}). Follow
+the command with the name of the file you wish to visit, terminated by a
+@key{RET}.
+
+ The file name is read using the minibuffer (@pxref{Minibuffer}), with
+defaulting and completion in the standard manner (@pxref{File Names}).
+While in the minibuffer, you can abort @w{@kbd{C-x C-f}} by typing @kbd{C-g}.
+
+ Your confirmation that @kbd{C-x C-f} has completed successfully is the
+appearance of new text on the screen and a new buffer name in the mode
+line. If the specified file does not exist and could not be created, or
+cannot be read, then an error results. The error message is printed in the
+echo area, and includes the file name which Emacs was trying to visit.
+
+ If you visit a file that is already in Emacs, @kbd{C-x C-f} does not make
+another copy. It selects the existing buffer containing that file.
+However, before doing so, it checks that the file itself has not changed
+since you visited or saved it last. If the file has changed, a warning
+message is printed. @xref{Interlocking,,Simultaneous Editing}.
+
+@cindex creating files
+ What if you want to create a file? Just visit it. Emacs prints
+@samp{(New File)} in the echo area, but in other respects behaves as if you
+had visited an existing empty file. If you make any changes and save them,
+the file is created.
+
+@kindex C-x C-v
+@findex find-alternate-file
+ If you visit a nonexistent file unintentionally (because you typed the
+wrong file name), use the @kbd{C-x C-v} (@code{find-alternate-file})
+command to visit the file you wanted. @kbd{C-x C-v} is similar to @kbd{C-x
+C-f}, but it kills the current buffer (after first offering to save it if
+it is modified). @kbd{C-x C-v} is allowed even if the current buffer
+is not visiting a file.
+
+@vindex find-file-run-dired
+ If the file you specify is actually a directory, Dired is called on that
+directory (@pxref{Dired}). This can be inhibited by setting the variable
+@code{find-file-run-dired} to @code{nil}; then it is an error to try to
+visit a directory.
+
+@kindex C-x 4 f
+@findex find-file-other-window
+ @kbd{C-x 4 f} (@code{find-file-other-window}) is like @kbd{C-x C-f}
+except that the buffer containing the specified file is selected in another
+window. The window that was selected before @kbd{C-x 4 f} continues to
+show the same buffer it was already showing. If this command is used when
+only one window is being displayed, that window is split in two, with one
+window showing the same before as before, and the other one showing the
+newly requested file. @xref{Windows}.
+
+@cindex hooks for files
+@vindex find-file-hooks
+@vindex find-file-not-found-hooks
+ There are two hook variables that allow extensions to modify the
+operation of visiting files. Visiting a file that does not exist runs the
+functions in the list @code{find-file-not-found-hooks}; the value of this
+variable is expected to be a list of functions, and the functions are
+called one by one until one of them returns non-@code{nil}. Any visiting
+of a file, whether extant or not, expects @code{find-file-hooks} to
+contain a list of functions and calls them all, one by one. In both cases
+the functions receive no arguments. Visiting a nonexistent file
+runs the @code{find-file-not-found-hooks} first.
+
+ You can put a local variable specification at the end of a file which
+specifies values for Emacs local variables whenever you visit the file.
+@xref{File Variables}.
+
+@node Saving, Reverting, Visiting, Files
+@section Saving Files
+
+ @dfn{Saving} a buffer in Emacs means writing its contents back into the file
+that was visited in the buffer.
+
+@table @kbd
+@item C-x C-s
+Save the current buffer in its visited file (@code{save-buffer}).
+@item C-x s
+Save any or all buffers in their visited files (@code{save-some-buffers}).
+@item M-~
+@c !!! added @* to prevent overfull hbox
+Forget that the current buffer has been changed@*(@code{not-modified}).
+@item C-x C-w
+Save the current buffer in a specified file, and record that file as
+the one visited in the buffer (@code{write-file}).
+@item M-x set-visited-file-name
+Change file the name under which the current buffer will be saved.
+@end table
+
+@kindex C-x C-s
+@findex save-buffer
+ When you wish to save the file and make your changes permanent, type
+@kbd{C-x C-s} (@code{save-buffer}). After saving is finished, @kbd{C-x C-s}
+prints a message such as
+
+@example
+Wrote /u/rms/gnu/gnu.tasks
+@end example
+
+@noindent
+If the selected buffer is not modified (no changes have been made in it
+since the buffer was created or last saved), saving is not really done,
+because it would have no effect. Instead, @kbd{C-x C-s} prints a message
+in the echo area saying
+
+@example
+(No changes need to be written)
+@end example
+
+@kindex C-x s
+@findex save-some-buffers
+ The command @kbd{C-x s} (@code{save-some-buffers}) can save any or all modified
+buffers. First it asks, for each modified buffer, whether to save it.
+These questions should be answered with @kbd{y} or @kbd{n}. @kbd{C-x C-c},
+the key that kills Emacs, invokes @code{save-some-buffers} and therefore
+asks the same questions.
+
+@kindex M-~
+@findex not-modified
+ If you have changed a buffer and do not want the changes to be saved, you
+should take some action to prevent it. Otherwise, each time you use
+@code{save-some-buffers} you are liable to save it by mistake. One thing
+you can do is type @kbd{M-~} (@code{not-modified}), which clears out the
+indication that the buffer is modified. If you do this, none of the save
+commands will believe that the buffer needs to be saved. (@samp{~} is often
+used as a mathematical symbol for `not'; thus @kbd{Meta-~} is `not', metafied.)
+You could also use @code{set-visited-file-name} (see below) to mark the
+buffer as visiting a different file name, one which is not in use for
+anything important. Alternatively, you can undo all the changes made since
+the file was visited or saved, by reading the text from the file again.
+This is called @dfn{reverting}. @xref{Reverting}. You could also undo all
+the changes by repeating the undo command @kbd{C-x u} until you have undone
+all the changes; but this only works if you have not made more changes than
+the undo mechanism can remember.
+
+@findex set-visited-file-name
+ @kbd{M-x set-visited-file-name} alters the name of the file that the
+current buffer is visiting. It reads the new file name using the
+minibuffer. It can be used on a buffer that is not visiting a file, too.
+The buffer's name is changed to correspond to the file it is now visiting
+in the usual fashion (unless the new name is in use already for some other
+buffer; in that case, the buffer name is not changed).
+@code{set-visited-file-name} does not save the buffer in the newly visited
+file; it just alters the records inside Emacs so that, if you save the
+buffer, it will be saved in that file. It also marks the buffer as
+``modified'' so that @kbd{C-x C-s} @i{will} save.
+
+@kindex C-x C-w
+@findex write-file
+ If you wish to mark the buffer as visiting a different file and save it
+right away, use @kbd{C-x C-w} (@code{write-file}). It is precisely
+equivalent to @code{set-visited-file-name} followed by @kbd{C-x C-s}.
+@kbd{C-x C-s} used on a buffer that is not visiting with a file has the
+same effect as @kbd{C-x C-w}; that is, it reads a file name, marks the
+buffer as visiting that file, and saves it there. The default file name in
+a buffer that is not visiting a file is made by combining the buffer name
+with the buffer's default directory.
+
+ If Emacs is about to save a file and sees that the date of the latest
+version on disk does not match what Emacs last read or wrote, Emacs
+notifies you of this fact, because it probably indicates a problem caused
+by simultaneous editing and requires your immediate attention.
+@xref{Interlocking,, Simultaneous Editing}.
+
+@vindex require-final-newline
+ If the variable @code{require-final-newline} is non-@code{nil}, Emacs
+puts a newline at the end of any file that doesn't already end in one,
+every time a file is saved or written.
+
+@vindex write-file-hooks
+ You can implement other ways to write files, and other things to be done
+before writing them, using the hook variable @code{write-file-hooks}. The
+value of this variable should be a list of Lisp functions. When a file is
+to be written, the functions in the list are called, one by one, with no
+arguments. If one of them returns a non-@code{nil} value, Emacs takes this
+to mean that the file has been written in some suitable fashion; the rest
+of the functions are not called, and normal writing is not done.
+
+@menu
+* Backup:: How Emacs saves the old version of your file.
+* Interlocking:: How Emacs protects against simultaneous editing
+ of one file by two users.
+@end menu
+
+@node Backup, Interlocking, Saving, Saving
+@subsection Backup Files
+@cindex backup file
+@vindex make-backup-files
+
+ Because Unix does not provide version numbers in file names, rewriting a
+file in Unix automatically destroys all record of what the file used to
+contain. Thus, saving a file from Emacs throws away the old contents of
+the file---or it would, except that Emacs carefully copies the old contents
+to another file, called the @dfn{backup} file, before actually saving
+(provided the variable @code{make-backup-files} is non-@code{nil};
+backup files are not written if this variable is @code{nil}).
+
+ At your option, Emacs can keep either a single backup file or a series of
+numbered backup files for each file that you edit.
+
+ Emacs makes a backup for a file only the first time the file is saved
+from one buffer. No matter how many times you save a file, its backup file
+continues to contain the contents from before the file was visited.
+Normally this means that the backup file contains the contents from before
+the current editing session; however, if you kill the buffer and then visit
+the file again, a new backup file will be made by the next save.
+
+@menu
+* Names: Backup Names. How backup files are named;
+ Choosing single or numbered backup files.
+* Deletion: Backup Deletion. Emacs deletes excess numbered backups.
+* Copying: Backup Copying. Backups can be made by copying or renaming.
+@end menu
+
+@node Backup Names, Backup Deletion, Backup, Backup
+@subsubsection Single or Numbered Backups
+
+ If you choose to have a single backup file (this is the default),
+the backup file's name is constructed by appending @samp{~} to the
+file name being edited; thus, the backup file for @file{eval.c} would
+be @file{eval.c~}.
+
+ If you choose to have a series of numbered backup files, backup file
+names are made by appending @samp{.~}, the number, and another @samp{~} to
+the original file name. Thus, the backup files of @file{eval.c} would be
+called @file{eval.c.~1~}, @file{eval.c.~2~}, and so on, through names
+like @file{eval.c.~259~} and beyond.
+
+ If protection stops you from writing backup files under the usual names,
+the backup file is written as @file{%backup%~} in your home directory.
+Only one such file can exist, so only the most recently made such backup is
+available.
+
+@vindex version-control
+ The choice of single backup or numbered backups is controlled by the
+variable @code{version-control}. Its possible values are
+
+@table @code
+@item t
+Make numbered backups.
+@item nil
+Make numbered backups for files that have numbered backups already.
+Otherwise, make single backups.
+@item never
+Do not in any case make numbered backups; always make single backups.
+@end table
+
+@noindent
+@code{version-control} may be set locally in an individual buffer to
+control the making of backups for that buffer's file. For example,
+Rmail mode locally sets @code{version-control} to @code{never} to make sure
+that there is only one backup for an Rmail file. @xref{Locals}.
+
+@node Backup Deletion, Backup Copying, Backup Names, Backup
+@subsubsection Automatic Deletion of Backups
+
+@cindex backups, automatic deleting of
+@cindex versions, keeping old
+@vindex kept-old-versions
+@vindex kept-new-versions
+ To prevent unlimited consumption of disk space, Emacs can delete numbered
+backup versions automatically. Generally Emacs keeps the first few backups
+and the latest few backups, deleting any in between. This happens every
+time a new backup is made. The two variables that control the deletion are
+@code{kept-old-versions} and @code{kept-new-versions}. Their values are, respectively
+the number of oldest (lowest-numbered) backups to keep and the number of
+newest (highest-numbered) ones to keep, each time a new backup is made.
+Recall that these values are used just after a new backup version is made;
+that newly made backup is included in the count in @code{kept-new-versions}.
+By default, both variables are 2.
+
+@vindex trim-versions-without-asking
+ If @code{trim-versions-without-asking} is non-@code{nil}, the excess
+middle versions are deleted without a murmur. If it is @code{nil}, the
+default, then you are asked whether the excess middle versions should
+really be deleted.
+
+ Dired's @kbd{.} (Period) command can also be used to delete old versions.
+@xref{Dired}.
+
+@node Backup Copying,, Backup Deletion, Backup
+@subsubsection Copying vs. Renaming
+@c !!!! zzzz change back after fixref
+@c subsubsection Copying vs.@: Renaming
+
+ Backup files can be made by copying the old file or by renaming it. This
+makes a difference when the old file has multiple names. If the old file
+is renamed into the backup file, then the alternate names become names for
+the backup file. If the old file is copied instead, then the alternate
+names remain names for the file that you are editing, and the contents
+accessed by those names will be the new contents.
+
+ The method of making a backup file may also affect the file's owner
+and group. If copying is used, these do not change. If renaming is used,
+you become the file's owner, and the file's group becomes the default
+(different operating systems have different defaults for the group).
+
+ Having the owner change is usually a good idea, because then the owner
+always shows who last edited the file. Also, the owners of the backups
+show who produced those versions. Occasionally there is a file whose
+owner should not change; it is a good idea for such files to contain
+local variable lists to set @code{backup-by-copying-when-mismatch} for
+them alone (@pxref{File Variables}).
+
+@vindex backup-by-copying
+@vindex backup-by-copying-when-linked
+@vindex backup-by-copying-when-mismatch
+ The choice of renaming or copying is controlled by three variables.
+Normally, renaming is done. If the variable @code{backup-by-copying} is
+non-@code{nil}, copying is used. Otherwise, if the variable
+@code{backup-by-copying-when-linked} is non-@code{nil}, then copying is
+done for files that have multiple names, but renaming may still done when
+the file being edited has only one name. If the variable
+@code{backup-by-copying-when-mismatch} is non-@code{nil}, then copying is
+done if renaming would cause the file's owner or group to change. @refill
+
+@node Interlocking,,Backup,Saving
+@subsection Protection against Simultaneous Editing
+
+@cindex buffer locking
+@cindex locking buffers
+@cindex interlocking buffers
+@cindex file dates
+@cindex simultaneous editing
+ Simultaneous editing occurs when two users visit the same file, both make
+changes, and then both save them. If nobody were informed that this was
+happening, whichever user saved first would later find that his changes
+were lost. On some systems, Emacs notices immediately when the second user
+starts to change the file, and issues an immediate warning. When this is
+not possible, or if the second user has gone on to change the file despite
+the warning, Emacs checks later when the file is saved, and issues a second
+warning when a user is about to overwrite a file containing another user's
+changes. If the editing user takes the proper corrective action at this
+point, he can prevent actual loss of work.
+
+@findex ask-user-about-lock
+ When you make the first modification in an Emacs buffer that is visiting
+a file, Emacs records that you have locked the file. (It does this by
+writing another file in a directory reserved for this purpose.) The lock
+is removed when you save the changes. The idea is that the file is locked
+whenever the buffer is modified. If you begin to modify the buffer while
+the visited file is locked by someone else, this constitutes a collision,
+and Emacs asks you what to do. It does this by calling the Lisp function
+@code{ask-user-about-lock}, which you can redefine for the sake of
+customization. The standard definition of this function asks you a
+question and accepts three possible answers:
+
+@table @kbd
+@item s
+Steal the lock. Whoever was already changing the file loses the lock,
+and you gain the lock.
+@item p
+Proceed. Go ahead and edit the file despite its being locked by someone else.
+@item q
+Quit. This causes an error (@code{file-locked}) and the modification you
+were trying to make in the buffer does not actually take place.
+@end table
+
+ Note that locking works on the basis of a file name; if a file has
+multiple names, Emacs does not realize that the two names are the same file
+and cannot prevent two user from editing it simultaneously under different
+names. However, basing locking on names means that Emacs can interlock the
+editing of new files that will not really exist until they are saved.
+
+ Some systems are not configured to allow Emacs to make locks. On
+these systems, Emacs cannot detect trouble in advance, but it still can
+detect it in time to prevent you from overwriting someone else's changes.
+
+ Every time Emacs saves a buffer, it first checks the last-modification
+date of the existing file on disk to see that it has not changed since the
+file was last visited or saved. If the date does not match, it implies
+that changes were made in the file in some other way, and these changes are
+about to be lost if Emacs actually does save. To prevent this, Emacs
+prints a warning message and asks for confirmation before saving.
+Occasionally you will know why the file was changed and know that it does
+not matter; then you can answer @kbd{yes} and proceed. Otherwise, you should
+cancel the save with @kbd{C-g} and investigate the situation.
+
+ The first thing you should do when notified that simultaneous editing has
+already taken place is to list the directory with @kbd{C-u C-x C-d}
+(@pxref{ListDir,,Directory Listing}). This will show the file's
+current author. You should attempt to contact that person to warn him
+or her not to continue editing. Often the next step is to save the
+contents of your Emacs buffer under a different name, and use
+@code{diff} to compare the two files.@refill
+
+ Simultaneous editing checks are also made when you visit with @kbd{C-x
+C-f} a file that is already visited and when you start to modify a file.
+This is not strictly necessary, but it can cause you to find out about the
+problem earlier, when perhaps correction takes less work.
+
+@node Reverting, Auto Save, Saving, Files
+@section Reverting a Buffer
+@findex revert-buffer
+@cindex drastic changes
+
+ If you have made extensive changes to a file and then change your mind
+about them, you can get rid of them by reading in the previous version of
+the file. To do this, use @kbd{M-x revert-buffer}, which operates on the
+current buffer. Since this is a very dangerous thing to do, you must
+confirm it with @kbd{yes}.
+
+ If the current buffer has been auto-saved more recently than it has been
+saved for real, @code{revert-buffer} offers to read the auto save file
+instead of the visited file (@pxref{Auto Save}). This question comes
+before the usual request for confirmation, and demands @kbd{y} or @kbd{n}
+as an answer. If you have started to type @kbd{yes} for confirmation
+without realizing that the other question was going to be asked, the
+@kbd{y} will answer that question, but the @kbd{es} will not be valid
+confirmation. So you will have a chance to cancel the operation with
+@kbd{C-g} and try it again with the answers that you really intend.
+
+ @code{revert-buffer} keeps point at the same distance (measured in
+characters) from the beginning of the file. If the file was edited only
+slightly, you will be at approximately the same piece of text after
+reverting as before. If you have made drastic changes, the same value of
+point in the old file may address a totally different piece of text.
+
+ A buffer reverted from its visited file is marked ``not modified'' until
+another change is made.
+
+ Some kinds of buffers whose contents reflect data bases other than files,
+such as Dired buffers, can also be reverted. For them, reverting means
+recalculating their contents from the appropriate data base. Buffers
+created randomly with @kbd{C-x b} cannot be reverted; @code{revert-buffer}
+reports an error when asked to do so.
+
+@node Auto Save, ListDir, Reverting, Files
+@section Auto-Saving: Protection Against Disasters
+@cindex Auto-Save mode
+@cindex crashes
+
+ Emacs saves all the visited files from time to time (based on counting
+your keystrokes) without being asked. This is called @dfn{auto-saving}.
+It prevents you from losing more than a limited amount of work if the
+system crashes.
+
+ When Emacs determines that it is time for auto-saving, each buffer is
+considered, and is auto-saved if auto-saving is turned on for it and it has
+been changed since the last time it was auto-saved. If any auto-saving is
+done, the message @samp{Auto-saving...} is displayed in the echo area until
+auto-saving is finished. Errors occurring during auto-saving are caught
+so that they do not interfere with the execution of commands you have been
+typing.
+
+@menu
+* Files: Auto Save Files.
+* Control: Auto Save Control.
+* Recover:: Recovering text from auto-save files.
+@end menu
+
+@node Auto Save Files, Auto Save Control, Auto Save, Auto Save
+@subsection Auto-Save Files
+
+ Auto-saving does not normally save in the files that you visited, because
+it can be very undesirable to save a program that is in an inconsistent
+state when you have made half of a planned change. Instead, auto-saving
+is done in a different file called the @dfn{auto-save file}, and the
+visited file is changed only when you request saving explicitly (such as
+with @kbd{C-x C-s}).
+
+ Normally, the auto-save file name is made by appending @samp{#} to the
+front and rear of the visited file name. Thus, a buffer visiting file
+@file{foo.c} would be auto-saved in a file @file{#foo.c#}. Most buffers
+that are not visiting files are auto-saved only if you request it
+explicitly; when they are auto-saved, the auto-save file name is made by
+appending @samp{#%} to the front and @samp{#} to the rear of buffer name.
+For example, the @samp{*mail*} buffer in which you compose messages to be
+sent is auto-saved in a file named @file{#%*mail*#}. Auto-save file names
+are made this way unless you reprogram parts of Emacs to do something
+different (the functions @code{make-auto-save-file-name} and
+@code{auto-save-file-name-p}). The file name to be used for auto-saving
+in a buffer is calculated when auto-saving is turned on in that buffer.
+
+@vindex auto-save-visited-file-name
+ If you want auto-saving to be done in the visited file, set the variable
+@code{auto-save-visited-file-name} to be non-@code{nil}. In this mode,
+there is really no difference between auto-saving and explicit saving.
+
+@vindex delete-auto-save-files
+ A buffer's auto-save file is deleted when you save the buffer in its
+visited file. To inhibit this, set the variable @code{delete-auto-save-files}
+to @code{nil}. Changing the visited file name with @kbd{C-x C-w} or
+@code{set-visited-file-name} renames any auto-save file to go with
+the new visited name.
+
+@node Auto Save Control, Recover, Auto Save Files, Auto Save
+@subsection Controlling Auto-Saving
+
+@vindex auto-save-default
+@findex auto-save-mode
+ Each time you visit a file, auto-saving is turned on for that file's
+buffer if the variable @code{auto-save-default} is non-@code{nil} (but not
+in batch mode; @pxref{Entering Emacs}). The default for this variable is
+@code{t}, so auto-saving is the usual practice for file-visiting buffers.
+Auto-saving can be turned on or off for any existing buffer with the
+command @kbd{M-x auto-save-mode}. Like other minor mode commands, @kbd{M-x
+auto-save-mode} turns auto-saving on with a positive argument, off with a
+zero or negative argument; with no argument, it toggles.
+
+@vindex auto-save-interval
+@findex do-auto-save
+ Emacs does auto-saving periodically based on counting how many characters
+you have typed since the last time auto-saving was done. The variable
+@code{auto-save-interval} specifies how many characters there are between
+auto-saves. By default, it is 300. Emacs also auto-saves whenever you
+call the function @code{do-auto-save}.
+
+ Emacs also does auto-saving whenever it gets a fatal error. This
+includes killing the Emacs job with a shell command such as @code{kill
+%emacs}, or disconnecting a phone line or network connection.
+
+@node Recover,, Auto Save Control, Auto Save
+@subsection Recovering Data from Auto-Saves
+
+@findex recover-file
+ The way to use the contents of an auto-save file to recover from a loss
+of data is with the command @kbd{M-x recover-file @key{RET} @var{file}
+@key{RET}}. This visits @var{file} and then (after your confirmation)
+restores the contents from its auto-save file @file{#@var{file}#}. You
+can then save with @kbd{C-x C-s} to put the recovered text into @var{file}
+itself. For example, to recover file @file{foo.c} from its auto-save file
+@file{#foo.c#}, do:@refill
+
+@example
+M-x recover-file @key{RET} foo.c @key{RET}
+C-x C-s
+@end example
+
+ Before asking for confirmation, @kbd{M-x recover-file} displays a
+directory listing describing the specified file and the auto-save file,
+so you can compare their sizes and dates. If the auto-save file
+is older, @kbd{M-x recover-file} does not offer to read it.
+
+ Auto-saving is disabled by @kbd{M-x recover-file} because using
+this command implies that the auto-save file contains valuable data
+from a past session. If you save the data in the visited file and
+then go on to make new changes, you should turn auto-saving back on
+with @kbd{M-x auto-save-mode}.
+
+@node ListDir, Dired, Auto Save, Files
+@section Listing a File Directory
+
+@cindex file directory
+@cindex directory listing
+@cindex listing a directory
+ Files are classified by Unix into @dfn{directories}. A @dfn{directory
+listing} is a list of all the files in a directory. Emacs provides
+directory listings in brief format (file names only) and verbose format
+(sizes, dates, and authors included).
+
+@table @kbd
+@item C-x C-d @var{dir-or-pattern}
+Print a brief directory listing (@code{list-directory}).
+@item C-u C-x C-d @var{dir-or-pattern}
+Print a verbose directory listing.
+@end table
+
+@findex list-directory
+@kindex C-x C-d
+ The command to print a directory listing is @kbd{C-x C-d} (@code{list-directory}).
+It reads using the minibuffer a file name which is either a directory to be
+listed or a wildcard-containing pattern for the files to be listed. For
+example,
+
+@example
+C-x C-d /u2/emacs/etc @key{RET}
+@end example
+
+@noindent
+lists all the files in directory @file{/u2/emacs/etc}. An example of
+specifying a file name pattern is
+
+@example
+C-x C-d /u2/emacs/src/*.c @key{RET}
+@end example
+
+ Normally, @kbd{C-x C-d} prints a brief directory listing containing just
+file names. A numeric argument (regardless of value) tells it to print a
+verbose listing (like @code{ls -l}).
+
+@vindex list-directory-brief-switches
+@vindex list-directory-verbose-switches
+ The text of a directory listing is obtained by running @code{ls} in an
+inferior process. Two Emacs variables control the switches passed to
+@code{ls}: @code{list-directory-brief-switches} is a string giving the
+switches to use in brief listings (@code{"-CF"} by default), and
+@code{list-directory-verbose-switches} is a string giving the switches to
+use in a verbose listing (@code{"-l"} by default).
+
+@node Dired, Misc File Ops, ListDir, Files
+@section Dired, the Directory Editor
+@cindex Dired
+@cindex deletion (of files)
+
+ Dired makes it easy to delete or visit many of the files in a single
+directory at once. It makes an Emacs buffer containing a listing of the
+directory. You can use the normal Emacs commands to move around in this
+buffer, and special Dired commands to operate on the files.
+
+@menu
+* Enter: Dired Enter. How to invoke Dired.
+* Edit: Dired Edit. Editing the Dired buffer.
+* Deletion: Dired Deletion. Deleting files with Dired.
+* Immed: Dired Immed. Other file operations through Dired.
+@end menu
+
+@node Dired Enter, Dired Edit, Dired, Dired
+@subsection Entering Dired
+
+@findex dired
+@kindex C-x d
+@cindex Dired mode
+@vindex dired-listing-switches
+ To invoke dired, do @kbd{C-x d} or @kbd{M-x dired}. The command reads a
+directory name or wildcard file name pattern as a minibuffer argument just
+like the @code{list-directory} command, @kbd{C-x C-d}. Where @code{dired}
+differs from @code{list-directory} is in naming the buffer after the
+directory name or the wildcard pattern used for the listing, and putting
+the buffer into Dired mode so that the special commands of Dired are
+available in it. The variable @code{dired-listing-switches} is a string
+used as an argument to @code{ls} in making the directory; this string
+@i{must} contain @samp{-l}.
+
+@findex dired-other-window
+@kindex C-x 4 d
+ To display the Dired buffer in another window rather than in the selected
+window, use @kbd{C-x 4 d} (@code{dired-other-window)} instead of @kbd{C-x d}.
+
+@node Dired Edit, Dired Deletion, Dired Enter, Dired
+@subsection Editing in Dired
+
+ Once the Dired buffer exists, you can switch freely between it and other
+Emacs buffers. Whenever the Dired buffer is selected, certain special
+commands are provided that operate on files that are listed. The Dired
+buffer is ``read-only'', and inserting text in it is not useful, so
+ordinary printing characters such as @kbd{d} and @kbd{x} are used for Dired
+commands. Most Dired commands operate on the file described by the line
+that point is on. Some commands perform operations immediately; others
+``flag'' the file to be operated on later.
+
+ Most Dired commands that operate on the current line's file also treat a
+numeric argument as a repeat count, meaning to act on the files of the
+next few lines. A negative argument means to operate on the files of the
+preceding lines, and leave point on the first of those lines.
+
+ All the usual Emacs cursor motion commands are available in Dired
+buffers. Some special purpose commands are also provided. The keys
+@kbd{C-n} and @kbd{C-p} are redefined so that they try to position
+the cursor at the beginning of the filename on the line, rather than
+at the beginning of the line.
+
+ For extra convenience, @key{SPC} and @kbd{n} in Dired are equivalent to
+@kbd{C-n}. @kbd{p} is equivalent to @kbd{C-p}. Moving by lines is done so
+often in Dired that it deserves to be easy to type. @key{DEL} (move up and
+unflag) is often useful simply for moving up.@refill
+
+ The @kbd{g} command in Dired runs @code{revert-buffer} to reinitialize
+the buffer from the actual disk directory and show any changes made in the
+directory by programs other than Dired. All deletion flags in the Dired
+buffer are lost when this is done.
+
+@node Dired Deletion, Dired Immed, Dired Edit, Dired
+@subsection Deleting Files with Dired
+
+ The primary use of Dired is to flag files for deletion and then delete
+them.
+
+@table @kbd
+@item d
+Flag this file for deletion.
+@item u
+Remove deletion-flag on this line.
+@item @key{DEL}
+Remove deletion-flag on previous line, moving point to that line.
+@item x
+Delete the files that are flagged for deletion.
+@item #
+Flag all auto-save files (files whose names start and end with @samp{#})
+for deletion (@pxref{Auto Save}).
+@item ~
+Flag all backup files (files whose names end with @samp{~}) for deletion
+(@pxref{Backup}).
+@item .@: @r{(Period)}
+Flag excess numeric backup files for deletion. The oldest and newest
+few backup files of any one file are exempt; the middle ones are flagged.
+@end table
+
+ You can flag a file for deletion by moving to the line describing the
+file and typing @kbd{d} or @kbd{C-d}. The deletion flag is visible as a
+@samp{D} at the beginning of the line. Point is moved to the beginning of
+the next line, so that repeated @kbd{d} commands flag successive files.
+
+ The files are flagged for deletion rather than deleted immediately to
+avoid the danger of deleting a file accidentally. Until you direct Dired
+to delete the flagged files, you can remove deletion flags using the
+commands @kbd{u} and @key{DEL}. @kbd{u} works just like @kbd{d}, but
+removes flags rather than making flags. @key{DEL} moves upward, removing
+flags; it is like @kbd{u} with numeric argument automatically negated.
+
+ To delete the flagged files, type @kbd{x}. This command first displays a
+list of all the file names flagged for deletion, and requests confirmation
+with @kbd{yes}. Once you confirm, all the flagged files are deleted, and their
+lines are deleted from the text of the Dired buffer. The shortened Dired
+buffer remains selected. If you answer @kbd{no} or quit with @kbd{C-g}, you
+return immediately to Dired, with the deletion flags still present and no
+files actually deleted.
+
+ The @kbd{#}, @kbd{~} and @kbd{.} commands flag many files for
+deletion, based on their names. These commands are useful precisely
+because they do not actually delete any files; you can remove the
+deletion flags from any flagged files that you really wish to keep.@refill
+
+ @kbd{#} flags for deletion all files that appear to have been made by
+auto-saving (that is, files whose names begin and end with @samp{#}).
+@kbd{~} flags for deletion all files that appear to have been made as
+backups for files that were edited (that is, files whose names end with
+@samp{~}).
+
+@vindex dired-kept-versions
+ @kbd{.} (Period) flags just some of the backup files for deletion: only
+numeric backups that are not among the oldest few nor the newest few
+backups of any one file. Normally @code{dired-kept-versions} (not
+@code{kept-new-versions}; that applies only when saving) specifies the
+number of newest versions of each file to keep, and
+@code{kept-old-versions} specifies the number of oldest versions to keep.
+Period with a positive numeric argument, as in @kbd{C-u 3 .}, specifies the
+number of newest versions to keep, overriding @code{dired-kept-versions}.
+A negative numeric argument overrides @code{kept-old-versions}, using minus
+the value of the argument to specify the number of oldest versions of each
+file to keep.@refill
+
+@node Dired Immed,, Dired Deletion, Dired
+@subsection Immediate File Operations in Dired
+
+ Some file operations in Dired take place immediately when they are
+requested.
+
+@table @kbd
+@item c
+Copies the file described on the current line. You must supply a file name
+to copy to, using the minibuffer.
+@item f
+Visits the file described on the current line. It is just like typing
+@kbd{C-x C-f} and supplying that file name. If the file on this line is a
+subdirectory, @kbd{f} actually causes Dired to be invoked on that
+subdirectory. @xref{Visiting}.
+@item o
+Like @kbd{f}, but uses another window to display the file's buffer. The
+Dired buffer remains visible in the first window. This is like using
+@kbd{C-x 4 C-f} to visit the file. @xref{Windows}.
+@item r
+Renames the file described on the current line. You must supply a file
+name to rename to, using the minibuffer.
+@item v
+Views the file described on this line using @kbd{M-x view-file}. Viewing a
+file is like visiting it, but is slanted toward moving around in the file
+conveniently and does not allow changing the file. @xref{Misc File
+Ops,View File}. Viewing a file that is a directory runs Dired on that
+directory.@refill
+@end table
+
+@node Misc File Ops,, Dired, Files
+@section Miscellaneous File Operations
+
+ Emacs has commands for performing many other operations on files.
+All operate on one file; they do not accept wild card file names.
+
+@findex view-file
+@cindex viewing
+ @kbd{M-x view-file} allows you to scan or read a file by sequential
+screenfuls. It reads a file name argument using the minibuffer. After
+reading the file into an Emacs buffer, @code{view-file} reads and displays
+one windowful. You can then type @key{SPC} to scroll forward one windowful,
+or @key{DEL} to scroll backward. Various other commands are provided for
+moving around in the file, but none for changing it; type @kbd{C-h} while
+viewing for a list of them. They are mostly the same as normal Emacs
+cursor motion commands. To exit from viewing, type @kbd{C-c}.
+
+@findex insert-file
+ @kbd{M-x insert-file} inserts a copy of the contents of the specified
+file into the current buffer at point, leaving point unchanged before the
+contents and the mark after them. @xref{Mark}.
+
+@findex write-region
+@findex append-to-file
+ @kbd{M-x write-region} is the inverse of @kbd{M-x insert-file}; it copies
+the contents of the region into the specified file. @kbd{M-x append-to-file}
+adds the text of the region to the end of the specified file.
+
+@findex delete-file
+@cindex deletion (of files)
+ @kbd{M-x delete-file} deletes the specified file, like the @code{rm}
+command in the shell. If you are deleting many files in one directory, it
+may be more convenient to use Dired (@pxref{Dired}).
+
+@findex rename-file
+ @kbd{M-x rename-file} reads two file names @var{old} and @var{new} using
+the minibuffer, then renames file @var{old} as @var{new}. If a file named
+@var{new} already exists, you must confirm with @kbd{yes} or renaming is not
+done; this is because renaming causes the old meaning of the name @var{new}
+to be lost. If @var{old} and @var{new} are on different file systems, the
+file @var{old} is copied and deleted.
+
+@findex add-name-to-file
+ The similar command @kbd{M-x add-name-to-file} is used to add an
+additional name to an existing file without removing its old name.
+The new name must belong on the same file system that the file is on.
+
+@findex copy-file
+@cindex copying files
+ @kbd{M-x copy-file} reads the file @var{old} and writes a new file named
+@var{new} with the same contents. Confirmation is required if a file named
+@var{new} already exists, because copying has the consequence of overwriting
+the old contents of the file @var{new}.
+
+@findex make-symbolic-link
+ @kbd{M-x make-symbolic-link} reads two file names @var{old} and @var{linkname},
+and then creates a symbolic link named @var{linkname} and pointing at @var{old}.
+The effect is that future attempts to open file @var{linkname} will refer
+to whatever file is named @var{old} at the time the opening is done, or
+will get an error if the name @var{old} is not in use at that time.
+Confirmation is required when creating the link if @var{linkname} is in
+use. Note that not all systems support symbolic links.
+
+@node Buffers, Windows, Files, Top
+@chapter Using Multiple Buffers
+
+@cindex buffers
+ The text you are editing in Emacs resides in an object called a
+@dfn{buffer}. Each time you visit a file, a buffer is created to hold the
+file's text. Each time you invoke Dired, a buffer is created to hold the
+directory listing. If you send a message with @kbd{C-x m}, a buffer named
+@samp{*mail*} is used to hold the text of the message. When you ask for a
+command's documentation, that appears in a buffer called @file{*Help*}.
+
+@cindex selected buffer
+@cindex current buffer
+ At any time, one and only one buffer is @dfn{selected}. It is also
+called the @dfn{current buffer}. Often we say that a command operates on
+``the buffer'' as if there were only one; but really this means that the
+command operates on the selected buffer (most commands do).
+
+ When Emacs makes multiple windows, each window has a chosen buffer which
+is displayed there, but at any time only one of the windows is selected and
+its chosen buffer is the selected buffer. Each window's mode line displays
+the name of the buffer that the window is displaying (@pxref{Windows}).
+
+ Each buffer has a name, which can be of any length, and you can select
+any buffer by giving its name. Most buffers are made by visiting files,
+and their names are derived from the files' names. But you can also create
+an empty buffer with any name you want. A newly started Emacs has a buffer
+named @samp{*scratch*} which can be used for evaluating Lisp expressions in
+Emacs. The distinction between upper and lower case matters in buffer
+names.
+
+ Each buffer records individually what file it is visiting, whether it is
+modified, and what major mode and minor modes are in effect in it
+(@pxref{Major Modes}). Any Emacs variable can be made @dfn{local to} a
+particular buffer, meaning its value in that buffer can be different from
+the value in other buffers. @xref{Locals}.
+
+@menu
+* Select Buffer:: Creating a new buffer or reselecting an old one.
+* List Buffers:: Getting a list of buffers that exist.
+* Misc Buffer:: Renaming; changing read-onliness; copying text.
+* Kill Buffer:: Killing buffers you no longer need.
+* Several Buffers:: How to go through the list of all buffers
+ and operate variously on several of them.
+@end menu
+
+@node Select Buffer, List Buffers, Buffers, Buffers
+@section Creating and Selecting Buffers
+@cindex change buffers
+@cindex switch buffers
+
+@table @kbd
+@item C-x b @var{buffer} @key{RET}
+Select or create a buffer named @var{buffer} (@code{switch-to-buffer}).
+@item C-x 4 b @var{buffer} @key{RET}
+Similar, but select a buffer named @var{buffer} in another window
+(@code{switch-to-buffer-other-window}).
+@end table
+
+@kindex C-x 4 b
+@c @findex switch-to-buffer-other-window
+@kindex C-x b
+@findex switch-to-buffer
+ To select the buffer named @var{bufname}, type @kbd{C-x b @var{bufname}
+@key{RET}}. This is the command @code{switch-to-buffer} with argument
+@var{bufname}. You can use completion on an abbreviation for the buffer
+name you want (@pxref{Completion}). An empty argument to @kbd{C-x b}
+specifies the most recently selected buffer that is not displayed in any
+window.@refill
+
+ Most buffers are created by visiting files, or by Emacs commands that
+want to display some text, but you can also create a buffer explicitly by
+typing @kbd{C-x b @var{bufname} @key{RET}}. This makes a new, empty buffer which
+is not visiting any file, and selects it for editing. Such buffers are
+used for making notes to yourself. If you try to save one, you are asked
+for the file name to use. The new buffer's major mode is determined by the
+value of @code{default-major-mode} (@pxref{Major Modes}).
+
+ Note that @kbd{C-x C-f}, and any other command for visiting a file, can
+also be used to switch buffers. @xref{Visiting}.
+
+@node List Buffers, Misc Buffer, Select Buffer, Buffers
+@section Listing Existing Buffers
+
+@table @kbd
+@item C-x C-b
+List the existing buffers (@code{list-buffers}).
+@end table
+
+@kindex C-x C-b
+@findex list-buffers
+ To print a list of all the buffers that exist, type @kbd{C-x C-b}.
+Each line in the list shows one buffer's name, major mode and visited file.
+@samp{*} at the beginning of a line indicates the buffer is ``modified''.
+If several buffers are modified, it may be time to save some with @kbd{C-x
+s} (@pxref{Saving}). @samp{%} indicates a read-only buffer. @samp{.}
+marks the selected buffer. Here is an example of a buffer list:@refill
+
+@smallexample
+ MR Buffer Size Mode File
+ -- ------ ---- ---- ----
+.* emacs.tex 383402 Texinfo /u2/emacs/man/emacs.tex
+ *Help* 1287 Fundamental
+ files.el 23076 Emacs-Lisp /u2/emacs/lisp/files.el
+ % RMAIL 64042 RMAIL /u/rms/RMAIL
+ *% man 747 Dired
+ net.emacs 343885 Fundamental /u/rms/net.emacs
+ fileio.c 27691 C /u2/emacs/src/fileio.c
+ NEWS 67340 Text /u2/emacs/etc/NEWS
+ *scratch* 0 Lisp Interaction
+@end smallexample
+
+@noindent
+Note that the buffer @file{*Help*} was made by a help request; it is not
+visiting any file. The buffer @file{man} was made by Dired on the
+directory @file{/u2/emacs/man/}.
+
+@node Misc Buffer, Kill Buffer, List Buffers, Buffers
+@section Miscellaneous Buffer Operations
+
+@table @kbd
+@item C-x C-q
+Toggle read-only status of buffer (@code{toggle-read-only}).
+@item M-x rename-buffer
+Change the name of the current buffer.
+@item M-x view-buffer
+Scroll through a buffer.
+@end table
+
+@cindex read-only buffer
+@kindex C-x C-q
+@findex toggle-read-only
+@vindex buffer-read-only
+ A buffer can be @dfn{read-only}, which means that commands to change its
+text are not allowed. Normally, read-only buffers are made by subsystems
+such as Dired and Rmail that have special commands to operate on the text;
+a read-only buffer is also made if you visit a file that is protected so
+you cannot write it. If you wish to make changes in a read-only buffer,
+use the command @kbd{C-x C-q} (@code{toggle-read-only}). It makes a
+read-only buffer writable, and makes a writable buffer read-only. This
+works by setting the variable @code{buffer-read-only}, which has a local
+value in each buffer and makes the buffer read-only if its value is
+non-@code{nil}.
+
+@findex rename-buffer
+ @kbd{M-x rename-buffer} changes the name of the current buffer. Specify
+the new name as a minibuffer argument. There is no default. If you
+specify a name that is in use for some other buffer, an error happens and
+no renaming is done.
+
+@findex view-buffer
+@cindex View mode
+ @kbd{M-x view-buffer} is much like @kbd{M-x view-file} (@pxref{Misc File Ops})
+except that it examines an already existing Emacs buffer. View mode
+provides commands for scrolling through the buffer conveniently but not
+for changing it. When you exit View mode, the value of point that resulted
+from your perusal remains in effect.
+
+ The commands @kbd{C-x a} (@code{append-to-buffer}) and @kbd{M-x
+insert-buffer} can be used to copy text from one buffer to another.
+@xref{Accumulating Text}.@refill
+
+@node Kill Buffer, Several Buffers, Misc Buffer, Buffers
+@section Killing Buffers
+
+ After you use Emacs for a while, you may accumulate a large number of
+buffers. You may then find it convenient to eliminate the ones you no
+longer need. There are several commands provided for doing this.
+
+@c WideCommands
+@table @kbd
+@item C-x k
+Kill a buffer, specified by name (@code{kill-buffer}).
+@item M-x kill-some-buffers
+Offer to kill each buffer, one by one.
+@end table
+
+@findex kill-buffer
+@findex kill-some-buffers
+@kindex C-x k
+
+ @kbd{C-x k} (@code{kill-buffer}) kills one buffer, whose name you specify
+in the minibuffer. The default, used if you type just @key{RET} in the
+minibuffer, is to kill the current buffer. If the current buffer is
+killed, another buffer is selected; a buffer that has been selected
+recently but does not appear in any window now is chosen to be selected.
+If the buffer being killed is modified (has unsaved editing) then you are
+asked to confirm with @kbd{yes} before the buffer is killed.
+
+ The command @kbd{M-x kill-some-buffers} asks about each buffer, one by
+one. An answer of @kbd{y} means to kill the buffer. Killing the current
+buffer or a buffer containing unsaved changes selects a new buffer or asks
+for confirmation just like @code{kill-buffer}.
+
+@node Several Buffers,, Kill Buffer, Buffers
+@section Operating on Several Buffers
+@cindex buffer menu
+
+ The @dfn{buffer-menu} facility is like a ``Dired for buffers''; it allows
+you to request operations on various Emacs buffers by editing an Emacs
+buffer containing a list of them. You can save buffers, kill them
+(here called @dfn{deleting} them, for consistency with Dired), or display
+them.
+
+@table @kbd
+@item M-x buffer-menu
+Begin editing a buffer listing all Emacs buffers.
+@end table
+
+@findex buffer-menu
+@cindex Buffer Menu mode
+ The command @code{buffer-menu} writes a list of all Emacs buffers into
+the buffer @samp{*Buffer List*}, and selects that buffer in Buffer Menu
+mode. The buffer is read-only, and can only be changed through the special
+commands described in this section. Most of these commands are graphic
+characters. The usual Emacs cursor motion commands can be used in the
+@samp{*Buffer List*} buffer. The following special commands apply to the
+buffer described on the current line.
+
+@table @kbd
+@item d
+Request to delete (kill) the buffer, then move down. The request
+shows as a @samp{D} on the line, before the buffer name. Requested
+deletions take place when the @kbd{x} command is used.
+@item k
+Synonym for @kbd{d}.
+@item C-d
+Like @kbd{d} but move up afterwards instead of down.
+@item s
+Request to save the buffer. The request shows as an @samp{S} on the
+line. Requested saves take place when the @kbd{x} command is used.
+You may request both saving and deletion for the same buffer.
+@item ~
+Mark buffer ``unmodified''. The command @kbd{~} does this
+immediately when typed.
+@item x
+Perform previously requested deletions and saves.
+@item u
+Remove any request made for the current line, and move down.
+@item @key{DEL}
+Move to previous line and remove any request made for that line.
+@end table
+
+ All the commands that put in or remove flags to request later operations
+also move down a line, and accept a numeric argument as a repeat count,
+unless otherwise specified.
+
+ There are also special commands to use the buffer list to select another
+buffer, and to specify one or more other buffers for display in additional
+windows.
+
+@table @kbd
+@item 1
+Select the buffer in a full-screen window. This command takes effect
+immediately.
+@item 2
+Immediately set up two windows, with this buffer in one, and the
+previously selected buffer (aside from the buffer @samp{*Buffer List*})
+in the other.
+@item f
+Immediately select the buffer in place of the @samp{*Buffer List*} buffer.
+@item o
+Immediately select the buffer in another window as if by @w{@kbd{C-x 4 b}},
+leaving @samp{*Buffer List*} visible.
+@item q
+Immediately select this buffer, and also display in other windows any
+buffers previously flagged with the @kbd{m} command. If there are no
+such buffers, this command is equivalent to @kbd{1}.
+@item m
+Flag this buffer to be displayed in another window if the @kbd{q}
+command is used. The request shows as a @samp{>} at the beginning of
+the line. The same buffer may not have both a delete request and a
+display request.
+@end table
+
+ All that @code{buffer-menu} does directly is create and select a suitable
+buffer, and turn on Buffer Menu mode. Everything else described above is
+implemented by the special commands provided in Buffer Menu mode. One
+consequence of this is that you can switch from the @samp{*Buffer List*}
+buffer to another Emacs buffer, and edit there. You can reselect the
+@code{buffer-menu} buffer later, to perform the operations already
+requested, or you can kill it, or pay no further attention to it.
+
+ The only difference between @code{buffer-menu} and @code{list-buffers} is
+that @code{buffer-menu} selects the @samp{*Buffer List*} buffer and
+@code{list-buffers} does not. If you run @code{list-buffers} (that is,
+type @kbd{C-x C-b}) and select the buffer list manually, you can use all of
+the commands described here.
+
+@node Windows, Major Modes, Buffers, Top
+@chapter Multiple Windows
+@cindex windows
+
+ Emacs can split the screen into two or many windows, which can display
+parts of different buffers, or different parts of one buffer.
+
+@menu
+* Basic Window:: Introduction to Emacs windows.
+* Split Window:: New windows are made by splitting existing windows.
+* Other Window:: Moving to another window or doing something to it.
+* Pop Up Window:: Finding a file or buffer in another window.
+* Change Window:: Deleting windows and changing their sizes.
+@end menu
+
+@node Basic Window, Split Window, Windows, Windows
+@section Concepts of Emacs Windows
+
+ When multiple windows are being displayed, each window has an Emacs
+buffer designated for display in it. The same buffer may appear in more
+than one window; if it does, any changes in its text are displayed in all
+the windows where it appears. But the windows showing the same buffer can
+show different parts of it, because each window has its own value of point.
+
+@cindex selected window
+ At any time, one of the windows is the @dfn{selected window}; the buffer
+this window is displaying is the current buffer. The terminal's cursor
+shows the location of point in this window. Each other window has a
+location of point as well, but since the terminal has only one cursor there
+is no way to show where those locations are.
+
+ Commands to move point affect the value of point for the selected Emacs
+window only. They do not change the value of point in any other Emacs
+window, even one showing the same buffer. The same is true for commands
+such as @kbd{C-x b} to change the selected buffer in the selected window;
+they do not affect other windows at all. However, there are other commands
+such as @kbd{C-x 4 b} that select a different window and switch buffers in
+it. Also, all commands that display information in a window, including
+(for example) @w{@kbd{C-h f}} (@code{describe-function}) and @kbd{C-x C-b}
+(@code{list-buffers}), work by switching buffers in a nonselected window
+without affecting the selected window.
+
+ Each window has its own mode line, which displays the buffer name,
+modification status and major and minor modes of the buffer that is
+displayed in the window. @xref{Mode Line}, for full details on the mode
+line.
+
+@node Split Window, Other Window, Basic Window, Windows
+@section Splitting Windows
+
+@table @kbd
+@item C-x 2
+Split the selected window into two windows, one above the other
+(@code{split-window-vertically}).
+@item C-x 5
+Split the selected window into two windows positioned side by side
+(@code{split-window-horizontally}).
+@end table
+
+@kindex C-x 2
+@findex split-window-vertically
+ The command @kbd{C-x 2} (@code{split-window-vertically}) breaks the
+selected window into two windows, one above the other. Both windows start
+out displaying the same buffer, with the same value of point. By default
+the two windows each get half the height of the window that was split; a
+numeric argument specifies how many lines to give to the top window.
+
+@kindex C-x 5
+@findex split-window-horizontally
+ @kbd{C-x 5} (@code{split-window-horizontally}) breaks the selected
+window into two side-by-side windows. A numeric argument specifies
+how many columns to give the one on the left. A line of vertical bars
+separates the two windows. Windows that are not the full width of the
+screen have mode lines, but they are truncated; also, they do not
+always appear in inverse video, because, the Emacs display routines
+have not been taught how to display a region of inverse video that is
+only part of a line on the screen.
+
+@vindex truncate-partial-width-windows
+ When a window is less than the full width, text lines too long to fit are
+frequent. Continuing all those lines might be confusing. The variable
+@code{truncate-partial-width-windows} can be set non-@code{nil} to force
+truncation in all windows less than the full width of the screen,
+independent of the buffer being displayed and its value for
+@code{truncate-lines}. @xref{Continuation Lines}.@refill
+
+ Horizontal scrolling is often used in side-by-side windows.
+@xref{Display}.
+
+@node Other Window, Pop Up Window, Split Window, Windows
+@section Using Other Windows
+
+@table @kbd
+@item C-x o
+Select another window (@code{other-window}). That is @kbd{o}, not zero.
+@item C-M-v
+Scroll the next window (@code{scroll-other-window}).
+@item M-x compare-windows
+Find next place where the text in the selected window does not match
+the text in the next window.
+@end table
+
+@kindex C-x o
+@findex other-window
+ To select a different window, use @kbd{C-x o} (@code{other-window}).
+That is an @kbd{o}, for `other', not a zero. When there are more than two
+windows, this command moves through all the windows in a cyclic order,
+generally top to bottom and left to right. From the rightmost and
+bottommost window, it goes back to the one at the upper left corner. A
+numeric argument means to move several steps in the cyclic order of
+windows. A negative argument moves around the cycle in the opposite order.
+When the minibuffer is active, the minibuffer is the last window in the
+cycle; you can switch from the minibuffer window to one of the other
+windows, and later switch back and finish supplying the minibuffer argument
+that is requested. @xref{Minibuffer Edit}.
+
+@kindex C-M-v
+@findex scroll-other-window
+ The usual scrolling commands (@pxref{Display}) apply to the selected
+window only, but there is one command to scroll the next window.
+@kbd{C-M-v} (@code{scroll-other-window}) scrolls the window that @w{@kbd{C-x o}}
+would select. It takes arguments, positive and negative, like @kbd{C-v}.
+
+@findex compare-windows
+ The command @kbd{M-x compare-windows} compares the text in the current
+window with that in the next window. Comparison starts at point in each
+window. Point moves forward in each window, a character at a time in each
+window, until the next characters in the two windows are different. Then
+the command is finished.
+
+@node Pop Up Window, Change Window, Other Window, Windows
+@section Displaying in Another Window
+
+@kindex C-x 4
+ @kbd{C-x 4} is a prefix key for commands that select another window
+(splitting the window if there is only one) and select a buffer in that
+window. Different @kbd{C-x 4} commands have different ways of finding the
+buffer to select.
+
+@findex switch-to-buffer-other-window
+@findex find-file-other-window
+@findex find-tag-other-window
+@findex dired-other-window
+@findex mail-other-window
+@table @kbd
+@item C-x 4 b @var{bufname} @key{RET}
+Select buffer @var{bufname} in another window. This runs
+@code{switch-to-buffer-other-window}.
+@item C-x 4 f @var{filename} @key{RET}
+Visit file @var{filename} and select its buffer in another window. This
+runs @code{find-file-other-window}. @xref{Visiting}.
+@item C-x 4 d @var{directory} @key{RET}
+Select a Dired buffer for directory @var{directory} in another window.
+This runs @code{dired-other-window}. @xref{Dired}.
+@item C-x 4 m
+Start composing a mail message in another window. This runs
+@code{mail-other-window}, and its same-window version is @kbd{C-x m}
+(@pxref{Sending Mail}).
+@item C-x 4 .
+Find a tag in the current tag table in another window. This runs
+@code{find-tag-other-window}, the multiple-window variant of @kbd{M-.}
+(@pxref{Tags}).
+@end table
+
+@node Change Window,, Pop Up Window, Windows
+@section Deleting and Rearranging Windows
+
+@table @kbd
+@item C-x 0
+Get rid of the selected window (@code{kill-window}). That is a zero.
+@item C-x 1
+Get rid of all windows except the selected one (@code{delete-other-windows}).
+@item C-x ^
+Make the selected window taller, at the expense of the other(s)
+(@code{enlarge-window}).
+@item C-x @}
+Widen the selected window (@code{enlarge-window-horizontally}).
+@end table
+
+@kindex C-x 0
+@findex delete-window
+ To delete a window, type @kbd{C-x 0} (@code{delete-window}). (That is a
+zero.) The space occupied by the deleted window is distributed among the
+other active windows (but not the minibuffer window, even if that is active
+at the time). Once a window is deleted, its attributes are forgotten;
+there is no automatic way to make another window of the same shape or
+showing the same buffer. But the buffer continues to exist, and you can
+select it in any window with @kbd{C-x b}.
+
+@kindex C-x 1
+@findex delete-other-windows
+ @kbd{C-x 1} (@code{delete-other-windows}) is more powerful than @kbd{C-x 0};
+it deletes all the windows except the selected one (and the minibuffer);
+the selected window expands to use the whole screen except for the echo
+area.
+
+@kindex C-x ^
+@findex enlarge-window
+@kindex C-x @}
+@findex enlarge-window-horizontally
+@vindex window-min-height
+@vindex window-min-width
+ To readjust the division of space among existing windows, use @kbd{C-x ^}
+(@code{enlarge-window}). It makes the currently selected window get one
+line bigger, or as many lines as is specified with a numeric argument.
+With a negative argument, it makes the selected window smaller. @kbd{C-x
+@}} (@code{enlarge-window-horizontally}) makes the selected window wider
+by the specified number of columns. The extra screen space given to a
+window comes from one of its neighbors, if that is possible; otherwise, all
+the competing windows are shrunk in the same proportion. If this makes any
+windows too small, those windows are deleted and their space is divided up.
+The minimum size is specified by the variables @code{window-min-height} and
+@code{window-min-width}.
+
+@node Major Modes, Indentation, Windows, Top
+@chapter Major Modes
+@cindex major modes
+@kindex TAB
+@kindex DEL
+@kindex LFD
+
+ Emacs has many different @dfn{major modes}, each of which customizes
+Emacs for editing text of a particular sort. The major modes are mutually
+exclusive, and each buffer has one major mode at any time. The mode line
+normally contains the name of the current major mode, in parentheses.
+@xref{Mode Line}.
+
+ The least specialized major mode is called @dfn{Fundamental mode}. This
+mode has no mode-specific redefinitions or variable settings, so that each
+Emacs command behaves in its most general manner, and each option is in its
+default state. For editing any specific type of text, such as Lisp code or
+English text, you should switch to the appropriate major mode, such as Lisp
+mode or Text mode.
+
+ Selecting a major mode changes the meanings of a few keys to become more
+specifically adapted to the language being edited. The ones which are
+changed frequently are @key{TAB}, @key{DEL}, and @key{LFD}. In addition,
+the commands which handle comments use the mode to determine how comments
+are to be delimited. Many major modes redefine the syntactical properties
+of characters appearing in the buffer. @xref{Syntax}.
+
+ The major modes fall into three major groups. Lisp mode (which has
+several variants), C mode and Muddle mode are for specific programming
+languages. Text mode, Nroff mode, @TeX{} mode and Outline mode are for
+editing English text. The remaining major modes are not intended for use
+on users' files; they are used in buffers created for specific purposes by
+Emacs, such as Dired mode for buffers made by Dired (@pxref{Dired}), and
+Mail mode for buffers made by @kbd{C-x m} (@pxref{Sending Mail}), and Shell
+mode for buffers used for communicating with an inferior shell process
+(@pxref{Interactive Shell}).
+
+ Most programming language major modes specify that only blank lines
+separate paragraphs. This is so that the paragraph commands remain useful.
+@xref{Paragraphs}. They also cause Auto Fill mode to use the definition of
+@key{TAB} to indent the new lines it creates. This is because most lines
+in a program are usually indented. @xref{Indentation}.
+
+@menu
+* Choosing Modes:: How major modes are specified or chosen.
+@end menu
+
+@node Choosing Modes,,Major Modes,Major Modes
+@section How Major Modes are Chosen
+@cindex mode selection
+@cindex selection of mode
+@cindex choosing a mode
+
+ You can select a major mode explicitly for the current buffer, but
+most of the time Emacs determines which mode to use based on the file
+name or some text in the file.
+
+ Explicit selection of a new major mode is done with a @kbd{M-x} command.
+From the name of a major mode, add @code{-mode} to get the name of a
+command to select that mode. Thus, you can enter Lisp mode by executing
+@kbd{M-x lisp-mode}.
+
+@vindex auto-mode-alist
+ When you visit a file, Emacs usually chooses the right major mode based
+on the file's name. For example, files whose names end in @code{.c} are
+edited in C mode. The correspondence between file names and major mode is
+controlled by the variable @code{auto-mode-alist}. Its value is a list in
+which each element has the form
+
+@example
+(@var{regexp} . @var{mode-function})
+@end example
+
+@noindent
+For example, one element normally found in the list has the form
+@code{(@t{"\\.c$"} . c-mode)}, and it is responsible for selecting C mode
+for files whose names end in @file{.c}. (Note that @samp{\\} is needed in
+Lisp syntax to include a @samp{\} in the string, which is needed to
+suppress the special meaning of @samp{.} in regexps.) The only practical
+way to change this variable is with Lisp code.
+
+ You can specify which major mode should be used for editing a certain
+file by a special sort of text in the first nonblank line of the file. The
+mode name should appear in this line both preceded and followed by
+@samp{-*-}. Other text may appear on the line as well. For example,
+
+@example
+;-*-Lisp-*-
+@end example
+
+@noindent
+tells Emacs to use Lisp mode. Note how the semicolon is used to make Lisp
+treat this line as a comment. Such an explicit specification overrides any
+defaulting based on the file name.
+
+ Another format of mode specification is
+
+@example
+-*-Mode: @var{modename};-*-
+@end example
+
+@noindent
+which allows other things besides the major mode name to be specified.
+However, Emacs does not look for anything except the mode name.
+
+The major mode can also be specified in a local variables list.
+@xref{File Variables}.
+
+@vindex default-major-mode
+ When a file is visited that does not specify a major mode to use, or when
+a new buffer is created with @kbd{C-x b}, the major mode used is that
+specified by the variable @code{default-major-mode}. Normally this value
+is the symbol @code{fundamental-mode}, which specifies Fundamental mode.
+If @code{default-major-mode} is @code{nil}, the major mode is taken from
+the previously selected buffer.
+
+@findex normal-mode
+ The command @kbd{M-x normal-mode} recalculates the major mode from the
+visited file name and the contents of the buffer.
+
+@node Indentation, Text, Major Modes, Top
+@chapter Indentation
+@cindex indentation
+
+@c WideCommands
+@table @kbd
+@item @key{TAB}
+Indent current line ``appropriately'' in a mode-dependent fashion.
+@item @key{LFD}
+Perform @key{RET} followed by @key{TAB} (@code{newline-and-indent}).
+@item M-^
+Merge two lines (@code{delete-indentation}). This would cancel out
+the effect of @key{LFD}.
+@item C-M-o
+Split line at point; text on the line after point becomes a new line
+indented to the same column that it now starts in (@code{split-line}).
+@item M-m
+Move (forward or back) to the first nonblank character on the current
+line (@code{back-to-indentation}).
+@item C-M-\
+Indent several lines to same column (@code{indent-region}).
+@item C-x @key{TAB}
+Shift block of lines rigidly right or left (@code{indent-rigidly}).
+@item M-i
+Indent from point to the next prespecified tab stop column
+(@code{tab-to-tab-stop}).
+@item M-x indent-relative
+Indent from point to under an indentation point in the previous line.
+@end table
+
+@kindex TAB
+@cindex indentation
+ Most programming languages have some indentation convention. For Lisp
+code, lines are indented according to their nesting in parentheses. The
+same general idea is used for C code, though many details are different.
+
+ Whatever the language, to indent a line, use the @key{TAB} command. Each
+major mode defines this command to perform the sort of indentation
+appropriate for the particular language. In Lisp mode, @key{TAB} aligns
+the line according to its depth in parentheses. No matter where in the
+line you are when you type @key{TAB}, it aligns the line as a whole. In C
+mode, @key{TAB} implements a subtle and sophisticated indentation style that
+knows about many aspects of C syntax.
+
+@kindex TAB
+ In Text mode, @key{TAB} runs the command @code{tab-to-tab-stop}, which
+indents to the next tab stop column. You can set the tab stops with
+@kbd{M-x edit-tab-stops}.
+
+@menu
+* Indentation Commands:: Various commands and techniques for indentation.
+* Tab Stops:: You can set arbitrary "tab stops" and then
+ indent to the next tab stop when you want to.
+* Just Spaces:: You can request indentation using just spaces.
+@end menu
+
+@node Indentation Commands, Tab Stops, Indentation, Indentation
+@section Indentation Commands and Techniques
+@c ??? Explain what Emacs has instead of space-indent-flag.
+
+ If you just want to insert a tab character in the buffer, you can type
+@kbd{C-q @key{TAB}}.
+
+@kindex M-m
+@findex back-to-indentation
+@c !!! rewrote to prevent overfull hbox
+ To move over the indentation on a line, type @kbd{Meta-m}.
+This command, given anywhere on a line,
+positions point at the first nonblank character on the line
+(@code{back-to-indentation}).
+
+ To insert an indented line before the current line, do @kbd{C-a C-o
+@key{TAB}}. To make an indented line after the current line, use @kbd{C-e
+@key{LFD}}.
+
+@kindex C-M-o
+@findex split-line
+ @kbd{C-M-o} (@code{split-line}) moves the text from point to the end of
+the line vertically down, so that the current line becomes two lines.
+@kbd{C-M-o} first moves point forward over any spaces and tabs. Then it
+inserts after point a newline and enough indentation to reach the same
+column point is on. Point remains before the inserted newline; in this
+regard, @kbd{C-M-o} resembles @kbd{C-o}.
+
+@kindex M-\
+@kindex M-^
+@findex delete-horizontal-space
+@findex delete-indentation
+ To join two lines cleanly, use the @kbd{Meta-^}
+(@code{delete-indentation}) command to delete the indentation at the
+front of the current line, and the line boundary as well. They are
+replaced by a single space, or by no space if point after joining is at
+the beginning of a line or before a @samp{)} or after a @samp{(}. To
+delete just the indentation of a line, go to the beginning of the line
+and use @kbd{Meta-\} (@code{delete-horizontal-space}), which deletes all
+spaces and tabs around the cursor.
+
+@kindex C-M-\
+@kindex C-x TAB
+@findex indent-region
+@findex indent-rigidly
+ There are also commands for changing the indentation of several lines at
+once. @kbd{Control-Meta-\} (@code{indent-region}) gives each line which
+begins in the region the ``usual'' indentation by invoking @key{TAB} at the
+beginning of the line. A numeric argument specifies the column to indent
+to, and each line is shifted left or right so that its first nonblank
+character appears in that column. @kbd{C-x @key{TAB}}
+(@code{indent-rigidly}) moves all of the lines in the region right by its
+argument (left, for negative arguments). The whole group of lines moves
+rigidly sideways, which is how the command gets its name.@refill
+
+@findex indent-relative
+ @kbd{M-x indent-relative} indents at point based on the previous line
+(actually, the last nonempty line.) It inserts whitespace at point, moving
+point, until it is underneath an indentation point in the previous line.
+An indentation point is the end of a sequence of whitespace or the end of
+the line. If point is farther right than any indentation point in the
+previous line, the whitespace before point is deleted and the first
+indentation point then applicable is used. If no indentation point is
+applicable even then, @code{tab-to-tab-stop} is run (see next section).
+
+ @code{indent-relative} is the definition of @key{TAB} in Indented Text
+mode. @xref{Text}.
+
+@node Tab Stops, Just Spaces, Indentation Commands, Indentation
+@section Tab Stops
+
+@kindex M-i
+@findex tab-to-tab-stop
+ For typing in tables, you can use Text mode's definition of @key{TAB},
+@code{tab-to-tab-stop}. This command inserts indentation before point,
+enough to reach the next tab stop column. If you are not in Text mode,
+this function can be found on @kbd{M-i} anyway.
+
+@findex edit-tab-stops
+@findex edit-tab-stops-note-changes
+@kindex C-c C-c (Edit Tab Stops)
+@vindex tab-stop-list
+ The tab stops used by @kbd{M-i} can be set arbitrarily by the user.
+They are stored in a variable called @code{tab-stop-list}, as a list of
+column-numbers in increasing order.
+
+ The convenient way to set the tab stops is using @kbd{M-x edit-tab-stops},
+which creates and selects a buffer containing a description of the tab stop
+settings. You can edit this buffer to specify different tab stops, and
+then type @kbd{C-c C-c} to make those new tab stops take effect. In the
+tab stop buffer, @w{@kbd{C-c C-c}} runs the function
+@code{edit-tab-stops-note-changes} rather than its usual definition
+@code{save-buffer}. @code{edit-tab-stops} records which buffer was current
+when you invoked it, and stores the tab stops back in that buffer; normally
+all buffers share the same tab stops and changing them in one buffer
+affects all, but if you happen to make @code{tab-stop-list} local in one
+buffer then @code{edit-tab-stops} in that buffer will edit the local
+settings.
+
+ Here is what the text representing the tab stops looks like for ordinary
+tab stops every eight columns.
+
+@example
+ : : : : : :
+0 1 2 3 4
+0123456789012345678901234567890123456789012345678
+To install changes, type C-c C-c
+@end example
+
+ The first line contains a colon at each tab stop. The remaining lines
+are present just to help you see where the colons are and know what to do.
+
+ Note that the tab stops that control @code{tab-to-tab-stop} have nothing
+to do with displaying tab characters in the buffer. @xref{Display Vars},
+for more information on that.
+
+@node Just Spaces,, Tab Stops, Indentation
+@section Tabs vs. Spaces
+
+@vindex indent-tabs-mode
+ Emacs normally uses both tabs and spaces to indent lines. If you prefer,
+all indentation can be made from spaces only. To request this, set
+@code{indent-tabs-mode} to @code{nil}. This is a per-buffer variable;
+altering the variable affects only the current buffer, but there is a
+default value which you can change as well. @xref{Locals}.
+
+@findex tabify
+@findex untabify
+ There are also commands to convert tabs to spaces or vice versa, always
+preserving the columns of all nonblank text. @kbd{M-x tabify} scans the
+region for sequences of spaces, and converts sequences of at least three
+spaces to tabs if that can be done without changing indentation. @kbd{M-x
+untabify} changes all tabs in the region to appropriate numbers of spaces.
+
+@node Text, Programs, Indentation, Top
+@chapter Commands for Human Languages
+@cindex text
+
+ The term @dfn{text} has two widespread meanings in our area of the
+computer field. One is data that is a sequence of characters. Any file
+that you edit with Emacs is text, in this sense of the word. The other
+meaning is more restrictive: a sequence of characters in a human language
+for humans to read (possibly after processing by a text formatter), as
+opposed to a program or commands for a program.
+
+ Human languages have syntactic/stylistic conventions that can be
+supported or used to advantage by editor commands: conventions involving
+words, sentences, paragraphs, and capital letters. This chapter describes
+Emacs commands for all of these things. There are also commands for
+@dfn{filling}, or rearranging paragraphs into lines of approximately equal
+length. The commands for moving over and killing words, sentences
+and paragraphs, while intended primarily for editing text, are also often
+useful for editing programs.
+
+ Emacs has several major modes for editing human language text.
+If the file contains text pure and simple, use Text mode, which customizes
+Emacs in small ways for the syntactic conventions of text. For text which
+contains embedded commands for text formatters, Emacs has other major modes,
+each for a particular text formatter. Thus, for input to @TeX{}, you would
+use @TeX{} mode; for input to nroff, Nroff mode.
+
+@menu
+* Text Mode:: The major modes for editing text files.
+* Nroff Mode:: The major mode for editing input to the formatter nroff.
+* TeX Mode:: The major modes for editing input to the formatter TeX.
+* Outline Mode::The major mode for editing outlines.
+* Words:: Moving over and killing words.
+* Sentences:: Moving over and killing sentences.
+* Paragraphs:: Moving over paragraphs.
+* Pages:: Moving over pages.
+* Filling:: Filling or justifying text
+* Case:: Changing the case of text
+@end menu
+
+@node Text Mode, Words, Text, Text
+@section Text Mode
+
+@findex tab-to-tab-stop
+@findex edit-tab-stops
+@cindex Text mode
+@kindex TAB
+@findex text-mode
+ Editing files of text in a human language ought to be done using Text
+mode rather than Lisp or Fundamental mode. Invoke @kbd{M-x text-mode} to
+enter Text mode. In Text mode, @key{TAB} runs the function
+@code{tab-to-tab-stop}, which allows you to use arbitrary tab stops set
+with @kbd{M-x edit-tab-stops} (@pxref{Tab Stops}). Features concerned with
+comments in programs are turned off except when explicitly invoked. The
+syntax table is changed so that periods are not considered part of a word,
+while apostrophes, backspaces and underlines are.
+
+@findex indented-text-mode
+@cindex Indented Text mode
+ A similar variant mode is Indented Text mode, intended for editing text
+in which most lines are indented. This mode defines @key{TAB} to run
+@code{indent-relative} (@pxref{Indentation}), and makes Auto Fill indent
+the lines it creates. The result is that normally a line made by Auto
+Filling, or by @key{LFD}, is indented just like the previous line. Use
+@kbd{M-x indented-text-mode} to select this mode.
+
+@vindex text-mode-hook
+ Entering Text mode or Indented Text mode calls with no arguments the
+value of the variable @code{text-mode-hook}, if that value exists and is
+not @code{nil}. This value is also called when modes related to Text mode
+are entered; this includes Nroff mode, @TeX{} mode, Outline mode and Mail
+mode. Your hook can look at the value of @code{major-mode} to see which of
+these modes is actually being entered.
+
+@menu
+ Three modes similar to Text mode are of use for editing text that is to
+be passed through a text formatter before achieving the form in which
+humans are to read it.
+
+* Nroff Mode:: The nroff formatter typesets text.
+* TeX Mode:: The TeX formatter typesets text and mathematics.
+* Texinfo Mode::Texinfo provides both on-line information and printed output
+ from the same source file.
+
+ Another similar mode is used for editing outlines. It allows you
+to view the text at various levels of detail. You can view either
+the outline headings alone or both headings and text; you can also
+hide some of the headings at lower levels from view to make the high
+level structure more visible.
+
+* Outline Mode::The major mode for editing outlines.
+@end menu
+
+@node Nroff Mode, TeX Mode, Text Mode, Text Mode
+@subsection Nroff Mode
+
+@cindex nroff
+@cindex Nroff mode
+@findex nroff-mode
+ Nroff mode is a mode like Text mode but modified to handle nroff commands
+present in the text. Invoke @kbd{M-x nroff-mode} to enter this mode. It
+differs from Text mode in only a few ways. All nroff command lines are
+considered paragraph separators, so that filling will never garble the
+nroff commands. Pages are separated by @samp{.bp} commands. Comments
+start with backslash-doublequote. Also, three special commands are
+provided that are not in Text mode:
+
+@findex forward-text-line
+@findex backward-text-line
+@findex count-text-lines
+@kindex M-n
+@kindex M-p
+@kindex M-?
+@table @kbd
+@item M-n
+Move to the beginning of the next line that isn't an nroff command
+(@code{forward-text-line}). An argument is a repeat count.
+@item M-p
+Like @kbd{M-n} but move up (@code{backward-text-line}).
+@item M-?
+Prints in the echo area the number of text lines (lines that are not
+nroff commands) in the region (@code{count-text-lines}).
+@end table
+
+@cindex Electric Nroff mode
+@findex electric-nroff-mode
+ The other feature of Nroff mode is Electric Nroff newline mode. This
+is a minor mode that you can turn on or off with @kbd{M-x
+electric-nroff-mode} (@pxref{Minor Modes}). When the mode is on, each
+time you use @key{RET} to end a line that contains an nroff command that
+opens a kind of grouping, it also inserts the matching nroff command to
+close that grouping, on the following line. For example, if you are at
+the beginning of a line and type @kbd{.@: ( b @key{RET}}, this inserts
+the matching command @samp{.)b} on a new line following point.
+
+@vindex nroff-mode-hook
+ Entering Nroff mode calls with no arguments the value of the variable
+@code{text-mode-hook}, if that value exists and is not @code{nil}; then it
+does the same with the variable @code{nroff-mode-hook}.
+
+@node TeX Mode, Texinfo Mode, Nroff Mode, Text Mode
+@subsection @TeX{} Mode
+@cindex TeX
+@cindex LaTeX
+@cindex TeX mode
+@findex TeX-mode
+@findex tex-mode
+@findex plain-tex-mode
+@findex LaTeX-mode
+@findex plain-TeX-mode
+@findex latex-mode
+
+ @TeX{} is a powerful text formatter written by Donald Knuth; it is also
+free, like GNU Emacs. La@TeX{} is a simplified input format for @TeX{},
+implemented by @TeX{} macros. It comes with @TeX{}.@refill
+
+ Emacs has a special @TeX{} mode for editing @TeX{} input files.
+It provides facilities for checking the balance of delimiters and for
+invoking @TeX{} on all or part of the file.
+
+ @TeX{} mode has two variants, Plain @TeX{} mode and La@TeX{} mode
+(actually two distinct major modes which differ only slightly). They are
+designed for editing the two different input formats. The command @kbd{M-x
+tex-mode} looks at the contents of the buffer to determine whether the
+contents appear to be La@TeX{} input or not; it then selects the
+appropriate mode. If it can't tell which is right (e.g., the buffer is
+empty), the variable @code{TeX-default-mode} controls which mode is used.
+
+ The commands @kbd{M-x plain-tex-mode} and @kbd{M-x latex-mode} explicitly
+select the two variants of @TeX{} mode. Use these commands when @kbd{M-x
+tex-mode} does not guess right.@refill
+
+@menu
+* Editing: TeX Editing. Special commands for editing in TeX mode.
+* Printing: TeX Print. Commands for printing part of a file with TeX.
+@end menu
+
+@c !!! Here is information about obtaining TeX. Update it whenever.
+@c Last updated by RJC on 8 October 1992
+@c based on message from elisabet@@u.washington.edu
+ @TeX{} for Unix systems can be obtained from the University of Washington
+for a distribution fee.
+
+ To order a full distribution, send $200.00 for a 1/2-inch 9-track 1600
+bpi (@code{tar} or @code{cpio}) tape reel, or $210.00 for a 1/4-inch
+4-track QIC-24 (@code{tar} or @code{cpio}) cartridge, to:@refill
+
+@display
+Northwest Computing Support Center
+DR-10, Thomson Hall 35
+University of Washington
+Seattle, Washington 98195
+@end display
+
+@noindent
+Please make checks payable to the University of Washington.@refill
+
+ Prepaid orders are preferred but purchase orders are acceptable;
+however, purchase orders carry an extra charge of $10.00, to pay for
+processing.@refill
+
+ Overseas sites: please add to the base cost $20.00 for shipment via
+air parcel post, or $30.00 for shipment via courier.@refill
+
+ Please check with the Northwest Computing Support Center at the
+University of Washington for current prices and formats:@refill
+
+@example
+@group
+@r{telephone:} (206) 543-6259
+@r{email:} elisabet@@u.washington.edu
+@end group
+@end example
+
+@node TeX Editing,TeX Print,TeX Mode,TeX Mode
+@subsubsection @TeX{} Editing Commands
+
+ Here are the special commands provided in @TeX{} mode for editing the
+text of the file.
+
+@table @kbd
+@item "
+Insert, according to context, either @samp{@`@`} or @samp{"} or
+@samp{@'@'} (@code{TeX-insert-quote}).
+@item @key{LFD}
+Insert a paragraph break (two newlines) and check the previous
+paragraph for unbalanced braces or dollar signs
+(@code{TeX-terminate-paragraph}).
+@item M-x validate-TeX-buffer
+Check each paragraph in the buffer for unbalanced braces or dollar signs.
+@c !!! following generates acceptable underfull hbox
+@item M-@{
+Insert @samp{@{@}} and position point between them (@code{TeX-insert-braces}).
+@item M-@}
+Move forward past the next unmatched close brace (@code{up-list}).
+@item C-c C-f
+Close a block for La@TeX{} (@code{TeX-close-LaTeX-block}).
+@end table
+
+@findex TeX-insert-quote
+@kindex " (TeX mode)
+ In @TeX{}, the character @samp{"} is not normally used; use @samp{``}
+to start a quotation and @samp{''} to end one. @TeX{} mode defines the key
+@kbd{"} to insert @samp{``} after whitespace or an open brace, @samp{"}
+after a backslash, or @samp{''} otherwise. This is done by the command
+@code{TeX-insert-quote}. If you need the character @samp{"} itself in
+unusual contexts, use @kbd{C-q} to insert it. Also, @kbd{"} with a
+numeric argument always inserts that number of @samp{"} characters.
+
+ In @TeX{} mode, @samp{$} has a special syntax code which attempts to
+understand the way @TeX{} math mode delimiters match. When you insert a
+@samp{$} that is meant to exit math mode, the position of the matching
+@samp{$} that entered math mode is displayed for a second. This is the
+same feature that displays the open brace that matches a close brace that
+is inserted. However, there is no way to tell whether a @samp{$} enters
+math mode or leaves it; so when you insert a @samp{$} that enters math
+mode, the previous @samp{$} position is shown as if it were a match, even
+though they are actually unrelated.
+
+@findex TeX-insert-braces
+@kindex M-@{ (TeX mode)
+@findex up-list
+@kindex M-@} (TeX mode)
+ If you prefer to keep braces balanced at all times, you can use @kbd{M-@{}
+(@code{TeX-insert-braces}) to insert a pair of braces. It leaves point
+between the two braces so you can insert the text that belongs inside.
+Afterward, use the command @kbd{M-@}} (@code{up-list}) to move forward
+past the close brace.
+
+@findex validate-TeX-buffer
+@findex TeX-terminate-paragraph
+@kindex LFD (TeX mode)
+ There are two commands for checking the matching of braces. @key{LFD}
+(@code{TeX-terminate-paragraph}) checks the paragraph before point, and
+inserts two newlines to start a new paragraph. It prints a message in the
+echo area if any mismatch is found. @kbd{M-x validate-TeX-buffer} checks
+the entire buffer, paragraph by paragraph. When it finds a paragraph that
+contains a mismatch, it displays point at the beginning of the paragraph
+for a few seconds and pushes a mark at that spot. Scanning continues
+until the whole buffer has been checked or until you type another key.
+The positions of the last several paragraphs with mismatches can be
+found in the mark ring (@pxref{Mark Ring}).
+
+ Note that square brackets and parentheses are matched in @TeX{} mode, not
+just braces. This is wrong for the purpose of checking @TeX{} syntax.
+However, parentheses and square brackets are likely to be used in text as
+matching delimiters and it is useful for the various motion commands and
+automatic match display to work with them.
+
+@findex TeX-close-LaTeX-block
+@kindex C-c C-f (LaTeX mode)
+ In La@TeX{} input, @samp{\begin} and @samp{\end} commands must balance.
+After you insert a @samp{\begin}, use @kbd{C-c C-f}
+(@code{TeX-close-LaTeX-block}) to insert automatically a matching
+@samp{\end} (on a new line following the @samp{\begin}). A blank line is
+inserted between the two, and point is left there.@refill
+
+@node TeX Print,,TeX Editing,TeX Mode
+@subsubsection @TeX{} Printing Commands
+
+ You can invoke @TeX{} as an inferior of Emacs on either the entire
+contents of the buffer or just a region at a time. Running @TeX{} in
+this way on just one chapter is a good way to see what your changes
+look like without taking the time to format the entire file.
+
+@table @kbd
+@item C-c C-r
+Invoke @TeX{} on the current region, plus the buffer's header
+(@code{TeX-region}).
+@item C-c C-b
+Invoke @TeX{} on the entire current buffer (@code{TeX-buffer}).
+@item C-c C-l
+Recenter the window showing output from the inferior @TeX{} so that
+the last line can be seen (@code{TeX-recenter-output-buffer}).
+@item C-c C-k
+Kill the inferior @TeX{} (@code{TeX-kill-job}).
+@item C-c C-p
+Print the output from the last @kbd{C-c C-r} or @kbd{C-c C-b} command
+(@code{TeX-print}).
+@item C-c C-q
+Show the printer queue (@code{TeX-show-print-queue}).
+@end table
+
+@findex TeX-buffer
+@kindex C-c C-b (TeX mode)
+@findex TeX-print
+@kindex C-c C-p (TeX mode)
+@findex TeX-show-print-queue
+@kindex C-c C-q (TeX mode)
+ You can pass the current buffer through an inferior @TeX{} by means of
+@kbd{C-c C-b} (@code{TeX-buffer}). The formatted output appears in a file
+in @file{/tmp}; to print it, type @kbd{C-c C-p} (@code{TeX-print}).
+Afterward use @kbd{C-c C-q} (@code{TeX-show-print-queue}) to view the
+progress of your output towards being printed.
+
+@findex TeX-kill-job
+@kindex C-c C-k (TeX mode)
+@findex TeX-recenter-output-buffer
+@kindex C-c C-l (TeX mode)
+ The console output from @TeX{}, including any error messages, appears in a
+buffer called @samp{*TeX-shell*}. If @TeX{} gets an error, you can switch
+to this buffer and feed it input (this works as in Shell mode;
+@pxref{Interactive Shell}). Without switching to this buffer you can scroll
+it so that its last line is visible by typing @kbd{C-c C-l}.
+
+ Type @kbd{C-c C-k} (@code{TeX-kill-job}) to kill the @TeX{} process if
+you see that its output is no longer useful. Using @kbd{C-c C-b} or
+@kbd{C-c C-r} also kills any @TeX{} process still running.@refill
+
+@findex TeX-region
+@kindex C-c C-r (TeX mode)
+ You can also pass an arbitrary region through an inferior @TeX{} by typing
+@kbd{C-c C-r} (@code{TeX-region}). This is tricky, however, because most files
+of @TeX{} input contain commands at the beginning to set parameters and
+define macros, without which no later part of the file will format
+correctly. To solve this problem, @kbd{C-c C-r} allows you to designate a
+part of the file as containing essential commands; it is included before
+the specified region as part of the input to @TeX{}. The designated part
+of the file is called the @dfn{header}.
+
+@cindex header (TeX mode)
+ To indicate the bounds of the header in Plain @TeX{} mode, you insert two
+special strings in the file. Insert @samp{%**start of header} before the
+header, and @samp{%**end of header} after it. Each string must appear
+entirely on one line, but there may be other text on the line before or
+after. The lines containing the two strings are included in the header.
+If @samp{%**start of header} does not appear within the first 100 lines of
+the buffer, @kbd{C-c C-r} assumes that there is no header.
+
+ In La@TeX{} mode, the header begins with @samp{\documentstyle} and ends
+with @samp{\begin@{document@}}. These are commands that La@TeX{} requires
+you to use in any case, so nothing special needs to be done to identify the
+header.
+
+@vindex TeX-mode-hook
+@vindex LaTeX-mode-hook
+@vindex plain-TeX-mode-hook
+ Entering either kind of @TeX{} mode calls with no arguments the value of
+the variable @code{text-mode-hook}, if that value exists and is not
+@code{nil}; then it does the same with the variable @code{TeX-mode-hook}.
+Finally it does the same with either @code{plain-TeX-mode-hook} or
+@code{LaTeX-mode-hook}.
+
+@node Texinfo Mode, Outline Mode, TeX Mode, Text Mode
+@subsection Texinfo Mode
+@cindex Texinfo mode
+@findex texinfo-mode
+
+Texinfo is a documentation system that uses a single source file to
+produce both on-line information and printed output. This means that
+instead of writing two different documents, one for the on-line help or
+other on-line information and the other for a typeset manual or other
+printed work, you need write only one document. When the work is
+revised, you need revise only one document. (You can read the on-line
+information, known as an @dfn{Info file}, with an Info
+documentation-reading program. @inforef{Top, info, info}, for more
+information about Info.) Texinfo is the format in which documentation
+for GNU utilities and libraries is written.
+
+Texinfo mode provides special features for working with Texinfo files
+including utilities to construct Info menus and pointers automatically,
+keybindings to insert frequently used formatting commands, and
+keybindings for commands to format both for Info and for printing.
+
+Texinfo mode is described in @ref{Texinfo Mode, , Using Texinfo Mode,
+texinfo, Texinfo; The GNU Documentation Format}.
+
+@node Outline Mode,, Texinfo Mode, Text Mode
+@subsection Outline Mode
+@cindex Outline mode
+@cindex outlines
+@cindex selective display
+@cindex invisible lines
+
+@findex outline-mode
+ Outline mode is a major mode much like Text mode but intended for editing
+outlines. It allows you to make parts of the text temporarily invisible
+so that you can see just the overall structure of the outline. Type
+@kbd{M-x outline-mode} to turn on Outline mode in the current buffer.
+
+@vindex outline-mode-hook
+ Entering Outline mode calls with no arguments the value of the variable
+@code{text-mode-hook}, if that value exists and is not @code{nil}; then it
+does the same with the variable @code{outline-mode-hook}.
+
+ When a line is invisible in outline mode, it does not appear on the
+screen. The screen appears exactly as if the invisible line
+were deleted, except that an ellipsis (three periods in a row) appears
+at the end of the previous visible line (only one ellipsis no matter
+how many invisible lines follow).
+
+ All editing commands treat the text of the invisible line as part of the
+previous visible line. For example, @kbd{C-n} moves onto the next visible
+line. Killing an entire visible line, including its terminating newline,
+really kills all the following invisible lines along with it; yanking it
+all back yanks the invisible lines and they remain invisible.
+
+@menu
+* Format: Outline Format. What the text of an outline looks like.
+* Motion: Outline Motion. Special commands for moving through outlines.
+* Visibility: Outline Visibility. Commands to control what is visible.
+@end menu
+
+@node Outline Format,Outline Motion,Outline Mode, Outline Mode
+@subsubsection Format of Outlines
+
+@cindex heading lines (Outline mode)
+@cindex body lines (Outline mode)
+ Outline mode assumes that the lines in the buffer are of two types:
+@dfn{heading lines} and @dfn{body lines}. A heading line represents a topic in the
+outline. Heading lines start with one or more stars; the number of stars
+determines the depth of the heading in the outline structure. Thus, a
+heading line with one star is a major topic; all the heading lines with
+two stars between it and the next one-star heading are its subtopics; and
+so on. Any line that is not a heading line is a body line. Body lines
+belong to the preceding heading line. Here is an example:
+
+@example
+* Food
+
+This is the body,
+which says something about the topic of food.
+
+** Delicious Food
+
+This is the body of the second-level header.
+
+** Distasteful Food
+
+This could have
+a body too, with
+several lines.
+
+*** Dormitory Food
+
+* Shelter
+
+A second first-level topic with its header line.
+@end example
+
+ A heading line together with all following body lines is called
+collectively an @dfn{entry}. A heading line together with all following
+deeper heading lines and their body lines is called a @dfn{subtree}.
+
+@vindex outline-regexp
+ You can customize the criterion for distinguishing heading lines
+by setting the variable @code{outline-regexp}. Any line whose
+beginning has a match for this regexp is considered a heading line.
+Matches that start within a line (not at the beginning) do not count.
+The length of the matching text determines the level of the heading;
+longer matches make a more deeply nested level. Thus, for example,
+if a text formatter has commands @samp{@@chapter}, @samp{@@section}
+and @samp{@@subsection} to divide the document into chapters and
+sections, you could make those lines count as heading lines by
+setting @code{outline-regexp} to @samp{"@@chap\\|@@\\(sub\\)*section"}.
+Note the trick: the two words @samp{chapter} and @samp{section} are equally
+long, but by defining the regexp to match only @samp{chap} we ensure
+that the length of the text matched on a chapter heading is shorter,
+so that Outline mode will know that sections are contained in chapters.
+This works as long as no other command starts with @samp{@@chap}.
+
+ Outline mode makes a line invisible by changing the newline before it
+into an @sc{ascii} Control-M (code 015). Most editing commands that work on
+lines treat an invisible line as part of the previous line because,
+strictly speaking, it @i{is} part of that line, since there is no longer a
+newline in between. When you save the file in Outline mode, Control-M
+characters are saved as newlines, so the invisible lines become ordinary
+lines in the file. But saving does not change the visibility status of a
+line inside Emacs.
+
+@node Outline Motion,Outline Visibility,Outline Format,Outline Mode
+@subsubsection Outline Motion Commands
+
+ There are some special motion commands in Outline mode that move
+backward and forward to heading lines.
+
+@table @kbd
+@item C-c C-n
+Move point to the next visible heading line
+(@code{outline-next-visible-heading}).
+@c !!! following generates acceptable underfull hbox
+@item C-c C-p
+Move point to the previous visible heading line
+(@code{outline-previous-visible-heading}).
+@item C-c C-f
+Move point to the next visible heading line at the same level
+as the one point is on (@code{outline-forward-same-level}).
+@item C-c C-b
+Move point to the previous visible heading line at the same level
+(@code{outline-backward-same-level}).
+@item C-c C-u
+Move point up to a lower-level (more inclusive) visible heading line
+(@code{outline-up-heading}).
+@end table
+
+@findex outline-next-visible-heading
+@findex outline-previous-visible-heading
+@kindex C-c C-n (Outline mode)
+@kindex C-c C-p (Outline mode)
+ @kbd{C-c C-n} (@code{next-visible-heading}) moves down to the next
+heading line. @kbd{C-c C-p} (@code{previous-visible-heading}) moves
+similarly backward. Both accept numeric arguments as repeat counts. The
+names emphasize that invisible headings are skipped, but this is not really
+a special feature. All editing commands that look for lines ignore the
+invisible lines automatically.@refill
+
+@findex outline-up-heading
+@findex outline-forward-same-level
+@findex outline-backward-same-level
+@kindex C-c C-f (Outline mode)
+@kindex C-c C-b (Outline mode)
+@kindex C-c C-u (Outline mode)
+@c !!! written verbosely to prevent overfull hbox
+ More advanced motion commands understand the levels of headings.
+The two commands, @kbd{C-c C-f} (@code{outline-forward-same-level}) and
+@kbd{C-c C-b} (@code{outline-backward-same-level}), move from one
+heading line to another visible heading at the same depth in
+the outline. @kbd{C-c C-u} (@code{outline-up-heading}) moves
+backward to another heading that is less deeply nested.
+
+@node Outline Visibility,,Outline Motion,Outline Mode
+@subsubsection Outline Visibility Commands
+
+ The other special commands of outline mode are used to make lines visible
+or invisible. Their names all start with @code{hide} or @code{show}.
+Most of them fall into pairs of opposites. They are not undoable; instead,
+you can undo right past them. Making lines visible or invisible is simply
+not recorded by the undo mechanism.
+
+@table @kbd
+@item M-x hide-body
+Make all body lines in the buffer invisible.
+@item M-x show-all
+Make all lines in the buffer visible.
+@item C-c C-h
+Make everything under this heading invisible, not including this
+heading itself (@code{hide-subtree}).
+@item C-c C-s
+Make everything under this heading visible, including body,
+subheadings, and their bodies (@code{show-subtree}).
+@item M-x hide-leaves
+Make the body of this heading line, and of all its subheadings,
+invisible.
+@item M-x show-branches
+Make all subheadings of this heading line, at all levels, visible.
+@item C-c C-i
+Make immediate subheadings (one level down) of this heading line
+visible (@code{show-children}).
+@item M-x hide-entry
+Make this heading line's body invisible.
+@item M-x show-entry
+Make this heading line's body visible.
+@end table
+
+@findex hide-entry
+@findex show-entry
+ Two commands that are exact opposites are @kbd{M-x hide-entry} and
+@kbd{M-x show-entry}. They are used with point on a heading line, and
+apply only to the body lines of that heading. The subtopics and their
+bodies are not affected.
+
+@findex hide-subtree
+@findex show-subtree
+@kindex C-c C-s (Outline mode)
+@kindex C-c C-h (Outline mode)
+@cindex subtree (Outline mode)
+ Two more powerful opposites are @kbd{C-c C-h} (@code{hide-subtree}) and
+@kbd{C-c C-s} (@code{show-subtree}). Both expect to be used when point is
+on a heading line, and both apply to all the lines of that heading's
+@dfn{subtree}: its body, all its subheadings, both direct and indirect, and
+all of their bodies. In other words, the subtree contains everything
+following this heading line, up to and not including the next heading of
+the same or higher rank.@refill
+
+@findex hide-leaves
+@findex show-branches
+ Intermediate between a visible subtree and an invisible one is having
+all the subheadings visible but none of the body. There are two commands
+for doing this, depending on whether you want to hide the bodies or
+make the subheadings visible. They are @kbd{M-x hide-leaves} and
+@kbd{M-x show-branches}.
+
+@kindex C-c C-i (Outline mode)
+@findex show-children
+ A little weaker than @code{show-branches} is @kbd{C-c C-i}
+(@code{show-children}). It makes just the direct subheadings
+visible---those one level down. Deeper subheadings remain invisible, if
+they were invisible.@refill
+
+@findex hide-body
+@findex show-all
+ Two commands have a blanket effect on the whole file. @kbd{M-x hide-body}
+makes all body lines invisible, so that you see just the outline structure.
+@kbd{M-x show-all} makes all lines visible. These commands can be thought
+of as a pair of opposites even though @kbd{M-x show-all} applies to more
+than just body lines.
+
+@vindex selective-display-ellipses
+ The use of ellipses at the ends of visible lines can be turned off
+by setting @code{selective-display-ellipses} to @code{nil}. Then there
+is no visible indication of the presence of invisible lines.
+
+@node Words, Sentences, Text Mode, Text
+@section Words
+@cindex words
+@cindex Meta
+
+ Emacs has commands for moving over or operating on words. By convention,
+the keys for them are all @kbd{Meta-} characters.
+
+@c widecommands
+@table @kbd
+@item M-f
+Move forward over a word (@code{forward-word}).
+@item M-b
+Move backward over a word (@code{backward-word}).
+@item M-d
+Kill up to the end of a word (@code{kill-word}).
+@item M-@key{DEL}
+Kill back to the beginning of a word (@code{backward-kill-word}).
+@item M-@@
+Mark the end of the next word (@code{mark-word}).
+@item M-t
+Transpose two words; drag a word forward
+or backward across other words (@code{transpose-words}).
+@end table
+
+ Notice how these keys form a series that parallels the
+character-based @kbd{C-f}, @kbd{C-b}, @kbd{C-d}, @kbd{C-t} and
+@key{DEL}. @kbd{M-@@} is related to @kbd{C-@@}, which is an alias for
+@kbd{C-@key{SPC}}.@refill
+
+@kindex M-f
+@kindex M-b
+@findex forward-word
+@findex backward-word
+ The commands @kbd{Meta-f} (@code{forward-word}) and @kbd{Meta-b}
+(@code{backward-word}) move forward and backward over words. They are thus
+analogous to @kbd{Control-f} and @kbd{Control-b}, which move over single
+characters. Like their @kbd{Control-} analogues, @kbd{Meta-f} and
+@kbd{Meta-b} move several words if given an argument. @kbd{Meta-f} with a
+negative argument moves backward, and @kbd{Meta-b} with a negative argument
+moves forward. Forward motion stops right after the last letter of the
+word, while backward motion stops right before the first letter.@refill
+
+@kindex M-d
+@findex kill-word
+ @kbd{Meta-d} (@code{kill-word}) kills the word after point. To be
+precise, it kills everything from point to the place @kbd{Meta-f} would
+move to. Thus, if point is in the middle of a word, @kbd{Meta-d} kills
+just the part after point. If some punctuation comes between point and the
+next word, it is killed along with the word. (If you wish to kill only the
+next word but not the punctuation before it, simply do @kbd{Meta-f} to get
+the end, and kill the word backwards with @kbd{Meta-@key{DEL}}.)
+@kbd{Meta-d} takes arguments just like @kbd{Meta-f}.
+
+@findex backward-kill-word
+@kindex M-DEL
+ @kbd{Meta-@key{DEL}} (@code{backward-kill-word}) kills the word before
+point. It kills everything from point back to where @kbd{Meta-b} would
+move to. If point is after the space in @w{@samp{FOO, BAR}}, then
+@w{@samp{FOO, }} is killed. (If you wish to kill just @samp{FOO}, do
+@kbd{Meta-b Meta-d} instead of @kbd{Meta-@key{DEL}}.)
+
+@cindex transposition
+@kindex M-t
+@findex transpose-words
+ @kbd{Meta-t} (@code{transpose-words}) exchanges the word before or
+containing point with the following word. The delimiter characters between
+the words do not move. For example, @w{@samp{FOO, BAR}} transposes into
+@w{@samp{BAR, FOO}} rather than @samp{@w{BAR FOO,}}. @xref{Transpose}, for
+more on transposition and on arguments to transposition commands.
+
+@kindex M-@@
+@findex mark-word
+ To operate on the next @var{n} words with an operation which applies
+between point and mark, you can either set the mark at point and then move
+over the words, or you can use the command @kbd{Meta-@@} (@code{mark-word})
+which does not move point, but sets the mark where @kbd{Meta-f} would move
+to. It can be given arguments just like @kbd{Meta-f}.
+
+@cindex syntax table
+ The word commands' understanding of syntax is completely controlled by
+the syntax table. Any character can, for example, be declared to be a word
+delimiter. @xref{Syntax}.
+
+@node Sentences, Paragraphs, Words, Text
+@section Sentences
+@cindex sentences
+
+ The Emacs commands for manipulating sentences and paragraphs are mostly
+on @kbd{Meta-} keys, so as to be like the word-handling commands.
+
+@table @kbd
+@item M-a
+@c !!! added @* to prevent overfull hbox
+Move back to the beginning of the sentence@*
+(@code{backward-sentence}).
+@item M-e
+Move forward to the end of the sentence (@code{forward-sentence}).
+@item M-k
+Kill forward to the end of the sentence (@code{kill-sentence}).
+@item C-x @key{DEL}
+Kill back to the beginning of the sentence (@code{backward-kill-sentence}).
+@end table
+
+@kindex M-a
+@kindex M-e
+@findex backward-sentence
+@findex forward-sentence
+ The commands @kbd{Meta-a} and @kbd{Meta-e} (@code{backward-sentence} and
+@code{forward-sentence}) move to the beginning and end of the current
+sentence, respectively. They were chosen to resemble @kbd{Control-a} and
+@kbd{Control-e}, which move to the beginning and end of a line. Unlike
+them, @kbd{Meta-a} and @w{@kbd{Meta-e}} if repeated or given numeric arguments
+move over successive sentences. Emacs assumes that the typist's convention
+is followed, and thus considers a sentence to end wherever there is a
+@samp{.}, @samp{?} or @samp{!} followed by the end of a line or two spaces,
+with any number of @samp{)}, @samp{]}, @samp{'}, or @samp{"} characters
+allowed in between. A sentence also begins or ends wherever a paragraph
+begins or ends.
+
+ Neither @kbd{M-a} nor @kbd{M-e} moves past the newline or spaces beyond
+the sentence edge at which it is stopping.
+
+@kindex M-k
+@kindex C-x DEL
+@findex kill-sentence
+@findex backward-kill-sentence
+ Just as @kbd{C-a} and @kbd{C-e} have a kill command, @kbd{C-k}, to go
+with them, so @kbd{M-a} and @kbd{M-e} have a corresponding kill command
+@kbd{M-k} (@code{kill-sentence}) which kills from point to the end of the
+sentence. With minus one as an argument it kills back to the beginning of
+the sentence. Larger arguments serve as a repeat count.@refill
+
+ There is a special command, @kbd{C-x @key{DEL}}
+(@code{backward-kill-sentence}) for killing back to the beginning of a
+sentence, because this is useful when you change your mind in the middle of
+composing text.@refill
+
+@vindex sentence-end
+ The variable @code{sentence-end} controls recognition of the end of a
+sentence. It is a regexp that matches the last few characters of a
+sentence, together with the whitespace following the sentence. Its
+normal value is
+
+@example
+"[.?!][]\"')]*\\($\\|\t\\| \\)[ \t\n]*"
+@end example
+
+@noindent
+This example is explained in the section on regexps. @xref{Regexps}.
+
+@node Paragraphs, Pages, Sentences, Text
+@section Paragraphs
+@cindex paragraphs
+@kindex M-[
+@kindex M-]
+@findex backward-paragraph
+@findex forward-paragraph
+
+ The Emacs commands for manipulating paragraphs are also @kbd{Meta-}
+keys.
+
+@table @kbd
+@item M-[
+@c !!! added @* to prevent overfull hbox
+Move back to previous paragraph beginning@*
+(@code{backward-paragraph}).
+@item M-]
+Move forward to next paragraph end (@code{forward-paragraph}).
+@item M-h
+Put point and mark around this or next paragraph (@code{mark-paragraph}).
+@end table
+
+ @kbd{Meta-[} moves to the beginning of the current or previous paragraph,
+while @kbd{Meta-]} moves to the end of the current or next paragraph.
+Blank lines and text formatter command lines separate paragraphs and are
+not part of any paragraph. Also, an indented line starts a new
+paragraph.
+
+ In major modes for programs (as opposed to Text mode), paragraphs begin
+and end only at blank lines. This makes the paragraph commands continue to
+be useful even though there are no paragraphs per se.
+
+ When there is a fill prefix, then paragraphs are delimited by all lines
+which don't start with the fill prefix. @xref{Filling}.
+
+@kindex M-h
+@findex mark-paragraph
+ When you wish to operate on a paragraph, you can use the command
+@kbd{Meta-h} (@code{mark-paragraph}) to set the region around it. This
+command puts point at the beginning and mark at the end of the paragraph
+point was in. If point is between paragraphs (in a run of blank lines, or
+at a boundary), the paragraph following point is surrounded by point and
+mark. If there are blank lines preceding the first line of the paragraph,
+one of these blank lines is included in the region. Thus, for example,
+@kbd{M-h C-w} kills the paragraph around or after point.
+
+@vindex paragraph-start
+@vindex paragraph-separate
+@c !!! Written verbosely to avoid overfull hbox
+ The precise definition of a paragraph boundary is controlled by the
+two variables @code{paragraph-separate} and @code{paragraph-start}. The value
+of @code{paragraph-start} is a regexp that should match any line that
+either starts or separates paragraphs. The value of
+@code{paragraph-separate} is another regexp that should match only lines
+that separate paragraphs without being part of any paragraph. Lines that
+start a new paragraph and are contained in it must match both regexps. For
+example, normally @code{paragraph-start} is @w{@code{"^[ @t{\}t@t{\}n@t{\}f]"}}
+and @code{paragraph-separate} is @w{@code{"^[ @t{\}t@t{\}f]*$"}}.
+
+ Normally it is desirable for page boundaries to separate paragraphs.
+The default values of these variables recognize the usual separator for
+pages.
+
+@node Pages, Filling, Paragraphs, Text
+@section Pages
+
+@cindex pages
+@cindex formfeed
+ Files are often thought of as divided into @dfn{pages} by the
+@dfn{formfeed} character (@sc{ascii} Control-L, octal code 014). For example,
+if a file is printed on a line printer, each page of the file, in this
+sense, will start on a new page of paper. Emacs treats a page-separator
+character just like any other character. It can be inserted with @kbd{C-q
+C-l}, or deleted with @key{DEL}. Thus, you are free to paginate your file
+or not. However, since pages are often meaningful divisions of the file,
+commands are provided to move over them and operate on them.
+
+@c WideCommands
+@table @kbd
+@item C-x [
+Move point to previous page boundary (@code{backward-page}).
+@item C-x ]
+Move point to next page boundary (@code{forward-page}).
+@item C-x C-p
+Put point and mark around this page (or another page) (@code{mark-page}).
+@item C-x l
+Count the lines in this page (@code{count-lines-page}).
+@end table
+
+@kindex C-x [
+@kindex C-x ]
+@findex forward-page
+@findex backward-page
+ The @kbd{C-x [} (@code{backward-page}) command moves point to immediately
+after the previous page delimiter. If point is already right after a page
+delimiter, it skips that one and stops at the previous one. A numeric
+argument serves as a repeat count. The @kbd{C-x ]} (@code{forward-page})
+command moves forward past the next page delimiter.
+
+@kindex C-x C-p
+@findex mark-page
+ The @kbd{C-x C-p} command (@code{mark-page}) puts point at the beginning
+of the current page and the mark at the end. The page delimiter at the end
+is included (the mark follows it). The page delimiter at the front is
+excluded (point follows it). This command can be followed by @kbd{C-w} to
+kill a page which is to be moved elsewhere. If it is inserted after a page
+delimiter, at a place where @kbd{C-x ]} or @kbd{C-x [} would take you, then
+the page will be properly delimited before and after once again.
+
+ A numeric argument to @kbd{C-x C-p} is used to specify which page to go
+to, relative to the current one. Zero means the current page. One means
+the next page, and @minus{}1 means the previous one.
+
+@kindex C-x l
+@findex count-lines-page
+ The @kbd{C-x l} command (@code{count-lines-page}) is good for deciding
+where to break a page in two. It prints in the echo area the total number
+of lines in the current page, and then divides it up into those preceding
+the current line and those following, as in
+
+@example
+Page has 96 (72+25) lines
+@end example
+
+@noindent
+ Notice that the sum is off by one; this is correct if point is not at the
+beginning of a line.
+
+@vindex page-delimiter
+ The variable @code{page-delimiter} should have as its value a regexp that
+matches the beginning of a line that separates pages. This is what defines
+where pages begin. The normal value of this variable is @code{"^@t{\}f"},
+which matches a formfeed character at the beginning of a line.
+
+@node Filling, Case, Pages, Text
+@section Filling Text
+@cindex filling
+@cindex wrapping
+
+ With Auto Fill mode, text can be @dfn{filled} (broken up into lines
+that fit in a specified width) as you insert it. If you alter existing
+text it may no longer be properly filled; then explicit commands for
+filling can be used. (Filling is sometimes called ``wrapping'' in the
+terminology used for other text editors, but we don't use that term,
+because it could just as well refer to the continuation of long lines
+which happens in Emacs if you @emph{don't} fill them.)
+
+@menu
+* Auto Fill:: Auto Fill mode breaks long lines automatically.
+* Fill Commands:: Commands to refill paragraphs and center lines.
+* Fill Prefix:: Filling when every line is indented or in a comment, etc.
+@end menu
+
+@node Auto Fill, Fill Commands, Filling, Filling
+@subsection Auto Fill Mode
+@cindex Auto Fill mode
+
+ @dfn{Auto Fill} mode is a minor mode in which lines are broken
+automatically when they become too wide. Breaking happens only when
+you type a @key{SPC} or @key{RET}.
+
+@table @kbd
+@item M-x auto-fill-mode
+Enable or disable Auto Fill mode.
+@item @key{SPC}
+@itemx @key{RET}
+In Auto Fill mode, break lines when appropriate.
+@end table
+
+@findex auto-fill-mode
+ @kbd{M-x auto-fill-mode} turns Auto Fill mode on if it was off, or off if
+it was on. With a positive numeric argument it always turns Auto Fill mode
+on, and with a negative argument always turns it off. You can see when
+Auto Fill mode is in effect by the presence of the word @samp{Fill} in the
+mode line, inside the parentheses. Auto Fill mode is a minor mode, turned
+on or off for each buffer individually. @xref{Minor Modes}.
+
+ In Auto Fill mode, lines are broken automatically at spaces when they get
+longer than the desired width. Line breaking and rearrangement takes place
+only when you type @key{SPC} or @key{RET}. If you wish to insert a space
+or newline without permitting line-breaking, type @kbd{C-q @key{SPC}} or
+@kbd{C-q @key{LFD}} (recall that a newline is really a linefeed). Also,
+@kbd{C-o} inserts a newline without line breaking.
+
+ Auto Fill mode works well with Lisp mode, because when it makes a new
+line in Lisp mode it indents that line with @key{TAB}. If a line ending in
+a comment gets too long, the text of the comment is split into two
+comment lines. Optionally new comment delimiters are inserted at the end of
+the first line and the beginning of the second so that each line is
+a separate comment; the variable @code{comment-multi-line} controls the
+choice (@pxref{Comments}).
+
+ Auto Fill mode does not refill entire paragraphs. It can break lines but
+cannot merge lines. So editing in the middle of a paragraph can result in
+a paragraph that is not correctly filled. The easiest way to make the
+paragraph properly filled again is usually with the explicit fill commands.
+
+ Many users like Auto Fill mode and want to use it in all text files.
+The section on init files says how to arrange this permanently for yourself.
+@xref{Init File}.
+
+@node Fill Commands, Fill Prefix, Auto Fill, Filling
+@subsection Explicit Fill Commands
+
+@table @kbd
+@item M-q
+Fill current paragraph (@code{fill-paragraph}).
+@item M-g
+Fill each paragraph in the region (@code{fill-region}).
+@item C-x f
+Set the fill column (@code{set-fill-column}).
+@item M-x fill-region-as-paragraph.
+Fill the region, considering it as one paragraph.
+@item M-s
+Center a line.
+@end table
+
+@kindex M-q
+@findex fill-paragraph
+ To refill a paragraph, use the command @kbd{Meta-q}
+(@code{fill-paragraph}). It causes the paragraph that point is inside, or
+the one after point if point is between paragraphs, to be refilled. All
+the line-breaks are removed, and then new ones are inserted where
+necessary. @kbd{M-q} can be undone with @kbd{C-_}. @xref{Undo}.@refill
+
+@kindex M-g
+@findex fill-region
+ To refill many paragraphs, use @kbd{M-g} (@code{fill-region}), which
+divides the region into paragraphs and fills each of them.
+
+@findex fill-region-as-paragraph
+ @kbd{Meta-q} and @kbd{Meta-g} use the same criteria as @kbd{Meta-h}
+for finding paragraph boundaries (@pxref{Paragraphs}). For more
+control, you can use @kbd{M-x fill-region-as-paragraph}, which refills
+everything between point and mark. This command recognizes no paragraph
+separators; it deletes any blank lines found within the region to be
+filled.@refill
+
+@cindex justification
+ A numeric argument to @kbd{M-g} or @kbd{M-q} causes it to @dfn{justify}
+the text as well as filling it. This means that extra spaces are inserted
+to make the right margin line up exactly at the fill column. To remove the
+extra spaces, use @kbd{M-q} or @kbd{M-g} with no argument.@refill
+
+@kindex M-s
+@cindex centering
+@findex center-line
+ The command @kbd{Meta-s} (@code{center-line}) centers the current line
+within the current fill column. With an argument, it centers several lines
+individually and moves past them.
+
+@vindex fill-column
+ The maximum line width for filling is in the variable @code{fill-column}.
+Altering the value of @code{fill-column} makes it local to the current
+buffer; until that time, the default value is in effect. The default is
+initially 70. @xref{Locals}.
+
+@kindex C-x f
+@findex set-fill-column
+ The easiest way to set @code{fill-column} is to use the command @kbd{C-x
+f} (@code{set-fill-column}). With no argument, it sets @code{fill-column}
+to the current horizontal position of point. With a numeric argument, it
+uses that as the new fill column.
+
+@node Fill Prefix,, Fill Commands, Filling
+@subsection The Fill Prefix
+
+@cindex fill prefix
+ To fill a paragraph in which each line starts with a special marker
+(which might be a few spaces, giving an indented paragraph), use the
+@dfn{fill prefix} feature. The fill prefix is a string which Emacs expects
+every line to start with, and which is not included in filling.
+
+@table @kbd
+@item C-x .
+Set the fill prefix (@code{set-fill-prefix}).
+@item M-q
+Fill a paragraph using current fill prefix (@code{fill-paragraph}).
+@item M-x fill-individual-paragraphs
+Fill the region, considering each change of indentation as starting a
+new paragraph.
+@end table
+
+@kindex C-x .
+@findex set-fill-prefix
+ To specify a fill prefix, move to a line that starts with the desired
+prefix, put point at the end of the prefix, and give the command
+@w{@kbd{C-x .}}@: (@code{set-fill-prefix}). That's a period after the
+@kbd{C-x}. To turn off the fill prefix, specify an empty prefix: type
+@w{@kbd{C-x .}}@: with point at the beginning of a line.
+
+ When a fill prefix is in effect, the fill commands remove the fill prefix
+from each line before filling and insert it on each line after filling.
+The fill prefix is also inserted on new lines made automatically by Auto
+Fill mode. Lines that do not start with the fill prefix are considered to
+start paragraphs, both in @kbd{M-q} and the paragraph commands; this is
+just right if you are using paragraphs with hanging indentation (every line
+indented except the first one). Lines which are blank or indented once the
+prefix is removed also separate or start paragraphs; this is what you want
+if you are writing multi-paragraph comments with a comment delimiter on
+each line.
+
+@vindex fill-prefix
+ The fill prefix is stored in the variable @code{fill-prefix}. Its value
+is a string, or @code{nil} when there is no fill prefix. This is a
+per-buffer variable; altering the variable affects only the current buffer,
+but there is a default value which you can change as well. @xref{Locals}.
+
+@findex fill-individual-paragraphs
+ Another way to use fill prefixes is through @kbd{M-x
+fill-individual-paragraphs}. This function divides the region into groups
+of consecutive lines with the same amount and kind of indentation and fills
+each group as a paragraph using its indentation as a fill prefix.
+
+@node Case,, Filling, Text
+@section Case Conversion Commands
+@cindex case conversion
+
+ Emacs has commands for converting either a single word or any arbitrary
+range of text to upper case or to lower case.
+
+@c WideCommands
+@table @kbd
+@item M-l
+Convert following word to lower case (@code{downcase-word}).
+@item M-u
+Convert following word to upper case (@code{upcase-word}).
+@item M-c
+Capitalize the following word (@code{capitalize-word}).
+@item C-x C-l
+Convert region to lower case (@code{downcase-region}).
+@item C-x C-u
+Convert region to upper case (@code{upcase-region}).
+@end table
+
+@kindex M-l
+@kindex M-u
+@kindex M-c
+@cindex words
+@findex downcase-word
+@findex upcase-word
+@findex capitalize-word
+ The word conversion commands are the most useful. @kbd{Meta-l}
+(@code{downcase-word}) converts the word after point to lower case,
+moving past it. Thus, repeating @kbd{Meta-l} converts successive
+words. @kbd{Meta-u} (@code{upcase-word}) converts to all capitals
+instead, while @kbd{Meta-c} (@code{capitalize-word}) puts the letter
+following point into upper case and the rest of the letters in the
+word into lower case. All these commands convert several words at
+once if given an argument. They are especially convenient for
+converting a large amount of text from all upper case to mixed case,
+because you can move through the text using @kbd{M-l}, @kbd{M-u} or
+@kbd{M-c} on each word as appropriate, occasionally using @kbd{M-f}
+instead to skip a word.
+
+ When given a negative argument, the word case conversion commands apply
+to the appropriate number of words before point, but do not move point.
+This is convenient when you have just typed a word in the wrong case: you
+can give the case conversion command and continue typing.
+
+ If a word case conversion command is given in the middle of a word, it
+applies only to the part of the word which follows point. This is just
+like what @kbd{Meta-d} (@code{kill-word}) does. With a negative argument,
+case conversion applies only to the part of the word before point.
+
+@kindex C-x C-l
+@kindex C-x C-u
+@cindex region
+@findex downcase-region
+@findex upcase-region
+ The other case conversion commands are @kbd{C-x C-u}
+(@code{upcase-region}) and @kbd{C-x C-l} (@code{downcase-region}), which
+convert everything between point and mark to the specified case. Point and
+mark do not move.@refill
+
+@node Programs, Compiling/Testing, Text, Top
+@chapter Editing Programs
+
+ Emacs has many commands designed to understand the syntax of programming
+languages such as Lisp and C. These commands can
+
+@itemize @bullet
+@item
+Move over or kill balanced expressions or @dfn{sexps} (@pxref{Lists}).
+@item
+Move over or mark top-level balanced expressions (@dfn{defuns}, in Lisp;
+functions, in C).
+@item
+Show how parentheses balance (@pxref{Matching}).
+@item
+Insert, kill or align comments (@pxref{Comments}).
+@item
+Follow the usual indentation conventions of the language
+(@pxref{Grinding}).
+@end itemize
+
+ The commands for words, sentences and paragraphs are very useful in
+editing code even though their canonical application is for editing human
+language text. Most symbols contain words (@pxref{Words}); sentences can
+be found in strings and comments (@pxref{Sentences}). Paragraphs per se
+are not present in code, but the paragraph commands are useful anyway,
+because Lisp mode and C mode define paragraphs to begin and end at blank
+lines (@pxref{Paragraphs}). Judicious use of blank lines to make the
+program clearer will also provide interesting chunks of text for the
+paragraph commands to work on.
+
+ The selective display feature is useful for looking at the overall
+structure of a function (@pxref{Selective Display}). This feature causes
+only the lines that are indented less than a specified amount to appear
+on the screen.
+
+@menu
+* Program Modes:: Major modes for editing programs.
+* Lists:: Expressions with balanced parentheses.
+ There are editing commands to operate on them.
+* Defuns:: Each program is made up of separate functions.
+ There are editing commands to operate on them.
+* Grinding:: Adjusting indentation to show the nesting.
+* Matching:: Insertion of a close-delimiter flashes matching open.
+* Comments:: Inserting, killing and aligning comments.
+* Macro Expansion:: How to see the results of C macro expansion.
+* Balanced Editing:: Inserting two matching parentheses at once, etc.
+* Lisp Completion:: Completion on symbol names in Lisp code.
+* Documentation:: Getting documentation of functions you plan to call.
+* Change Log:: Maintaining a change history for your program.
+* Tags:: Go direct to any function in your program in one
+ command. Tags remembers which file it is in.
+* Fortran:: Fortran mode and its special features.
+@end menu
+
+@node Program Modes, Lists, Programs, Programs
+@section Major Modes for Programming Languages
+
+@cindex Lisp mode
+@cindex C mode
+@cindex Scheme mode
+ Emacs has major modes for the programming languages Lisp, Scheme (a
+variant of Lisp), C, Fortran and Muddle. Ideally, a major mode should be
+implemented for each programming language that you might want to edit with
+Emacs; but often the mode for one language can serve for other
+syntactically similar languages. The language modes that exist are those
+that someone decided to take the trouble to write.
+
+ There are several forms of Lisp mode, which differ in the way they
+interface to Lisp execution. @xref{Lisp Modes}.
+
+ Each of the programming language modes defines the @key{TAB} key to run
+an indentation function that knows the indentation conventions of that
+language and updates the current line's indentation accordingly. For
+example, in C mode @key{TAB} is bound to @code{c-indent-line}. @key{LFD}
+is normally defined to do @key{RET} followed by @key{TAB}; thus, it too
+indents in a mode-specific fashion.
+
+@kindex DEL
+@findex backward-delete-char-untabify
+ In most programming languages, indentation is likely to vary from line to
+line. So the major modes for those languages rebind @key{DEL} to treat a
+tab as if it were the equivalent number of spaces (using the command
+@code{backward-delete-char-untabify}). This makes it possible to rub out
+indentation one column at a time without worrying whether it is made up of
+spaces or tabs. Use @kbd{C-b C-d} to delete a tab character before point,
+in these modes.
+
+ Programming language modes define paragraphs to be separated only by
+blank lines, so that the paragraph commands remain useful. Auto Fill mode,
+if enabled in a programming language major mode, indents the new lines
+which it creates.
+
+@cindex mode hook
+@vindex c-mode-hook
+@vindex lisp-mode-hook
+@vindex emacs-lisp-mode-hook
+@vindex lisp-interaction-mode-hook
+@vindex scheme-mode-hook
+@vindex muddle-mode-hook
+ Turning on a major mode calls a user-supplied function called the
+@dfn{mode hook}, which is the value of a Lisp variable. For example,
+turning on C mode calls the value of the variable @code{c-mode-hook} if
+that value exists and is non-@code{nil}. Mode hook variables for other
+programming language modes include @code{lisp-mode-hook},
+@code{emacs-lisp-mode-hook}, @code{lisp-interaction-mode-hook},
+@code{scheme-mode-hook} and @code{muddle-mode-hook}. The mode hook
+function receives no arguments.@refill
+
+@node Lists, Defuns, Program Modes, Programs
+@section Lists and Sexps
+
+@cindex Control-Meta
+ By convention, Emacs keys for dealing with balanced expressions are
+usually @kbd{Control-Meta-} characters. They tend to be analogous in
+function to their @kbd{Control-} and @kbd{Meta-} equivalents. These commands
+are usually thought of as pertaining to expressions in programming
+languages, but can be useful with any language in which some sort of
+parentheses exist (including English).
+
+@cindex list
+@cindex sexp
+@cindex expression
+ These commands fall into two classes. Some deal only with @dfn{lists}
+(parenthetical groupings). They see nothing except parentheses, brackets,
+braces (whichever ones must balance in the language you are working with),
+and escape characters that might be used to quote those.
+
+ The other commands deal with expressions or @dfn{sexps}. The word `sexp'
+is derived from @dfn{s-expression}, the ancient term for an expression in
+Lisp. But in Emacs, the notion of `sexp' is not limited to Lisp. It
+refers to an expression in whatever language your program is written in.
+Each programming language has its own major mode, which customizes the
+syntax tables so that expressions in that language count as sexps.
+
+ Sexps typically include symbols, numbers, and string constants, as well
+as anything contained in parentheses, brackets or braces.
+
+ In languages that use prefix and infix operators, such as C, it is not
+possible for all expressions to be sexps. For example, C mode does not
+recognize @samp{foo + bar} as a sexp, even though it @i{is} a C expression;
+it recognizes @samp{foo} as one sexp and @samp{bar} as another, with the
+@samp{+} as punctuation between them. This is a fundamental ambiguity:
+both @samp{foo + bar} and @samp{foo} are legitimate choices for the sexp to
+move over if point is at the @samp{f}. Note that @samp{(foo + bar)} is a
+sexp in C mode.
+
+ Some languages have obscure forms of syntax for expressions that nobody
+has bothered to make Emacs understand properly.
+
+@c doublewidecommands
+@table @kbd
+@item C-M-f
+Move forward over a sexp (@code{forward-sexp}).
+@item C-M-b
+Move backward over a sexp (@code{backward-sexp}).
+@item C-M-k
+Kill sexp forward (@code{kill-sexp}).
+@item C-M-u
+Move up and backward in list structure (@code{backward-up-list}).
+@item C-M-d
+Move down and forward in list structure (@code{down-list}).
+@item C-M-n
+Move forward over a list (@code{forward-list}).
+@item C-M-p
+Move backward over a list (@code{backward-list}).
+@item C-M-t
+Transpose expressions (@code{transpose-sexps}).
+@item C-M-@@
+Put mark after following expression (@code{mark-sexp}).
+@end table
+
+@kindex C-M-f
+@kindex C-M-b
+@findex forward-sexp
+@findex backward-sexp
+ To move forward over a sexp, use @kbd{C-M-f} (@code{forward-sexp}). If
+the first significant character after point is an opening delimiter
+(@samp{(} in Lisp; @samp{(}, @samp{[} or @samp{@{} in C), @kbd{C-M-f}
+moves past the matching closing delimiter. If the character begins a
+symbol, string, or number, @kbd{C-M-f} moves over that. If the character
+after point is a closing delimiter, @kbd{C-M-f} gets an error.
+
+ The command @kbd{C-M-b} (@code{backward-sexp}) moves backward over a
+sexp. The detailed rules are like those above for @kbd{C-M-f}, but with
+directions reversed. If there are any prefix characters (singlequote,
+backquote and comma, in Lisp) preceding the sexp, @kbd{C-M-b} moves back
+over them as well.
+
+ @kbd{C-M-f} or @kbd{C-M-b} with an argument repeats that operation the
+specified number of times; with a negative argument, it moves in the
+opposite direction.
+
+ The sexp commands move across comments as if they were whitespace, in
+languages such as C where the comment-terminator can be recognized. In
+Lisp, and other languages where comments run until the end of a line, it is
+very difficult to ignore comments when parsing backwards; therefore, in
+such languages the sexp commands treat the text of comments as if it were
+code.
+
+@kindex C-M-k
+@findex kill-sexp
+ Killing a sexp at a time can be done with @kbd{C-M-k} (@code{kill-sexp}).
+@kbd{C-M-k} kills the characters that @kbd{C-M-f} would move over.
+
+@kindex C-M-n
+@kindex C-M-p
+@findex forward-list
+@findex backward-list
+ The @dfn{list commands} move over lists like the sexp commands but skip
+blithely over any number of other kinds of sexps (symbols, strings, etc).
+They are @kbd{C-M-n} (@code{forward-list}) and @kbd{C-M-p}
+(@code{backward-list}). The main reason they are useful is that they
+usually ignore comments (since the comments usually do not contain any
+lists).@refill
+
+@kindex C-M-u
+@kindex C-M-d
+@findex backward-up-list
+@findex down-list
+ @kbd{C-M-n} and @kbd{C-M-p} stay at the same level in parentheses, when
+that's possible. To move @i{up} one (or @var{n}) levels, use @kbd{C-M-u}
+(@code{backward-up-list}).
+@kbd{C-M-u} moves backward up past one unmatched opening delimiter. A
+positive argument serves as a repeat count; a negative argument reverses
+direction of motion and also requests repetition, so it moves forward and
+up one or more levels.@refill
+
+ To move @i{down} in list structure, use @kbd{C-M-d} (@code{down-list}). In Lisp mode,
+where @samp{(} is the only opening delimiter, this is nearly the same as
+searching for a @samp{(}. An argument specifies the number of levels
+of parentheses to go down.
+
+@cindex transposition
+@kindex C-M-t
+@findex transpose-sexps
+ A somewhat random-sounding command which is nevertheless easy to use is
+@kbd{C-M-t} (@code{transpose-sexps}), which drags the previous sexp across
+the next one. An argument serves as a repeat count, and a negative
+argument drags backwards (thus canceling out the effect of @kbd{C-M-t} with
+a positive argument). An argument of zero, rather than doing nothing,
+transposes the sexps ending after point and the mark.
+
+@kindex C-M-@@
+@findex mark-sexp
+ To make the region be the next sexp in the buffer, use @kbd{C-M-@@}
+(@code{mark-sexp}) which sets mark at the same place that @kbd{C-M-f} would
+move to. @kbd{C-M-@@} takes arguments like @kbd{C-M-f}. In particular, a
+negative argument is useful for putting the mark at the beginning of the
+previous sexp.
+
+ The list and sexp commands' understanding of syntax is completely
+controlled by the syntax table. Any character can, for example, be
+declared to be an opening delimiter and act like an open parenthesis.
+@xref{Syntax}.
+
+@node Defuns, Grinding, Lists, Programs
+@section Defuns
+@cindex defuns
+
+ In Emacs, a parenthetical grouping at the top level in the buffer is
+called a @dfn{defun}. The name derives from the fact that most top-level
+lists in a Lisp file are instances of the special form @code{defun}, but
+any top-level parenthetical grouping counts as a defun in Emacs parlance
+regardless of what its contents are, and regardless of the programming
+language in use. For example, in C, the body of a function definition is a
+defun.
+
+@c doublewidecommands
+@table @kbd
+@item C-M-a
+Move to beginning of current or preceding defun
+(@code{beginning-of-defun}).
+@item C-M-e
+Move to end of current or following defun (@code{end-of-defun}).
+@item C-M-h
+Put region around whole current or following defun (@code{mark-defun}).
+@end table
+
+@kindex C-M-a
+@kindex C-M-e
+@kindex C-M-h
+@findex beginning-of-defun
+@findex end-of-defun
+@findex mark-defun
+ The commands to move to the beginning and end of the current defun are
+@kbd{C-M-a} (@code{beginning-of-defun}) and @kbd{C-M-e} (@code{end-of-defun}).
+
+ If you wish to operate on the current defun, use @kbd{C-M-h}
+(@code{mark-defun}) which puts point at the beginning and mark at the end
+of the current or next defun. For example, this is the easiest way to get
+ready to move the defun to a different place in the text. In C mode,
+@kbd{C-M-h} runs the function @code{mark-c-function}, which is almost the
+same as @code{mark-defun}; the difference is that it backs up over the
+argument declarations, function name and returned data type so that the
+entire C function is inside the region.
+
+ Emacs assumes that any open-parenthesis found in the leftmost column is
+the start of a defun. Therefore, @b{never put an open-parenthesis at the
+left margin in a Lisp file unless it is the start of a top level list.
+Never put an open-brace or other opening delimiter at the beginning of a
+line of C code unless it starts the body of a function.} The most likely
+problem case is when you want an opening delimiter at the start of a line
+inside a string. To avoid trouble, put an escape character (@samp{\}, in C
+and Emacs Lisp, @samp{/} in some other Lisp dialects) before the opening
+delimiter. It will not affect the contents of the string.
+
+ In the remotest past, the original Emacs found defuns by moving upward a
+level of parentheses until there were no more levels to go up. This always
+required scanning all the way back to the beginning of the buffer, even for
+a small function. To speed up the operation, Emacs was changed to assume
+that any @samp{(} (or other character assigned the syntactic class of
+opening-delimiter) at the left margin is the start of a defun. This
+heuristic was nearly always right and avoided the costly scan; however,
+it mandated the convention described above.
+
+@node Grinding, Matching, Defuns, Programs
+@section Indentation for Programs
+@cindex indentation
+@cindex grinding
+
+ The best way to keep a program properly indented (``ground'') is to use
+Emacs to re-indent it as you change it. Emacs has commands to indent
+properly either a single line, a specified number of lines, or all of the
+lines inside a single parenthetical grouping.
+
+@menu
+* Basic Indent::
+* Multi-line Indent:: Commands to reindent many lines at once.
+* Lisp Indent:: Specifying how each Lisp function should be indented.
+* C Indent:: Choosing an indentation style for C code.
+@end menu
+
+@node Basic Indent, Multi-line Indent, Grinding, Grinding
+@subsection Basic Program Indentation Commands
+
+@c WideCommands
+@table @kbd
+@item @key{TAB}
+Adjust indentation of current line.
+@item @key{LFD}
+Equivalent to @key{RET} followed by @key{TAB} (@code{newline-and-indent}).
+@end table
+
+@kindex TAB
+@findex c-indent-line
+@findex lisp-indent-line
+ The basic indentation command is @key{TAB}, which gives the current line
+the correct indentation as determined from the previous lines. The
+function that @key{TAB} runs depends on the major mode; it is @code{lisp-indent-line}
+in Lisp mode, @code{c-indent-line} in C mode, etc. These functions
+understand different syntaxes for different languages, but they all do
+about the same thing. @key{TAB} in any programming language major mode
+inserts or deletes whitespace at the beginning of the current line,
+independent of where point is in the line. If point is inside the
+whitespace at the beginning of the line, @key{TAB} leaves it at the end of
+that whitespace; otherwise, @key{TAB} leaves point fixed with respect to
+the characters around it.
+
+ Use @kbd{C-q @key{TAB}} to insert a tab at point.
+
+@kindex LFD
+@findex newline-and-indent
+ When entering a large amount of new code, use @key{LFD} (@code{newline-and-indent}),
+which is equivalent to a @key{RET} followed by a @key{TAB}. @key{LFD} creates
+a blank line, and then gives it the appropriate indentation.
+
+ @key{TAB} indents the second and following lines of the body of a
+parenthetical grouping each under the preceding one; therefore, if you
+alter one line's indentation to be nonstandard, the lines below will tend
+to follow it. This is the right behavior in cases where the standard
+result of @key{TAB} is unaesthetic.
+
+ Remember that an open-parenthesis, open-brace or other opening delimiter
+at the left margin is assumed by Emacs (including the indentation routines)
+to be the start of a function. Therefore, you must never have an opening
+delimiter in column zero that is not the beginning of a function, not even
+inside a string. This restriction is vital for making the indentation
+commands fast; you must simply accept it. @xref{Defuns}, for more
+information on this.
+
+@node Multi-line Indent, Lisp Indent, Basic Indent, Grinding
+@subsection Indenting Several Lines
+
+ When you wish to re-indent several lines of code which have been altered
+or moved to a different level in the list structure, you have several
+commands available.
+
+@table @kbd
+@item C-M-q
+Re-indent all the lines within one list (@code{indent-sexp}).
+@item C-u @key{TAB}
+Shift an entire list rigidly sideways so that its first line
+is properly indented.
+@item C-M-\
+Re-indent all lines in the region (@code{indent-region}).
+@end table
+
+@kindex C-M-q
+@findex indent-sexp
+@findex indent-c-exp
+ You can re-indent the contents of a single list by positioning point
+before the beginning of it and typing @kbd{C-M-q} (@code{indent-sexp} in
+Lisp mode, @code{indent-c-exp} in C mode; also bound to other suitable
+functions in other modes). The indentation of the line the sexp starts on
+is not changed; therefore, only the relative indentation within the list,
+and not its position, is changed. To correct the position as well, type a
+@key{TAB} before the @kbd{C-M-q}.
+
+@kindex C-u TAB
+ If the relative indentation within a list is correct but the indentation
+of its beginning is not, go to the line the list begins on and type
+@kbd{C-u @key{TAB}}. When @key{TAB} is given a numeric argument, it moves all the
+lines in the grouping starting on the current line sideways the same amount
+that the current line moves. It is clever, though, and does not move lines
+that start inside strings, or C preprocessor lines when in C mode.
+
+@kindex C-M-\
+@findex indent-region
+ Another way to specify the range to be re-indented is with point and
+mark. The command @kbd{C-M-\} (@code{indent-region}) applies @key{TAB} to every line
+whose first character is between point and mark.
+
+@node Lisp Indent, C Indent, Multi-line Indent, Grinding
+@subsection Customizing Lisp Indentation
+@cindex customization
+
+ The indentation pattern for a Lisp expression can depend on the function
+called by the expression. For each Lisp function, you can choose among
+several predefined patterns of indentation, or define an arbitrary one with
+a Lisp program.
+
+ The standard pattern of indentation is as follows: the second line of the
+expression is indented under the first argument, if that is on the same
+line as the beginning of the expression; otherwise, the second line is
+indented underneath the function name. Each following line is indented
+under the previous line whose nesting depth is the same.
+
+@vindex lisp-indent-offset
+ If the variable @code{lisp-indent-offset} is non-@code{nil}, it overrides
+the usual indentation pattern for the second line of an expression, so that
+such lines are always indented @code{lisp-indent-offset} more columns than
+the containing list.
+
+@vindex lisp-body-indent
+ The standard pattern is overridden for certain functions. Functions
+whose names start with @code{def} always indent the second line by
+@code{lisp-body-indention} extra columns beyond the open-parenthesis
+starting the expression.
+
+ The standard pattern can be overridden in various ways for individual
+functions, according to the @code{lisp-indent-hook} property of the
+function name. There are four possibilities for this property:
+
+@table @asis
+@item @code{nil}
+This is the same as no property; the standard indentation pattern is used.
+@item @code{defun}
+The pattern used for function names that start with @code{def} is used for
+this function also.
+@item a number, @var{number}
+The first @var{number} arguments of the function are
+@dfn{distinguished} arguments; the rest are considered the @dfn{body}
+of the expression. A line in the expression is indented according to
+whether the first argument on it is distinguished or not. If the
+argument is part of the body, the line is indented @code{lisp-body-indent}
+more columns than the open-parenthesis starting the containing
+expression. If the argument is distinguished and is either the first
+or second argument, it is indented @i{twice} that many extra columns.
+If the argument is distinguished and not the first or second argument,
+the standard pattern is followed for that line.
+@item a symbol, @var{symbol}
+@var{symbol} should be a function name; that function is called to
+calculate the indentation of a line within this expression. The
+function receives two arguments:
+@table @asis
+@item @var{state}
+The value returned by @code{parse-partial-sexp} (a Lisp primitive for
+indentation and nesting computation) when it parses up to the
+beginning of this line.
+@item @var{pos}
+The position at which the line being indented begins.
+@end table
+@noindent
+It should return either a number, which is the number of columns of
+indentation for that line, or a list whose @sc{car} is such a number. The
+difference between returning a number and returning a list is that a
+number says that all following lines at the same nesting level should
+be indented just like this one; a list says that following lines might
+call for different indentations. This makes a difference when the
+indentation is being computed by @kbd{C-M-q}; if the value is a
+number, @kbd{C-M-q} need not recalculate indentation for the following
+lines until the end of the list.
+@end table
+
+@node C Indent,, Lisp Indent, Grinding
+@subsection Customizing C Indentation
+
+ Two variables control which commands perform C indentation and when.
+
+@vindex c-auto-newline
+ If @code{c-auto-newline} is non-@code{nil}, newlines are inserted both
+before and after braces that you insert, and after colons and semicolons.
+Correct C indentation is done on all the lines that are made this way.
+
+@vindex c-tab-always-indent
+ If @code{c-tab-always-indent} is @code{nil}, the @key{TAB} command
+in C mode does indentation only if point is at the left margin or within
+the line's indentation. If there is non-whitespace to the left of point,
+then @key{TAB} just inserts a tab character in the buffer. Normally,
+this variable is @code{t}, and @key{TAB} always reindents the current line.
+
+ C does not have anything analogous to particular function names for which
+special forms of indentation are desirable. However, it has a different
+need for customization facilities: many different styles of C indentation
+are in common use.
+
+ There are six variables you can set to control the style that Emacs C
+mode will use.
+
+@table @code
+@item c-indent-level
+Indentation of C statements within surrounding block. The surrounding
+block's indentation is the indentation of the line on which the
+open-brace appears.
+@item c-continued-statement-offset
+Extra indentation given to a substatement, such as the then-clause of
+an if or body of a while.
+@item c-brace-offset
+Extra indentation for line if it starts with an open brace.
+@item c-brace-imaginary-offset
+An open brace following other text is treated as if it were this far
+to the right of the start of its line.
+@item c-argdecl-indent
+Indentation level of declarations of C function arguments.
+@item c-label-offset
+Extra indentation for line that is a label, or case or default.
+@end table
+
+@vindex c-indent-level
+ The variable @code{c-indent-level} controls the indentation for C
+statements with respect to the surrounding block. In the example
+
+@example
+ @{
+ foo ();
+@end example
+
+@noindent
+the difference in indentation between the lines is @code{c-indent-level}.
+Its standard value is 2.
+
+If the open-brace beginning the compound statement is not at the beginning
+of its line, the @code{c-indent-level} is added to the indentation of the
+line, not the column of the open-brace. For example,
+
+@example
+if (losing) @{
+ do_this ();
+@end example
+
+@noindent
+One popular indentation style is that which results from setting
+@code{c-indent-level} to 8 and putting open-braces at the end of a line in
+this way. I prefer to put the open-brace on a separate line.
+
+@vindex c-brace-imaginary-offset
+ In fact, the value of the variable @code{c-brace-imaginary-offset} is
+also added to the indentation of such a statement. Normally this variable
+is zero. Think of this variable as the imaginary position of the open
+brace, relative to the first nonblank character on the line. By setting
+this variable to 4 and @code{c-indent-level} to 0, you can get this style:
+
+@example
+if (x == y) @{
+ do_it ();
+ @}
+@end example
+
+ When @code{c-indent-level} is zero, the statements inside most braces
+will line up right under the open brace. But there is an exception made
+for braces in column zero, such as surrounding a function's body. The
+statements just inside it do not go at column zero. Instead,
+@code{c-brace-offset} and @w{@code{c-continued-statement-offset}} (see below)
+are added to produce a typical offset between brace levels, and the
+statements are indented that far.
+
+@vindex c-continued-statement-offset
+ @code{c-continued-statement-offset} controls the extra indentation for a
+line that starts within a statement (but not within parentheses or
+brackets). These lines are usually statements that are within other
+statements, such as the then-clauses of @code{if} statements and the bodies
+of @code{while} statements. This parameter is the difference in
+indentation between the two lines in
+
+@example
+if (x == y)
+ do_it ();
+@end example
+
+@noindent
+Its standard value is 2. Some popular indentation styles correspond to a
+value of zero for @code{c-continued-statement-offset}.
+
+@vindex c-brace-offset
+ @code{c-brace-offset} is the extra indentation given to a line that
+starts with an open-brace. Its standard value is zero;
+compare
+
+@example
+if (x == y)
+ @{
+@end example
+
+@noindent
+with
+
+@example
+if (x == y)
+ do_it ();
+@end example
+
+@noindent
+if @code{c-brace-offset} were set to 4, the first example would become
+
+@example
+if (x == y)
+ @{
+@end example
+
+@vindex c-argdecl-indent
+ @code{c-argdecl-indent} controls the indentation of declarations of the
+arguments of a C function. It is absolute: argument declarations receive
+exactly @code{c-argdecl-indent} spaces. The standard value is 5, resulting
+in code like this:
+
+@example
+char *
+index (string, c)
+ char *string;
+ int c;
+@end example
+
+@vindex c-label-offset
+ @code{c-label-offset} is the extra indentation given to a line that
+contains a label, a case statement, or a @code{default:} statement. Its
+standard value is @minus{}2, resulting in code like this
+
+@example
+switch (c)
+ @{
+ case 'x':
+@end example
+
+@noindent
+If @code{c-label-offset} were zero, the same code would be indented as
+
+@example
+switch (c)
+ @{
+ case 'x':
+@end example
+
+@noindent
+This example assumes that the other variables above also have their
+standard values.
+
+ I strongly recommend that you try out the indentation style produced by
+the standard settings of these variables, together with putting open braces
+on separate lines. You can see how it looks in all the C source files of
+GNU Emacs.
+
+@node Matching, Comments, Grinding, Programs
+@section Automatic Display Of Matching Parentheses
+@cindex matching parentheses
+@cindex parentheses
+
+ The Emacs parenthesis-matching feature is designed to show automatically
+how parentheses match in the text. Whenever a self-inserting character
+that is a closing delimiter is typed, the cursor moves momentarily to the
+location of the matching opening delimiter, provided that is on the screen.
+If it is not on the screen, some text starting with that opening delimiter
+is displayed in the echo area. Either way, you can tell what grouping is
+being closed off.
+
+ In Lisp, automatic matching applies only to parentheses. In C, it
+applies to braces and brackets too. Emacs knows which characters to regard
+as matching delimiters based on the syntax table, which is set by the major
+mode. @xref{Syntax}.
+
+ If the opening delimiter and closing delimiter are mismatched---such as
+in @samp{[x)}---a warning message is displayed in the echo area. The
+correct matches are specified in the syntax table.
+
+@vindex blink-matching-paren
+@vindex blink-matching-paren-distance
+ Two variables control parenthesis match display. @code{blink-matching-paren}
+turns the feature on or off; @code{nil} turns it off, but the default is
+@code{t} to turn match display on. @code{blink-matching-paren-distance}
+specifies how many characters back to search to find the matching opening
+delimiter. If the match is not found in that far, scanning stops, and
+nothing is displayed. This is to prevent scanning for the matching
+delimiter from wasting lots of time when there is no match. The default
+is 4000.
+
+@node Comments, Macro Expansion, Matching, Programs
+@section Manipulating Comments
+@cindex comments
+@kindex M-;
+@cindex indentation
+@findex indent-for-comment
+
+ The comment commands insert, kill and align comments.
+
+@c WideCommands
+@table @kbd
+@item M-;
+Insert or align comment (@code{indent-for-comment}).
+@item C-x ;
+Set comment column (@code{set-comment-column}).
+@item C-u - C-x ;
+Kill comment on current line (@code{kill-comment}).
+@item M-@key{LFD}
+Like @key{RET} followed by inserting and aligning a comment
+(@code{indent-new-comment-line}).
+@end table
+
+ The command that creates a comment is @kbd{Meta-;} (@code{indent-for-comment}).
+If there is no comment already on the line, a new comment is created,
+aligned at a specific column called the @dfn{comment column}. The comment
+is created by inserting the string Emacs thinks comments should start with
+(the value of @code{comment-start}; see below). Point is left after that
+string. If the text of the line extends past the comment column, then the
+indentation is done to a suitable boundary (usually, at least one space is
+inserted). If the major mode has specified a string to terminate comments,
+that is inserted after point, to keep the syntax valid.
+
+ @kbd{Meta-;} can also be used to align an existing comment. If a line
+already contains the string that starts comments, then @kbd{M-;} just moves
+point after it and re-indents it to the conventional place. Exception:
+comments starting in column 0 are not moved.
+
+ Some major modes have special rules for indenting certain kinds of
+comments in certain contexts. For example, in Lisp code, comments which
+start with two semicolons are indented as if they were lines of code,
+instead of at the comment column. Comments which start with three
+semicolons are supposed to start at the left margin. Emacs understands
+these conventions by indenting a double-semicolon comment using @key{TAB},
+and by not changing the indentation of a triple-semicolon comment at all.
+
+@example
+;; This function is just an example
+;;; Here either two or three semicolons are appropriate.
+(defun foo (x)
+;;; And now, the first part of the function:
+ ;; The following line adds one.
+ (1+ x)) ; This line adds one.
+@end example
+
+ In C code, a comment preceded on its line by nothing but whitespace
+is indented like a line of code.
+
+ Even when an existing comment is properly aligned, @kbd{M-;} is still
+useful for moving directly to the start of the comment.
+
+@kindex C-u - C-x ;
+@findex kill-comment
+ @kbd{C-u - C-x ;} (@code{kill-comment}) kills the comment on the current line,
+if there is one. The indentation before the start of the comment is killed
+as well. If there does not appear to be a comment in the line, nothing is
+done. To reinsert the comment on another line, move to the end of that
+line, do @kbd{C-y}, and then do @kbd{M-;} to realign it. Note that
+@kbd{C-u - C-x ;} is not a distinct key; it is @kbd{C-x ;} (@code{set-comment-column})
+with a negative argument. That command is programmed so that when it
+receives a negative argument it calls @code{kill-comment}. However,
+@code{kill-comment} is a valid command which you could bind directly to a
+key if you wanted to.
+
+@subsection Multiple Lines of Comments
+
+@kindex M-LFD
+@cindex blank lines
+@findex indent-new-comment-line
+ If you are typing a comment and find that you wish to continue it on
+another line, you can use the command @kbd{Meta-@key{LFD}} (@code{indent-new-comment-line}),
+which terminates the comment you are typing, creates a new blank line
+afterward, and begins a new comment indented under the old one. When Auto
+Fill mode is on, going past the fill column while typing a comment causes
+the comment to be continued in just this fashion. If point is not at the
+end of the line when @kbd{M-@key{LFD}} is typed, the text on the rest of
+the line becomes part of the new comment line.
+
+@subsection Options Controlling Comments
+
+@vindex comment-column
+@kindex C-x ;
+@findex set-comment-column
+ The comment column is stored in the variable @code{comment-column}. You
+can set it to a number explicitly. Alternatively, the command @kbd{C-x ;}
+(@code{set-comment-column}) sets the comment column to the column point is
+at. @w{@kbd{C-u C-x ;}} sets the comment column to match the last comment
+before point in the buffer, and then does a @kbd{Meta-;} to align the
+current line's comment under the previous one. Note that @kbd{C-u - C-x ;}
+runs the function @code{kill-comment} as described above.
+
+ @code{comment-column} is a per-buffer variable; altering the variable
+affects only the current buffer, but there is a default value which you can
+change as well. @xref{Locals}. Many major modes initialize this variable
+for the current buffer.
+
+@vindex comment-start-skip
+ The comment commands recognize comments based on the regular expression
+that is the value of the variable @code{comment-start-skip}. This regexp
+should not match the null string. It may match more than the comment
+starting delimiter in the strictest sense of the word; for example, in C
+mode the value of the variable is @code{@t{"/\\*+ *"}}, which matches extra
+stars and spaces after the @samp{/*} itself. (Note that @samp{\\} is
+needed in Lisp syntax to include a @samp{\} in the string, which is needed
+to deny the first star its special meaning in regexp syntax. @xref{Regexps}.)
+
+@vindex comment-start
+@vindex comment-end
+ When a comment command makes a new comment, it inserts the value of
+@code{comment-start} to begin it. The value of @code{comment-end} is
+inserted after point, so that it will follow the text that you will insert
+into the comment. In C mode, @code{comment-start} has the value
+@w{@code{"/* "}} and @code{comment-end} has the value @w{@code{" */"}}.
+
+@vindex comment-multi-line
+ @code{comment-multi-line} controls how @kbd{M-@key{LFD}} (@code{indent-new-comment-line})
+behaves when used inside a comment. If @code{comment-multi-line} is
+@code{nil}, as it normally is, then the comment on the starting line is
+terminated and a new comment is started on the new following line. If
+@code{comment-multi-line} is not @code{nil}, then the new following line is
+set up as part of the same comment that was found on the starting line.
+This is done by not inserting a terminator on the old line, and not
+inserting a starter on the new line. In languages where multi-line comments
+work, the choice of value for this variable is a matter of taste.
+
+@vindex comment-indent-hook
+ The variable @code{comment-indent-hook} should contain a function that
+will be called to compute the indentation for a newly inserted comment or
+for aligning an existing comment. It is set differently by various major
+modes. The function is called with no arguments, but with point at the
+beginning of the comment, or at the end of a line if a new comment is to be
+inserted. It should return the column in which the comment ought to start.
+For example, in Lisp mode, the indent hook function bases its decision
+on how many semicolons begin an existing comment, and on the code in the
+preceding lines.
+
+@node Macro Expansion, Balanced Editing, Comments, Programs
+@section Viewing How C Macros Expand
+@cindex macro expansion in C
+@cindex expansion of C macros
+
+@findex c-macro-expand
+When you are debugging C code that uses macros, sometimes it is hard to
+figure out precisely how the macros expand. The command @kbd{M-x
+c-macro-expand}. It runs the C preprocessor and shows you what
+expansion results from the region. The portion of the buffer before the
+region is also included in preprocessing, for the sake of macros defined
+there, but the output from this part isn't shown.
+
+@node Balanced Editing, Lisp Completion, Macro Expansion, Programs
+@section Editing Without Unbalanced Parentheses
+
+@table @kbd
+@item M-(
+Put parentheses around next sexp(s) (@code{insert-parentheses}).
+@item M-)
+Move past next close parenthesis and re-indent
+(@code{move-over-close-and-reindent}).
+@end table
+
+@kindex M-(
+@kindex M-)
+@findex insert-parentheses
+@findex move-over-close-and-reindent
+ The two commands, @kbd{M-(} (@code{insert-parentheses}) and @kbd{M-)}
+(@code{move-over-close-and-reindent}), are designed to facilitate a style of
+editing which keeps parentheses balanced at all times. @kbd{M-(} inserts a
+pair of parentheses, either together as in @samp{()}, or, if given an
+argument, around the next several sexps, and leaves point after the open
+parenthesis. Instead of typing @w{@kbd{( F O O )}}, you can type @kbd{M-( F O
+O}, which has the same effect except for leaving the cursor before the
+close parenthesis. Then you would type @kbd{M-)}, which moves past the
+close parenthesis, deleting any indentation preceding it (in this example
+there is none), and indenting with @key{LFD} after it.
+
+@node Lisp Completion, Documentation, Balanced Editing, Programs
+@section Completion for Lisp Symbols
+@cindex completion (symbol names)
+
+ Usually completion happens in the minibuffer. But one kind of completion
+is available in all buffers: completion for Lisp symbol names.
+
+@kindex M-TAB
+@findex lisp-complete-symbol
+ The command @kbd{M-@key{TAB}} (@code{lisp-complete-symbol}) takes the
+partial Lisp symbol before point to be an abbreviation, and compares it
+against all nontrivial Lisp symbols currently known to Emacs. Any
+additional characters that they all have in common are inserted at point.
+Nontrivial symbols are those that have function definitions, values or
+properties.
+
+ If there is an open-parenthesis immediately before the beginning of
+the partial symbol, only symbols with function definitions are considered
+as completions.
+
+ If the partial name in the buffer has more than one possible completion
+and they have no additional characters in common, a list of all possible
+completions is displayed in another window.
+
+@node Documentation, Change Log, Lisp Completion, Programs
+@section Documentation Commands
+
+@kindex C-h f
+@findex describe-function
+@kindex C-h v
+@findex describe-variable
+ As you edit Lisp code to be run in Emacs, the commands @kbd{C-h f}
+(@code{describe-function}) and @kbd{C-h v} (@code{describe-variable}) can
+be used to print documentation of functions and variables that you want to
+call. These commands use the minibuffer to read the name of a function or
+variable to document, and display the documentation in a window.
+
+ For extra convenience, these commands provide default arguments based on
+the code in the neighborhood of point. @kbd{C-h f} sets the default to the
+function called in the innermost list containing point. @kbd{C-h v} uses
+the symbol name around or adjacent to point as its default.
+
+@findex manual-entry
+ Documentation on Unix commands, system calls and libraries can be
+obtained with the @kbd{M-x manual-entry} command. This reads a topic as an
+argument, and displays the text on that topic from the Unix manual.
+@code{manual-entry} always searches all 8 sections of the manual, and
+concatenates all the entries that are found. For example, the topic
+@samp{termcap} finds the description of the termcap library from section 3,
+followed by the description of the termcap data base from section 5.
+
+@node Change Log, Tags, Documentation, Programs
+@section Change Logs
+
+@cindex change log
+@findex add-change-log-entry
+ The Emacs command @kbd{M-x add-change-log-entry} helps you keep a record
+of when and why you have changed a program. It assumes that you have a
+file in which you write a chronological sequence of entries describing
+individual changes. The default is to store the change entries in a file
+called @file{ChangeLog} in the same directory as the file you are editing.
+The same @file{ChangeLog} file therefore records changes for all the files
+in the directory.
+
+ A change log entry starts with a header line that contains your name and
+the current date. Aside from these header lines, every line in the
+change log starts with a tab. One entry can describe several changes;
+each change starts with a line starting with a tab and a star.
+@kbd{M-x add-change-log-entry} visits the change log file and creates
+a new entry unless the most recent entry is for today's date and your
+name. In either case, it adds a new line to start the description of
+another change just after the header line of the entry. When @kbd{M-x
+add-change-log-entry} is finished, all is prepared for you to edit in
+the description of what you changed and how. You must then save the
+change log file yourself.
+
+ The change log file is always visited in Indented Text mode, which means
+that @key{LFD} and auto-filling indent each new line like the previous
+line. This is convenient for entering the contents of an entry, which must
+all be indented. @xref{Text Mode}.
+
+@findex add-change-log-entry-other-window
+@kindex C-x 4 a
+ An alternative convenient command for starting a change log entry is
+@w{@kbd{C-x 4 a}} (@code{add-change-log-entry-other-window}). It resembles
+@code{add-change-log-entry} except that it visits the change log in
+another window, and always uses the file @file{./ChangeLog}---it does
+not ask you for the file name.
+
+ Here is an example of the formatting conventions used in the change log
+for Emacs:
+
+@smallexample
+@group
+Wed Jun 26 19:29:32 1985 Richard M. Stallman (rms at mit-prep)
+
+ * xdisp.c (try_window_id):
+ If C-k is done at end of next-to-last line,
+ this fn updates window_end_vpos and cannot leave
+ window_end_pos nonnegative (it is zero, in fact).
+ If display is preempted before lines are output,
+ this is inconsistent. Fix by setting
+ blank_end_of_window to nonzero.
+@end group
+
+@group
+Tue Jun 25 05:25:33 1985 Richard M. Stallman (rms at mit-prep)
+
+ * cmds.c (Fnewline):
+ Call the auto fill hook if appropriate.
+@end group
+
+@group
+ * xdisp.c (try_window_id):
+ If point is found by compute_motion after xp, record that
+ permanently. If display_text_line sets point position wrong
+ (case where line is killed, point is at eob and that line is
+ not displayed), set it again in final compute_motion.
+@end group
+@end smallexample
+
+@node Tags, Fortran, Change Log, Programs
+@section Tag Tables
+@cindex tag table
+
+ A @dfn{tag table} is a description of how a multi-file program is broken
+up into files. It lists the names of the component files and the names and
+positions of the functions in each file. Grouping the related files makes
+it possible to search or replace through all the files with one command.
+Recording the function names and positions makes possible the @kbd{Meta-.}
+command which you can use to find the definition of a function without
+having to know which of the files it is in.
+
+ Tag tables are stored in files called @dfn{tag table files}. The
+conventional name for a tag table file is @file{TAGS}.
+
+ Each entry in the tag table records the name of one tag, the name of the
+file that the tag is defined in (implicitly), and the position in that file
+of the tag's definition.
+
+ Just what names from the described files are recorded in the tag table
+depends on the programming language of the described file. They normally
+include all functions and subroutines, and may also include global
+variables, data types, and anything else convenient. In any case, each
+name recorded is called a @dfn{tag}.
+
+@menu
+* Tag Syntax::
+* Create Tag Table::
+* Select Tag Table::
+* Find Tag::
+* Tags Search::
+* Tags Stepping::
+* List Tags::
+@end menu
+
+@node Tag Syntax, Create Tag Table, Tags, Tags
+@subsection Source File Tag Syntax
+
+ In Lisp code, any function defined with @code{defun}, any variable
+defined with @code{defvar} or @code{defconst}, and in general the first
+argument of any expression that starts with @samp{(def} in column zero, is
+a tag.
+
+ In C code, any C function is a tag, and so is any typedef if @code{-t} is
+specified when the tag table is constructed.
+
+ In Fortran code, functions and subroutines are tags.
+
+ In La@TeX{} text, the argument of any of the commands @code{\chapter},
+@code{\section}, @code{\subsection}, @code{\subsubsection}, @code{\eqno},
+@code{\label}, @code{\ref}, @code{\cite}, @code{\bibitem} and
+@code{\typeout} is a tag.@refill
+
+@node Create Tag Table, Select Tag Table, Tag Syntax, Tags
+@subsection Creating Tag Tables
+@cindex etags program
+
+ The @code{etags} program is used to create a tag table file. It knows
+the syntax of C, Fortran, La@TeX{}, Scheme and Emacs Lisp/Common Lisp. To
+use @code{etags}, type
+
+@example
+etags @var{inputfiles}@dots{}
+@end example
+
+@noindent
+as a shell command. It reads the specified files and writes a tag table
+named @file{TAGS} in the current working directory. @code{etags}
+recognizes the language used in an input file based on its file name and
+contents; there are no switches for specifying the language. The @code{-t}
+switch tells @code{etags} to record typedefs in C code as tags.
+
+ If the tag table data become outdated due to changes in the files
+described in the table, the way to update the tag table is the same way it
+was made in the first place. It is not necessary to do this often.
+
+ If the tag table fails to record a tag, or records it for the wrong file,
+then Emacs cannot possibly find its definition. However, if the position
+recorded in the tag table becomes a little bit wrong (due to some editing
+in the file that the tag definition is in), the only consequence is to slow
+down finding the tag slightly. Even if the stored position is very wrong,
+Emacs will still find the tag, but it must search the entire file for it.
+
+ So you should update a tag table when you define new tags that you want
+to have listed, or when you move tag definitions from one file to another,
+or when changes become substantial. Normally there is no need to update
+the tag table after each edit, or even every day.
+
+@node Select Tag Table, Find Tag, Create Tag Table, Tags
+@subsection Selecting a Tag Table
+
+@vindex tags-file-name
+@findex visit-tags-table
+ Emacs has at any time one @dfn{selected} tag table, and all the commands
+for working with tag tables use the selected one. To select a tag table,
+type @w{@kbd{M-x visit-tags-table}}, which reads the tag table file name as an
+argument. The name @file{TAGS} in the default directory is used as the
+default file name.
+
+ All this command does is store the file name in the variable
+@code{tags-file-name}. Emacs does not actually read in the tag table
+contents until you try to use them. Setting this variable yourself is just
+as good as using @code{visit-tags-table}. The variable's initial value is
+@code{nil}; this value tells all the commands for working with tag tables
+that they must ask for a tag table file name to use.
+
+@node Find Tag, Tags Search, Select Tag Table, Tags
+@subsection Finding a Tag
+
+ The most important thing that a tag table enables you to do is to find
+the definition of a specific tag.
+
+@table @kbd
+@item M-.@: @var{tag}
+Find first definition of @var{tag} (@code{find-tag}).
+@item C-u M-.
+Find next alternate definition of last tag specified.
+@item C-x 4 .@: @var{tag}
+Find first definition of @var{tag}, but display it in another window
+(@code{find-tag-other-window}).
+@end table
+
+@kindex M-.
+@findex find-tag
+ @kbd{M-.}@: (@code{find-tag}) is the command to find the definition of a
+specified tag. It searches through the tag table for that tag, as a
+string, and then uses the tag table info to determine the file that the
+definition is in and the approximate character position in the file of the
+definition. Then @code{find-tag} visits that file, moves point to the
+approximate character position, and starts searching ever-increasing
+distances away for the the text that should appear at the beginning of the
+definition.
+
+ If an empty argument is given (just type @key{RET}), the sexp in the
+buffer before or around point is used as the name of the tag to find.
+@xref{Lists}, for info on sexps.
+
+ The argument to @code{find-tag} need not be the whole tag name; it can be
+a substring of a tag name. However, there can be many tag names containing
+the substring you specify. Since @code{find-tag} works by searching the
+text of the tag table, it finds the first tag in the table that the
+specified substring appears in.
+
+ The way to find other tags that match the substring is to give
+@code{find-tag} a numeric argument, as in @kbd{C-u M-.}; this does not
+read a tag name, but continues searching the tag table's text for
+another tag containing the same substring last used. If you have a real
+@key{META} key, @kbd{M-0 M-.}@: is an easier alternative to @kbd{C-u
+M-.}. (That is a zero in @kbd{M-0}.)
+
+@kindex C-x 4 .
+@findex find-tag-other-window
+ Like most commands that can switch buffers, @code{find-tag} has another
+similar command that displays the new buffer in another window. @kbd{C-x 4
+.}@: invokes the function @code{find-tag-other-window}. (This key sequence
+ends with a period.)
+
+ Emacs comes with a tag table file @file{TAGS}, in the @file{src}
+subdirectory, which includes all the Lisp libraries and all the C
+sources of Emacs. By specifying this file with @code{visit-tags-table}
+and then using @kbd{M-.}@: you can quickly look at the source of any
+Emacs function.
+
+@node Tags Search, Tags Stepping, Find Tag, Tags
+@subsection Searching and Replacing with Tag Tables
+
+ The commands in this section visit and search all the files listed in the
+selected tag table, one by one. For these commands, the tag table serves
+only to specify a sequence of files to search. A related command is
+@kbd{M-x grep} (@pxref{Compilation}).
+
+@table @kbd
+@item M-x tags-search
+Search for the specified regexp through the files in the selected tag
+table.
+@item M-x tags-query-replace
+Perform a @code{query-replace} on each file in the selected tag table.
+@item M-,
+Restart one of the commands above, from the current location of point
+(@code{tags-loop-continue}).
+@end table
+
+@findex tags-search
+ @kbd{M-x tags-search} reads a regexp using the minibuffer, then visits
+the files of the selected tag table one by one, and searches through each
+one for that regexp. It displays the name of the file being searched so
+you can follow its progress. As soon as an occurrence is found,
+@code{tags-search} returns.
+
+@kindex M-,
+@findex tags-loop-continue
+ Having found one match, you probably want to find all the rest. To find
+one more match, type @kbd{M-,} (@code{tags-loop-continue}) to resume the
+@code{tags-search}. This searches the rest of the current buffer, followed
+by the remaining files of the tag table.
+
+@findex tags-query-replace
+ @kbd{M-x tags-query-replace} performs a single @code{query-replace}
+through all the files in the tag table. It reads a string to search for
+and a string to replace with, just like ordinary @w{@kbd{M-x query-replace}}.
+It searches much like @kbd{M-x tags-search} but repeatedly, processing
+matches according to your input. @xref{Replace}, for more information on
+@code{query-replace}.@refill
+
+ It is possible to get through all the files in the tag table with a
+single invocation of @kbd{M-x tags-query-replace}. But since any
+unrecognized character causes the command to exit, you may need to continue
+where you left off. @kbd{M-,} can be used for this. It resumes the last
+tags search or replace command that you did.
+
+ It may have struck you that @code{tags-search} is a lot like @code{grep}.
+You can also run @code{grep} itself as an inferior of Emacs and have Emacs
+show you the matching lines one by one. This works mostly the same as
+running a compilation and having Emacs show you where the errors were.
+@xref{Compilation}.
+
+@node Tags Stepping, List Tags, Tags Search, Tags
+@subsection Stepping Through a Tag Table
+@findex next-file
+
+ If you wish to process all the files in the selected tag table, but
+@kbd{M-x tags-search} and @kbd{M-x tags-query-replace} in particular are not what
+you want, you can use @kbd{M-x next-file}.
+
+@table @kbd
+@item C-u M-x next-file
+With a numeric argument, regardless of its value, visit the first
+file in the tag table, and prepare to advance sequentially by files.
+@item M-x next-file
+Visit the next file in the selected tag table.
+@end table
+
+@node List Tags,, Tags Stepping, Tags
+@subsection Tag Table Inquiries
+
+@table @kbd
+@item M-x list-tags
+Display a list of the tags defined in a specific program file.
+@item M-x tags-apropos
+Display a list of all tags matching a specified regexp.
+@end table
+
+@findex list-tags
+ @kbd{M-x list-tags} reads the name of one of the files described by the
+selected tag table, and displays a list of all the tags defined in that
+file. The ``file name'' argument is really just a string to compare
+against the names recorded in the tag table; it is read as a string rather
+than as a file name. Therefore, completion and defaulting are not
+available, and you must enter the string the same way it appears in the tag
+table. Do not include a directory as part of the file name unless the file
+name recorded in the tag table includes a directory.
+
+@findex tags-apropos
+ @kbd{M-x tags-apropos} is like @code{apropos} for tags. It reads a regexp,
+then finds all the tags in the selected tag table whose entries match that
+regexp, and displays the tag names found.
+
+@node Fortran,, Tags, Programs
+@section Fortran Mode
+@cindex Fortran mode
+
+ Fortran mode provides special motion commands for Fortran statements and
+subprograms, and indentation commands that understand Fortran conventions
+of nesting, line numbers and continuation statements.
+
+ Special commands for comments are provided because Fortran comments are
+unlike those of other languages.
+
+ Built-in abbrevs optionally save typing when you insert Fortran keywords.
+
+@findex fortran-mode
+ Use @kbd{M-x fortran-mode} to switch to this major mode. Doing so calls
+the value of @code{fortran-mode-hook} as a function of no arguments if
+that variable has a value that is not @code{nil}.
+
+@menu
+* Motion: Fortran Motion. Moving point by statements or subprograms.
+* Indent: Fortran Indent. Indentation commands for Fortran.
+* Comments: Fortran Comments. Inserting and aligning comments.
+* Columns: Fortran Columns. Measuring columns for valid Fortran.
+* Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords.
+@end menu
+
+ Fortran mode was contributed by Michael Prange.
+
+@node Fortran Motion, Fortran Indent, Fortran, Fortran
+@subsection Motion Commands
+
+ Fortran mode provides special commands to move by subprograms (functions
+and subroutines) and by statements. There is also a command to put the
+region around one subprogram, convenient for killing it or moving it.
+
+@kindex C-M-a (Fortran mode)
+@kindex C-M-e (Fortran mode)
+@kindex C-M-h (Fortran mode)
+@kindex C-c C-p (Fortran mode)
+@kindex C-c C-n (Fortran mode)
+@findex beginning-of-fortran-subprogram
+@findex end-of-fortran-subprogram
+@findex mark-fortran-subprogram
+@findex fortran-previous-statement
+@findex fortran-next-statement
+
+@table @kbd
+@c !!! following generates acceptable underfull hbox
+@item C-M-a
+Move to beginning of subprogram
+(@code{beginning-of-fortran-subprogram}).
+@item C-M-e
+Move to end of subprogram (@code{end-of-fortran-subprogram}).
+@item C-M-h
+Put point at beginning of subprogram and mark at end
+(@code{mark-fortran-subprogram}).
+@item C-c C-n
+Move to beginning of current or next statement
+(@code{fortran-next-statement}).
+@item C-c C-p
+Move to beginning of current or previous statement
+(@code{fortran-previous-statement}).
+@end table
+
+@node Fortran Indent, Fortran Comments, Fortran Motion, Fortran
+@subsection Fortran Indentation
+
+ Special commands and features are needed for indenting Fortran code in
+order to make sure various syntactic entities (line numbers, comment line
+indicators and continuation line flags) appear in the columns that are
+required for standard Fortran.
+
+@menu
+* Commands: ForIndent Commands. Commands for indenting Fortran.
+* Numbers: ForIndent Num. How line numbers auto-indent.
+* Conv: ForIndent Conv. Conventions you must obey to avoid trouble.
+* Vars: ForIndent Vars. Variables controlling Fortran indent style.
+@end menu
+
+@node ForIndent Commands, ForIndent Num, Fortran Indent, Fortran Indent
+@subsubsection Fortran Indentation Commands
+
+@table @kbd
+@item @key{TAB}
+Indent the current line (@code{fortran-indent-line}).
+@item M-@key{LFD}
+Break the current line and set up a continuation line.
+@item C-M-q
+Indent all the lines of the subprogram point is in
+(@code{fortran-indent-subprogram}).
+@end table
+
+@findex fortran-indent-line
+ @key{TAB} is redefined by Fortran mode to reindent the current line for
+Fortran (@code{fortran-indent-line}). Line numbers and continuation
+markers are indented to their required columns, and the body of the
+statement is independently indented based on its nesting in the program.
+
+@kindex C-M-q (Fortran mode)
+@findex fortran-indent-subprogram
+ The key @kbd{C-M-q} is redefined as @code{fortran-indent-subprogram}, a
+command to reindent all the lines of the Fortran subprogram (function or
+subroutine) containing point.
+
+@kindex M-LFD (Fortran mode)
+@findex fortran-split-line
+ The key @kbd{M-@key{LFD}} is redefined as @code{fortran-split-line}, a
+command to split a line in the appropriate fashion for Fortran. In a
+non-comment line, the second half becomes a continuation line and is
+indented accordingly. In a comment line, both halves become separate
+comment lines.
+
+@node ForIndent Num, ForIndent Conv, ForIndent Commands, Fortran Indent
+@subsubsection Line Numbers and Continuation
+
+ If a number is the first non-whitespace in the line, it is assumed to be
+a line number and is moved to columns 0 through 4. (Columns are always
+counted from 0 in GNU Emacs.) If the text on the line starts with the
+conventional Fortran continuation marker @samp{$}, it is moved to column 5.
+If the text begins with any non whitespace character in column 5, it is
+assumed to be an unconventional continuation marker and remains in column
+5.
+
+@vindex fortran-line-number-indent
+ Line numbers of four digits or less are normally indented one space.
+This amount is controlled by the variable @code{fortran-line-number-indent}
+which is the maximum indentation a line number can have. Line numbers
+are indented to right-justify them to end in column 4 unless that would
+require more than this maximum indentation. The default value of the
+variable is 1.
+
+@vindex fortran-electric-line-number
+ Simply inserting a line number is enough to indent it according to these
+rules. As each digit is inserted, the indentation is recomputed. To turn
+off this feature, set the variable @code{fortran-electric-line-number} to
+@code{nil}. Then inserting line numbers is like inserting anything else.
+
+@node ForIndent Conv, ForIndent Vars, ForIndent Num, Fortran Indent
+@subsubsection Syntactic Conventions
+
+ Fortran mode assumes that you follow certain conventions that simplify
+the task of understanding a Fortran program well enough to indent it
+properly:
+
+@vindex fortran-continuation-char
+@itemize @bullet
+@item
+Two nested @samp{do} loops never share a @samp{continue} statement.
+
+@item
+The same character appears in column 5 of all continuation lines, and
+this character is the value of the variable @code{fortran-continuation-char}.
+By default, this character is @samp{$}.
+@end itemize
+
+@noindent
+If you fail to follow these conventions, the indentation commands may
+indent some lines unaesthetically. However, a correct Fortran program will
+retain its meaning when reindented even if the conventions are not
+followed.
+
+@node ForIndent Vars,, ForIndent Conv, Fortran Indent
+@subsubsection Variables for Fortran Indentation
+
+@vindex fortran-do-indent
+@vindex fortran-if-indent
+@vindex fortran-continuation-indent
+@vindex fortran-check-all-num-for-matching-do
+@vindex fortran-minimum-statement-indent
+ Several additional variables control how Fortran indentation works.
+
+@table @code
+@item fortran-do-indent
+Extra indentation within each level of @samp{do} statement @*(default 3).
+
+@item fortran-if-indent
+Extra indentation within each level of @samp{if} statement @*(default 3).
+
+@item fortran-continuation-indent
+Extra indentation for bodies of continuation lines (default 5).
+
+@item fortran-check-all-num-for-matching-do
+If this is @code{nil}, indentation assumes that each @samp{do}
+statement ends on a @samp{continue} statement. Therefore, when
+computing indentation for a statement other than @samp{continue}, it
+can save time by not checking for a @samp{do} statement ending there.
+If this is non-@code{nil}, indenting any numbered statement must check
+for a @samp{do} that ends there. The default is @code{nil}.
+
+@item fortran-minimum-statement-indent
+Minimum indentation for fortran statements. For standard Fortran,
+this is 6. Statement bodies will never be indented less than this
+much.
+@end table
+
+@node Fortran Comments, Fortran Columns, Fortran Indent, Fortran
+@subsection Comments
+
+ The usual Emacs comment commands assume that a comment can follow a line
+of code. In Fortran, the standard comment syntax requires an entire line
+to be just a comment. Therefore, Fortran mode replaces the standard Emacs
+comment commands and defines some new variables.
+
+ Fortran mode can also handle a nonstandard comment syntax where comments
+start with @samp{!} and can follow other text. Because only some Fortran
+compilers accept this syntax, Fortran mode will not insert such comments
+unless you have said in advance to do so. To do this, set the variable
+@code{comment-start} to @samp{"!"} (@pxref{Variables}).
+
+@table @kbd
+@item M-;
+Align comment or insert new comment (@code{fortran-comment-indent}).
+
+@item C-x ;
+Applies to nonstandard @samp{!} comments only.
+
+@item C-c ;
+Turn all lines of the region into comments, or (with arg)
+turn them back into real code (@code{fortran-comment-region}).
+@end table
+
+ @kbd{M-;} in Fortran mode is redefined as the command
+@code{fortran-comment-indent}. Like the usual @kbd{M-;} command, this
+recognizes any kind of existing comment and aligns its text appropriately;
+if there is no existing comment, a comment is inserted and aligned. But
+inserting and aligning comments are not the same in Fortran mode as in
+other modes.
+
+ When a new comment must be inserted, if the current line is blank, a
+full-line comment is inserted. On a non-blank line, a nonstandard @samp{!}
+comment is inserted if you have said you want to use them. Otherwise a
+full-line comment is inserted on a new line before the current line.
+
+ Nonstandard @samp{!} comments are aligned like comments in other
+languages, but full-line comments are different. In a standard full-line
+comment, the comment delimiter itself must always appear in column zero.
+What can be aligned is the text within the comment. You can choose from
+three styles of alignment by setting the variable
+@code{fortran-comment-indent-style} to one of these values:
+
+@vindex fortran-comment-indent-style
+@vindex fortran-comment-line-column
+@table @code
+@item fixed
+The text is aligned at a fixed column, which is the value of
+@code{fortran-comment-line-column}. This is the default.
+@item relative
+The text is aligned as if it were a line of code, but with an
+additional @code{fortran-comment-line-column} columns of indentation.
+@item nil
+Text in full-line columns is not moved automatically.
+@end table
+
+@vindex fortran-comment-indent-char
+ In addition, you can specify the character to be used to indent within
+full-line comments by setting the variable @code{fortran-comment-indent-char}
+to the character you want to use.
+
+@vindex comment-line-start
+@vindex comment-line-start-skip
+ Fortran mode introduces the two variables, @code{comment-line-start} and
+@code{comment-line-start-skip}, which play for full-line comments the same
+roles played by @code{comment-start} and @code{comment-start-skip} for
+ordinary text-following comments. Normally these are set properly by
+Fortran mode so you do not need to change them.
+
+ The normal Emacs comment command @kbd{C-x ;} has not been redefined.
+If you use @samp{!} comments, this command can be used with them. Otherwise
+it is useless in Fortran mode.
+
+@kindex C-c ; (Fortran mode)
+@findex fortran-comment-region
+@vindex fortran-comment-region
+ The command @kbd{C-c ;} (@code{fortran-comment-region}) turns all the
+lines of the region into comments by inserting the string @samp{C$$$} at
+the front of each one. With a numeric arg, the region is turned back into
+live code by deleting @samp{C$$$} from the front of each line in it. The
+string used for these comments can be controlled by setting the variable
+@code{fortran-comment-region}. Note that here we have an example of a
+command and a variable with the same name; these two uses of the name never
+conflict because in Lisp and in Emacs it is always clear from the context
+which one is meant.
+
+@node Fortran Columns, Fortran Abbrev, Fortran Comments, Fortran
+@subsection Columns
+
+@table @kbd
+@item C-c C-r
+Displays a ``column ruler'' momentarily above the current line
+(@code{fortran-column-ruler}).
+@item C-c C-w
+Splits the current window horizontally so that it is 72 columns wide.
+This may help you avoid going over that limit (@code{fortran-window-create}).
+@end table
+
+@kindex C-c C-r (Fortran mode)
+@findex fortran-column-ruler
+@vindex fortran-column-ruler
+ The command @kbd{C-c C-r} (@code{fortran-column-ruler}) shows a column
+ruler momentarily above the current line. The comment ruler is two lines
+of text that show you the locations of columns with special significance
+in Fortran programs. Square brackets show the limits of the columns for
+line numbers, and curly brackets show the limits of the columns for the
+statement body. Column numbers appear above them.
+
+ Note that the column numbers count from zero, as always in GNU Emacs. As
+a result, the numbers may not be those you are familiar with; but the
+actual positions in the line are standard Fortran.
+
+ The text used to display the column ruler is the value of the variable
+@code{fortran-comment-ruler}. By changing this variable, you can change
+the display.
+
+@kindex C-c C-w (Fortran mode)
+@findex fortran-window-create
+ For even more help, use @kbd{C-c C-w} (@code{fortran-window-create}), a
+command which splits the current window horizontally, making a window 72
+columns wide. By editing in this window you can immediately see when you
+make a line too wide to be correct Fortran.
+
+@node Fortran Abbrev,, Fortran Columns, Fortran
+@subsection Fortran Keyword Abbrevs
+
+ Fortran mode provides many built-in abbrevs for common keywords and
+declarations. These are the same sort of abbrev that you can define
+yourself. To use them, you must turn on Abbrev mode (@pxref{Abbrevs}).
+
+ The built-in abbrevs are unusual in one way: they all start with a
+semicolon. You cannot normally use semicolons in an abbrev, but Fortran
+mode makes this possible by changing the syntax of semicolon to ``word
+constituent''.
+
+ For example, one built-in Fortran abbrev is @samp{;c} for
+@samp{continue}. If you insert @samp{;c} and then insert a punctuation
+character such as a space or a newline, the @samp{;c} will change
+automatically to @samp{continue}, provided Abbrev mode is enabled.@refill
+
+ Type @samp{;?} or @samp{;C-h} to display a list of all the built-in
+Fortran abbrevs and what they stand for.
+
+@node Compiling/Testing, Abbrevs, Programs, Top
+@chapter Compiling and Testing Programs
+
+ The previous chapter discusses the Emacs commands that are useful for
+making changes in programs. This chapter deals with commands that assist
+in the larger process of developing and maintaining programs.
+
+@menu
+* Compilation:: Compiling programs in languages other than Lisp
+ (C, Pascal, etc.)
+* Modes: Lisp Modes. Various modes for editing Lisp programs, with
+ different facilities for running the Lisp programs.
+* Libraries: Lisp Libraries. Creating Lisp programs to run in Emacs.
+* Interaction: Lisp Interaction. Executing Lisp in an Emacs buffer.
+* Eval: Lisp Eval. Executing a single Lisp expression in Emacs.
+* Debug: Lisp Debug. Debugging Lisp programs running in Emacs.
+* External Lisp:: Communicating through Emacs with a separate Lisp.
+@end menu
+
+@node Compilation, Lisp Modes, Compiling/Testing, Compiling/Testing
+@section Running `make', or Compilers Generally
+@cindex inferior process
+@cindex make
+@cindex compilation errors
+@cindex error log
+
+ Emacs can run compilers for noninteractive languages such as C and
+Fortran as inferior processes, feeding the error log into an Emacs buffer.
+It can also parse the error messages and visit the files in which errors
+are found, moving point right to the line where the error occurred.
+
+@table @kbd
+@item M-x compile
+Run a compiler asynchronously under Emacs, with error messages to
+@samp{*compilation*} buffer.
+@item M-x grep
+Run @code{grep} asynchronously under Emacs, with matching lines
+listed in the buffer named @samp{*compilation*}.
+@item M-x kill-compilation
+@itemx M-x kill-grep
+Kill the running compilation or @code{grep} subprocess.
+@item C-x `
+Visit the locus of the next compiler error message or @code{grep} match.
+@end table
+
+@findex compile
+ To run @code{make} or another compiler, do @kbd{M-x compile}. This command
+reads a shell command line using the minibuffer, and then executes the
+specified command line in an inferior shell with output going to the buffer
+named @samp{*compilation*}. The current buffer's default directory is used
+as the working directory for the execution of the command; normally,
+therefore, the makefile comes from this directory.
+
+@vindex compile-command
+ When the shell command line is read, the minibuffer appears containing a
+default command line, which is the command you used the last time you did
+@kbd{M-x compile}. If you type just @key{RET}, the same command line is used
+again. The first @kbd{M-x compile} provides @code{make -k} as the default.
+The default is taken from the variable @code{compile-command}; if the
+appropriate compilation command for a file is something other than
+@code{make -k}, it can be useful to have the file specify a local value for
+@code{compile-command} (@pxref{File Variables}).
+
+ Starting a compilation causes the buffer @samp{*compilation*} to be
+displayed in another window but not selected. Its mode line tells you
+whether compilation is finished, with the word @samp{run} or @samp{exit} inside
+the parentheses. You do not have to keep this buffer visible; compilation
+continues in any case.
+
+@findex kill-compilation
+ To kill the compilation process, do @kbd{M-x kill-compilation}. You will
+see that the mode line of the @samp{*compilation*} buffer changes to say
+@samp{signal} instead of @samp{run}. Starting a new compilation also kills
+any running compilation, as only one can exist at any time. However, this
+requires confirmation before actually killing a compilation that is
+running.@refill
+
+@kindex C-x `
+@findex next-error
+ To parse the compiler error messages, type @kbd{C-x `} (@code{next-error}). The
+character following the @kbd{C-x} is the grave accent, not the single
+quote. This command displays the buffer @samp{*compilation*} in one window
+and the buffer in which the next error occurred in another window. Point
+in that buffer is moved to the line where the error was found. The
+corresponding error message is scrolled to the top of the window in which
+@samp{*compilation*} is displayed.
+
+ The first time @kbd{C-x `} is used after the start of a compilation, it
+parses all the error messages, visits all the files that have error
+messages, and makes markers pointing at the lines that the error messages
+refer to. Then it moves to the first error message location. Subsequent
+uses of @kbd{C-x `} advance down the data set up by the first use. When
+the preparsed error messages are exhausted, the next @kbd{C-x `} checks for
+any more error messages that have come in; this is useful if you start
+editing the compiler errors while the compilation is still going on. If no
+more error messages have come in, @kbd{C-x `} reports an error.
+
+ @kbd{C-u C-x `} discards the preparsed error message data and parses the
+@samp{*compilation*} buffer over again, then displaying the first error.
+This way, you can process the same set of errors again.
+
+@findex grep
+ Instead of running a compiler, you can run @code{grep} and see the lines
+on which matches were found. To do this, type @kbd{M-x grep} with an argument
+line that contains the same arguments you would give @code{grep} when running
+it normally: a @code{grep}-style regexp (usually in singlequotes to quote
+the shell's special characters) followed by filenames which may use wildcards.
+The output from @code{grep} goes in the @samp{*compilation*} buffer and the
+lines that matched can be found with @kbd{C-x `} as if they were compilation
+errors.
+
+ Note: a shell is used to run the compile command, but the shell is told
+that it should be noninteractive. This means in particular that the shell
+starts up with no prompt. If you find your usual shell prompt making an
+unsightly appearance in the @samp{*compilation*} buffer, it means you have
+made a mistake in your shell's init file (@file{.cshrc} or @file{.shrc} or
+@dots{}) by setting the prompt unconditionally. The shell init file should
+set the prompt only if there already is a prompt.
+
+Here is how to do it in @code{csh}:
+
+@example
+if ($?prompt) set prompt = ...
+@end example
+
+Here is how to do it in the Bourne-Again shell:
+
+@example
+@group
+if [ ! "$PS1" ]; then
+ PS1=@dots{}
+fi
+@end group
+@end example
+
+@node Lisp Modes, Lisp Libraries, Compilation, Compiling/Testing
+@section Major Modes for Lisp
+
+@cindex Lisp mode
+@cindex Scheme mode
+@cindex Inferior Scheme mode
+ Emacs has four different major modes for Lisp. They are the same in
+terms of editing commands, but differ in the commands for executing Lisp
+expressions.
+
+@table @asis
+@item Emacs-Lisp mode
+The mode for editing source files of programs to run in Emacs Lisp.
+This mode defines @kbd{C-M-x} to evaluate the current defun.
+@xref{Lisp Libraries}.
+@item Lisp Interaction mode
+The mode for an interactive session with Emacs Lisp. It defines
+@key{LFD} to evaluate the sexp before point and insert its value in the
+buffer. @xref{Lisp Interaction}.
+@item Lisp mode
+The mode for editing source files of programs that run in Lisps other
+than Emacs Lisp. This mode defines @kbd{C-M-x} to send the current defun
+to an inferior Lisp process. @xref{External Lisp}.
+@item Inferior Lisp mode
+The mode for an interactive session with an inferior Lisp process.
+This mode combines the special features of Lisp mode and Shell mode
+(@pxref{Shell Mode}).
+@item Scheme mode
+Like Lisp mode but for Scheme programs.
+@item Inferior Scheme mode
+The mode for an interactive session with an inferior Scheme process.
+@end table
+
+@node Lisp Libraries, Lisp Eval, Lisp Modes, Compiling/Testing
+@section Libraries of Lisp Code for Emacs
+@cindex libraries
+@cindex loading Lisp code
+
+ Lisp code for Emacs editing commands is stored in files whose names
+conventionally end in @file{.el}. This ending tells Emacs to edit them in
+Emacs-Lisp mode (@pxref{Lisp Modes}).
+
+@menu
+* Loading:: Loading libraries of Lisp code into Emacs for use.
+* Compiling Libraries:: Compiling a library makes it load and run faster.
+* Mocklisp:: Converting Mocklisp to Lisp so GNU Emacs can run it.
+@end menu
+
+@node Loading, Compiling Libraries, Lisp Libraries, Lisp Libraries
+@subsection Loading Libraries
+
+@findex load-file
+ To execute a file of Emacs Lisp, use @kbd{M-x load-file}. This command
+reads a file name using the minibuffer and then executes the contents of
+that file as Lisp code. It is not necessary to visit the file first;
+in any case, this command reads the file as found on disk, not text in
+an Emacs buffer.
+
+@findex load
+@findex load-library
+ Once a file of Lisp code is installed in the Emacs Lisp library
+directories, users can load it using @kbd{M-x load-library}. Programs can
+load it by calling @code{load-library}, or with @code{load}, a more primitive
+function that is similar but accepts some additional arguments.
+
+ @kbd{M-x load-library} differs from @kbd{M-x load-file} in that it
+searches a sequence of directories and tries three file names in each
+directory. The three names are, first, the specified name with @file{.elc}
+appended; second, with @file{.el} appended; third, the specified
+name alone. A @file{.elc} file would be the result of compiling the Lisp
+file into byte code; it is loaded if possible in preference to the Lisp
+file itself because the compiled file will load and run faster.
+
+ Because the argument to @code{load-library} is usually not in itself
+a valid file name, file name completion is not available. Indeed, when
+using this command, you usually do not know exactly what file name
+will be used.
+
+@vindex load-path
+ The sequence of directories searched by @kbd{M-x load-library} is
+specified by the variable @code{load-path}, a list of strings that are
+directory names. The default value of the list contains the directory where
+the Lisp code for Emacs itself is stored. If you have libraries of
+your own, put them in a single directory and add that directory
+to @code{load-path}. @code{nil} in this list stands for the current default
+directory, but it is probably not a good idea to put @code{nil} in the
+list. If you find yourself wishing that @code{nil} were in the list,
+most likely what you really want to do is use @kbd{M-x load-file}
+this once.
+
+@cindex autoload
+ Often you do not have to give any command to load a library, because the
+commands defined in the library are set up to @dfn{autoload} that library.
+Running any of those commands causes @code{load} to be called to load the
+library; this replaces the autoload definitions with the real ones from the
+library.
+
+ If autoloading a file does not finish, either because of an error or
+because of a @kbd{C-g} quit, all function definitions made by the file are
+undone automatically. So are any calls to @code{provide}. As a consequence,
+if you use one of the autoloadable commands again, the entire file will be
+loaded a second time. This prevents problems where the command is no
+longer autoloading but it works wrong because not all the file was loaded.
+Function definitions are undone only for autoloading; explicit calls to
+@code{load} do not undo anything if loading is not completed.
+
+@node Compiling Libraries, Mocklisp, Loading, Lisp Libraries
+@subsection Compiling Libraries
+
+@cindex byte code
+ Emacs Lisp code can be compiled into byte-code which loads faster,
+takes up less space when loaded, and executes faster.
+
+@findex byte-compile-file
+ The way to make a byte-code compiled file from an Emacs-Lisp source file
+is with @kbd{M-x byte-compile-file}. The default argument for this
+function is the file visited in the current buffer. It reads the specified
+file, compiles it into byte code, and writes an output file whose name is
+made by appending @file{c} to the input file name. Thus, the file
+@file{rmail.el} would be compiled into @file{rmail.elc}.
+
+@findex byte-recompile-directory
+ To recompile the changed Lisp files in a directory, use @kbd{M-x
+byte-recompile-directory}. Specify just the directory name as an argument.
+Each @file{.el} file that has been byte-compiled before is byte-compiled
+again if it has changed since the previous compilation. A numeric argument
+to this command tells it to offer to compile each @file{.el} file that has
+not already been compiled. You must answer @kbd{y} or @kbd{n} to each
+offer.
+
+@findex batch-byte-compile
+ Emacs can be invoked noninteractively from the shell to do byte compilation
+with the aid of the function @code{batch-byte-compile}. In this case,
+the files to be compiled are specified with command-line arguments.
+Use a shell command of the form
+
+@example
+emacs -batch -f batch-byte-compile @var{files}...
+@end example
+
+ Directory names may also be given as arguments;
+@code{byte-recompile-directory} is invoked (in effect) on each such directory.
+@code{batch-byte-compile} uses all the remaining command-line arguments as
+file or directory names, then kills the Emacs process.
+
+@cindex disassemble
+@findex disassemble
+ @kbd{M-x disassemble} explains the result of byte compilation. Its
+argument is a function name. It displays the byte-compiled code in a help
+window in symbolic form, one instruction per line. If the instruction
+refers to a variable or constant, that is shown too.
+
+@node Mocklisp,,Compiling Libraries,Lisp Libraries
+@subsection Converting Mocklisp to Lisp
+
+@cindex mocklisp
+@findex convert-mocklisp-buffer
+ GNU Emacs can run Mocklisp files by converting them to Emacs Lisp first.
+To convert a Mocklisp file, visit it and then type @kbd{M-x
+convert-mocklisp-buffer}. Then save the resulting buffer of Lisp file in a
+file whose name ends in @file{.el} and use the new file as a Lisp library.
+
+ It does not currently work to byte-compile converted Mocklisp code.
+This is because converted Mocklisp code uses some special Lisp features
+to deal with Mocklisp's incompatible ideas of how arguments are evaluated
+and which values signify ``true'' or ``false''.
+
+@node Lisp Eval, Lisp Debug, Lisp Libraries, Compiling/Testing
+@section Evaluating Emacs-Lisp Expressions
+@cindex Emacs-Lisp mode
+
+@findex emacs-lisp-mode
+ Lisp programs intended to be run in Emacs should be edited in Emacs-Lisp
+mode; this will happen automatically for file names ending in @file{.el}.
+By contrast, Lisp mode itself is used for editing Lisp programs intended
+for other Lisp systems. Emacs-Lisp mode can be selected with the command
+@kbd{M-x emacs-lisp-mode}.
+
+ For testing of Lisp programs to run in Emacs, it is useful to be able to
+evaluate part of the program as it is found in the Emacs buffer. For
+example, after changing the text of a Lisp function definition, evaluating
+the definition installs the change for future calls to the function.
+Evaluation of Lisp expressions is also useful in any kind of editing task
+for invoking noninteractive functions (functions that are not commands).
+
+@table @kbd
+@item M-@key{ESC}
+Read a Lisp expression in the minibuffer, evaluate it, and print the
+value in the minibuffer (@code{eval-expression}).
+@item C-x C-e
+Evaluate the Lisp expression before point, and print the value in the
+minibuffer (@code{eval-last-sexp}).
+@item C-M-x
+Evaluate the defun containing or after point, and print the value in
+the minibuffer (@code{eval-defun}).
+@item M-x eval-region
+Evaluate all the Lisp expressions in the region.
+@item M-x eval-current-buffer
+Evaluate all the Lisp expressions in the buffer.
+@end table
+
+@kindex M-ESC
+@findex eval-expression
+ @kbd{M-@key{ESC}} (@code{eval-expression}) is the most basic command for evaluating
+a Lisp expression interactively. It reads the expression using the
+minibuffer, so you can execute any expression on a buffer regardless of
+what the buffer contains. When the expression is evaluated, the current
+buffer is once again the buffer that was current when @kbd{M-@key{ESC}} was
+typed.
+
+ @kbd{M-@key{ESC}} can easily confuse users who do not understand it,
+especially on keyboards with autorepeat where it can result from holding
+down the @key{ESC} key for too long. Therefore, @code{eval-expression} is
+normally a disabled command. Attempting to use this command asks for
+confirmation and gives you the option of enabling it; once you enable the
+command, confirmation will no longer be required for it.
+@xref{Disabling}.@refill
+
+@kindex C-M-x
+@findex eval-defun
+ In Emacs-Lisp mode, the key @kbd{C-M-x} is bound to the function @code{eval-defun},
+which parses the defun containing or following point as a Lisp expression
+and evaluates it. The value is printed in the echo area. This command is
+convenient for installing in the Lisp environment changes that you have
+just made in the text of a function definition.
+
+@kindex C-x C-e
+@findex eval-last-sexp
+ The command @kbd{C-x C-e} (@code{eval-last-sexp}) performs a similar job
+but is available in all major modes, not just Emacs-Lisp mode. It finds
+the sexp before point, reads it as a Lisp expression, evaluates it, and
+prints the value in the echo area. It is sometimes useful to type in an
+expression and then, with point still after it, type @kbd{C-x C-e}.
+
+ If @kbd{C-M-x} or @kbd{C-x C-e} is given a numeric argument, it prints the value
+by insertion into the current buffer at point, rather than in the echo
+area. The argument value does not matter.
+
+@findex eval-region
+@findex eval-current-buffer
+ The most general command for evaluating Lisp expressions from a buffer is
+@code{eval-region}. @kbd{M-x eval-region} parses the text of the region as one or
+more Lisp expressions, evaluating them one by one. @kbd{M-x eval-current-buffer}
+is similar but evaluates the entire buffer. This is a reasonable way to
+install the contents of a file of Lisp code that you are just ready to
+test. After finding and fixing a bug, use @kbd{C-M-x} on each function
+that you change, to keep the Lisp world in step with the source file.
+
+@node Lisp Debug, Lisp Interaction, Lisp Eval, Compiling/Testing
+@section The Emacs-Lisp Debugger
+@cindex debugger
+
+@vindex debug-on-error
+@vindex debug-on-quit
+ GNU Emacs contains a debugger for Lisp programs executing inside it.
+This debugger is normally not used; many commands frequently get Lisp
+errors when invoked in inappropriate contexts (such as @kbd{C-f} at the end
+of the buffer) and it would be very unpleasant for that to enter a special
+debugging mode. When you want to make Lisp errors invoke the debugger, you
+must set the variable @code{debug-on-error} to non-@code{nil}. Quitting
+with @kbd{C-g} is not considered an error, and @code{debug-on-error} has no
+effect on the handling of @kbd{C-g}. However, if you set
+@code{debug-on-quit} non-@code{nil}, @kbd{C-g} will invoke the debugger.
+This can be useful for debugging an infinite loop; type @kbd{C-g} once the
+loop has had time to reach its steady state. @code{debug-on-quit} has no
+effect on errors.@refill
+
+@findex debug-on-entry
+@findex cancel-debug-on-entry
+@findex debug
+ You can also cause the debugger to be entered when a specified function
+is called, or at a particular place in Lisp code. Use @kbd{M-x
+debug-on-entry} with argument @var{fun-name} to cause function
+@var{fun-name} to enter the debugger as soon as it is called. Use
+@kbd{M-x cancel-debug-on-entry} to make the function stop entering the
+debugger when called. (Redefining the function also does this.) To enter
+the debugger from some other place in Lisp code, you must insert the
+expression @code{(debug)} there and install the changed code with
+@kbd{C-M-x}. @xref{Lisp Eval}.@refill
+
+ When the debugger is entered, it displays the previously selected buffer
+in one window and a buffer named @samp{*Backtrace*} in another window. The
+backtrace buffer contains one line for each level of Lisp function
+execution currently going on. At the beginning of this buffer is a message
+describing the reason that the debugger was invoked (such as, what error
+message if it was invoked due to an error).
+
+@cindex Backtrace mode
+ The backtrace buffer is read-only, and is in a special major mode,
+Backtrace mode, in which letters are defined as debugger commands. The
+usual Emacs editing commands are available; you can switch windows to
+examine the buffer that was being edited at the time of the error, and you
+can also switch buffers, visit files, and do any other sort of editing.
+However, the debugger is a recursive editing level (@pxref{Recursive Edit})
+and it is wise to go back to the backtrace buffer and exit the debugger
+officially when you don't want to use it any more. Exiting the debugger
+kills the backtrace buffer.
+
+@cindex current stack frame
+ The contents of the backtrace buffer show you the functions that are
+executing and the arguments that were given to them. It has the additional
+purpose of allowing you to specify a stack frame by moving point to the line
+describing that frame. The frame whose line point is on is considered the
+@dfn{current frame}. Some of the debugger commands operate on the current
+frame. Debugger commands are mainly used for stepping through code an
+expression at a time. Here is a list of them.
+
+@table @kbd
+@item c
+Exit the debugger and continue execution. In most cases, execution of
+the program continues as if the debugger had never been entered (aside
+from the effect of any variables or data structures you may have
+changed while inside the debugger). This includes entry to the
+debugger due to function entry or exit, explicit invocation, quitting
+or certain errors. Most errors cannot be continued; trying to
+continue one of them causes the same error to occur again.
+@item d
+Continue execution, but enter the debugger the next time a Lisp
+function is called. This allows you to step through the
+subexpressions of an expression, seeing what values the subexpressions
+compute and what else they do.
+
+The stack frame made for the function call which enters the debugger
+in this way will be flagged automatically for the debugger to be called
+when the frame is exited. You can use the @kbd{u} command to cancel
+this flag.
+@item b
+Set up to enter the debugger when the current frame is exited. Frames
+that will invoke the debugger on exit are flagged with stars.
+@item u
+Don't enter the debugger when the current frame is exited. This
+cancels a @kbd{b} command on that frame.
+@item e
+Read a Lisp expression in the minibuffer, evaluate it, and print the
+value in the echo area. This is the same as the command @kbd{M-@key{ESC}},
+except that @kbd{e} is not normally disabled like @kbd{M-@key{ESC}}.
+@item q
+Terminate the program being debugged; return to top-level Emacs
+command execution.
+
+If the debugger was entered due to a @kbd{C-g} but you really want
+to quit, not to debug, use the @kbd{q} command.
+@item r
+Return a value from the debugger. The value is computed by reading an
+expression with the minibuffer and evaluating it.
+
+The value returned by the debugger makes a difference when the debugger
+was invoked due to exit from a Lisp call frame (as requested with @kbd{b});
+then the value specified in the @kbd{r} command is used as the value of
+that frame.
+
+The debugger's return value also matters with many errors. For example,
+@code{wrong-type-argument} errors will use the debugger's return value
+instead of the invalid argument; @code{no-catch} errors will use the
+debugger value as a throw tag instead of the tag that was not found.
+If an error was signaled by calling the Lisp function @code{signal},
+the debugger's return value is returned as the value of @code{signal}.
+@end table
+
+@node Lisp Interaction, External Lisp, Lisp Debug, Compiling/Testing
+@section Lisp Interaction Buffers
+
+@cindex Lisp Interaction mode
+@cindex scratch buffer
+ The buffer @samp{*scratch*} which is selected when Emacs starts up is
+provided for evaluating Lisp expressions interactively inside Emacs. Both
+the expressions you evaluate and their output goes in the buffer.
+
+ The @samp{*scratch*} buffer's major mode is Lisp Interaction mode, which
+is the same as Emacs-Lisp mode except for one command, @key{LFD}. In
+Emacs-Lisp mode, @key{LFD} is an indentation command, as usual. In Lisp
+Interaction mode, @key{LFD} is bound to @code{eval-print-last-sexp}. This
+function reads the Lisp expression before point, evaluates it, and inserts
+the value in printed representation before point.
+
+ Thus, the way to use the @samp{*scratch*} buffer is to insert Lisp expressions
+at the end, ending each one with @key{LFD} so that it will be evaluated.
+The result is a complete typescript of the expressions you have evaluated
+and their values.
+
+@findex lisp-interaction-mode
+ The rationale for this feature is that Emacs must have a buffer when it
+starts up, but that buffer is not useful for editing files since a new
+buffer is made for every file that you visit. The Lisp interpreter
+typescript is the most useful thing I can think of for the initial buffer
+to do. @kbd{M-x lisp-interaction-mode} will put any buffer in Lisp
+Interaction mode.
+
+@node External Lisp,, Lisp Interaction, Compiling/Testing
+@section Running an External Lisp
+
+ Emacs has facilities for running programs in other Lisp systems. You can
+run a Lisp process as an inferior of Emacs, and pass expressions to it to
+be evaluated. You can also pass changed function definitions directly from
+the Emacs buffers in which you edit the Lisp programs to the inferior Lisp
+process.
+
+@findex run-lisp
+@cindex Inferior Lisp mode
+ To run an inferior Lisp process, type @kbd{M-x run-lisp}. This runs the
+program named @code{lisp}, the same program you would run by typing
+@code{lisp} as a shell command, with both input and output going through an
+Emacs buffer named @samp{*lisp*}. That is to say, any ``terminal output''
+from Lisp will go into the buffer, advancing point, and any ``terminal
+input'' for Lisp comes from text in the buffer. To give input to Lisp, go
+to the end of the buffer and type the input, terminated by @key{RET}. The
+@samp{*lisp*} buffer is in Inferior Lisp mode, a mode which has all the
+special characteristics of Lisp mode and Shell mode (@pxref{Shell Mode}).
+
+@findex lisp-mode
+ For the source files of programs to run in external Lisps, use Lisp mode.
+This mode can be selected with @kbd{M-x lisp-mode}, and is used automatically
+for files whose names end in @file{.l} or @file{.lisp}, as most Lisp
+systems usually expect.
+
+@kindex C-M-x
+@findex lisp-send-defun
+ When you edit a function in a Lisp program you are running, the easiest
+way to send the changed definition to the inferior Lisp process is the key
+@kbd{C-M-x}. In Lisp mode, this runs the function @code{lisp-send-defun},
+which finds the defun around or following point and sends it as input to
+the Lisp process. (Emacs can send input to any inferior process regardless
+of what buffer is current.)
+
+ Contrast the meanings of @kbd{C-M-x} in Lisp mode (for editing programs
+to be run in another Lisp system) and Emacs-Lisp mode (for editing Lisp
+programs to be run in Emacs): in both modes it has the effect of installing
+the function definition that point is in, but the way of doing so is
+different according to where the relevant Lisp environment is found.
+@xref{Lisp Modes}.
+
+@node Abbrevs, Picture, Compiling/Testing, Top
+@chapter Abbrevs
+@cindex abbrevs
+@cindex expansion (of abbrevs)
+
+ An @dfn{abbrev} is a word which @dfn{expands}, if you insert it, into some
+different text. Abbrevs are defined by the user to expand in specific
+ways. For example, you might define @samp{foo} as an abbrev expanding to
+@samp{find outer otter}. With this abbrev defined, you would be able to
+get @samp{find outer otter } into the buffer by typing @kbd{f o o @key{SPC}}.
+
+@cindex Abbrev mode
+@findex abbrev-mode
+@vindex abbrev-mode
+ Abbrevs expand only when Abbrev mode (a minor mode) is enabled.
+Disabling Abbrev mode does not cause abbrev definitions to be forgotten,
+but they do not expand until Abbrev mode is enabled again. The command
+@kbd{M-x abbrev-mode} toggles Abbrev mode; with a numeric argument, it
+turns Abbrev mode on if the argument is positive, off otherwise.
+@xref{Minor Modes}. @code{abbrev-mode} is also a variable; Abbrev mode is
+on when the variable is non-@code{nil}. The variable @code{abbrev-mode}
+automatically becomes local to the current buffer when it is set.
+
+ Abbrev definitions can be @dfn{mode-specific}---active only in one major
+mode. Abbrevs can also have @dfn{global} definitions that are active in
+all major modes. The same abbrev can have a global definition and various
+mode-specific definitions for different major modes. A mode specific
+definition for the current major mode overrides a global definition.
+
+ Abbrevs can be defined interactively during the editing session. Lists
+of abbrev definitions can also be saved in files and reloaded in later
+sessions. Some users keep extensive lists of abbrevs that they load in
+every session.
+
+ A second kind of abbreviation facility is called the @dfn{dynamic
+expansion}. Dynamic abbrev expansion happens only when you give an
+explicit command and the result of the expansion depends only on the
+current contents of the buffer. @xref{Dynamic Abbrevs}.
+
+@menu
+* Defining Abbrevs:: Defining an abbrev, so it will expand when typed.
+* Expanding Abbrevs:: Controlling expansion: prefixes, canceling expansion.
+* Editing Abbrevs:: Viewing or editing the entire list of defined abbrevs.
+* Saving Abbrevs:: Saving the entire list of abbrevs for another session.
+* Dynamic Abbrevs:: Abbreviations for words already in the buffer.
+@end menu
+
+@node Defining Abbrevs, Expanding Abbrevs, Abbrevs, Abbrevs
+@section Defining Abbrevs
+
+@table @kbd
+@item C-x +
+Define an abbrev to expand into some text before point
+(@code{add-global-abbrev}).
+@item C-x C-a
+Similar, but define an abbrev available only in the current major mode
+(@code{add-mode-abbrev}).
+@item C-x -
+Define a word in the buffer as an abbrev (@code{inverse-add-global-abbrev}).
+@item C-x C-h
+Define a word in the buffer as a mode-specific abbrev
+(@code{inverse-add-mode-abbrev}).
+@item M-x kill-all-abbrevs
+After this command, there are no abbrev definitions in effect.
+@end table
+
+@kindex C-x +
+@findex add-global-abbrev
+ The usual way to define an abbrev is to enter the text you want the
+abbrev to expand to, position point after it, and type @kbd{C-x +}
+(@code{add-global-abbrev}). This reads the abbrev itself using the
+minibuffer, and then defines it as an abbrev for one or more words before
+point. Use a numeric argument to say how many words before point should be
+taken as the expansion. For example, to define the abbrev @samp{foo} as
+mentioned above, insert the text @samp{find outer otter} and then type
+@kbd{C-u 3 C-x + f o o @key{RET}}.
+
+ An argument of zero to @kbd{C-x +} means to use the contents of the
+region as the expansion of the abbrev being defined.
+
+@kindex C-x C-a
+@findex add-mode-abbrev
+ The command @kbd{C-x C-a} (@code{add-mode-abbrev}) is similar, but
+defines a mode-specific abbrev. Mode specific abbrevs are active only in a
+particular major mode. @kbd{C-x C-a} defines an abbrev for the major mode
+in effect at the time @kbd{C-x C-a} is typed. The arguments work the same
+as for @kbd{C-x +}.
+
+@kindex C-x -
+@findex inverse-add-global-abbrev
+@kindex C-x C-h
+@findex inverse-add-mode-abbrev
+ If the text of the abbrev you want is already in the buffer instead of
+the expansion, use command @kbd{C-x -} (@code{inverse-add-global-abbrev})
+instead of @kbd{C-x +}, or use @kbd{C-x C-h}
+(@code{inverse-add-mode-abbrev}) instead of @kbd{C-x C-a}. These commands
+are called ``inverse'' because they invert the meaning of the argument
+found in the buffer and the argument read using the minibuffer.@refill
+
+ To change the definition of an abbrev, just add the new definition. You
+will be asked to confirm if the abbrev has a prior definition. To remove
+an abbrev definition, give a negative argument to @kbd{C-x +} or @kbd{C-x
+C-a}. You must choose the command to specify whether to kill a global
+definition or a mode-specific definition for the current mode, since those
+two definitions are independent for one abbrev.
+
+@findex kill-all-abbrevs
+ @kbd{M-x kill-all-abbrevs} removes all the abbrev definitions there are.
+
+@node Expanding Abbrevs, Editing Abbrevs, Defining Abbrevs, Abbrevs
+@section Controlling Abbrev Expansion
+
+ An abbrev expands whenever it is present in the buffer just before point
+and a self-inserting punctuation character (@key{SPC}, comma, etc.@:) is
+typed. Most often the way an abbrev is used is to insert the abbrev
+followed by punctuation.
+
+@vindex abbrev-all-caps
+ Abbrev expansion preserves case; thus, @samp{foo} expands into @samp{find
+outer otter}; @samp{Foo} into @samp{Find outer otter}, and @samp{FOO} into
+@samp{FIND OUTER OTTER} or @samp{Find Outer Otter} according to the
+variable @code{abbrev-all-caps} (a non-@code{nil} value chooses the first
+of the two expansions).@refill
+
+ These two commands are used to control abbrev expansion:
+
+@table @kbd
+@item M-'
+Separate a prefix from a following abbrev to be expanded
+(@code{abbrev-prefix-mark}).
+@item C-x '
+@findex expand-abbrev
+Expand the abbrev before point (@code{expand-abbrev}).
+This is effective even when Abbrev mode is not enabled.
+@item M-x unexpand-abbrev
+Undo last abbrev expansion.
+@item M-x expand-region-abbrevs
+Expand some or all abbrevs found in the region.
+@end table
+
+@kindex M-'
+@findex abbrev-prefix-mark
+ You may wish to expand an abbrev with a prefix attached; for example, if
+@samp{cnst} expands into @samp{construction}, you might want to use it to
+enter @samp{reconstruction}. It does not work to type @kbd{recnst},
+because that is not necessarily a defined abbrev. What does work is to use
+the command @kbd{M-'} (@code{abbrev-prefix-mark}) in between the prefix
+@samp{re} and the abbrev @samp{cnst}. First, insert @samp{re}. Then type
+@kbd{M-'}; this inserts a minus sign in the buffer to indicate that it has
+done its work. Then insert the abbrev @samp{cnst}; the buffer now contains
+@samp{re-cnst}. Now insert a punctuation character to expand the abbrev
+@samp{cnst} into @samp{construction}. The minus sign is deleted at this
+point, because @kbd{M-'} left word for this to be done. The resulting text
+is the desired @samp{reconstruction}.@refill
+
+ If you actually want the text of the abbrev in the buffer, rather than
+its expansion, you can accomplish this by inserting the following
+punctuation with @kbd{C-q}. Thus, @kbd{foo C-q -} leaves @samp{foo-} in the
+buffer.
+
+@findex unexpand-abbrev
+ If you expand an abbrev by mistake, you can undo the expansion (replace
+the expansion by the original abbrev text) with @kbd{M-x unexpand-abbrev}.
+@kbd{C-_} (@code{undo}) can also be used to undo the expansion; but first
+it will undo the insertion of the following punctuation character!
+
+@findex expand-region-abbrevs
+ @kbd{M-x expand-region-abbrevs} searches through the region for defined
+abbrevs, and for each one found offers to replace it with its expansion.
+This command is useful if you have typed in text using abbrevs but forgot
+to turn on Abbrev mode first. It may also be useful together with a
+special set of abbrev definitions for making several global replacements at
+once. This command is effective even if Abbrev mode is not enabled.
+
+@node Editing Abbrevs, Saving Abbrevs, Expanding Abbrevs, Abbrevs
+@section Examining and Editing Abbrevs
+
+@table @kbd
+@item M-x list-abbrevs
+Print a list of all abbrev definitions.
+@item M-x edit-abbrevs
+Edit a list of abbrevs; you can add, alter or remove definitions.
+@end table
+
+@findex list-abbrevs
+ The output from @kbd{M-x list-abbrevs} looks like this:
+
+@example
+(lisp-mode-abbrev-table)
+"dk" 0 "define-key"
+(global-abbrev-table)
+"dfn" 0 "definition"
+@end example
+
+@noindent
+(Some blank lines of no semantic significance, and some other abbrev
+tables, have been omitted.)
+
+ A line containing a name in parentheses is the header for abbrevs in a
+particular abbrev table; @code{global-abbrev-table} contains all the global
+abbrevs, and the other abbrev tables that are named after major modes
+contain the mode-specific abbrevs.
+
+ Within each abbrev table, each nonblank line defines one abbrev. The
+word at the beginning is the abbrev. The number that appears is the number
+of times the abbrev has been expanded. Emacs keeps track of this to help
+you see which abbrevs you actually use, in case you decide to eliminate
+those that you don't use often. The string at the end of the line is the
+expansion.
+
+@findex edit-abbrevs
+@kindex C-c C-c (Edit Abbrevs)
+@findex edit-abbrevs-redefine
+@cindex Edit-Abbrevs mode
+ @kbd{M-x edit-abbrevs} allows you to add, change or kill abbrev
+definitions by editing a list of them in an Emacs buffer. The list has the
+same format described above. The buffer of abbrevs is called @samp{*Abbrevs*},
+and is in Edit-Abbrevs mode. This mode redefines the key @kbd{C-c C-c} to
+install the abbrev definitions as specified in the buffer. The command
+that does this is @code{edit-abbrevs-redefine}. Any abbrevs not described
+in the buffer are eliminated when this is done.
+
+ @code{edit-abbrevs} is actually the same as @code{list-abbrevs} except
+that it selects the buffer @samp{*Abbrevs*} whereas @code{list-abbrevs}
+merely displays it in another window.
+
+@node Saving Abbrevs, Dynamic Abbrevs, Editing Abbrevs, Abbrevs
+@section Saving Abbrevs
+
+ These commands allow you to keep abbrev definitions between editing
+sessions.
+
+@table @kbd
+@item M-x write-abbrev-file
+Write a file describing all defined abbrevs.
+@item M-x read-abbrev-file
+Read such a file and define abbrevs as specified there.
+@item M-x quietly-read-abbrev-file
+Similar but do not display a message about what is going on.
+@item M-x define-abbrevs
+Define abbrevs from buffer.
+@item M-x insert-abbrevs
+Insert all abbrevs and their expansions into the buffer.
+@end table
+
+@findex write-abbrev-file
+ @kbd{M-x write-abbrev-file} reads a file name using the minibuffer and
+writes a description of all current abbrev definitions into that file. The
+text stored in the file looks like the output of @kbd{M-x list-abbrevs}.
+This is used to save abbrev definitions for use in a later session.
+
+@findex read-abbrev-file
+@findex quietly-read-abbrev-file
+@vindex abbrev-file-name
+ @kbd{M-x read-abbrev-file} reads a file name using the minibuffer and
+reads the file, defining abbrevs according to the contents of the file.
+@kbd{M-x quietly-read-abbrev-file} is the same except that it does not
+display a message in the echo area saying that it is doing its work; it
+is actually useful primarily in the @file{.emacs} file. If an empty
+argument is given to either of these functions, the file name used is the
+value of the variable @code{abbrev-file-name}, which is by default
+@code{"~/.abbrev_defs"}.
+
+@vindex save-abbrevs
+ Emacs will offer to save abbrevs automatically if you have changed any of
+them, whenever it offers to save all files (for @kbd{C-x s} or @kbd{C-x
+C-c}). This feature can be inhibited by setting the variable
+@code{save-abbrevs} to @code{nil}.
+
+@findex insert-abbrevs
+@findex define-abbrevs
+ The commands @kbd{M-x insert-abbrevs} and @kbd{M-x define-abbrevs} are
+similar to the previous commands but work on text in an Emacs buffer.
+@kbd{M-x insert-abbrevs} inserts text into the current buffer before point,
+describing all current abbrev definitions; @kbd{M-x define-abbrevs} parses
+the entire current buffer and defines abbrevs accordingly.@refill
+
+@node Dynamic Abbrevs,, Saving Abbrevs, Abbrevs
+@section Dynamic Abbrev Expansion
+@cindex dynamic abbrevs
+
+ The abbrev facility described above operates automatically as you insert
+text, but all abbrevs must be defined explicitly. By contrast,
+@dfn{dynamic abbrevs} allow the meanings of abbrevs to be determined
+automatically from the contents of the buffer, but dynamic abbrev expansion
+happens only when you request it explicitly.
+
+@kindex M-/
+@findex dabbrev-expand
+@table @kbd
+@item M-/
+Expand the word in the buffer before point as a @dfn{dynamic abbrev},
+by searching in the buffer for words starting with that abbreviation
+(@code{dabbrev-expand}).
+@end table
+
+ For example, if the buffer contains @samp{does this follow } and you type
+@w{@kbd{f o M-/}}, the effect is to insert @samp{follow} because that is
+the last word in the buffer that starts with @samp{fo}. A numeric
+argument to @kbd{M-/} says to take the second, third, etc.@: distinct
+expansion found looking backward from point. Repeating @kbd{M-/}
+searches for an alternative expansion by looking farther back. After
+the part of the buffer preceding point has been considered, the part
+of the buffer after point is searched.
+
+ Dynamic abbrev expansion is completely independent of Abbrev mode; the
+expansion of a word with @kbd{M-/} is completely independent of whether it
+has a definition as an ordinary abbrev.
+
+@node Picture, Sending Mail, Abbrevs, Top
+@chapter Editing Pictures
+@cindex pictures
+@findex edit-picture
+@cindex Picture mode
+
+ If you want to create a picture made out of text characters (for example,
+a picture of the division of a register into fields, as a comment in a
+program), use the command @code{edit-picture} to enter Picture mode.
+
+ In Picture mode, editing is based on the @dfn{quarter-plane} model of
+text, according to which the text characters lie studded on an area that
+stretches infinitely far to the right and downward. The concept of the end
+of a line does not exist in this model; the most you can say is where the
+last nonblank character on the line is found.
+
+ Of course, Emacs really always considers text as a sequence of
+characters, and lines really do have ends. But in Picture mode most
+frequently-used keys are rebound to commands that simulate the
+quarter-plane model of text. They do this by inserting spaces or by
+converting tabs to spaces.
+
+ Most of the basic editing commands of Emacs are redefined by Picture mode
+to do essentially the same thing but in a quarter-plane way. In addition,
+Picture mode defines various keys starting with the @kbd{C-c} prefix to
+run special picture editing commands.
+
+ One of these keys, @kbd{C-c C-c}, is pretty important. Often a picture
+is part of a larger file that is usually edited in some other major mode.
+@kbd{M-x edit-picture} records the name of the previous major mode, and
+then you can use the @kbd{C-c C-c} command (@code{picture-mode-exit}) to
+restore that mode. @kbd{C-c C-c} also deletes spaces from the ends of
+lines, unless given a numeric argument.
+
+ The commands used in Picture mode all work in other modes (provided the
+@file{picture} library is loaded), but are not bound to keys except in
+Picture mode. Note that the descriptions below talk of moving ``one
+column'' and so on, but all the picture mode commands handle numeric
+arguments as their normal equivalents do.
+
+@vindex picture-mode-hook
+ Turning on Picture mode calls the value of the variable @code{picture-mode-hook}
+as a function, with no arguments, if that value exists and is non-@code{nil}.
+
+@menu
+* Basic Picture:: Basic concepts and simple commands of Picture Mode.
+* Insert in Picture:: Controlling direction of cursor motion
+ after "self-inserting" characters.
+* Tabs in Picture:: Various features for tab stops and indentation.
+* Rectangles in Picture:: Clearing and superimposing rectangles.
+@end menu
+
+@node Basic Picture, Insert in Picture, Picture, Picture
+@section Basic Editing in Picture Mode
+
+@findex picture-forward-column
+@findex picture-backward-column
+@findex picture-move-down
+@findex picture-move-up
+ Most keys do the same thing in Picture mode that they usually do, but do
+it in a quarter-plane style. For example, @kbd{C-f} is rebound to run
+@code{picture-forward-column}, which is defined to move point one column to
+the right, by inserting a space if necessary, so that the actual end of the
+line makes no difference. @kbd{C-b} is rebound to run
+@code{picture-backward-column}, which always moves point left one column,
+converting a tab to multiple spaces if necessary. @kbd{C-n} and @kbd{C-p}
+are rebound to run @code{picture-move-down} and @code{picture-move-up},
+which can either insert spaces or convert tabs as necessary to make sure
+that point stays in exactly the same column. @kbd{C-e} runs
+@code{picture-end-of-line}, which moves to after the last nonblank
+character on the line. There is no need to change @kbd{C-a}, as the choice
+of screen model does not affect beginnings of lines.@refill
+
+@findex picture-newline
+ Insertion of text is adapted to the quarter-plane screen model through
+the use of Overwrite mode (@pxref{Minor Modes}). Self-inserting characters
+replace existing text, column by column, rather than pushing existing text
+to the right. @key{RET} runs @code{picture-newline}, which just moves to
+the beginning of the following line so that new text will replace that
+line.
+
+@findex picture-backward-clear-column
+@findex picture-clear-column
+@findex picture-clear-line
+ Deletion and killing of text are replaced with erasure. @key{DEL}
+(@code{picture-backward-clear-column}) replaces the preceding character
+with a space rather than removing it. @kbd{C-d}
+(@code{picture-clear-column}) does the same thing in a forward direction.
+@kbd{C-k} (@code{picture-clear-line}) really kills the contents of lines,
+but does not ever remove the newlines from the buffer.@refill
+
+@findex picture-open-line
+ To do actual insertion, you must use special commands. @kbd{C-o}
+(@code{picture-open-line}) still creates a blank line, but does so after
+the current line; it never splits a line. @kbd{C-M-o}, @code{split-line},
+makes sense in Picture mode, so it is not changed. @key{LFD}
+(@code{picture-duplicate-line}) inserts below the current line another line
+with the same contents.@refill
+
+@kindex C-c C-d (Picture mode)
+@findex delete-char
+ Real deletion can be done with @kbd{C-w}, or with @kbd{C-c C-d} (which is
+defined as @code{delete-char}, as @kbd{C-d} is in other modes), or with one
+of the picture rectangle commands (@pxref{Rectangles in Picture}).
+
+@node Insert in Picture, Tabs in Picture, Basic Picture, Picture
+@section Controlling Motion after Insert
+
+@findex picture-movement-up
+@findex picture-movement-down
+@findex picture-movement-left
+@findex picture-movement-right
+@findex picture-movement-nw
+@findex picture-movement-ne
+@findex picture-movement-sw
+@findex picture-movement-se
+@kindex C-c < (Picture mode)
+@kindex C-c > (Picture mode)
+@kindex C-c ^ (Picture mode)
+@kindex C-c . (Picture mode)
+@kindex C-c ` (Picture mode)
+@kindex C-c ' (Picture mode)
+@kindex C-c / (Picture mode)
+@kindex C-c \ (Picture mode)
+ Since ``self-inserting'' characters in Picture mode just overwrite and
+move point, there is no essential restriction on how point should be moved.
+Normally point moves right, but you can specify any of the eight orthogonal
+or diagonal directions for motion after a ``self-inserting'' character.
+This is useful for drawing lines in the buffer.
+
+@table @kbd
+@item C-c <
+Move left after insertion (@code{picture-movement-left}).
+@item C-c >
+Move right after insertion (@code{picture-movement-right}).
+@item C-c ^
+Move up after insertion (@code{picture-movement-up}).
+@item C-c .
+Move down after insertion (@code{picture-movement-down}).
+@c !!! added @* to prevent overfull hbox
+@item C-c `
+Move up and left (``northwest'') after insertion@*
+(@code{picture-movement-nw}).
+@item C-c '
+Move up and right (``northeast'') after insertion
+(@code{picture-movement-ne}).
+@item C-c /
+Move down and left (``southwest'') after insertion
+(@code{picture-movement-sw}).
+@item C-c \
+Move down and right (``southeast'') after insertion
+(@code{picture-movement-se}).
+@end table
+
+@kindex C-c C-f (Picture mode)
+@kindex C-c C-b (Picture mode)
+@findex picture-motion
+@findex picture-motion-reverse
+ Two motion commands move based on the current Picture insertion
+direction. The command @kbd{C-c C-f} (@code{picture-motion}) moves in the
+same direction as motion after ``insertion'' currently does, while @kbd{C-c
+C-b} (@code{picture-motion-reverse}) moves in the opposite direction.
+
+@node Tabs in Picture, Rectangles in Picture, Insert in Picture, Picture
+@section Picture Mode Tabs
+
+@kindex M-TAB
+@findex picture-tab-search
+@vindex picture-tab-chars
+ Two kinds of tab-like action are provided in Picture mode.
+Context-based tabbing is done with @kbd{M-@key{TAB}}
+(@code{picture-tab-search}). With no argument, it moves to a point
+underneath the next ``interesting'' character that follows whitespace in
+the previous nonblank line. ``Next'' here means ``appearing at a
+horizontal position greater than the one point starts out at''. With an
+argument, as in @kbd{C-u M-@key{TAB}}, this command moves to the next such
+interesting character in the current line. @kbd{M-@key{TAB}} does not
+change the text; it only moves point. ``Interesting'' characters are
+defined by the variable @code{picture-tab-chars}, which contains a string
+whose characters are all considered interesting. Its default value is
+@code{"!-~"}.@refill
+
+@findex picture-tab
+ @key{TAB} itself runs @code{picture-tab}, which operates based on the
+current tab stop settings; it is the Picture mode equivalent of
+@code{tab-to-tab-stop}. Normally it just moves point, but with a numeric
+argument it clears the text that it moves over.
+
+@kindex C-c TAB (Picture mode)
+@findex picture-set-tab-stops
+ The context-based and tab-stop-based forms of tabbing are brought
+together by the command @kbd{C-c @key{TAB}}, @code{picture-set-tab-stops}.
+This command sets the tab stops to the positions which @kbd{M-@key{TAB}}
+would consider significant in the current line. The use of this command,
+together with @key{TAB}, can get the effect of context-based tabbing. But
+@kbd{M-@key{TAB}} is more convenient in the cases where it is sufficient.
+
+@node Rectangles in Picture,, Tabs in Picture, Picture
+@section Picture Mode Rectangle Commands
+@cindex rectangles and Picture mode
+
+ Picture mode defines commands for working on rectangular pieces of the
+text in ways that fit with the quarter-plane model. The standard rectangle
+commands may also be useful (@pxref{Rectangles}).
+
+@table @kbd
+@item C-c C-k
+Clear out the region-rectangle (@code{picture-clear-rectangle}). With
+argument, kill it.
+@item C-c C-w @var{r}
+Similar but save rectangle contents in register @var{r} first
+(@code{picture-clear-rectangle-to-register}).
+@item C-c C-y
+Copy last killed rectangle into the buffer by overwriting, with upper
+left corner at point (@code{picture-yank-rectangle}). With argument,
+insert instead.
+@item C-c C-x @var{r}
+Similar, but use the rectangle in register @var{r}
+(@code{picture-yank-rectangle-from-register}).
+@end table
+
+@kindex C-c C-k (Picture mode)
+@kindex C-c C-w (Picture mode)
+@findex picture-clear-rectangle
+@findex picture-clear-rectangle-to-register
+ The picture rectangle commands @kbd{C-c C-k}
+(@code{picture-clear-rectangle}) and @kbd{C-c C-w}
+(@code{picture-clear-rectangle-to-register}) differ from the standard
+rectangle commands in that they normally clear the rectangle instead of
+deleting it; this is analogous with the way @kbd{C-d} is changed in Picture
+mode.@refill
+
+ However, deletion of rectangles can be useful in Picture mode, so these
+commands delete the rectangle if given a numeric argument.
+
+@kindex C-c C-y (Picture mode)
+@kindex C-c C-x (Picture mode)
+@findex picture-yank-rectangle
+@findex picture-yank-rectangle-from-register
+ The Picture mode commands for yanking rectangles differ from the standard
+ones in overwriting instead of inserting. This is the same way that
+Picture mode insertion of other text is different from other modes.
+@kbd{C-c C-y} (@code{picture-yank-rectangle}) inserts (by overwriting) the
+rectangle that was most recently killed, while @kbd{C-c C-x}
+(@code{picture-yank-rectangle-from-register}) does likewise for the
+rectangle found in a specified register.
+
+@node Sending Mail, Rmail, Picture, Top
+@chapter Sending Mail
+@cindex mail
+@cindex message
+
+ To send a message in Emacs, you start by typing a command (@kbd{C-x m})
+to select and initialize the @samp{*mail*} buffer. Then you edit the text
+and headers of the message in this buffer, and type another command
+(@kbd{C-c C-c}) to send the message.
+
+@table @kbd
+@item C-x m
+Begin composing a message to send (@code{mail}).
+@item C-x 4 m
+Likewise, but display the message in another window
+(@code{mail-other-window}).
+@item C-c C-c
+In Mail mode, send the message and switch to another buffer
+(@code{mail-send-and-exit}).
+@end table
+
+@kindex C-x m
+@findex mail
+@kindex C-x 4 m
+@findex mail-other-window
+ The command @kbd{C-x m} (@code{mail}) selects a buffer named
+@samp{*mail*} and initializes it with the skeleton of an outgoing message.
+@kbd{C-x 4 m} (@code{mail-other-window}) selects the @samp{*mail*} buffer
+in a different window, leaving the previous current buffer visible.@refill
+
+ Because the mail composition buffer is an ordinary Emacs buffer, you can
+switch to other buffers while in the middle of composing mail, and switch
+back later (or never). If you use the @kbd{C-x m} command again when you
+have been composing another message but have not sent it, you are asked to
+confirm before the old message is erased. If you answer @kbd{n}, the
+@samp{*mail*} buffer is left selected with its old contents, so you can
+finish the old message and send it. @kbd{C-u C-x m} is another way to do
+this. Sending the message marks the @samp{*mail*} buffer ``unmodified'',
+which avoids the need for confirmation when @kbd{C-x m} is next used.
+
+ If you are composing a message in the @samp{*mail*} buffer and want to
+send another message before finishing the first, rename the @samp{*mail*}
+buffer using @kbd{M-x rename-buffer} (@pxref{Misc Buffer}).
+
+@menu
+* Format: Mail Format. Format of the mail being composed.
+* Headers: Mail Headers. Details of allowed mail header fields.
+* Mode: Mail Mode. Special commands for editing mail being composed.
+@end menu
+
+@node Mail Format, Mail Headers, Sending Mail, Sending Mail
+@section The Format of the Mail Buffer
+
+ In addition to the @dfn{text} or contents, a message has @dfn{header
+fields} which say who sent it, when, to whom, why, and so on. Some header
+fields such as the date and sender are created automatically after the
+message is sent. Others, such as the recipient names, must be specified by
+you in order to send the message properly.
+
+ Mail mode provides a few commands to help you edit some header fields,
+and some are preinitialized in the buffer automatically at times. You can
+insert or edit any header fields using ordinary editing commands.
+
+ The line in the buffer that says
+
+@example
+--text follows this line--
+@end example
+
+@vindex mail-header-separator
+@noindent
+is a special delimiter that separates the headers you have specified from
+the text. Whatever follows this line is the text of the message; the
+headers precede it. The delimiter line itself does not appear in the
+message actually sent. The text used for the delimiter line is controlled
+by the variable @code{mail-header-separator}.
+
+Here is an example of what the headers and text in the @samp{*mail*} buffer
+might look like.
+
+@example
+To: rms@@mc
+CC: mly@@mc, rg@@oz
+Subject: The Emacs Manual
+--Text follows this line--
+Please ignore this message.
+@end example
+
+@node Mail Headers, Mail Mode, Mail Format, Sending Mail
+@section Mail Header Fields
+@cindex headers (of mail message)
+
+ There are several header fields you can use in the @samp{*mail*} buffer.
+Each header field starts with a field name at the beginning of a line,
+terminated by a colon. It does not matter whether you use upper or lower
+case in the field name. After the colon and optional whitespace comes the
+contents of the field.
+
+@table @samp
+@item To
+This field contains the mailing addresses to which the message is
+addressed.
+
+@item Subject
+The contents of the @samp{Subject} field should be a piece of text
+that says what the message is about. The reason @samp{Subject} fields
+are useful is that most mail-reading programs can provide a summary of
+messages, listing the subject of each message but not its text.
+
+@item CC
+This field contains additional mailing addresses to send the message
+to, but whose readers should not regard the message as addressed to
+them.
+
+@item BCC
+This field contains additional mailing addresses to send the message
+to, but which should not appear in the header of the message actually
+sent.
+
+@item FCC
+This field contains the name of one file (in Unix mail file format) to
+which a copy of the message should be appended when the message is
+sent.
+
+@item From
+Use the @samp{From} field to say who you are, when the account you are
+using to send the mail is not your own. The contents of the
+@samp{From} field should be a valid mailing address, since replies
+will normally go there.
+
+@item Reply-To
+Use the @samp{Reply-to} field to direct replies to a different
+address, not your own. There is no difference between @samp{From} and
+@samp{Reply-to} in their effect on where replies go, but they convey a
+different meaning to the human who reads the message.
+
+@vindex mail-default-reply-to
+If you set the variable @code{mail-default-reply-to} to a non-@code{nil}
+value, then every message you begin to edit will have a @samp{Reply-to}
+field whose contents are the value of the variable.
+
+@item In-Reply-To
+This field contains a piece of text describing a message you are
+replying to. Some mail systems can use this information to correlate
+related pieces of mail. Normally this field is filled in by Rmail
+when you are replying to a message in Rmail, and you never need to
+think about it (@pxref{Rmail}).
+@end table
+
+The @samp{To}, @samp{CC}, @samp{BCC} and @samp{FCC} fields can appear
+any number of times, to specify many places to send the message.
+
+The @samp{To}, @samp{CC}, and @samp{BCC} fields can have continuation
+lines. All the lines starting with whitespace, following the line on
+which the field starts, are considered part of the field. For
+example,@refill
+
+@example
+@group
+To: foo@@here, this@@there,
+ me@@gnu.cambridge.mass.usa.earth.spiral3281
+@end group
+@end example
+
+If you have a @file{~/.mailrc} file, Emacs will scan it for mail aliases
+the first time you try to send mail in an Emacs session. Aliases found
+in the @samp{To}, @samp{CC}, and @samp{BCC} fields will be expanded where
+appropriate.
+
+@vindex mail-archive-file-name
+ If the variable @code{mail-archive-file-name} is non-@code{nil}, it should be a
+string naming a file; every time you start to edit a message to send,
+an @samp{FCC} field will be put in for that file. Unless you remove the
+@samp{FCC} field, every message will be written into that file when it is
+sent.
+
+@node Mail Mode,, Mail Headers, Sending Mail
+@section Mail Mode
+@cindex Mail mode
+
+ The major mode used in the @samp{*mail*} buffer is Mail mode, which is
+much like Text mode except that various special commands are provided on
+the @w{@kbd{C-c}} prefix. These commands all have to do specifically with
+editing or sending the message.
+
+@table @kbd
+@item C-c C-s
+Send the message, and leave the @samp{*mail*} buffer selected
+(@code{mail-send}).
+@item C-c C-c
+Send the message, and select some other buffer (@code{mail-send-and-exit}).
+@item C-c C-f C-t
+Move to the @samp{To} header field, creating one if there is none
+(@code{mail-to}).
+@item C-c C-f C-s
+Move to the @samp{Subject} header field, creating one if there is
+none (@code{mail-subject}).
+@item C-c C-f C-c
+Move to the @samp{CC} header field, creating one if there is none
+(@code{mail-cc}).
+@item C-c C-w
+Insert the file @file{~/.signature} at the end of the message text
+(@code{mail-signature}).
+@item C-c C-y
+Yank the selected message from Rmail (@code{mail-yank-original}).
+This command does nothing unless your command to start sending a
+message was issued with Rmail.
+@item C-c C-q
+Fill all paragraphs of yanked old messages, each individually
+(@code{mail-fill-yanked-message}).
+@end table
+
+@kindex C-c C-s (Mail mode)
+@kindex C-c C-c (Mail mode)
+@findex mail-send
+@findex mail-send-and-exit
+ There are two ways to send the message. @kbd{C-c C-s} (@code{mail-send})
+sends the message and marks the @samp{*mail*} buffer unmodified, but leaves
+that buffer selected so that you can modify the message (perhaps with new
+recipients) and send it again. @kbd{C-c C-c} (@code{mail-send-and-exit})
+sends and then deletes the window (if there is another window) or switches
+to another buffer. It puts the @samp{*mail*} buffer at the lowest priority
+for automatic reselection, since you are finished with using it. This is
+the usual way to send the message.
+
+@kindex C-c C-f C-t (Mail mode)
+@findex mail-to
+@kindex C-c C-f C-s (Mail mode)
+@findex mail-subject
+@kindex C-c C-f C-c (Mail mode)
+@findex mail-cc
+ Mail mode provides some other special commands that are useful for
+editing the headers and text of the message before you send it. There are
+three commands defined to move point to particular header fields, all based
+on the prefix @kbd{C-c C-f} (@samp{C-f} is for ``field''). They are
+@kbd{C-c C-f C-t} (@code{mail-to}) to move to the @samp{To} field, @kbd{C-c
+C-f C-s} (@code{mail-subject}) for the @samp{Subject} field, and @kbd{C-c
+C-f C-c} (@code{mail-cc}) for the @samp{CC} field. These fields have
+special motion commands because they are the most common fields for the
+user to want to edit.
+
+@kindex C-c C-w (Mail mode)
+@findex mail-signature
+ @kbd{C-c C-w} (@code{mail-signature}) adds a standard piece text at the end of the
+message to say more about who you are. The text comes from the file
+@file{.signature} in your home directory.
+
+@kindex C-c C-y (Mail mode)
+@findex mail-yank-original
+ When mail sending is invoked from the Rmail mail reader using an Rmail
+command, @kbd{C-c C-y} can be used inside the @samp{*mail*} buffer to insert
+the text of the message you are replying to. Normally it indents each line
+of that message four spaces and eliminates most header fields. A numeric
+argument specifies the number of spaces to indent. An argument of just
+@kbd{C-u} says not to indent at all and not to eliminate anything.
+@kbd{C-c C-y} always uses the current message from the @samp{RMAIL} buffer,
+so you can insert several old messages by selecting one in @samp{RMAIL},
+switching to @samp{*mail*} and yanking it, then switching back to
+@samp{RMAIL} to select another.@refill
+
+@kindex C-c C-q (Mail mode)
+@findex mail-fill-yanked-message
+@c !!! the following is verbose to prevent an overfull hbox
+ After using @kbd{C-c C-y}, you can type
+the command @kbd{C-c C-q} (@code{mail-fill-yanked-message}) to
+fill the paragraphs of the yanked old message or messages. One
+use of @kbd{C-c C-q} fills all such paragraphs, each one separately.
+
+@vindex mail-mode-hook
+@vindex mail-setup-hook
+ Turning on Mail mode (which @kbd{C-x m} does automatically) calls the
+value of @code{text-mode-hook}, if it is not void or @code{nil}, and
+then calls the value of @code{mail-mode-hook} if that is not void or
+@code{nil}. Aside from these, the @code{mail} command runs
+@code{mail-setup-hook} whenever it initializes the @samp{*mail*} buffer
+for editing a message.
+
+@node Rmail, Recursive Edit, Sending Mail, Top
+@chapter Reading Mail with Rmail
+@cindex Rmail
+@cindex message
+@findex rmail
+@cindex Rmail mode
+
+ Rmail is an Emacs subsystem for reading and disposing of mail that you
+receive. Rmail stores mail messages in files called @dfn{Rmail
+files}. Reading the message in an Rmail file is done in a special
+major mode, Rmail mode, which redefines most letters to run commands
+for managing mail. To enter Rmail, type @kbd{M-x rmail}. This reads
+your primary mail file, merges new mail in from your inboxes, displays
+the first new message, and lets you begin reading.
+
+@cindex primary mail file
+ Using Rmail in the simplest fashion, you have one Rmail file, @file{~/RMAIL},
+in which all of your mail is saved. It is called your @dfn{primary mail
+file}. In more sophisticated usage, you can copy messages into other Rmail
+files and then edit those files with Rmail.
+
+ Rmail displays only one message at a time. It is called the @dfn{current
+message}. Rmail mode's special commands can do such things as move to
+another message, delete the message, copy the message into another file, or
+send a reply.
+
+@cindex message number
+ Within the Rmail file, messages are arranged sequentially in order
+of receipt. They are also assigned consecutive integers as their
+@dfn{message numbers}. The number of the current message is displayed
+in Rmail's mode line, followed by the total number of messages in the
+file. You can move to a message by specifying its message number
+using the @kbd{j} key (@pxref{Rmail Motion}).
+
+@kindex s (Rmail)
+@findex rmail-save
+ Following the usual conventions of Emacs, changes in an Rmail file become
+permanent only when the file is saved. You can do this with @kbd{s}
+(@code{rmail-save}), which also expunges deleted messages from the file
+first (@pxref{Rmail Deletion}). To save the file without expunging, use
+@kbd{C-x C-s}. Rmail saves the Rmail file spontaneously when moving new
+mail from an inbox file (@pxref{Rmail Inbox}).
+
+@kindex q (Rmail)
+@findex rmail-quit
+ You can exit Rmail with @kbd{q} (@code{rmail-quit}); this expunges and saves the
+Rmail file and then switches to another buffer. But there is no need to
+`exit' formally. If you switch from Rmail to editing in other buffers, and
+never happen to switch back, you have exited. Just make sure to save the
+Rmail file eventually (like any other file you have changed). @kbd{C-x s}
+is a good enough way to do this (@pxref{Saving}).
+
+@menu
+* Scroll: Rmail Scrolling. Scrolling through a message.
+* Motion: Rmail Motion. Moving to another message.
+* Deletion: Rmail Deletion. Deleting and expunging messages.
+* Inbox: Rmail Inbox. How mail gets into the Rmail file.
+* Files: Rmail Files. Using multiple Rmail files.
+* Output: Rmail Output. Copying message out to files.
+* Labels: Rmail Labels. Classifying messages by labeling them.
+* Summary: Rmail Summary. Summaries show brief info on many messages.
+* Reply: Rmail Reply. Sending replies to messages you are viewing.
+* Editing: Rmail Editing. Editing message text and headers in Rmail.
+* Digest: Rmail Digest. Extracting the messages from a digest message.
+@end menu
+
+@node Rmail Scrolling, Rmail Motion, Rmail, Rmail
+@section Scrolling Within a Message
+
+ When Rmail displays a message that does not fit on the screen, it is
+necessary to scroll through it. This could be done with @kbd{C-v}, @kbd{M-v}
+and @kbd{M-<}, but in Rmail scrolling is so frequent that it deserves to be
+easier to type.
+
+@need 1800
+@table @kbd
+@item @key{SPC}
+Scroll forward (@code{scroll-up}).
+@item @key{DEL}
+Scroll backward (@code{scroll-down}).
+@item .
+Scroll to start of message (@code{rmail-beginning-of-message}).
+@end table
+
+@kindex SPC (Rmail)
+@kindex DEL (Rmail)
+ Since the most common thing to do while reading a message is to scroll
+through it by screenfuls, Rmail makes @key{SPC} and @key{DEL} synonyms of
+@kbd{C-v} (@code{scroll-up}) and @kbd{M-v} (@code{scroll-down}).
+
+@kindex . (Rmail)
+@findex rmail-beginning-of-message
+ The command @kbd{.} (@code{rmail-beginning-of-message}) scrolls back to the
+beginning of the selected message. This is not quite the same as @kbd{M-<}:
+for one thing, it does not set the mark; for another, it resets the buffer
+boundaries to the current message if you have changed them.
+
+@node Rmail Motion, Rmail Deletion, Rmail Scrolling, Rmail
+@section Moving Among Messages
+
+ The most basic thing to do with a message is to read it. The way to do
+this in Rmail is to make the message current. You can make any message
+current given its message number using the @kbd{j} command, but the usual
+thing to do is to move sequentially through the file, since this is the
+order of receipt of messages. When you enter Rmail, you are positioned at
+the first new message (new messages are those received since the previous
+use of Rmail), or at the last message if there are no new messages this
+time. Move forward to see the other new messages; move backward to
+reexamine old messages.
+
+@table @kbd
+@item n
+Move to the next nondeleted message, skipping any intervening deleted
+messages (@code{rmail-next-undeleted-message}).
+@item p
+@c !!! added @* to prevent overfull hbox
+Move to the previous nondeleted message@*
+(@code{rmail-previous-undeleted-message}).
+@item M-n
+@c !!! added @* to prevent overfull hbox
+Move to the next message, including deleted messages@*
+(@code{rmail-next-message}).
+@item M-p
+@c !!! added @* to prevent overfull hbox
+Move to the previous message, including deleted messages@*
+(@code{rmail-previous-message}).
+@item j
+Move to the first message. With argument @var{n}, move to
+message number @var{n} (@code{rmail-show-message}).
+@item >
+Move to the last message (@code{rmail-last-message}).
+
+@item M-s @var{regexp} @key{RET}
+Move to the next message containing a match for @var{regexp}
+(@code{rmail-search}). If @var{regexp} is empty, the last regexp used is
+used again.
+
+@item - M-s @var{regexp} @key{RET}
+Move to the previous message containing a match for @var{regexp}.
+If @var{regexp} is empty, the last regexp used is used again.
+@end table
+
+@kindex n (Rmail)
+@kindex p (Rmail)
+@kindex M-n (Rmail)
+@kindex M-p (Rmail)
+@findex rmail-next-undeleted-message
+@findex rmail-previous-undeleted-message
+@findex rmail-next-message
+@findex rmail-previous-message
+ @kbd{n} and @kbd{p} are the usual way of moving among messages in Rmail. They
+move through the messages sequentially, but skip over deleted messages,
+which is usually what you want to do. Their command definitions are named
+@code{rmail-next-undeleted-message} and @code{rmail-previous-undeleted-message}. If
+you do not want to skip deleted messages---for example, if you want to move
+to a message to undelete it---use the variants @kbd{M-n} and @kbd{M-p}
+(@code{rmail-next-message} and @code{rmail-previous-message}). A numeric
+argument to any of these commands serves as a repeat count.@refill
+
+ In Rmail, you can specify a numeric argument by typing the digits.
+It is not necessary to type @kbd{C-u} first.
+
+@kindex M-s (Rmail)
+@findex rmail-search
+ The @kbd{M-s} (@code{rmail-search}) command is Rmail's version of search. The
+usual incremental search command @kbd{C-s} works in Rmail, but it searches
+only within the current message. The purpose of @kbd{M-s} is to search for
+another message. It reads a regular expression (@pxref{Regexps})
+nonincrementally, then searches starting at the beginning of the following
+message for a match. The message containing the match is selected.
+
+ To search backward in the file for another message, give @kbd{M-s} a
+negative argument. In Rmail this can be done with @kbd{- M-s}.
+
+ It is also possible to search for a message based on labels.
+@xref{Rmail Labels}.
+
+@kindex j (Rmail)
+@kindex > (Rmail)
+@findex rmail-show-message
+@findex rmail-last-message
+ To move to a message specified by absolute message number, use @kbd{j}
+(@code{rmail-show-message}) with the message number as argument. With no
+argument, @kbd{j} selects the first message. @kbd{>} (@code{rmail-last-message}) selects
+the last message.
+
+ Each time Rmail selects a message, it calls (with no arguments) the
+value of the variable @code{rmail-show-message-hook}, if that is
+non-@code{nil}.
+
+@node Rmail Deletion, Rmail Inbox, Rmail Motion, Rmail
+@section Deleting Messages
+
+@cindex deletion (Rmail)
+ When you no longer need to keep a message, you can @dfn{delete} it. This
+flags it as ignorable, and some Rmail commands will pretend it is no longer
+present; but it still has its place in the Rmail file, and still has its
+message number.
+
+@cindex expunging (Rmail)
+ @dfn{Expunging} the Rmail file actually removes the deleted messages.
+The remaining messages are renumbered consecutively. Expunging is the only
+action that changes the message number of any message, except for
+undigestifying (@pxref{Rmail Digest}).
+
+@table @kbd
+@item d
+Delete the current message, and move to the next nondeleted message
+(@code{rmail-delete-forward}).
+@item C-d
+Delete the current message, and move to the previous nondeleted
+message (@code{rmail-delete-backward}).
+@item u
+Undelete the current message, or move back to a deleted message and
+undelete it (@code{rmail-undelete-previous-message}).
+@item x
+@itemx e
+Expunge the Rmail file (@code{rmail-expunge}). These two
+commands are synonyms.
+@end table
+
+@kindex d (Rmail)
+@kindex C-d (Rmail)
+@findex rmail-delete-forward
+@findex rmail-delete-backward
+ There are two Rmail commands for deleting messages. Both delete the
+current message and select another message. @kbd{d} (@code{rmail-delete-forward})
+moves to the following message, skipping messages already deleted, while
+@kbd{C-d} (@code{rmail-delete-backward}) moves to the previous nondeleted message.
+If there is no nondeleted message to move to in the specified direction,
+the message that was just deleted remains current.
+
+@cindex undeletion (Rmail)
+@kindex e (Rmail)
+@findex rmail-expunge
+ To make all the deleted messages finally vanish from the Rmail file,
+type @kbd{e} (@code{rmail-expunge}). Until you do this, you can still @dfn{undelete}
+the deleted messages.
+
+@kindex u (Rmail)
+@findex rmail-undelete-previous-message
+ To undelete, type
+@kbd{u} (@code{rmail-undelete-previous-message}), which is designed to cancel the
+effect of a @kbd{d} command (usually). It undeletes the current message
+if the current message is deleted. Otherwise it moves backward to previous
+messages until a deleted message is found, and undeletes that message.
+
+ You can usually undo a @kbd{d} with a @kbd{u} because the @kbd{u} moves
+back to and undeletes the message that the @kbd{d} deleted. But this does
+not work when the @kbd{d} skips a few already-deleted messages that follow
+the message being deleted; then the @kbd{u} command will undelete the last
+of the messages that were skipped. There is no clean way to avoid this
+problem. However, by repeating the @kbd{u} command, you can eventually get
+back to the message that you intended to undelete. You can also reach that
+message with @kbd{M-p} commands and then type @kbd{u}.@refill
+
+ A deleted message has the @samp{deleted} attribute, and as a result
+@samp{deleted} appears in the mode line when the current message is
+deleted. In fact, deleting or undeleting a message is nothing more than
+adding or removing this attribute. @xref{Rmail Labels}.
+
+@node Rmail Inbox, Rmail Files, Rmail Deletion, Rmail
+@section Rmail Files and Inboxes
+@cindex inbox file
+
+ Unix places incoming mail for you in a file that we call your @dfn{inbox}.
+When you start up Rmail, it copies the new messages from your inbox into
+your primary mail file, an Rmail file, which also contains other messages
+saved from previous Rmail sessions. It is in this file that you actually
+read the mail with Rmail. This operation is called @dfn{getting new mail}.
+It can be repeated at any time using the @kbd{g} key in Rmail. The inbox
+file name is @file{/usr/spool/mail/@var{username}} in Berkeley Unix,
+@file{/usr/mail/@var{username}} in System V.
+
+ There are two reasons for having separate Rmail files and inboxes.
+
+@enumerate
+@item
+The format in which Unix delivers the mail in the inbox is not
+adequate for Rmail mail storage. It has no way to record attributes
+(such as @samp{deleted}) or user-specified labels; it has no way to record
+old headers and reformatted headers; it has no way to record cached
+summary line information.
+
+@item
+It is very cumbersome to access an inbox file without danger of losing
+mail, because it is necessary to interlock with mail delivery.
+Moreover, different Unix systems use different interlocking
+techniques. The strategy of moving mail out of the inbox once and for
+all into a separate Rmail file avoids the need for interlocking in all
+the rest of Rmail, since only Rmail operates on the Rmail file.
+@end enumerate
+
+ When getting new mail, Rmail first copies the new mail from the inbox
+file to the Rmail file; then it saves the Rmail file; then it deletes the
+inbox file. This way, a system crash may cause duplication of mail between
+the inbox and the Rmail file, but cannot lose mail.
+
+ Copying mail from an inbox in the system's mailer directory actually puts
+it in an intermediate file @file{~/.newmail}. This is because the
+interlocking is done by a C program that copies to another file.
+@file{~/.newmail} is deleted after mail merging is successful. If there is
+a crash at the wrong time, this file will continue to exist and will be
+used as an inbox the next time you get new mail.
+
+@node Rmail Files, Rmail Output, Rmail Inbox, Rmail
+@section Multiple Mail Files
+
+ Rmail operates by default on your @dfn{primary mail file}, which is named
+@file{~/RMAIL} and receives your incoming mail from your system inbox file.
+But you can also have other mail files and edit them with Rmail. These
+files can receive mail through their own inboxes, or you can move messages
+into them by explicit command in Rmail (@pxref{Rmail Output}).
+
+@table @kbd
+@item i @var{file} @key{RET}
+Read @var{file} into Emacs and run Rmail on it (@code{rmail-input}).
+
+@item M-x set-rmail-inbox-list @key{RET} @var{files} @key{RET}
+Specify inbox file names for current Rmail file to get mail from.
+
+@item g
+Merge new mail from current Rmail file's inboxes
+(@code{rmail-get-new-mail}).
+
+@item C-u g @var{file}
+Merge new mail from inbox file @var{file}.
+@end table
+
+@kindex i (Rmail)
+@findex rmail-input
+ To run Rmail on a file other than your primary mail file, you may use the
+@kbd{i} (@code{rmail-input}) command in Rmail. This visits the file, puts it in
+Rmail mode, and then gets new mail from the file's inboxes if any.
+You can also use @kbd{M-x rmail-input} even when not in Rmail.
+
+ The file you read with @kbd{i} does not have to be in Rmail file format.
+It could also be Unix mail format, or @code{mmdf} format; or it could
+be a mixture of all three, as long as each message belongs to one of
+the three formats. Rmail recognizes all three and converts all the
+messages to proper Rmail format before showing you the file.
+
+@findex set-rmail-inbox-list
+ Each Rmail file can contain a list of inbox file names; you can specify
+this list with @kbd{M-x set-rmail-inbox-list @key{RET} @var{files}
+@key{RET}}. The argument can contain any number of file names, separated
+by commas. It can also be empty, which specifies that this file should
+have no inboxes. Once a list of inboxes is specified, the Rmail file
+remembers it permanently until it is explicitly changed.@refill
+
+@kindex g (Rmail)
+@findex rmail-get-new-mail
+ If an Rmail file has inboxes, new mail is merged in from the inboxes when
+the Rmail file is brought into Rmail, and when the @kbd{g} (@code{rmail-get-new-mail})
+command is used. If the Rmail file specifies no inboxes, then no new mail
+is merged in at these times. A special exception is made for your primary
+mail file in using the standard system inbox for it if it does not specify
+any.
+
+ To merge mail from a file that is not the usual inbox, give the @kbd{g}
+key a numeric argument, as in @kbd{C-u g}. Then it reads a file name and
+merges mail from that file. The inbox file is not deleted or changed in
+any way when @kbd{g} with an argument is used. This is, therefore, a
+general way of merging one file of messages into another.
+
+@node Rmail Output, Rmail Labels, Rmail Files, Rmail
+@section Copying Messages Out to Files
+
+@table @kbd
+@item o @var{file} @key{RET}
+Append a copy of the current message to the file @var{file},
+writing it in Rmail file format (@code{rmail-output-to-rmail-file}).
+
+@item C-o @var{file} @key{RET}
+Append a copy of the current message to the file @var{file},
+writing it in Unix mail file format (@code{rmail-output}).
+@end table
+
+@kindex o (Rmail)
+@findex rmail-output-to-rmail-file
+@kindex C-o (Rmail)
+@findex rmail-output
+ If an Rmail file has no inboxes, how does it get anything in it? By
+explicit @kbd{o} commands.
+
+ @kbd{o} (@code{rmail-output-to-rmail-file}) appends the current message
+in Rmail format to the end of the specified file. This is the best command
+to use to move messages between Rmail files. If the other Rmail file is
+currently visited, the copying is done into the other file's Emacs buffer
+instead. You should eventually save it on disk.
+
+ The @kbd{C-o} (@code{rmail-output}) command in Rmail appends a copy of the current
+message to a specified file, in Unix mail file format. This is useful for
+moving messages into files to be read by other mail processors that do not
+understand Rmail format.
+
+ Copying a message with @kbd{o} or @kbd{C-o} gives the original copy of the
+message the @samp{filed} attribute, so that @samp{filed} appears in the mode
+line when such a message is current.
+
+ Normally you should use only @kbd{o} to output messages to other Rmail
+files, never @kbd{C-o}. But it is also safe if you always use @kbd{C-o},
+never @kbd{o}. When a file is visited in Rmail, the last message is
+checked, and if it is in Unix format, the entire file is scanned and all
+Unix-format messages are converted to Rmail format. (The reason for
+checking the last message is that scanning the file is slow and most Rmail
+files have only Rmail format messages.) If you use @kbd{C-o} consistently,
+the last message is sure to be in Unix format, so Rmail will convert all
+messages properly.
+
+ The case where you might want to use @kbd{C-o} always, instead of @kbd{o}
+always, is when you or other users want to append mail to the same file
+from other mail processors. Other mail processors probably do not know
+Rmail format but do know Unix format.
+
+ In any case, always use @kbd{o} to add to an Rmail file that is being
+visited in Rmail. Adding messages with @kbd{C-o} to the actual disk file
+will trigger a ``simultaneous editing'' warning when you ask to save the
+Emacs buffer, and will be lost if you do save.
+
+@node Rmail Labels, Rmail Summary, Rmail Output, Rmail
+@section Labels
+@cindex label (Rmail)
+@cindex attribute (Rmail)
+
+ Each message can have various @dfn{labels} assigned to it as a means of
+classification. A label has a name; different names mean different labels.
+Any given label is either present or absent on a particular message. A few
+label names have standard meanings and are given to messages automatically
+by Rmail when appropriate; these special labels are called @dfn{attributes}.
+All other labels are assigned by the user.
+
+@table @kbd
+@item a @var{label} @key{RET}
+Assign the label @var{label} to the current message (@code{rmail-add-label}).
+@item k @var{label} @key{RET}
+Remove the label @var{label} from the current message (@code{rmail-kill-label}).
+@item C-M-n @var{labels} @key{RET}
+Move to the next message that has one of the labels @var{labels}
+(@code{rmail-next-labeled-message}).
+@item C-M-p @var{labels} @key{RET}
+Move to the previous message that has one of the labels @var{labels}
+(@code{rmail-previous-labeled-message}).
+@item C-M-l @var{labels} @key{RET}
+Make a summary of all messages containing any of the labels @var{labels}
+(@code{rmail-summary-by-labels}).
+@end table
+
+@noindent
+Specifying an empty string for one these commands means to use the last
+label specified for any of these commands.
+
+@kindex a (Rmail)
+@kindex k (rmail)
+@findex rmail-add-label
+@findex rmail-kill-label
+ The @kbd{a} (@code{rmail-add-label}) and @kbd{k} (@code{rmail-kill-label}) commands allow
+you to assign or remove any label on the current message. If the @var{label}
+argument is empty, it means to assign or remove the same label most
+recently assigned or removed.
+
+ Once you have given messages labels to classify them as you wish, there
+are two ways to use the labels: in moving and in summaries.
+
+@kindex C-M-n (Rmail)
+@kindex C-M-p (Rmail)
+@findex rmail-next-labeled-message
+@findex rmail-previous-labeled-message
+ The command @kbd{C-M-n @var{labels} @key{RET}}
+(@code{rmail-next-labeled-message}) moves to the next message that has one
+of the labels @var{labels}. @var{labels} is one or more label names,
+separated by commas. @kbd{C-M-p} (@code{rmail-previous-labeled-message})
+is similar, but moves backwards to previous messages. A preceding numeric
+argument to either one serves as a repeat count.@refill
+
+@kindex C-M-l (Rmail)
+@findex rmail-summary-by-labels
+ The command @kbd{C-M-l @var{labels} @key{RET}}
+(@code{rmail-summary-by-labels}) displays a summary containing only the
+messages that have at least one of a specified set of messages. The
+argument @var{labels} is one or more label names, separated by commas.
+@xref{Rmail Summary}, for information on summaries.@refill
+
+ If the @var{labels} argument to @kbd{C-M-n}, @kbd{C-M-p} or @kbd{C-M-l} is empty, it means
+to use the last set of labels specified for any of these commands.
+
+ Some labels such as @samp{deleted} and @samp{filed} have built-in meanings and
+are assigned to or removed from messages automatically at appropriate
+times; these labels are called @dfn{attributes}. Here is a list of Rmail
+attributes:
+
+@table @samp
+@item unseen
+Means the message has never been current. Assigned to messages when
+they come from an inbox file, and removed when a message is made
+current.
+@item deleted
+Means the message is deleted. Assigned by deletion commands and
+removed by undeletion commands (@pxref{Rmail Deletion}).
+@item filed
+Means the message has been copied to some other file. Assigned by the
+file output commands (@pxref{Rmail Files}).
+@item answered
+Means you have mailed an answer to the message. Assigned by the @kbd{r}
+command (@code{rmail-reply}). @xref{Rmail Reply}.
+@item forwarded
+Means you have forwarded the message to other users. Assigned by the
+@kbd{f} command (@code{rmail-forward}). @xref{Rmail Reply}.
+@item edited
+Means you have edited the text of the message within Rmail.
+@xref{Rmail Editing}.
+@end table
+
+ All other labels are assigned or removed only by the user, and it is up
+to the user to decide what they mean.
+
+@node Rmail Summary, Rmail Reply, Rmail Labels, Rmail
+@section Summaries
+@cindex summary (Rmail)
+
+ A @dfn{summary} is a buffer containing one line per message that Rmail
+can make and display to give you an overview of the mail in an Rmail file.
+Each line shows the message number, the sender, the labels, and the
+subject. When the summary buffer is selected, various commands can be used
+to select messages by moving in the summary buffer, or delete or undelete
+messages.
+
+ A summary buffer applies to a single Rmail file only; if you are
+editing multiple Rmail files, they have separate summary buffers. The
+summary buffer name is made by appending @samp{-summary} to the Rmail buffer's
+name. Only one summary buffer will be displayed at a time unless you make
+several windows and select the summary buffers by hand.
+
+@menu
+* Rmail Make Summary:: Making various sorts of summaries.
+* Rmail Summary Edit:: Manipulating messages from the summary.
+@end menu
+
+@node Rmail Make Summary, Rmail Summary Edit, Rmail Summary, Rmail Summary
+@subsection Making Summaries
+
+ Here are the commands to create a summary for the current Rmail file.
+Summaries do not update automatically; to make an updated summary, you
+must use one of these commands again.
+
+@table @kbd
+@item h
+@itemx C-M-h
+Summarize all messages (@code{rmail-summary}).
+@item l @var{labels} @key{RET}
+@itemx C-M-l @var{labels} @key{RET}
+Summarize message that have one or more of the specified labels
+(@code{rmail-summary-by-labels}).
+@item C-M-r @var{rcpts} @key{RET}
+Summarize messages that have one or more of the specified recipients
+(@code{rmail-summary-by-recipients}).
+@end table
+
+@kindex h (Rmail)
+@findex rmail-summary
+ The @kbd{h} or @kbd{C-M-h} (@code{rmail-summary}) command fills the summary buffer
+for the current Rmail file with a summary of all the messages in the file.
+It then displays and selects the summary buffer in another window.
+
+@kindex l (Rmail)
+@kindex C-M-l (Rmail)
+@findex rmail-summary-by-labels
+ @kbd{C-M-l @var{labels} @key{RET}} (@code{rmail-summary-by-labels}) makes
+a partial summary mentioning only the messages that have one or more of the
+labels @var{labels}. @var{labels} should contain label names separated by
+commas.@refill
+
+@kindex C-M-r (Rmail)
+@findex rmail-summary-by-recipients
+ @kbd{C-M-r @var{rcpts} @key{RET}} (@code{rmail-summary-by-recipients})
+makes a partial summary mentioning only the messages that have one or more
+of the recipients @var{rcpts}. @var{rcpts} should contain mailing
+addresses separated by commas.@refill
+
+ Note that there is only one summary buffer for any Rmail file; making one
+kind of summary discards any previously made summary.
+
+@node Rmail Summary Edit,, Rmail Make Summary, Rmail Summary
+@subsection Editing in Summaries
+@cindex Rmail Summary mode
+@cindex summaries in Rmail
+
+ Summary buffers are given the major mode Rmail Summary mode, which
+provides the following special commands:
+
+@table @kbd
+@item j
+Select the message described by the line that point is on
+(@code{rmail-summary-goto-msg}).
+@item C-n
+Move to next line and select its message in Rmail
+(@code{rmail-summary-next-all}).
+@item C-p
+Move to previous line and select its message
+(@code{rmail-summary-previous-all}).
+@item n
+Move to next line, skipping lines saying `deleted', and select its
+message (@code{rmail-summary-next-msg}).
+@item p
+Move to previous line, skipping lines saying `deleted', and select
+its message (@code{rmail-summary-previous-msg}).
+@c !!! following generates acceptable underfull hbox
+@item d
+Delete the current line's message, then do like @kbd{n}
+(@code{rmail-summary-delete-forward}).
+@item u
+Undelete and select this message or the previous deleted message in
+the summary (@code{rmail-summary-undelete}).
+@item @key{SPC}
+Scroll the other window (presumably Rmail) forward
+(@code{rmail-summary-scroll-msg-up}).
+@item @key{DEL}
+Scroll the other window backward (@code{rmail-summary-scroll-msg-down}).
+@item x
+Kill the summary window (@code{rmail-summary-exit}).
+@item q
+Exit Rmail (@code{rmail-summary-quit}).
+@end table
+
+@kindex C-n (Rmail summary)
+@kindex C-p (Rmail summary)
+@findex rmail-summary-next-all
+@findex rmail-summary-previous-all
+ The keys @kbd{C-n} and @kbd{C-p} are modified in Rmail Summary mode so that in
+addition to moving point in the summary buffer they also cause the line's
+message to become current in the associated Rmail buffer. That buffer is
+also made visible in another window if it is not already so.
+
+@kindex n (Rmail summary)
+@kindex p (Rmail summary)
+@findex rmail-summary-next-msg
+@findex rmail-summary-previous-msg
+ @kbd{n} and @kbd{p} are similar to @kbd{C-n} and @kbd{C-p}, but skip
+lines that say `message deleted'. They are like the @kbd{n} and @kbd{p}
+keys of Rmail itself. Note, however, that in a partial summary these
+commands move only among the message listed in the summary.@refill
+
+@kindex j (Rmail summary)
+@findex rmail-summary-goto-msg
+ The other Emacs cursor motion commands are not changed in Rmail Summary
+mode, so it is easy to get the point on a line whose message is not
+selected in Rmail. This can also happen if you switch to the Rmail window
+and switch messages there. To get the Rmail buffer back in sync with the
+summary, use the @kbd{j} (@code{rmail-summary-goto-msg}) command, which selects
+in Rmail the message of the current summary line.
+
+@kindex d (Rmail summary)
+@kindex u (Rmail summary)
+@findex rmail-summary-delete-forward
+@findex rmail-summary-undelete
+ Deletion and undeletion can also be done from the summary buffer. They
+always work based on where point is located in the summary buffer, ignoring
+which message is selected in Rmail. @kbd{d} (@code{rmail-summary-delete-forward})
+deletes the current line's message, then moves to the next line whose
+message is not deleted and selects that message. The inverse of this is
+@kbd{u} (@code{rmail-summary-undelete}), which moves back (if necessary) to a line
+whose message is deleted, undeletes that message, and selects it in Rmail.
+
+@kindex SPC (Rmail summary)
+@kindex DEL (Rmail summary)
+@findex rmail-summary-scroll-msg-down
+@findex rmail-summary-scroll-msg-up
+ When moving through messages with the summary buffer, it is convenient to
+be able to scroll the message while remaining in the summary window.
+The commands @key{SPC} (@code{rmail-summary-scroll-msg-up}) and @key{DEL}
+(@code{rmail-summary-scroll-msg-down}) do this. They scroll the message just
+as those same keys do when the Rmail buffer is selected.@refill
+
+@kindex x (Rmail summary)
+@findex rmail-summary-exit
+ When you are finished using the summary, type @kbd{x} (@code{rmail-summary-exit})
+to kill the summary buffer's window.
+
+@kindex q (Rmail summary)
+@findex rmail-summary-quit
+ You can also exit Rmail while in the summary. @kbd{q} (@code{rmail-summary-quit})
+kills the summary window, then saves the Rmail file and switches to another
+buffer.
+
+@node Rmail Reply, Rmail Editing, Rmail Summary, Rmail
+@section Sending Replies
+
+ Rmail has several commands that use Mail mode to send outgoing mail.
+@xref{Sending Mail}, for information on using Mail mode. What are
+documented here are the special commands of Rmail for entering Mail mode.
+Note that the usual keys for sending mail, @kbd{C-x m} and @kbd{C-x 4 m},
+are available in Rmail mode and work just as they usually do.@refill
+
+@table @kbd
+@item m
+Send a message (@code{rmail-mail}).
+@c !!! following generates acceptable underfull hbox
+@item c
+Continue editing already started outgoing message (@code{rmail-continue}).
+@item r
+Send a reply to the current Rmail message (@code{rmail-reply}).
+@item f
+Forward current message to other users (@code{rmail-forward}).
+@end table
+
+@kindex r (Rmail)
+@findex rmail-reply
+@vindex rmail-dont-reply-to
+@cindex reply to a message
+ The most common reason to send a message while in Rmail is to reply to
+the message you are reading. To do this, type @kbd{r}
+(@code{rmail-reply}). This displays the @samp{*mail*} buffer in another
+window, much like @kbd{C-x 4 m}, but preinitializes the @samp{Subject},
+@samp{To}, @samp{CC} and @samp{In-reply-to} header fields based on the
+message being replied to. The @samp{To} field is given the sender of that
+message, and the @samp{CC} gets all the recipients of that message (but
+recipients that match elements of the list @code{rmail-dont-reply-to} are
+omitted; by default, this list contains your own mailing address).@refill
+
+ If you don't want to include the other recipients in the @samp{cc} field,
+you can use a prefix argument to the @kbd{r} command. In Rmail, you can
+do this with @w{@kbd{1 r}}.
+
+ Once you have initialized the @samp{*mail*} buffer this way, sending the
+mail goes as usual (@pxref{Sending Mail}). You can edit the presupplied
+header fields if they are not right for you.
+
+@kindex C-c C-y (Mail mode)
+@findex mail-yank-original
+ One additional Mail mode command is available when mailing is invoked
+from Rmail: @kbd{C-c C-y} (@code{mail-yank-original}) inserts into the outgoing
+message a copy of the current Rmail message; normally this is the message
+you are replying to, but you can also switch to the Rmail buffer, select a
+different message, switch back, and yank new current message. Normally the
+yanked message is indented four spaces and has most header fields deleted
+from it; an argument to @kbd{C-c C-y} specifies the amount to indent, and
+@kbd{C-u C-c C-y} does not indent at all and does not delete any header
+fields.@refill
+
+@kindex f (Rmail)
+@findex rmail-forward
+@cindex forward a message
+ Another frequent reason to send mail in Rmail is to forward the current
+message to other users. @kbd{f} (@code{rmail-forward}) makes this easy by
+preinitializing the @samp{*mail*} buffer with the current message as the
+text, and a subject designating a forwarded message. All you have to do is
+fill in the recipients and send.@refill
+
+@kindex m (Rmail)
+@findex rmail-mail
+ The @kbd{m} (@code{rmail-mail}) command is used to start editing an
+outgoing message that is not a reply. It leaves the header fields empty.
+Its only difference from @kbd{C-x 4 m} is that it makes the Rmail buffer
+accessible for @kbd{C-c y}, just as @kbd{r} does. Thus, @kbd{m} can be
+used to reply to or forward a message; it can do anything @kbd{r} or @kbd{f}
+can do.@refill
+
+@kindex c (Rmail)
+@findex rmail-continue
+ The @kbd{c} (@code{rmail-continue}) command resumes editing the
+@samp{*mail*} buffer, to finish editing an outgoing message you were
+already composing, or to alter a message you have sent.@refill
+
+@node Rmail Editing, Rmail Digest, Rmail Reply, Rmail
+@section Editing Within a Message
+
+ Rmail mode provides a few special commands for moving within and editing
+the current message. In addition, the usual Emacs commands are available
+(except for a few, such as @kbd{C-M-n} and @kbd{C-M-h}, that are redefined by Rmail for
+other purposes). However, the Rmail buffer is normally read-only, and to
+alter it you must use the Rmail command @kbd{w} described below.
+
+@table @kbd
+@item t
+Toggle display of original headers (@code{rmail-toggle-headers}).
+@item w
+Edit current message (@code{rmail-edit-current-message}).
+@end table
+
+@kindex t (Rmail)
+@findex rmail-toggle-header
+@vindex rmail-ignored-headers
+ Rmail reformats the header of each message before displaying it.
+Normally this involves deleting most header fields, on the grounds that
+they are not interesting. The variable @code{rmail-ignored-headers} should
+contain a regexp that matches the header fields to discard in this way.
+The original headers are saved permanently, and to see what they look like,
+use the @kbd{t} (@code{rmail-toggle-headers}) command. This discards the reformatted
+headers of the current message and displays it with the original headers.
+Repeating @kbd{t} reformats the message again. Selecting the message again
+also reformats.
+
+@kindex w (Rmail)
+@findex rmail-edit-current-message
+ The Rmail buffer is normally read-only, and most of the characters you
+would type to modify it (including most letters) are redefined as Rmail
+commands. This is usually not a problem since it is rare to want to change
+the text of a message. When you do want to do this, the way is to type
+@kbd{w} (@code{rmail-edit-current-message}), which changes from Rmail mode into
+Rmail Edit mode, another major mode which is nearly the same as Text mode.
+The mode line illustrates this change.
+
+ In Rmail Edit mode, letters insert themselves as usual and the Rmail
+commands are not available. When you are finished editing the message and
+are ready to go back to Rmail, type @kbd{C-c C-c}, which switches back to
+Rmail mode. Alternatively, you can return to Rmail mode but cancel all the
+editing that you have done by typing @kbd{C-c C-]}.
+
+@vindex rmail-edit-mode-hook
+ Entering Rmail Edit mode calls with no arguments the value of the variable
+@code{text-mode-hook}, if that value exists and is not @code{nil}; then it
+does the same with the variable @code{rmail-edit-mode-hook}. It adds the
+attribute @samp{edited} to the message.
+
+@node Rmail Digest,, Rmail Editing, Rmail
+@section Digest Messages
+@cindex digest message
+@cindex undigestify
+
+ A @dfn{digest message} is a message which exists to contain and carry
+several other messages. Digests are used on moderated mailing lists; all
+the messages that arrive for the list during a period of time such as one
+day are put inside a single digest which is then sent to the subscribers.
+Transmitting the single digest uses much less computer time than
+transmitting the individual messages even though the total size is the
+same, because the per-message overhead in network mail transmission is
+considerable.
+
+@findex undigestify-rmail-message
+ When you receive a digest message, the most convenient way to read it is
+to @dfn{undigestify} it: to turn it back into many individual messages.
+Then you can read and delete the individual messages as it suits you.
+
+ To undigestify a message, select it and then type @kbd{M-x
+undigestify-rmail-message}. This copies each submessage as a separate
+Rmail message and inserts them all following the digest. The digest
+message itself is flagged as deleted.
+
+@iftex
+@chapter Miscellaneous Commands
+
+ This chapter contains several brief topics that do not fit anywhere else.
+
+@end iftex
+@node Recursive Edit, Narrowing, Rmail, Top
+@section Recursive Editing Levels
+@cindex recursive editing level
+@cindex editing level, recursive
+
+ A @dfn{recursive edit} is a situation in which you are using Emacs
+commands to perform arbitrary editing while in the middle of another Emacs
+command. For example, when you type @kbd{C-r} inside of a @code{query-replace},
+you enter a recursive edit in which you can change the current buffer. On
+exiting from the recursive edit, you go back to the @code{query-replace}.
+
+@kindex C-M-c
+@findex exit-recursive-edit
+@cindex exiting
+ @dfn{Exiting} the recursive edit means returning to the unfinished
+command, which continues execution. For example, exiting the recursive
+edit requested by @kbd{C-r} in @code{query-replace} causes query replacing
+to resume. Exiting is done with @kbd{C-M-c} (@code{exit-recursive-edit}).
+
+@kindex C-]
+@findex abort-recursive-edit
+ You can also @dfn{abort} the recursive edit. This is like exiting, but
+also quits the unfinished command immediately. Use the command @kbd{C-]}
+(@code{abort-recursive-edit}) for this. @xref{Quitting}.
+
+ The mode line shows you when you are in a recursive edit by displaying
+square brackets around the parentheses that always surround the major and
+minor mode names. Every window's mode line shows this, in the same way,
+since being in a recursive edit is true of Emacs as a whole rather than
+any particular buffer.
+
+@findex top-level
+ It is possible to be in recursive edits within recursive edits. For
+example, after typing @kbd{C-r} in a @code{query-replace}, you might type a
+command that entered the debugger. In such circumstances, two or more sets
+of square brackets appear in the mode line. Exiting the inner recursive
+edit (such as, with the debugger @kbd{c} command) would resume the command
+where it called the debugger. After the end of this command, you would be
+able to exit the first recursive edit. Aborting also gets out of only one
+level of recursive edit; it returns immediately to the command level of the
+previous recursive edit. So you could immediately abort that one too.
+
+ Alternatively, the command @kbd{M-x top-level} aborts all levels of
+recursive edits, returning immediately to the top level command reader.
+
+ The text being edited inside the recursive edit need not be the same text
+that you were editing at top level. It depends on what the recursive edit
+is for. If the command that invokes the recursive edit selects a different
+buffer first, that is the buffer you will edit recursively. In any case,
+you can switch buffers within the recursive edit in the normal manner (as
+long as the buffer-switching keys have not been rebound). You could
+probably do all the rest of your editing inside the recursive edit,
+visiting files and all. But this could have surprising effects (such as
+stack overflow) from time to time. So remember to exit or abort the
+recursive edit when you no longer need it.
+
+ In general, GNU Emacs tries to avoid using recursive edits. It is
+usually preferable to allow the user to switch among the possible editing
+modes in any order he likes. With recursive edits, the only way to get to
+another state is to go ``back'' to the state that the recursive edit was
+invoked from.
+
+@node Narrowing, Sorting, Recursive Edit, Top
+@section Narrowing
+@cindex widening
+@cindex restriction
+@cindex narrowing
+
+ @dfn{Narrowing} means focusing in on some portion of the buffer, making
+the rest temporarily invisible and inaccessible. Cancelling the narrowing,
+and making the entire buffer once again visible, is called @dfn{widening}.
+The amount of narrowing in effect in a buffer at any time is called the
+buffer's @dfn{restriction}.
+
+@c WideCommands
+@table @kbd
+@item C-x n
+Narrow down to between point and mark (@code{narrow-to-region}).
+@item C-x w
+Widen to make the entire buffer visible again (@code{widen}).
+@end table
+
+ When you have narrowed down to a part of the buffer, that part appears to
+be all there is. You can't see the rest, you can't move into it (motion
+commands won't go outside the visible part), you can't change it in any
+way. However, it is not gone, and if you save the file all the invisible
+text will be saved. In addition to sometimes making it easier to
+concentrate on a single subroutine or paragraph by eliminating clutter,
+narrowing can be used to restrict the range of operation of a replace
+command or repeating keyboard macro. The word @samp{Narrow} appears in the
+mode line whenever narrowing is in effect.
+
+@kindex C-x n
+@findex narrow-to-region
+ The primary narrowing command is @kbd{C-x n} (@code{narrow-to-region}).
+It sets the current buffer's restrictions so that the text in the current
+region remains visible but all text before the region or after the region
+is invisible. Point and mark do not change.
+
+ Because narrowing can easily confuse users who do not understand it,
+@code{narrow-to-region} is normally a disabled command. Attempting to use
+this command asks for confirmation and gives you the option of enabling it;
+once you enable the command, confirmation will no longer be required for
+it. @xref{Disabling}.
+
+@kindex C-x w
+@findex widen
+ The way to undo narrowing is to widen with @kbd{C-x w} (@code{widen}).
+This makes all text in the buffer accessible again.
+
+ You can get information on what part of the buffer you are narrowed down
+to using the @kbd{C-x =} command. @xref{Position Info}.
+
+@node Sorting, Shell, Narrowing, Top
+@section Sorting Text
+@cindex sorting
+
+ Emacs provides several commands for sorting text in the buffer. All
+operate on the contents of the region (the text between point and the
+mark). They divide the text of the region into many @dfn{sort records},
+identify a @dfn{sort key} for each record, and then reorder the records
+into the order determined by the sort keys. The records are ordered so
+that their keys are in alphabetical order, or, for numeric sorting, in
+numeric order. In alphabetic sorting, all upper case letters `A' through
+`Z' come before lower case `a', in accord with the @sc{ascii} character
+sequence.
+
+ The various sort commands differ in how they divide the text into sort
+records and in which part of each record is used as the sort key. Most of
+the commands make each line a separate sort record, but some commands use
+paragraphs or pages as sort records. Most of the sort commands use each
+entire sort record as its own sort key, but some use only a portion of the
+record as the sort key.
+
+@findex sort-lines
+@findex sort-paragraphs
+@findex sort-pages
+@findex sort-fields
+@findex sort-numeric-fields
+@table @kbd
+@item M-x sort-lines
+Divide the region into lines, and sort by comparing the entire
+text of a line. A prefix argument means sort into descending order.
+
+@item M-x sort-paragraphs
+Divide the region into paragraphs, and sort by comparing the entire
+text of a paragraph (except for leading blank lines). A prefix
+argument means sort into descending order.
+
+@item M-x sort-pages
+Divide the region into pages, and sort by comparing the entire
+text of a page (except for leading blank lines). A prefix
+argument means sort into descending order.
+
+@item M-x sort-fields
+Divide the region into lines, and sort by comparing the contents of
+one field in each line. Fields are defined as separated by
+whitespace, so the first run of consecutive non-whitespace characters
+in a line constitutes field 1, the second such run constitutes field
+2, etc.
+
+You specify which field to sort by with a numeric argument: 1 to sort
+by field 1, etc. A negative argument means sort into descending
+order. Thus, minus 2 means sort by field 2 in reverse-alphabetical
+order.
+
+If two lines are equal in the field being compared, their relative order
+in the text is not changed. This enables you to sort by multiple keys:
+sort first by the least significant key, then by the next-to-least
+key, and so on, ending with the most important key.
+
+@item M-x sort-numeric-fields
+Like @kbd{M-x sort-fields} except the specified field is converted
+to a number for each line, and the numbers are compared. @samp{10}
+comes before @samp{2} when considered as text, but after it when
+considered as a number.
+
+@item M-x sort-columns
+Like @kbd{M-x sort-fields} except that the text within each line
+used for comparison comes from a fixed range of columns. See below
+for an explanation.
+@end table
+
+For example, if the buffer contains
+
+@smallexample
+On systems where clash detection (locking of files being edited) is
+implemented, Emacs also checks the first time you modify a buffer
+whether the file has changed on disk since it was last visited or
+saved. If it has, you are asked to confirm that you want to change
+the buffer.
+@end smallexample
+
+@noindent
+then if you apply @kbd{M-x sort-lines} to the entire buffer you get
+
+@smallexample
+On systems where clash detection (locking of files being edited) is
+implemented, Emacs also checks the first time you modify a buffer
+saved. If it has, you are asked to confirm that you want to change
+the buffer.
+whether the file has changed on disk since it was last visited or
+@end smallexample
+
+@noindent
+where the upper case `O' comes before all lower case letters. If you apply
+instead @kbd{C-u 2 M-x sort-fields} you get
+
+@smallexample
+implemented, Emacs also checks the first time you modify a buffer
+saved. If it has, you are asked to confirm that you want to change
+the buffer.
+On systems where clash detection (locking of files being edited) is
+whether the file has changed on disk since it was last visited or
+@end smallexample
+
+@noindent
+where the sort keys were @samp{Emacs}, @samp{If}, @samp{buffer},
+@samp{systems} and @samp{the}.@refill
+
+@findex sort-columns
+ @kbd{M-x sort-columns} requires more explanation. You specify the
+columns by putting point at one of the columns and the mark at the other
+column. Because this means you cannot put point or the mark at the
+beginning of the first line to sort, this command uses an unusual
+definition of `region': all of the line point is in is considered part of
+the region, and so is all of the line the mark is in.
+
+ For example, to sort a table by information found in columns 10 to 15,
+you could put the mark on column 10 in the first line of the table, and
+point on column 15 in the last line of the table, and then use this command.
+Or you could put the mark on column 15 in the first line and point on
+column 10 in the last line.
+
+ This can be thought of as sorting the rectangle specified by point and
+the mark, except that the text on each line to the left or right of the
+rectangle moves along with the text inside the rectangle.
+@xref{Rectangles}.
+
+@node Shell, Hardcopy, Sorting, Top
+@section Running Shell Commands from Emacs
+@cindex subshell
+@cindex shell commands
+
+ Emacs has commands for passing single command lines to inferior shell
+processes; it can also run a shell interactively with input and output to
+an Emacs buffer @samp{*shell*}.
+
+@table @kbd
+@item M-!
+Run a specified shell command line and display the output
+(@code{shell-command}).
+@item M-|
+Run a specified shell command line with region contents as input;
+optionally replace the region with the output
+(@code{shell-command-on-region}).
+@item M-x shell
+Run a subshell with input and output through an Emacs buffer.
+You can then give commands interactively.
+@end table
+
+@menu
+* Single Shell:: How to run one shell command and return.
+* Interactive Shell:: Permanent shell taking input via Emacs.
+* Shell Mode:: Special Emacs commands used with permanent shell.
+@end menu
+
+@node Single Shell, Interactive Shell, Shell, Shell
+@subsection Single Shell Commands
+
+@kindex M-!
+@findex shell-command
+ @kbd{M-!} (@code{shell-command}) reads a line of text using the
+minibuffer and creates an inferior shell to execute the line as a command.
+Standard input from the command comes from the null device. If the shell
+command produces any output, the output goes into an Emacs buffer named
+@samp{*Shell Command Output*}, which is displayed in another window but not
+selected. A numeric argument, as in @kbd{M-1 M-!}, directs this command to
+insert any output into the current buffer. In that case, point is left
+before the output and the mark is set after the output.
+
+@kindex M-|
+@findex shell-command-on-region
+ @kbd{M-|} (@code{shell-command-on-region}) is like @kbd{M-!} but passes
+the contents of the region as input to the shell command, instead of no
+input. If a numeric argument is used, meaning insert output in the current
+buffer, then the old region is deleted first and the output replaces it as
+the contents of the region.@refill
+
+@vindex shell-file-name
+@cindex environment
+ Both @kbd{M-!} and @kbd{M-|} use @code{shell-file-name} to specify the
+shell to use. This variable is initialized based on your @code{SHELL}
+environment variable when Emacs is started. If the file name does not
+specify a directory, the directories in the list @code{exec-path} are
+searched; this list is initialized based on the environment variable
+@code{PATH} when Emacs is started. Your @file{.emacs} file can override
+either or both of these default initializations.@refill
+
+ With @kbd{M-!} and @kbd{M-|}, Emacs has to wait until the shell command
+completes. You can quit with @kbd{C-g}; that terminates the shell command.
+
+@node Interactive Shell, Shell Mode, Single Shell, Shell
+@subsection Interactive Inferior Shell
+
+@findex shell
+ To run a subshell interactively, putting its typescript in an Emacs
+buffer, use @kbd{M-x shell}. This creates (or reuses) a buffer named
+@samp{*shell*} and runs a subshell with input coming from and output going
+to that buffer. That is to say, any ``terminal output'' from the subshell
+will go into the buffer, advancing point, and any ``terminal input'' for
+the subshell comes from text in the buffer. To give input to the subshell,
+go to the end of the buffer and type the input, terminated by @key{RET}.
+
+ Emacs does not wait for the subshell to do anything. You can switch
+windows or buffers and edit them while the shell is waiting, or while it is
+running a command. Output from the subshell waits until Emacs has time to
+process it; this happens whenever Emacs is waiting for keyboard input or
+for time to elapse.
+
+ If you would like multiple subshells, change the name of buffer
+@samp{*shell*} to something different by using @kbd{M-x rename-buffer}. The
+next use of @kbd{M-x shell} will create a new buffer @samp{*shell*} with
+its own subshell. By renaming this buffer as well you can create a third
+one, and so on. All the subshells run independently and in parallel.
+
+@vindex explicit-shell-file-name
+ The file name used to load the subshell is the value of the variable
+@code{explicit-shell-file-name}, if that is non-@code{nil}. Otherwise, the
+environment variable @code{ESHELL} is used, or the environment variable
+@code{SHELL} if there is no @code{ESHELL}. If the file name specified
+is relative, the directories in the list @code{exec-path} are searched
+(@pxref{Single Shell,Single Shell Commands}).@refill
+
+ As soon as the subshell is started, it is sent as input the contents of
+the file @file{~/.emacs_@var{shellname}}, if that file exists, where
+@var{shellname} is the name of the file that the shell was loaded
+from. For example, if you use @code{csh}, the file sent to it is
+@file{~/.emacs_csh}; if you use the Bourne-Again shell, the file sent
+to it is @file{~/.emacs_bash}.@refill
+
+@vindex shell-pushd-regexp
+@vindex shell-popd-regexp
+@vindex shell-cd-regexp
+ @code{cd}, @code{pushd} and @code{popd} commands given to the inferior
+shell are watched by Emacs so it can keep the @samp{*shell*} buffer's
+default directory the same as the shell's working directory. These
+commands are recognized syntactically by examining lines of input that are
+sent. If you use aliases for these commands, you can tell Emacs to
+recognize them also. For example, if the value of the variable
+@code{shell-pushd-regexp} matches the beginning of a shell command line,
+that line is regarded as a @code{pushd} command. Change this variable when
+you add aliases for @samp{pushd}. Likewise, @code{shell-popd-regexp} and
+@code{shell-cd-regexp} are used to recognize commands with the meaning of
+@samp{popd} and @samp{cd}. These commands are recognized only at the
+beginning of a shell command line.@refill
+
+@vindex shell-set-directory-error-hook
+ If Emacs gets an error while trying to handle what it believes is
+a @samp{cd}, @samp{pushd} or @samp{popd} command, and the value of
+@code{shell-set-directory-error-hook} is non-@code{nil}, that value is
+called as a function with no arguments.@refill
+
+@node Shell Mode,, Interactive Shell, Shell
+@subsection Shell Mode
+
+@cindex Shell mode
+ The shell buffer uses Shell mode, which defines several special keys
+attached to the @kbd{C-c} prefix. They are chosen to resemble the usual
+editing and job control characters present in shells that are not under
+Emacs, except that you must type @kbd{C-c} first. Here is a complete list
+of the special key bindings of Shell mode:
+
+@kindex RET (Shell mode)
+@kindex C-c C-d (Shell mode)
+@kindex C-c C-u (Shell mode)
+@kindex C-c C-w (Shell mode)
+@kindex C-c C-c (Shell mode)
+@kindex C-c C-z (Shell mode)
+@kindex C-c C-\ (Shell mode)
+@kindex C-c C-o (Shell mode)
+@kindex C-c C-r (Shell mode)
+@kindex C-c C-y (Shell mode)
+@findex send-shell-input
+@findex shell-send-eof
+@findex interrupt-shell-subjob
+@findex stop-shell-subjob
+@findex quit-shell-subjob
+@findex kill-output-from-shell
+@findex show-output-from-shell
+@findex copy-last-shell-input
+@vindex shell-prompt-pattern
+@table @kbd
+@item @key{RET}
+At end of buffer, send line as input; otherwise, copy current line to end of
+buffer and send it (@code{send-shell-input}). When a line is copied, any
+text at the beginning of the line that matches the variable
+@code{shell-prompt-pattern} is left out; this variable's value should be a
+regexp string that matches the prompts that you use in your subshell.
+@item C-c C-d
+Send end-of-file as input, probably causing the shell or its current
+subjob to finish (@code{shell-send-eof}).
+@item C-c C-u
+Kill all text that has yet to be sent as input (@code{kill-shell-input}).
+@item C-c C-w
+Kill a word before point (@code{backward-kill-word}).
+@item C-c C-c
+Interrupt the shell or its current subjob if any
+(@code{interrupt-shell-subjob}).
+@item C-c C-z
+Stop the shell or its current subjob if any (@code{stop-shell-subjob}).
+@item C-c C-\
+Send quit signal to the shell or its current subjob if any
+(@code{quit-shell-subjob}).
+@item C-c C-o
+Delete last batch of output from shell (@code{kill-output-from-shell}).
+@item C-c C-r
+Scroll top of last batch of output to top of window
+(@code{show-output-from-shell}).
+@item C-c C-y
+Copy the previous bunch of shell input, and insert it into the
+buffer before point (@code{copy-last-shell-input}). No final newline
+is inserted, and the input copied is not resubmitted until you type
+@key{RET}.
+@end table
+
+@node Hardcopy, Dissociated Press, Shell, Top
+@section Hardcopy Output
+@cindex hardcopy
+
+ The Emacs commands for making hardcopy derive their names from the
+Unix commands @samp{print} and @samp{lpr}.
+
+@table @kbd
+@item M-x print-buffer
+Print hardcopy of current buffer using Unix command @samp{print}
+(@samp{lpr -p}). This makes page headings containing the file name
+and page number.
+@item M-x lpr-buffer
+Print hardcopy of current buffer using Unix command @samp{lpr}.
+This makes no page headings.
+@item M-x print-region
+Like @code{print-buffer} but prints only the current region.
+@item M-x lpr-region
+Like @code{lpr-buffer} but prints only the current region.
+@end table
+
+@findex print-buffer
+@findex print-region
+@findex lpr-buffer
+@findex lpr-region
+@vindex lpr-switches
+@vindex lpr-command
+ All the hardcopy commands pass extra switches to the @code{lpr}
+program based on the value of the variable @code{lpr-switches}. Its
+value should be a list of strings, each string a switch starting with
+@samp{-}. For example, the value could be @w{@code{("-Pfoo")}} to print on
+printer @samp{foo}. You can specify an alternative command to run
+instead of @code{lpr} by setting the variable @code{lpr-command}.
+
+@node Dissociated Press, Amusements, Hardcopy, Top
+@section Dissociated Press
+
+@findex dissociated-press
+ @kbd{M-x dissociated-press} is a command for scrambling a file of text
+either word by word or character by character. Starting from a buffer of
+straight English, it produces extremely amusing output. The input comes
+from the current Emacs buffer. Dissociated Press writes its output in a
+buffer named @samp{*Dissociation*}, and redisplays that buffer after every
+couple of lines (approximately) to facilitate reading it.
+
+ @code{dissociated-press} asks every so often whether to continue
+operating. Answer @kbd{n} to stop it. You can also stop at any time by
+typing @kbd{C-g}. The dissociation output remains in the @samp{*Dissociation*}
+buffer for you to copy elsewhere if you wish.
+
+@cindex presidentagon
+ Dissociated Press operates by jumping at random from one point in the
+buffer to another. In order to produce plausible output rather than
+gibberish, it insists on a certain amount of overlap between the end of one
+run of consecutive words or characters and the start of the next. That is,
+if it has just printed out `president' and then decides to jump to a
+different point in the file, it might spot the `ent' in `pentagon' and
+continue from there, producing `presidentagon'. Long sample texts produce
+the best results.
+
+@cindex againformation
+ A positive argument to @kbd{M-x dissociated-press} tells it to operate
+character by character, and specifies the number of overlap characters. A
+negative argument tells it to operate word by word and specifies the number
+of overlap words. In this mode, whole words are treated as the elements to
+be permuted, rather than characters. No argument is equivalent to an
+argument of two. For your againformation, the output goes only into the
+buffer @samp{*Dissociation*}. The buffer you start with is not changed.
+
+@cindex Markov chain
+@cindex ignoriginal
+@cindex techniquitous
+ Dissociated Press produces nearly the same results as a Markov chain
+based on a frequency table constructed from the sample text. It is,
+however, an independent, ignoriginal invention. Dissociated Press
+techniquitously copies several consecutive characters from the sample
+between random choices, whereas a Markov chain would choose randomly for
+each word or character. This makes for more plausible sounding results,
+and runs faster.
+
+@cindex outragedy
+@cindex buggestion
+@cindex properbose
+ It is a mustatement that too much use of Dissociated Press can be a
+developediment to your real work. Sometimes to the point of outragedy.
+And keep dissociwords out of your documentation, if you want it to be well
+userenced and properbose. Have fun. Your buggestions are welcome.
+
+@node Amusements, Emulation, Dissociated Press, Top
+@section Other Amusements
+@cindex boredom
+@findex hanoi
+@findex yow
+
+ If you are a little bit bored, you can try @kbd{M-x hanoi}. If you are
+considerably bored, give it a numeric argument. If you are very very
+bored, try an argument of 9. Sit back and watch.
+
+ When you are frustrated, try the famous Eliza program. Just do
+@kbd{M-x doctor}. End each input by typing @kbd{RET} twice.
+
+ When you are feeling strange, type @kbd{M-x yow}.
+
+@node Emulation, Customization, Amusements, Top
+@section Emulation
+@cindex other editors
+@cindex EDT
+@cindex vi
+
+ GNU Emacs can be programmed to emulate (more or less) most other
+editors. Standard facilities can emulate these:
+
+@table @asis
+@item EDT (DEC VMS editor)
+@findex edt-emulation-on
+@findex edt-emulation-off
+Turn on EDT emulation with @kbd{M-x edt-emulation-on}. @kbd{M-x
+edt-emulation-off} restores normal Emacs command bindings.
+
+Most of the EDT emulation commands are keypad keys, and most standard
+Emacs key bindings are still available. The EDT emulation rebindings
+are done in the global keymap, so there is no problem switching
+buffers or major modes while in EDT emulation.
+
+@item Gosling Emacs
+@findex set-gosmacs-bindings
+@findex set-gnu-bindings
+Turn on emulation of Gosling Emacs (aka Unipress Emacs) with @kbd{M-x
+set-gosmacs-bindings}. This redefines many keys, mostly on the
+@kbd{C-x} and @kbd{ESC} prefixes, to work as they do in Gosmacs.
+@kbd{M-x set-gnu-bindings} returns to normal GNU Emacs by rebinding
+the same keys to the definitions they had at the time @kbd{M-x
+set-gosmacs-bindings} was done.
+
+It is also possible to run Mocklisp code written for Gosling Emacs.
+@xref{Mocklisp}.
+
+@item vi (Berkeley Unix editor)
+@findex vi-mode
+@cindex VI mode
+Turn on vi emulation with @kbd{M-x vi-mode}. This is a major mode
+that replaces the previously established major mode. All of the
+vi commands that, in real vi, enter ``input'' mode are programmed
+in the Emacs emulator to return to the previous major mode. Thus,
+ordinary Emacs serves as vi's ``input'' mode.
+
+Because vi emulation works through major modes, it does not work
+to switch buffers during emulation. Return to normal Emacs first.
+
+If you plan to use vi emulation much, you probably want to bind a key
+to the @code{vi-mode} command.
+
+@item vi (alternate emulator)
+@findex vip-mode
+Another vi emulator said to resemble real vi more thoroughly is
+invoked by @kbd{M-x vip-mode}. ``Input'' mode in this emulator is
+changed from ordinary Emacs so you can use @key{ESC} to go back to
+emulated vi command mode. To get from emulated vi command mode back
+to ordinary Emacs, type @kbd{C-z}.
+
+This emulation does not work through major modes, and it is possible
+to switch buffers in various ways within the emulator. It is not
+so necessary to assign a key to the command @code{vip-mode} as
+it is with @code{vi-mode} because terminating insert mode does
+not use it.
+
+For full information, see the long comment at the beginning of the
+source file, which is @file{lisp/vip.el} in the Emacs distribution.
+@end table
+
+I am interested in hearing which vi emulator users prefer, as well as in
+receiving more complete user documentation for either or both emulators.
+Warning: loading both at once may cause name conficts; no one has checked.
+
+@node Customization, Quitting, Emulation, Top
+@chapter Customization
+@cindex customization
+
+ This chapter talks about various topics relevant to adapting the
+behavior of Emacs in minor ways.
+
+ All kinds of customization affect only the particular Emacs job that you
+do them in. They are completely lost when you kill the Emacs job, and have
+no effect on other Emacs jobs you may run at the same time or later. The
+only way an Emacs job can affect anything outside of it is by writing a
+file; in particular, the only way to make a customization `permanent' is to
+put something in your @file{.emacs} file or other appropriate file to do the
+customization in each session. @xref{Init File}.
+
+@menu
+* Minor Modes:: Each minor mode is one feature you can turn on
+ independently of any others.
+* Variables:: Many Emacs commands examine Emacs variables
+ to decide what to do; by setting variables,
+ you can control their functioning.
+* Keyboard Macros:: A keyboard macro records a sequence of keystrokes
+ to be replayed with a single command.
+* Key Bindings:: The keymaps say what command each key runs.
+ By changing them, you can "redefine keys".
+* Syntax:: The syntax table controls how words and expressions
+ are parsed.
+* Init File:: How to write common customizations in the @file{.emacs} file.
+@end menu
+
+@node Minor Modes, Variables, Customization, Customization
+@section Minor Modes
+@cindex minor modes
+
+@cindex mode line
+ Minor modes are options which you can use or not. For example, Auto Fill
+mode is a minor mode in which @key{SPC} breaks lines between words as you
+type. All the minor modes are independent of each other and of the
+selected major mode. Most minor modes say in the mode line when they are
+on; for example, @samp{Fill} in the mode line means that Auto Fill mode is
+on.
+
+ Append @code{-mode} to the name of a minor mode to get the name of a
+command function that turns the mode on or off. Thus, the command to
+enable or disable Auto Fill mode is called @kbd{M-x auto-fill-mode}. These
+commands are usually invoked with @kbd{M-x}, but you can bind keys to them
+if you wish. With no argument, the function turns the mode on if it was
+off and off if it was on. This is known as @dfn{toggling}. A positive
+argument always turns the mode on, and an explicit zero argument or a
+negative argument always turns it off.
+
+ Auto Fill mode allows you to enter filled text without breaking lines
+explicitly. Emacs inserts newlines as necessary to prevent lines from
+becoming too long. @xref{Filling}.
+
+@cindex Overwrite mode
+@findex overwrite-mode
+ Overwrite mode causes ordinary printing characters to replace existing
+text instead of shoving it over. For example, if the point is in front of
+the @samp{B} in @samp{FOOBAR}, then in Overwrite mode typing a @kbd{G}
+changes it to @samp{FOOGAR}, instead of making it @samp{FOOGBAR} as
+usual.@refill
+
+ Abbrev mode allows you to define abbreviations that automatically expand
+as you type them. For example, @samp{amd} might expand to @samp{abbrev
+mode}. @xref{Abbrevs}, for full information.
+
+@node Variables, Keyboard Macros, Minor Modes, Customization
+@section Variables
+@cindex variables
+@cindex option
+
+ A @dfn{variable} is a Lisp symbol which has a value. The symbol's name
+is also called the name of the variable. Variable names can contain any
+characters, but conventionally they are chosen to be words separated by
+hyphens. A variable can have a documentation string which describes what
+kind of value it should have and how the value will be used.
+
+ Lisp allows any variable to have any kind of value, but most variables
+that Emacs uses require a value of a certain type. Often the value should
+always be a string, or should always be a number. Sometimes we say that a
+certain feature is turned on if a variable is ``non-@code{nil},'' meaning
+that if the variable's value is @code{nil}, the feature is off, but the
+feature is on for @i{any} other value. The conventional value to use to
+turn on the feature---since you have to pick one particular value when you
+set the variable---is @code{t}.
+
+ Emacs uses many Lisp variables for internal recordkeeping, as any Lisp
+program must, but the most interesting variables for you are the ones that
+exist for the sake of customization. Emacs does not (usually) change the
+values of these variables; instead, you set the values, and thereby alter
+and control the behavior of certain Emacs commands. These variables are
+called @dfn{options}. Most options are documented in this manual, and
+appear in the Variable Index (@pxref{Variable Index}).
+
+@cindex right margin position
+@cindex margin position
+ One example of a variable which is an option is @code{fill-column}, which
+specifies the position of the right margin (as a number of characters from
+the left margin) to be used by the fill commands (@pxref{Filling}).
+
+@menu
+* Examining:: Examining or setting one variable's value.
+* Edit Options:: Examining or editing list of all variables' values.
+* Locals:: Per-buffer values of variables.
+* File Variables:: How files can specify variable values.
+@end menu
+
+@node Examining, Edit Options, Variables, Variables
+@subsection Examining and Setting Variables
+@cindex setting variables
+
+@table @kbd
+@item C-h v
+@itemx M-x describe-variable
+Print the value and documentation of a variable.
+@item M-x set-variable
+Change the value of a variable.
+@end table
+
+@kindex C-h v
+@findex describe-variable
+@c !!! following written verbosely to avoid overfull hbox
+ To examine the value of a single variable, type @kbd{C-h v}
+(@code{describe-variable}), which reads a variable name using the
+minibuffer, with completion. It prints both the value and the
+documentation of the variable.
+
+@example
+C-h v fill-column @key{RET}
+@end example
+@noindent
+prints something like
+@smallexample
+@group
+fill-column's value is 72
+
+Documentation:
+*Column beyond which automatic line-wrapping should happen.
+Automatically becomes local when set in any fashion.
+@end group
+@end smallexample
+
+@cindex option
+@noindent
+The star at the beginning of the documentation indicates that this variable
+is an option. @kbd{C-h v} is not restricted to options; it allows any
+variable name.
+
+@findex set-variable
+ If you know which option you want to set, you can set it using @kbd{M-x
+set-variable}. This reads the variable name with the minibuffer (with
+completion), and then reads a Lisp expression for the new value using the
+minibuffer a second time. For example,
+
+@example
+M-x set-variable @key{RET} fill-column @key{RET} 72 @key{RET}
+@end example
+
+@noindent
+sets @code{fill-column} to 72, like executing the Lisp expression
+
+@example
+(setq fill-column 72)
+@end example
+
+ Setting variables in this way, like all means of customizing Emacs
+except where explicitly stated, affects only the current Emacs session.
+
+@node Edit Options, Locals, Examining, Variables
+@subsection Editing Variable Values
+
+@table @kbd
+@item M-x list-options
+Display a buffer listing names, values and documentation of all options.
+@item M-x edit-options
+Change option values by editing a list of options.
+@end table
+
+@findex list-options
+ @kbd{M-x list-options} displays a list of all Emacs option variables, in
+an Emacs buffer named @samp{*List Options*}. Each option is shown with its
+documentation and its current value. Here is what a portion of it might
+look like:
+
+@smallexample
+@group
+;; exec-path:
+("." "/usr/local/bin" "/usr/ucb" "/bin" "/usr/bin" "/u2/emacs/etc")
+*List of directories to search programs to run in subprocesses.
+Each element is a string (directory name)
+or nil (try the default directory).
+;;
+;; fill-column:
+72
+*Column beyond which automatic line-wrapping should happen.
+Automatically becomes local when set in any fashion.
+;;
+@end group
+@end smallexample
+
+@findex edit-options
+@cindex Options mode
+ @kbd{M-x edit-options} goes one step further and immediately selects the
+@samp{*List Options*} buffer; this buffer uses the major mode Options mode,
+which provides commands that allow you to point at an option and change its
+value:
+
+@table @kbd
+@item s
+Set the variable point is in or near to a new value read using the
+minibuffer.
+@item x
+Toggle the variable point is in or near: if the value was @code{nil},
+it becomes @code{t}; otherwise it becomes @code{nil}.
+@item 1
+Set the variable point is in or near to @code{t}.
+@item 0
+Set the variable point is in or near to @code{nil}.
+@item n
+@itemx p
+Move to the next or previous variable.
+@end table
+
+ Changes take effect immediately.
+
+@node Locals, File Variables, Edit Options, Variables
+@subsection Local Variables
+
+@table @kbd
+@item M-x make-local-variable
+Make a variable have a local value in the current buffer.
+@item M-x kill-local-variable
+Make a variable use its global value in the current buffer.
+@item M-x make-variable-buffer-local
+Mark a variable so that setting it will make it local to the
+buffer that is current at that time.
+@end table
+
+@cindex local variables
+ Any variable can be made @dfn{local} to a specific Emacs buffer. This
+means that its value in that buffer is independent of its value in other
+buffers. A few variables are always local in every buffer. Every other
+Emacs variable has a @dfn{global} value which is in effect in all buffers
+that have not made the variable local.
+
+ Major modes always make the variables they set local to the buffer.
+This is why changing major modes in one buffer has no effect on other
+buffers.
+
+@findex make-local-variable
+ @kbd{M-x make-local-variable} reads the name of a variable and makes it
+local to the current buffer. Further changes in this buffer will not
+affect others, and further changes in the global value will not affect this
+buffer.
+
+@findex make-variable-buffer-local
+@cindex per-buffer variables
+ @kbd{M-x make-variable-buffer-local} reads the name of a variable and
+changes the future behavior of the variable so that it will become local
+automatically when it is set. More precisely, once a variable has been
+marked in this way, the usual ways of setting the variable will
+automatically do @code{make-local-variable} first. We call such variables
+@dfn{per-buffer} variables.
+
+@c !!! following paragraph rewritten to avoid overfull hbox
+ Some important variables have been marked per-buffer already. These include
+@code{abbrev-mode}, @code{auto-fill-hook}, @code{case-fold-search},
+@code{ctl-arrow}, @code{comment-column}, @code{fill-column},
+@code{fill-prefix}, @code{indent-tabs-mode}, @code{left-margin},
+@code{mode-line-format}, @code{overwrite-mode},
+@code{selective-display},
+@code{tab-width},
+@code{selective-display-ellipses},
+and @code{truncate-lines}. Some other variables are
+always local in every buffer, but they are used for internal
+purposes.@refill
+
+@findex kill-local-variable
+ @kbd{M-x kill-local-variable} reads the name of a variable and makes it
+cease to be local to the current buffer. The global value of the variable
+henceforth is in effect in this buffer. Setting the major mode kills all
+the local variables of the buffer.
+
+@findex setq-default
+ To set the global value of a variable, regardless of whether the
+variable has a local value in the current buffer, you can use the
+Lisp function @w{@code{setq-default}}. It works like @code{setq}.
+If there is a local value in the current buffer, the local value is
+not affected by @code{setq-default}; thus, the new global value may
+not be visible until you switch to another buffer. For example,
+
+@example
+(setq-default fill-column 72)
+@end example
+
+@noindent
+@code{setq-default} is the only way to set the global value of a variable
+that has been marked with @code{make-variable-buffer-local}.
+
+@findex default-value
+ Programs can look at a variable's default value with @code{default-value}.
+This function takes a symbol as argument and returns its default value.
+The argument is evaluated; usually you must quote it explicitly. For
+example,
+
+@example
+(default-value 'fill-column)
+@end example
+
+@node File Variables,, Locals, Variables
+@subsection Local Variables in Files
+@cindex local variables in files
+
+ A file can contain a @dfn{local variables list}, which specifies the
+values to use for certain Emacs variables when that file is edited.
+Visiting the file checks for a local variables list and makes each variable
+in the list local to the buffer in which the file is visited, with the
+value specified in the file.
+
+ A local variables list goes near the end of the file, in the last page.
+(It is often best to put it on a page by itself.) The local variables list
+starts with a line containing the string @samp{Local Variables:}, and ends
+with a line containing the string @samp{End:}. In between come the
+variable names and values, one set per line, as @samp{@var{variable}:@:
+@var{value}}. The @var{value}s are not evaluated; they are used literally.
+
+ The line which starts the local variables list does not have to say just
+@samp{Local Variables:}. If there is other text before @samp{Local
+Variables:}, that text is called the @dfn{prefix}, and if there is other
+text after, that is called the @dfn{suffix}. If these are present, each
+entry in the local variables list should have the prefix before it and the
+suffix after it. This includes the @samp{End:} line. The prefix and
+suffix are included to disguise the local variables list as a comment so
+that the compiler or text formatter will not be perplexed by it. If you do
+not need to disguise the local variables list as a comment in this way, do
+not bother with a prefix or a suffix.@refill
+
+ Two ``variable'' names are special in a local variables list: a value for
+the variable @code{mode} really sets the major mode, and a value for the
+variable @code{eval} is simply evaluated as an expression and the value is
+ignored. These are not real variables; setting such variables in any other
+context has no such effect. If @code{mode} is used in a local variables
+list, it should be the first entry in the list.
+
+ Here is an example of a local variables list:
+
+@example
+;;; Local Variables: ***
+;;; mode:lisp ***
+;;; comment-column:0 ***
+;;; comment-start: ";;; " ***
+;;; comment-end:"***" ***
+;;; End: ***
+@end example
+
+ Note that the prefix is @samp{;;; } and the suffix is @samp{ ***}. Note also
+that comments in the file begin with and end with the same strings.
+Presumably the file contains code in a language which is like Lisp
+(like it enough for Lisp mode to be useful) but in which comments start
+and end in that way. The prefix and suffix are used in the local
+variables list to make the list appear as comments when the file is read
+by the compiler or interpreter for that language.
+
+ The start of the local variables list must be no more than 3000
+characters from the end of the file, and must be in the last page if the
+file is divided into pages. Otherwise, Emacs will not notice it is there.
+The purpose of this is so that a stray @samp{Local Variables:}@: not in the
+last page does not confuse Emacs, and so that visiting a long file that is
+all one page and has no local variables list need not take the time to
+search the whole file.
+
+@cindex local variables and Auto Fill
+ You may be tempted to try to turn on Auto Fill mode with a local variable
+list. That is a mistake. The choice of Auto Fill mode or not is a matter
+of individual taste, not a matter of the contents of particular files.
+If you want to use Auto Fill, set up major mode hooks with your @file{.emacs}
+file to turn it on (when appropriate) for you alone (@pxref{Init File}).
+Don't try to use a local variable list that would impose your taste on
+everyone.
+
+@vindex inhibit-local-variables
+ If you are concerned that you might visit a file containing a Trojan-horse
+local variable specification, you can prevent local variables processing
+by setting the variable @code{inhibit-local-variables} to a non-@code{nil}
+value. Emacs will display the local variables specification and then ask
+you whether to process it.
+
+@node Keyboard Macros, Key Bindings, Variables, Customization
+@section Keyboard Macros
+
+@cindex keyboard macros
+ A @dfn{keyboard macro} is a command defined by the user to abbreviate a
+sequence of keys. For example, if you discover that you are about to type
+@kbd{C-n C-d} forty times, you can speed your work by defining a keyboard
+macro to do @kbd{C-n C-d} and calling it with a repeat count of forty.
+
+@c widecommands
+@table @kbd
+@item C-x (
+Start defining a keyboard macro (@code{start-kbd-macro}).
+@item C-x )
+End the definition of a keyboard macro (@code{end-kbd-macro}).
+@item C-x e
+Execute the most recent keyboard macro (@code{call-last-kbd-macro}).
+@item C-u C-x (
+Re-execute last keyboard macro, then add more keys to its @w{definition}.
+@item C-x q
+When this point is reached during macro execution, ask for confirmation
+(@code{kbd-macro-query}).
+@item M-x name-last-kbd-macro
+Give a command name (for the duration of the session) to the most
+recently defined keyboard macro.
+@item M-x insert-kbd-macro
+Insert in the buffer a keyboard macro's definition, as Lisp code.
+@end table
+
+ Keyboard macros differ from ordinary Emacs commands in that they are
+written in the Emacs command language rather than in Lisp. This makes it
+easier for the novice to write them, and makes them more convenient as
+temporary hacks. However, the Emacs command language is not powerful
+enough as a programming language to be useful for writing anything
+intelligent or general. For such things, Lisp must be used.
+
+ You define a keyboard macro while executing the commands which are the
+definition. Put differently, as you are defining a keyboard macro, the
+definition is being executed for the first time. This way, you can see
+what the effects of your commands are, so that you don't have to figure
+them out in your head. When you are finished, the keyboard macro is
+defined and also has been, in effect, executed once. You can then do the
+whole thing over again by invoking the macro.
+
+@menu
+* Basic Kbd Macro:: Defining and running keyboard macros.
+* Save Kbd Macro:: Giving keyboard macros names; saving them in files.
+* Kbd Macro Query:: Keyboard macros that do different things each use.
+@end menu
+
+@node Basic Kbd Macro, Save Kbd Macro, Keyboard Macros, Keyboard Macros
+@subsection Basic Use
+
+@kindex C-x (
+@kindex C-x )
+@kindex C-x e
+@findex start-kbd-macro
+@findex end-kbd-macro
+@findex call-last-kbd-macro
+ To start defining a keyboard macro, type the @kbd{C-x (} command
+(@code{start-kbd-macro}). From then on, your keys continue to be
+executed, but also become part of the definition of the macro. @samp{Def}
+appears in the mode line to remind you of what is going on. When you are
+finished, the @kbd{C-x )} command (@code{end-kbd-macro}) terminates the
+definition (without becoming part of it!).
+
+@example
+@group
+@exdent For example,
+
+C-x ( M-F foo C-x )
+@end group
+@end example
+
+@noindent
+defines a macro to move forward a word and then insert @samp{foo}.
+
+ The macro thus defined can be invoked again with the @kbd{C-x e} command
+(@code{call-last-kbd-macro}), which may be given a repeat count as a
+numeric argument to execute the macro many times. @kbd{C-x )} can also be
+given a repeat count as an argument, in which case it repeats the macro
+that many times right after defining it, but defining the macro counts as
+the first repetition (since it is executed as you define it). So, giving
+@kbd{C-x )} an argument of 4 executes the macro immediately 3 additional
+times. An argument of zero to @kbd{C-x e} or @kbd{C-x )} means repeat the
+macro indefinitely (until it gets an error or you type @kbd{C-g}).
+
+ If you wish to repeat an operation at regularly spaced places in the
+text, define a macro and include as part of the macro the commands to move
+to the next place you want to use it. For example, if you want to change
+each line, you should position point at the start of a line, and define a
+macro to change that line and leave point at the start of the next line.
+Then repeating the macro will operate on successive lines.
+
+ After you have terminated the definition of a keyboard macro, you can add
+to the end of its definition by typing @kbd{C-u C-x (}. This is equivalent
+to plain @kbd{C-x (} followed by retyping the whole definition so far. As
+a consequence it re-executes the macro as previously defined.
+
+ One limitation on the use of keyboard macros is that if you exit a
+recursive edit within a macro that was not entered within the macro,
+then the execution of the macro stops at that point. In Emacs 18, View
+mode uses a recursive edit, so exiting View mode is an occasion for such
+a problem.
+
+@node Save Kbd Macro, Kbd Macro Query, Basic Kbd Macro, Keyboard Macros
+@subsection Naming and Saving Keyboard Macros
+
+@findex name-last-kbd-macro
+ If you wish to save a keyboard macro for longer than until you define the
+next one, you must give it a name using @kbd{M-x name-last-kbd-macro}.
+This reads a name as an argument using the minibuffer and defines that name
+to execute the macro. The macro name is a Lisp symbol, and defining it in
+this way makes it a valid command name for calling with @kbd{M-x} or for
+binding a key to with @code{global-set-key} (@pxref{Keymaps}). If you
+specify a name that has a prior definition other than another keyboard
+macro, an error message is printed and nothing is changed.
+
+@findex insert-kbd-macro
+ Once a macro has a command name, you can save its definition in a file.
+Then it can be used in another editing session. First visit the file
+you want to save the definition in. Then use the command
+
+@example
+M-x insert-kbd-macro @key{RET} @var{macroname} @key{RET}
+@end example
+
+@noindent
+This inserts some Lisp code that, when executed later, will define the same
+macro with the same definition it has now. You need not understand Lisp
+code to do this, because @code{insert-kbd-macro} writes the Lisp code for you.
+Then save the file. The file can be loaded with @code{load-file}
+(@pxref{Lisp Libraries}). If the file you save in is your init file
+@file{~/.emacs} (@pxref{Init File}) then the macro will be defined each
+time you run Emacs.
+
+ If you give @code{insert-kbd-macro} a prefix argument, it makes
+additional Lisp code to record the keys (if any) that you have bound to the
+keyboard macro, so that the macro will be reassigned the same keys when you
+load the file.
+
+@node Kbd Macro Query,, Save Kbd Macro, Keyboard Macros
+@subsection Executing Macros with Variations
+
+@kindex C-x q
+@findex kbd-macro-query
+ Using @kbd{C-x q} (@code{kbd-macro-query}), you can get an effect similar
+to that of @code{query-replace}, where the macro asks you each time around
+whether to make a change. When you are defining the macro, type @kbd{C-x
+q} at the point where you want the query to occur. During macro
+definition, the @kbd{C-x q} does nothing, but when the macro is invoked the
+@kbd{C-x q} reads a character from the terminal to decide whether to
+continue.
+
+ The special answers are @key{SPC}, @key{DEL}, @kbd{C-d}, @kbd{C-l} and
+@kbd{C-r}. Any other character terminates execution of the keyboard macro
+and is then read as a command. @key{SPC} means to continue. @key{DEL}
+means to skip the remainder of this repetition of the macro, starting again
+from the beginning in the next repetition. @kbd{C-d} means to skip the
+remainder of this repetition and cancel further repetition. @kbd{C-l}
+redraws the screen and asks you again for a character to say what to do.
+@kbd{C-r} enters a recursive editing level, in which you can perform
+editing which is not part of the macro. When you exit the recursive edit
+using @kbd{C-M-c}, you are asked again how to continue with the keyboard
+macro. If you type a @key{SPC} at this time, the rest of the macro
+definition is executed. It is up to you to leave point and the text in a
+state such that the rest of the macro will do what you want.@refill
+
+ @kbd{C-u C-x q}, which is @kbd{C-x q} with a numeric argument, performs a
+different function. It enters a recursive edit reading input from the
+keyboard, both when you type it during the definition of the macro, and
+when it is executed from the macro. During definition, the editing you do
+inside the recursive edit does not become part of the macro. During macro
+execution, the recursive edit gives you a chance to do some particularized
+editing. @xref{Recursive Edit}.
+
+@node Key Bindings, Syntax, Keyboard Macros, Customization
+@section Customizing Key Bindings
+
+ This section deals with the @dfn{keymaps} which define the bindings
+between keys and functions, and shows how you can customize these bindings.
+@cindex command
+@cindex function
+@cindex command name
+
+ A command is a Lisp function whose definition provides for interactive
+use. Like every Lisp function, a command has a function name, a Lisp
+symbol whose name usually consists of lower case letters and hyphens.
+
+@menu
+* Keymaps:: Definition of the keymap data structure.
+ Names of Emacs's standard keymaps.
+* Rebinding:: How to redefine one key's meaning conveniently.
+* Disabling:: Disabling a command means confirmation is required
+ before it can be executed. This is done to protect
+ beginners from surprises.
+@end menu
+
+@node Keymaps, Rebinding, Key Bindings, Key Bindings
+@subsection Keymaps
+@cindex keymap
+
+@cindex global keymap
+@vindex global-map
+ The bindings between characters and command functions are recorded in
+data structures called @dfn{keymaps}. Emacs has many of these. One, the
+@dfn{global} keymap, defines the meanings of the single-character keys that
+are defined regardless of major mode. It is the value of the variable
+@code{global-map}.
+
+@cindex local keymap
+@vindex c-mode-map
+@vindex lisp-mode-map
+ Each major mode has another keymap, its @dfn{local keymap}, which
+contains overriding definitions for the single-character keys that are to
+be redefined in that mode. Each buffer records which local keymap is
+installed for it at any time, and the current buffer's local keymap is the
+only one that directly affects command execution. The local keymaps for
+Lisp mode, C mode, and many other major modes always exist even when not in
+use. They are the values of the variables @code{lisp-mode-map},
+@code{c-mode-map}, and so on. For major modes less often used, the local
+keymap is sometimes constructed only when the mode is used for the first
+time in a session. This is to save space.
+
+@cindex minibuffer
+@vindex minibuffer-local-map
+@vindex minibuffer-local-ns-map
+@vindex minibuffer-local-completion-map
+@vindex minibuffer-local-must-match-map
+@vindex repeat-complex-command-map
+ There are local keymaps for the minibuffer too; they contain various
+completion and exit commands.
+
+@itemize @bullet
+@item
+@code{minibuffer-local-map} is used for ordinary input (no completion).
+@item
+@code{minibuffer-local-ns-map} is similar, except that @key{SPC} exits
+just like @key{RET}. This is used mainly for Mocklisp compatibility.
+@item
+@code{minibuffer-local-completion-map} is for permissive completion.
+@item
+@code{minibuffer-local-must-match-map} is for strict completion and
+for cautious completion.
+@item
+@code{repeat-complex-command-map} is for use in @kbd{C-x @key{ESC}}.
+@end itemize
+
+@vindex ctl-x-map
+@vindex help-map
+@vindex esc-map
+ Finally, each prefix key has a keymap which defines the key sequences
+that start with it. For example, @code{ctl-x-map} is the keymap used for
+characters following a @kbd{C-x}.
+
+@itemize @bullet
+@item
+@code{ctl-x-map} is the variable name for the map used for characters that
+follow @kbd{C-x}.
+@item
+@code{help-map} is used for characters that follow @kbd{C-h}.
+@item
+@code{esc-map} is for characters that follow @key{ESC}. Thus, all Meta
+characters are actually defined by this map.
+@item
+@code{ctl-x-4-map} is for characters that follow @kbd{C-x 4}.
+@item
+@code{mode-specific-map} is for characters that follow @kbd{C-c}.
+@end itemize
+
+ The definition of a prefix key is just the keymap to use for looking up
+the following character. Actually, the definition is sometimes a Lisp
+symbol whose function definition is the following character keymap. The
+effect is the same, but it provides a command name for the prefix key that
+can be used as a description of what the prefix key is for. Thus, the
+binding of @kbd{C-x} is the symbol @code{Ctl-X-Prefix}, whose function
+definition is the keymap for @kbd{C-x} commands, the value of
+@code{ctl-x-map}.@refill
+
+ Prefix key definitions of this sort can appear in either the global map
+or a local map. The definitions of @kbd{C-c}, @kbd{C-x}, @kbd{C-h} and @key{ESC}
+as prefix keys appear in the global map, so these prefix keys are always
+available. Major modes can locally redefine a key as a prefix by putting
+a prefix key definition for it in the local map.@refill
+
+ A mode can also put a prefix definition of a global prefix character such
+as @kbd{C-x} into its local map. This is how major modes override the
+definitions of certain keys that start with @kbd{C-x}. This case is
+special, because the local definition does not entirely replace the global
+one. When both the global and local definitions of a key are other
+keymaps, the next character is looked up in both keymaps, with the local
+definition overriding the global one as usual. So, the character after the
+@kbd{C-x} is looked up in both the major mode's own keymap for redefined
+@kbd{C-x} commands and in @code{ctl-x-map}. If the major mode's own keymap
+for @kbd{C-x} commands contains @code{nil}, the definition from the global
+keymap for @kbd{C-x} commands is used.@refill
+
+@cindex sparse keymap
+ A keymap is actually a Lisp object. The simplest form of keymap is a
+Lisp vector of length 128. The binding for a character in such a keymap is
+found by indexing into the vector with the character as an index. A keymap
+can also be a Lisp list whose @sc{car} is the symbol @code{keymap} and whose
+remaining elements are pairs of the form @code{(@var{char} .@: @var{binding})}.
+Such lists are called @dfn{sparse keymaps} because they are used when most
+of the characters' entries will be @code{nil}. Sparse keymaps are used
+mainly for prefix characters.
+
+ Keymaps are only of length 128, so what about Meta characters, whose
+codes are from 128 to 255? A key that contains a Meta character actually
+represents it as a sequence of two characters, the first of which is
+@key{ESC}. So the key @kbd{M-a} is really represented as @kbd{@key{ESC}
+a}, and its binding is found at the slot for @samp{a} in
+@code{esc-map}.@refill
+
+@node Rebinding, Disabling, Keymaps, Key Bindings
+@subsection Changing Key Bindings Interactively
+@cindex key rebinding, this session
+@cindex rebinding keys, this session
+@cindex rebinding keys, this session
+
+ The way to redefine an Emacs key is to change its entry in a keymap.
+You can change the global keymap, in which case the change is effective in
+all major modes (except those that have their own overriding local
+definitions for the same key). Or you can change the current buffer's
+local map, which affects all buffers using the same major mode.
+@findex global-set-key
+@findex local-set-key
+
+@table @kbd
+@item M-x global-set-key @key{RET} @var{key} @var{cmd} @key{RET}
+Defines @var{key} globally to run @var{cmd}.
+@item M-x local-set-key @key{RET} @var{key} @var{cmd} @key{RET}
+Defines @var{key} locally (in the major mode now in effect) to run
+@var{cmd}.
+@end table
+
+ For example,
+
+@example
+M-x global-set-key @key{RET} C-f next-line @key{RET}
+@end example
+
+@noindent
+would redefine @kbd{C-f} to move down a line. The fact that @var{cmd} is
+read second makes it serve as a kind of confirmation for @var{key}.
+
+ These functions offer no way to specify a particular prefix keymap as the
+one to redefine in, but that is not necessary, as you can include prefixes
+in @var{key}. @var{key} is read by reading characters one by one until
+they amount to a complete key (that is, not a prefix key). Thus, if you
+type @kbd{C-f} for @var{key}, that's the end; the minibuffer is entered
+immediately to read @var{cmd}. But if you type @kbd{C-x}, another
+character is read; if that is @kbd{4}, another character is read, and so
+on. For example,@refill
+
+@example
+M-x global-set-key @key{RET} C-x 4 $ spell-other-window @key{RET}
+@end example
+
+@noindent
+would redefine @kbd{C-x 4 $} to run the (fictitious) command
+@code{spell-other-window}.
+
+ All the key sequences which consist of @kbd{C-c} followed by a letter
+are supposed to be reserved for user customization. That is, Emacs Lisp
+libraries should not define any of these commands.
+
+@findex define-key
+@findex substitute-key-definition
+ The most general way to modify a keymap is the function @code{define-key},
+used in Lisp code (such as your @file{.emacs} file). @code{define-key}
+takes three arguments: the keymap, the key to modify in it, and the new
+definition. @xref{Init File}, for an example. @code{substitute-key-definition}
+is used similarly; it takes three arguments, an old definition, a new
+definition and a keymap, and redefines in that keymap all keys that were
+previously defined with the old definition to have the new definition
+instead.
+
+@node Disabling,, Rebinding, Key Bindings
+@subsection Disabling Commands
+@cindex disabled command
+
+ Disabling a command marks the command as requiring confirmation before it
+can be executed. The purpose of disabling a command is to prevent
+beginning users from executing it by accident and being confused.
+
+ The direct mechanism for disabling a command is to have a non-@code{nil}
+@code{disabled} property on the Lisp symbol for the command. These
+properties are normally set up by the user's @file{.emacs} file with
+Lisp expressions such as
+
+@example
+(put 'delete-region 'disabled t)
+@end example
+
+ If the value of the @code{disabled} property is a string, that string
+is included in the message printed when the command is used:
+
+@example
+(put 'delete-region 'disabled
+ "Text deleted this way cannot be yanked back!\n")
+@end example
+
+@findex disable-command
+@findex enable-command
+ You can make a command disabled either by editing the @file{.emacs} file
+directly or with the command @kbd{M-x disable-command}, which edits the
+@file{.emacs} file for you. @xref{Init File}.
+
+ Attempting to invoke a disabled command interactively in Emacs causes the
+display of a window containing the command's name, its documentation, and
+some instructions on what to do immediately; then Emacs asks for input
+saying whether to execute the command as requested, enable it and execute,
+or cancel it. If you decide to enable the command, you are asked whether to
+do this permanently or just for the current session. Enabling permanently
+works by automatically editing your @file{.emacs} file. You can use
+@kbd{M-x enable-command} at any time to enable any command permanently.
+
+ Whether a command is disabled is independent of what key is used to
+invoke it; it also applies if the command is invoked using @kbd{M-x}.
+Disabling a command has no effect on calling it as a function from Lisp
+programs.
+
+@node Syntax, Init File, Key Bindings, Customization
+@section The Syntax Table
+@cindex syntax table
+
+ All the Emacs commands which parse words or balance parentheses are
+controlled by the @dfn{syntax table}. The syntax table says which
+characters are opening delimiters, which are parts of words, which are
+string quotes, and so on. Actually, each major mode has its own syntax
+table (though sometimes related major modes use the same one) which it
+installs in each buffer that uses that major mode. The syntax table
+installed in the current buffer is the one that all commands use, so we
+call it ``the'' syntax table. A syntax table is a Lisp object, a vector of
+length 256 whose elements are numbers.
+
+@menu
+* Entry: Syntax Entry. What the syntax table records for each character.
+* Change: Syntax Change. How to change the information.
+@end menu
+
+@node Syntax Entry, Syntax Change, Syntax, Syntax
+@subsection Information about Each Character
+
+ The syntax table entry for a character is a number that encodes six
+pieces of information:
+
+@itemize @bullet
+@item
+The syntactic class of the character, represented as a small integer.
+@item
+The matching delimiter, for delimiter characters only.
+The matching delimiter of @samp{(} is @samp{)}, and vice versa.
+@item
+A flag saying whether the character is the first character of a
+two-character comment starting sequence.
+@item
+A flag saying whether the character is the second character of a
+two-character comment starting sequence.
+@item
+A flag saying whether the character is the first character of a
+two-character comment ending sequence.
+@item
+A flag saying whether the character is the second character of a
+two-character comment ending sequence.
+@end itemize
+
+ The syntactic classes are stored internally as small integers, but are
+usually described to or by the user with characters. For example, @samp{(}
+is used to specify the syntactic class of opening delimiters. Here is a
+table of syntactic classes, with the characters that specify them.
+
+@table @samp
+@item @w{ }
+The class of whitespace characters.
+@item -
+Another name for the class of whitespace characters.
+@item w
+The class of word-constituent characters.
+@item _
+The class of characters that are part of symbol names but not words.
+This class is represented by @samp{_} because the character @samp{_}
+has this class in both C and Lisp.
+@item .
+The class of punctuation characters that do not fit into any other
+special class.
+@item (
+The class of opening delimiters.
+@item )
+The class of closing delimiters.
+@item '
+The class of expression-adhering characters. These characters are
+part of a symbol if found within or adjacent to one, and are part
+of a following expression if immediately preceding one, but are like
+whitespace if surrounded by whitespace.
+@item "
+The class of string-quote characters. They match each other in pairs,
+and the characters within the pair all lose their syntactic
+significance except for the @samp{\} and @samp{/} classes of escape
+characters, which can be used to include a string-quote inside the
+string.
+@item $
+The class of self-matching delimiters. This is intended for @TeX{}'s
+@samp{$}, which is used both to enter and leave math mode. Thus,
+a pair of matching @samp{$} characters surround each piece of math mode
+@TeX{} input. A pair of adjacent @samp{$} characters act like a single
+one for purposes of matching.
+
+@item /
+The class of escape characters that always just deny the following
+character its special syntactic significance. The character after one
+of these escapes is always treated as alphabetic.
+@item \
+The class of C-style escape characters. In practice, these are
+treated just like @samp{/}-class characters, because the extra
+possibilities for C escapes (such as being followed by digits) have no
+effect on where the containing expression ends.
+@item <
+The class of comment-starting characters. Only single-character
+comment starters (such as @samp{;} in Lisp mode) are represented this
+way.
+@item >
+The class of comment-ending characters. Newline has this syntax in
+Lisp mode.
+@end table
+
+@vindex parse-sexp-ignore-comments
+ The characters flagged as part of two-character comment delimiters can
+have other syntactic functions most of the time. For example, @samp{/} and
+@samp{*} in C code, when found separately, have nothing to do with
+comments. The comment-delimiter significance overrides when the pair of
+characters occur together in the proper order. Only the list and sexp
+commands use the syntax table to find comments; the commands specifically
+for comments have other variables that tell them where to find comments.
+And the list and sexp commands notice comments only if
+@code{parse-sexp-ignore-comments} is non-@code{nil}. This variable is set
+to @code{nil} in modes where comment-terminator sequences are liable to
+appear where there is no comment; for example, in Lisp mode where the
+comment terminator is a newline but not every newline ends a comment.
+
+@node Syntax Change,, Syntax Entry, Syntax
+@subsection Altering Syntax Information
+
+ It is possible to alter a character's syntax table entry by storing a new
+number in the appropriate element of the syntax table, but it would be hard
+to determine what number to use. Therefore, Emacs provides a command that
+allows you to specify the syntactic properties of a character in a
+convenient way.
+
+@findex modify-syntax-entry
+ @kbd{M-x modify-syntax-entry} is the command to change a character's
+syntax. It can be used interactively, and is also the means used by major
+modes to initialize their own syntax tables. Its first argument is the
+character to change. The second argument is a string that specifies the
+new syntax. When called from Lisp code, there is a third, optional
+argument, which specifies the syntax table in which to make the change. If
+not supplied, or if this command is called interactively, the third
+argument defaults to the current buffer's syntax table.
+
+@enumerate
+@item
+The first character in the string specifies the syntactic class. It
+is one of the characters in the previous table (@pxref{Syntax Entry}).
+
+@item
+The second character is the matching delimiter. For a character that
+is not an opening or closing delimiter, this should be a space, and may
+be omitted if no following characters are needed.
+
+@item
+The remaining characters are flags. The flag characters allowed are
+
+@table @samp
+@item 1
+Flag this character as the first of a two-character comment starting sequence.
+@item 2
+Flag this character as the second of a two-character comment starting sequence.
+@item 3
+Flag this character as the first of a two-character comment ending sequence.
+@item 4
+Flag this character as the second of a two-character comment ending sequence.
+@end table
+@end enumerate
+
+@kindex C-h s
+@findex describe-syntax
+ A description of the contents of the current syntax table can be
+displayed with @kbd{C-h s} (@code{describe-syntax}). The description of
+each character includes both the string you would have to give to
+@code{modify-syntax-entry} to set up that character's current syntax, and
+some English to explain that string if necessary.
+
+@node Init File,, Syntax, Customization
+@section The Init File, .emacs
+@cindex init file
+@cindex Emacs initialization file
+@cindex key rebinding, permanent
+@cindex rebinding keys, permanently
+
+ When Emacs is started, it normally loads the file @file{.emacs} in your
+home directory. This file, if it exists, should contain Lisp code. It is
+called your @dfn{init file}. The command line switches @samp{-q} and
+@samp{-u} can be used to tell Emacs whether to load an init file
+(@pxref{Entering Emacs}).
+
+ There can also be a @dfn{default init file}, which is the library named
+@file{default.el}, found via the standard search path for libraries. The
+Emacs distribution contains no such library; your site may create one for
+local customizations. If this library exists, it is loaded whenever you
+start Emacs. But your init file, if any, is loaded first; if it sets
+@code{inhibit-default-init} non-@code{nil}, then @file{default} is not
+loaded.
+
+ If you have a large amount of code in your @file{.emacs} file, you
+should move it into another file named @file{@var{something}.el},
+byte-compile it (@pxref{Lisp Libraries}), and make your @file{.emacs}
+file load the other file using @code{load}.
+
+@menu
+* Init Syntax:: Syntax of constants in Emacs Lisp.
+* Init Examples:: How to do some things with an init file.
+* Terminal Init:: Each terminal type can have an init file.
+* Debugging Init:: How to debug your @file{.emacs} file.
+@end menu
+
+@node Init Syntax, Init Examples, Init File, Init File
+@subsection Init File Syntax
+
+ The @file{.emacs} file contains one or more Lisp function call
+expressions. Each of these consists of a function name followed by
+arguments, all surrounded by parentheses. For example, @code{(setq
+fill-column 60)} represents a call to the function @code{setq} which is
+used to set the variable @code{fill-column} (@pxref{Filling}) to 60.
+
+ The second argument to @code{setq} is an expression for the new value of
+the variable. This can be a constant, a variable, or a function call
+expression. In @file{.emacs}, constants are used most of the time. They can be:
+
+@table @asis
+@item Numbers:
+Numbers are written in decimal, with an optional initial minus sign.
+
+@item Strings:
+Lisp string syntax is the same as C string syntax with a few extra
+features. Use a double-quote character to begin and end a string constant.
+
+Newlines and special characters may be present literally in strings. They
+can also be represented as backslash sequences: @samp{\n} for newline,
+@samp{\b} for backspace, @samp{\r} for carriage return, @samp{\t} for tab,
+@samp{\f} for formfeed (control-l), @samp{\e} for escape, @samp{\\} for a
+backslash, @samp{\"} for a double-quote, or @samp{\@var{ooo}} for the
+character whose octal code is @var{ooo}. Backslash and double-quote are
+the only characters for which backslash sequences are mandatory.
+
+@samp{\C-} can be used as a prefix for a control character, as in
+@w{@samp{\C-s}} for @sc{ascii} Control-S, and @samp{\M-} can be used as a prefix for
+a meta character, as in @samp{\M-a} for Meta-A or @samp{\M-\C-a} for
+Control-Meta-A.
+
+@item Characters:
+Lisp character constant syntax consists of a @samp{?} followed by
+either a character or an escape sequence starting with @samp{\}.
+Examples: @code{?x}, @code{?\n}, @code{?\"}, @code{?\)}. Note that
+strings and characters are not interchangeable in Lisp; some contexts
+require one and some contexts require the other.
+
+@item True:
+@code{t} stands for `true'.
+
+@item False:
+@code{nil} stands for `false'.
+
+@item Other Lisp objects:
+Write a single-quote (') followed by the Lisp object you want.
+@end table
+
+@node Init Examples, Terminal Init, Init Syntax, Init File
+@subsection Init File Examples
+
+ Here are some examples of doing certain commonly desired things with
+Lisp expressions:
+
+@itemize @bullet
+@item
+Make @key{TAB} in C mode just insert a tab if point is in the middle of a
+line.
+
+@example
+(setq c-tab-always-indent nil)
+@end example
+
+Here we have a variable whose value is normally @code{t} for `true'
+and the alternative is @code{nil} for `false'.
+
+@item
+Make searches case sensitive by default (in all buffers that do not
+override this).
+
+@example
+(setq-default case-fold-search nil)
+@end example
+
+This sets the default value, which is effective in all buffers that do
+not have local values for the variable. Setting @code{case-fold-search}
+with @code{setq} affects only the current buffer's local value, which
+is not what you probably want to do in an init file.
+
+@item
+Make Text mode the default mode for new buffers.
+
+@example
+(setq default-major-mode 'text-mode)
+@end example
+
+Note that @code{text-mode} is used because it is the command for entering
+the mode we want. A single-quote is written before it to make a symbol
+constant; otherwise, @code{text-mode} would be treated as a variable name.
+
+@item
+Turn on Auto Fill mode automatically in Text mode and related modes.
+
+@example
+(setq text-mode-hook
+ '(lambda () (auto-fill-mode 1)))
+@end example
+
+Here we have a variable whose value should be a Lisp function. The
+function we supply is a list starting with @code{lambda}, and a single
+quote is written in front of it to make it (for the purpose of this
+@code{setq}) a list constant rather than an expression. Lisp functions
+are not explained here, but for mode hooks it is enough to know that
+@code{(auto-fill-mode 1)} is an expression that will be executed when
+Text mode is entered, and you could replace it with any other expression
+that you like, or with several expressions in a row.
+
+@example
+(setq text-mode-hook 'turn-on-auto-fill)
+@end example
+
+This is another way to accomplish the same result.
+@code{turn-on-auto-fill} is a symbol whose function definition is
+@code{(lambda () (auto-fill-@w{mode 1}))}.
+
+@item
+Load the installed Lisp library named @file{foo} (actually a file
+@file{foo.elc} or @file{foo.el} in a standard Emacs directory).
+
+@example
+(load "foo")
+@end example
+
+When the argument to @code{load} is a relative pathname, not starting
+with @samp{/} or @samp{~}, @code{load} searches the directories in
+@code{load-path} (@pxref{Loading}).
+
+@item
+Load the compiled Lisp file @file{foo.elc} from your home directory.
+
+@example
+(load "~/foo.elc")
+@end example
+
+Here an absolute file name is used, so no searching is done.
+
+@item
+Rebind the key @kbd{C-x l} to run the function @code{make-symbolic-link}.
+
+@example
+(global-set-key "\C-xl" 'make-symbolic-link)
+@end example
+
+or
+
+@example
+(define-key global-map "\C-xl" 'make-symbolic-link)
+@end example
+
+Note once again the single-quote used to refer to the symbol
+@code{make-symbolic-link} instead of its value as a variable.
+
+@item
+Do the same thing for C mode only.
+
+@example
+(define-key c-mode-map "\C-xl" 'make-symbolic-link)
+@end example
+
+@item
+Redefine all keys which now run @code{next-line} in Fundamental mode
+so that they run @code{forward-line} instead.
+
+@example
+(substitute-key-definition 'next-line 'forward-line
+ global-map)
+@end example
+
+@item
+Make @kbd{C-x C-v} undefined.
+
+@example
+(global-unset-key "\C-x\C-v")
+@end example
+
+One reason to undefine a key is so that you can make it a prefix.
+Simply defining @kbd{C-x C-v @var{anything}} would make @kbd{C-x C-v}
+a prefix, but @kbd{C-x C-v} must be freed of any non-prefix definition
+first.
+
+@item
+Make @samp{$} have the syntax of punctuation in Text mode.
+Note the use of a character constant for @samp{$}.
+
+@example
+(modify-syntax-entry ?\$ "." text-mode-syntax-table)
+@end example
+
+@item
+Enable the use of the command @code{eval-expression} without confirmation.
+
+@example
+(put 'eval-expression 'disabled nil)
+@end example
+@end itemize
+
+@node Terminal Init, Debugging Init, Init Examples, Init File
+@subsection Terminal-specific Initialization
+
+ Each terminal type can have a Lisp library to be loaded into Emacs when
+it is run on that type of terminal. For a terminal type named
+@var{termtype}, the library is called @file{term/@var{termtype}} and it is
+found by searching the directories @code{load-path} as usual and trying the
+suffixes @samp{.elc} and @samp{.el}. Normally it appears in the
+subdirectory @file{term} of the directory where most Emacs libraries are
+kept.@refill
+
+ The usual purpose of the terminal-specific library is to define the
+escape sequences used by the terminal's function keys using the library
+@file{keypad.el}. See the file
+@file{term/vt100.el} for an example of how this is done.@refill
+
+ When the terminal type contains a hyphen, only the part of the name
+before the first hyphen is significant in choosing the library name.
+Thus, terminal types @samp{aaa-48} and @samp{aaa-30-rv} both use
+the library @file{term/aaa}. The code in the library can use
+@code{(getenv "TERM")} to find the full terminal type name.@refill
+
+@vindex term-file-prefix
+ The library's name is constructed by concatenating the value of the
+variable @code{term-file-prefix} and the terminal type. Your @file{.emacs}
+file can prevent the loading of the terminal-specific library by setting
+@code{term-file-prefix} to @code{nil}.
+
+@vindex term-setup-hook
+ The value of the variable @code{term-setup-hook}, if not @code{nil}, is
+called as a function of no arguments at the end of Emacs initialization,
+after both your @file{.emacs} file and any terminal-specific library have
+been read in. You can set the value in the @file{.emacs} file to override
+part of any of the terminal-specific libraries and to define
+initializations for terminals that do not have a library.@refill
+
+@node Debugging Init,, Terminal Init, Init File
+@subsection Debugging Your @file{.emacs} File
+
+ Ordinarily, Emacs traps errors that occur while reading @file{.emacs}.
+This is convenient, most of the time, because it means you can still get
+an Emacs in which you can edit. But it causes inconvenience because
+there is no way to enter the debugger if there is an error.
+
+ But you can run the @file{.emacs} file explicitly in an Emacs that is
+already set up, and debug errors at that time.
+
+@example
+M-x set-variable
+debug-on-error
+t
+M-x load-file
+~/.emacs
+@end example
+
+ In Emacs 19, use the @samp{-debug-init} option if you want errors in
+@file{.emacs} to enter the debugger.
+
+@iftex
+@chapter Correcting Mistakes (Yours or Emacs's)
+
+ If you type an Emacs command you did not intend, the results are often
+mysterious. This chapter tells what you can do to cancel your mistake or
+recover from a mysterious situation. Emacs bugs and system crashes are
+also considered.
+@end iftex
+
+@node Quitting, Lossage, Customization, Top
+@section Quitting and Aborting
+@cindex quitting
+
+@table @kbd
+@item C-g
+Quit. Cancel running or partially typed command.
+@item C-]
+Abort innermost recursive editing level and cancel the command which
+invoked it (@code{abort-recursive-edit}).
+@item M-x top-level
+Abort all recursive editing levels that are currently executing.
+@item C-x u
+Cancel an already-executed command, usually (@code{undo}).
+@end table
+
+ There are two ways of cancelling commands which are not finished
+executing: @dfn{quitting} with @kbd{C-g}, and @dfn{aborting} with @kbd{C-]}
+or @kbd{M-x top-level}. Quitting is cancelling a partially typed command
+or one which is already running. Aborting is getting out of a recursive
+editing level and cancelling the command that invoked the recursive edit.
+
+@cindex quitting
+@cindex C-g
+ Quitting with @kbd{C-g} is used for getting rid of a partially typed
+command, or a numeric argument that you don't want. It also stops a
+running command in the middle in a relatively safe way, so you can use it
+if you accidentally give a command which takes a long time. In particular,
+it is safe to quit out of killing; either your text will @var{all} still be
+there, or it will @var{all} be in the kill ring (or maybe both). Quitting
+an incremental search does special things documented under searching; in
+general, it may take two successive @kbd{C-g} characters to get out of a
+search. @kbd{C-g} works by setting the variable @code{quit-flag} to
+@code{t} the instant @kbd{C-g} is typed; Emacs Lisp checks this variable
+frequently and quits if it is non-@code{nil}. @kbd{C-g} is only actually
+executed as a command if it is typed while Emacs is waiting for input.
+
+ If you quit twice in a row before the first @kbd{C-g} is recognized, you
+activate the ``emergency escape'' feature and return to the shell.
+@xref{Emergency Escape}.
+
+@cindex recursive editing level
+@cindex editing level, recursive
+@cindex aborting
+@findex abort-recursive-edit
+@kindex C-]
+ Aborting with @kbd{C-]} (@code{abort-recursive-edit}) is used to get out
+of a recursive editing level and cancel the command which invoked it.
+Quitting with @kbd{C-g} does not do this, and could not do this, because it
+is used to cancel a partially typed command @i{within} the recursive
+editing level. Both operations are useful. For example, if you are in the
+Emacs debugger (@pxref{Lisp Debug}) and have typed @kbd{C-u 8} to enter a
+numeric argument, you can cancel that argument with @kbd{C-g} and remain in
+the debugger.
+
+@findex top-level
+ The command @kbd{M-x top-level} is equivalent to ``enough'' @kbd{C-]}
+commands to get you out of all the levels of recursive edits that you are
+in. @kbd{C-]} gets you out one level at a time, but @kbd{M-x top-level}
+goes out all levels at once. Both @kbd{C-]} and @kbd{M-x top-level} are
+like all other commands, and unlike @kbd{C-g}, in that they are effective
+only when Emacs is ready for a command. @kbd{C-]} is an ordinary key and
+has its meaning only because of its binding in the keymap.
+@xref{Recursive Edit}.
+
+ @kbd{C-x u} (@code{undo}) is not strictly speaking a way of cancelling a
+command, but you can think of it as cancelling a command already finished
+executing. @xref{Undo}.
+
+@node Lossage, Bugs, Quitting, Top
+@section Dealing with Emacs Trouble
+
+ This section describes various conditions in which Emacs fails to work,
+and how to recognize them and correct them.
+
+@menu
+* Stuck Recursive:: `[...]' in mode line around the parentheses
+* Screen Garbled:: Garbage on the screen
+* Text Garbled:: Garbage in the text
+* Unasked-for Search:: Spontaneous entry to incremental search
+* Emergency Escape:: Emergency escape---
+ What to do if Emacs stops responding
+* Total Frustration:: When you are at your wits' end.
+@end menu
+
+@node Stuck Recursive, Screen Garbled, Lossage, Lossage
+@subsection Recursive Editing Levels
+
+ Recursive editing levels are important and useful features of Emacs, but
+they can seem like malfunctions to the user who does not understand them.
+
+ If the mode line has square brackets @samp{[@dots{}]} around the parentheses
+that contain the names of the major and minor modes, you have entered a
+recursive editing level. If you did not do this on purpose, or if you
+don't understand what that means, you should just get out of the recursive
+editing level. To do so, type @kbd{M-x top-level}. This is called getting
+back to top level. @xref{Recursive Edit}.
+
+@node Screen Garbled, Text Garbled, Stuck Recursive, Lossage
+@subsection Garbage on the Screen
+
+ If the data on the screen looks wrong, the first thing to do is see
+whether the text is really wrong. Type @kbd{C-l}, to redisplay the entire
+screen. If it appears correct after this, the problem was entirely in the
+previous screen update.
+
+ Display updating problems often result from an incorrect termcap entry
+for the terminal you are using. The file @file{etc/TERMS} in the Emacs
+distribution gives the fixes for known problems of this sort.
+@file{INSTALL} contains general advice for these problems in one of its
+sections. Very likely there is simply insufficient padding for certain
+display operations. To investigate the possibility that you have this sort
+of problem, try Emacs on another terminal made by a different manufacturer.
+If problems happen frequently on one kind of terminal but not another kind,
+it is likely to be a bad termcap entry, though it could also be due to a
+bug in Emacs that appears for terminals that have or that lack specific
+features.
+
+@node Text Garbled, Unasked-for Search, Screen Garbled, Lossage
+@subsection Garbage in the Text
+
+ If @kbd{C-l} shows that the text is wrong, try undoing the changes to it
+using @kbd{C-x u} until it gets back to a state you consider correct. Also
+try @kbd{C-h l} to find out what command you typed to produce the observed
+results.
+
+ If a large portion of text appears to be missing at the beginning or
+end of the buffer, check for the word @samp{Narrow} in the mode line.
+If it appears, the text is still present, but marked off-limits.
+To make it visible again, type @kbd{C-x w}. @xref{Narrowing}.
+
+@node Unasked-for Search, Emergency Escape, Text Garbled, Lossage
+@subsection Spontaneous Entry to Incremental Search
+
+ If Emacs spontaneously displays @samp{I-search:} at the bottom of the
+screen, it means that the terminal is sending @kbd{C-s} and @kbd{C-q}
+according to the poorly designed @samp{xon/xoff} ``flow control''
+protocol. You should try to prevent this by putting the terminal in a
+mode where it will not use flow control or giving it enough padding
+that it will never send a @kbd{C-s}. If that cannot be done, you must
+tell Emacs to expect flow control to be used, until you can get a
+properly designed terminal.
+
+ Information on how to do these things can be found in the file
+@file{INSTALL} in the Emacs distribution.
+
+@node Emergency Escape, Total Frustration, Unasked-for Search, Lossage
+@subsection Emergency Escape
+
+ Because at times there have been bugs causing Emacs to loop without
+checking @code{quit-flag}, a special feature causes Emacs to be suspended
+immediately if you type a second @kbd{C-g} while the flag is already set,
+so you can always get out of GNU Emacs. Normally Emacs recognizes and
+clears @code{quit-flag} (and quits!) quickly enough to prevent this from
+happening.
+
+ When you resume Emacs after a suspension caused by multiple @kbd{C-g}, it
+asks two questions before going back to what it had been doing:
+
+@example
+Auto-save? (y or n)
+Abort (and dump core)? (y or n)
+@end example
+
+@noindent
+Answer each one with @kbd{y} or @kbd{n} followed by @key{RET}.
+
+ Saying @kbd{y} to @samp{Auto-save?} causes immediate auto-saving of all
+modified buffers in which auto-saving is enabled.
+
+ Saying @kbd{y} to @samp{Abort (and dump core)?} causes an illegal instruction to be
+executed, dumping core. This is to enable a wizard to figure out why Emacs
+was failing to quit in the first place. Execution does not continue
+after a core dump. If you answer @kbd{n}, execution does continue. With
+luck, GNU Emacs will ultimately check @code{quit-flag} and quit normally.
+If not, and you type another @kbd{C-g}, it is suspended again.
+
+ If Emacs is not really hung, just slow, you may invoke the double
+@kbd{C-g} feature without really meaning to. Then just resume and answer
+@kbd{n} to both questions, and you will arrive at your former state.
+Presumably the quit you requested will happen soon.
+
+ The double-@kbd{C-g} feature may be turned off when Emacs is running under
+a window system, since the window system always enables you to kill Emacs
+or to create another window and run another program.
+
+@node Total Frustration,, Emergency Escape, Lossage
+@subsection Help for Total Frustration
+@cindex Eliza
+@cindex doctor
+
+ If using Emacs (or something else) becomes terribly frustrating and none
+of the techniques described above solve the problem, Emacs can still help
+you.
+
+ First, if the Emacs you are using is not responding to commands, type
+@kbd{C-g C-g} to get out of it and then start a new one.
+
+@findex doctor
+ Second, type @kbd{M-x doctor @key{RET}}.
+
+ The doctor will make you feel better. Each time you say something to
+the doctor, you must end it by typing @key{RET} @key{RET}. This lets the
+doctor know you are finished.
+
+@node Bugs, Version 19, Lossage, Top
+@section Reporting Bugs
+
+@cindex bugs
+ Sometimes you will encounter a bug in Emacs. Although we cannot promise
+we can or will fix the bug, and we might not even agree that it is a bug,
+we want to hear about bugs you encounter in case we do want to fix them.
+
+ To make it possible for us to fix a bug, you must report it. In order
+to do so effectively, you must know when and how to do it.
+
+@subsection When Is There a Bug
+
+ If Emacs executes an illegal instruction, or dies with an operating
+system error message that indicates a problem in the program (as opposed to
+something like ``disk full''), then it is certainly a bug.
+
+ If Emacs updates the display in a way that does not correspond to what is
+in the buffer, then it is certainly a bug. If a command seems to do the
+wrong thing but the problem corrects itself if you type @kbd{C-l}, it is a
+case of incorrect display updating.
+
+ Taking forever to complete a command can be a bug, but you must make
+certain that it was really Emacs's fault. Some commands simply take a long
+time. Type @kbd{C-g} and then @kbd{C-h l} to see whether the input Emacs
+received was what you intended to type; if the input was such that you
+@var{know} it should have been processed quickly, report a bug. If you
+don't know whether the command should take a long time, find out by looking
+in the manual or by asking for assistance.
+
+ If a command you are familiar with causes an Emacs error message in a
+case where its usual definition ought to be reasonable, it is probably a
+bug.
+
+ If a command does the wrong thing, that is a bug. But be sure you know
+for certain what it ought to have done. If you aren't familiar with the
+command, or don't know for certain how the command is supposed to work,
+then it might actually be working right. Rather than jumping to
+conclusions, show the problem to someone who knows for certain.
+
+ Finally, a command's intended definition may not be best for editing
+with. This is a very important sort of problem, but it is also a matter of
+judgment. Also, it is easy to come to such a conclusion out of ignorance
+of some of the existing features. It is probably best not to complain
+about such a problem until you have checked the documentation in the usual
+ways, feel confident that you understand it, and know for certain that what
+you want is not available. If you are not sure what the command is
+supposed to do after a careful reading of the manual, check the index and
+glossary for any terms that may be unclear. If you still do not
+understand, this indicates a bug in the manual. The manual's job is to
+make everything clear. It is just as important to report documentation
+bugs as program bugs.
+
+ If the on-line documentation string of a function or variable disagrees
+with the manual, one of them must be wrong, so report the bug.
+
+@subsection How to Report a Bug
+
+@cindex version of Emacs
+@cindex Emacs version
+@findex emacs-version
+ When you decide that there is a bug, it is important to report it and to
+report it in a way which is useful. What is most useful is an exact
+description of what commands you type, starting with the shell command to
+run Emacs, until the problem happens. Always include the version number
+of Emacs that you are using; type @kbd{M-x emacs-version} to print this.
+
+ The most important principle in reporting a bug is to report @var{facts},
+not hypotheses or categorizations. It is always easier to report the facts,
+but people seem to prefer to strain to posit explanations and report
+them instead. If the explanations are based on guesses about how Emacs is
+implemented, they will be useless; we will have to try to figure out what
+the facts must have been to lead to such speculations. Sometimes this is
+impossible. But in any case, it is unnecessary work for us.
+
+ For example, suppose that you type @kbd{C-x C-f /glorp/baz.ugh
+@key{RET}}, visiting a file which (you know) happens to be rather large,
+and Emacs prints out @samp{I feel pretty today}. The best way to report
+the bug is with a sentence like the preceding one, because it gives all the
+facts and nothing but the facts.
+
+ Do not assume that the problem is due to the size of the file and say,
+``When I visit a large file, Emacs prints out @samp{I feel pretty today}.''
+This is what we mean by ``guessing explanations''. The problem is just as
+likely to be due to the fact that there is a @samp{z} in the file name. If
+this is so, then when we got your report, we would try out the problem with
+some ``large file'', probably with no @samp{z} in its name, and not find
+anything wrong. There is no way in the world that we could guess that we
+should try visiting a file with a @samp{z} in its name.
+
+ Alternatively, the problem might be due to the fact that the file starts
+with exactly 25 spaces. For this reason, you should make sure that you
+inform us of the exact contents of any file that is needed to reproduce the
+bug. What if the problem only occurs when you have typed the @kbd{C-x C-a}
+command previously? This is why we ask you to give the exact sequence of
+characters you typed since starting to use Emacs.
+
+ You should not even say ``visit a file'' instead of @kbd{C-x C-f} unless
+you @i{know} that it makes no difference which visiting command is used.
+Similarly, rather than saying ``if I have three characters on the line,''
+say ``after I type @w{@kbd{@key{RET} A B C} @key{RET} C-p},'' if that is
+the way you entered the text.
+
+ If you are not in Fundamental mode when the problem occurs, you should
+say what mode you are in.
+
+ If the manifestation of the bug is an Emacs error message, it is
+important to report not just the text of the error message but a backtrace
+showing how the Lisp program in Emacs arrived at the error. To make the
+backtrace, you must execute the Lisp expression
+@code{(setq @w{debug-on-error t})} before the error happens (that is to
+say, you must execute that expression and then make the bug happen). This
+causes the Lisp debugger to run (@pxref{Lisp Debug}). The debugger's
+backtrace can be copied as text into the bug report. This use of the
+debugger is possible only if you know how to make the bug happen again. Do
+note the error message the first time the bug happens, so if you can't make
+it happen again, you can report at least that.
+
+ Check whether any programs you have loaded into the Lisp world, including
+your @file{.emacs} file, set any variables that may affect the functioning
+of Emacs. Also, see whether the problem happens in a freshly started Emacs
+without loading your @file{.emacs} file (start Emacs with the @code{-q} switch
+to prevent loading the init file.) If the problem does @var{not} occur
+then, it is essential that we know the contents of any programs that you
+must load into the Lisp world in order to cause the problem to occur.
+
+ If the problem does depend on an init file or other Lisp programs that
+are not part of the standard Emacs system, then you should make sure it is
+not a bug in those programs by complaining to their maintainers first.
+After they verify that they are using Emacs in a way that is supposed to
+work, they should report the bug.
+
+ If you can tell us a way to cause the problem without visiting any files,
+please do so. This makes it much easier to debug. If you do need files,
+make sure you arrange for us to see their exact contents. For example, it
+can often matter whether there are spaces at the ends of lines, or a
+newline after the last line in the buffer (nothing ought to care whether
+the last line is terminated, but tell that to the bugs).
+
+@findex open-dribble-file
+@cindex dribble file
+ The easy way to record the input to Emacs precisely is to write a
+dribble file; execute the Lisp expression
+
+@example
+(open-dribble-file "~/dribble")
+@end example
+
+@noindent
+using @kbd{Meta-@key{ESC}} or from the @samp{*scratch*} buffer just after starting
+Emacs. From then on, all Emacs input will be written in the specified
+dribble file until the Emacs process is killed.
+
+@findex open-termscript
+@cindex termscript file
+ For possible display bugs, it is important to report the terminal type
+(the value of environment variable @code{TERM}), the complete termcap entry
+for the terminal from @file{/etc/termcap} (since that file is not identical
+on all machines), and the output that Emacs actually sent to the terminal.
+The way to collect this output is to execute the Lisp expression
+
+@example
+(open-termscript "~/termscript")
+@end example
+
+@noindent
+using @kbd{Meta-@key{ESC}} or from the @samp{*scratch*} buffer just
+after starting Emacs. From then on, all output from Emacs to the terminal
+will be written in the specified termscript file as well, until the Emacs
+process is killed. If the problem happens when Emacs starts up, put this
+expression into your @file{.emacs} file so that the termscript file will
+be open when Emacs displays the screen for the first time. Be warned:
+it is often difficult, and sometimes impossible, to fix a terminal-dependent
+bug without access to a terminal of the type that stimulates the bug.@refill
+
+ The address for reporting bugs is
+
+@format
+GNU Emacs Bugs
+Free Software Foundation
+675 Mass Ave
+Cambridge, MA 02139
+@end format
+
+@noindent
+or send email either to @samp{bug-gnu-emacs@@prep.ai.mit.edu} (Internet)
+or to @samp{uunet!prep.ai.mit.edu!bug-gnu-emacs} (Usenet).
+
+ Once again, we do not promise to fix the bug; but if the bug is serious,
+or ugly, or easy to fix, chances are we will want to.
+
+@node Version 19, Manifesto, Bugs, Top
+@unnumbered Version 19 Antenews
+
+This chapter prematurely describes new features of Emacs 19, in
+anticipation of its release. We have included this so that the version
+18 manuals don't become obsolete as soon as Emacs 19 comes out. This
+list mentions only features that would belong in @cite{The GNU Emacs
+Manual}; changes relevant to Emacs Lisp programming will be documented
+in the next revision of @cite{The GNU Emacs Lisp Manual}.
+
+@menu
+* Basic Changes:: Changes every user must know.
+* New Facilities:: Changes every user will want to know.
+* Binding Changes:: Ordinary commands that have been moved. Important!.
+* Changed Commands:: Ordinary commands that have new features. Important!
+* M-x Changes:: Changes in commands you run with @kbd{M-x}. Important!
+* New Commands:: Commands that have been added
+ that we expect many users to want to use.
+* Search Changes:: Changes in incremental search. Some are important.
+
+The rest of the changes you can pretty much ignore unless you are interested.
+
+* Filling Changes:: Changes in fill commands.
+* TeX Mode Changes:: Changes in the commands for editing TeX files
+ and running TeX.
+* Shell Changes:: Major changes in all the modes that run subprograms.
+* Spell Changes:: These commands now use ispell instead of spell.
+* Tags Changes:: Changes in Tags facility.
+* Mail Changes:: Changes in both Sendmail mode and Rmail mode.
+* Info Changes:: New commands in Info.
+* Dired Changes:: Powerful new features in Dired.
+* GNUS:: An alternative news reader.
+* Calendar/Diary:: The calendar feature now lets you move to different
+ dates and convert to and from other calendars.
+ You can also display related entries from your diary
+ file.
+* Version Control:: A convenient interface to RCS or SCCS.
+* Emerge:: A new feature for merging files interactively.
+* Debuggers:: Running debuggers (GDB, DBX, SDB) under Emacs.
+* Other New Modes:: Miscellaneous new and changed major modes.
+* Key Sequence Changes:: You can now bind key sequences that include function
+ keys and mouse clicks.
+* Hook Changes:: Hook variables have been renamed more systematically.
+@end menu
+
+@node Basic Changes
+@section Basic Changes
+
+We have made changes to help Emacs use fewer resources and make it less
+likely to become irreparably hung. While these changes don't alter the
+commands of Emacs, they are important enough to be worth mentioning.
+
+You can quit with @kbd{C-g} while Emacs is waiting to read or write a
+file---provided the operating system will allow you to interrupt the
+system call that is hung. (Unfortunately, most NFS implementations
+won't allow interruption.)
+
+When you kill buffers, Emacs now returns memory to the operating system,
+thus reducing the size of the Emacs process. The space that you free up
+by killing buffers can now be reused for other buffers no matter what
+their sizes, or reused by other processes if Emacs doesn't need it.
+
+@subheading Multiple X Windows
+
+When using X windows, you can now create more than one window at the X
+level. Each X window displays a @dfn{frame} which can contain one or
+several Emacs windows. Each frame has its own echo area and normally
+its own minibuffer. (To avoid confusion, we reserve the word
+``window'' for the subdivisions that Emacs implements, and never use
+it to refer to a frame.) The easiest way to create additional frames
+is with the @kbd{C-x 5} prefix character (@pxref{New Commands, , New
+Everyday Commands}).
+
+@c ??? Change not yet made
+@findex scroll-bar-mode @r{(V19)}
+Emacs windows can now have scroll bars; use the @code{scroll-bar-mode}
+command to turn scroll bars on or off. With no argument, it toggles the
+use of scroll bars. With an argument, it turns use of scroll bars on if
+and only if the argument is positive. This command applies to all
+frames, including frames yet to be created. (You can control scroll
+bars on a frame by frame basis by writing a Lisp program.)
+
+@subheading Undo Improvements
+
+@c ??? Change not yet made
+Undoing a deletion now puts the cursor position where it was just before
+the deletion.
+
+@subheading Auto Save Improvements
+
+@vindex auto-save-timeout @r{(V19)}
+Emacs now does garbage collection and auto saving while it is waiting
+for input, which often avoids the need to do these things while you are
+typing. The variable @code{auto-save-timeout} says how many seconds
+Emacs should wait, after you stop typing, before it does an auto save
+and perhaps also a garbage collection. (The actual time period varies
+also according to the size of the buffer---longer for longer buffers,
+since auto saving itself is slower for long buffers.) This way, Emacs
+does not interrupt or delay your typing.
+
+In Emacs 18, when auto saving detects that a buffer has shrunk greatly,
+it refrains from auto saving that buffer and displays a warning. In
+version 19, it also turns off Auto Save mode in that buffer, so that you
+won't get the same warning repeatedly. If you reenable Auto Save mode
+in that buffer, Emacs will start saving it again despite the shrinkage.
+
+@findex revert-buffer @r{(V19)}
+In Emacs 19, @code{revert-buffer} no longer offers to revert from the
+latest auto-save file. That option hasn't been very useful since the
+change to keep more undo information.
+
+The command @code{recover-file} no longer turns off Auto Save mode.
+
+@subheading File Local Variables
+
+@vindex enable-local-variables @r{(V19)}
+@vindex inhibit-local-variables @r{(V19)}
+The user option for controlling whether files can set local variables is
+called @code{enable-local-variables} in Emacs 19, rather than
+@code{inhibit-local-variables}. A value of @code{t} means
+local-variables lists are obeyed; @code{nil} means they are ignored;
+anything else means query the user.
+
+@node New Facilities
+@section New Basic Facilities
+
+@cindex minibuffer history
+@cindex history, in minibuffer
+@kindex M-p @r{(V19)}
+@kindex M-n @r{(V19)}
+@findex next-history-element @r{(V19)}
+@findex previous-history-element @r{(V19)}
+You can now get back recent minibuffer inputs conveniently. While in
+the minibuffer, type @kbd{M-p} (@code{previous-history-element}) to fetch
+the next earlier minibuffer input, and use @kbd{M-n}
+(@code{next-history-element}) to fetch the next later input.
+
+@findex previous-matching-history-element @r{(V19)}
+@findex next-matching-history-element @r{(V19)}
+@kindex M-r @r{(V19)}
+@kindex M-s @r{(V19)}
+There are also commands to search forward or backward through the
+history. As of this writing, they search for history elements that
+match a regular expression that you specify with the minibuffer.
+@kbd{M-r} (@code{previous-matching-history-element}) searches older
+elements in the history, while @kbd{M-s}
+(@code{next-matching-history-element}) searches newer elements. By
+special dispensation, these commands can always use the minibuffer to
+read their arguments even though you are already in the minibuffer when
+you issue them.
+
+We may have changed the precise way these commands work by the time you
+use Emacs 19. Perhaps they will search for a match for the string given
+so far in the minibuffer; perhaps they will search for a literal match
+rather than a regular expression match; perhaps they will only accept
+matches at the beginning of a history element; perhaps they will read
+the string to search for incrementally like @kbd{C-s}. We want to
+choose an interface that is convenient, flexible and natural, and these
+goals are somewhat contradictory. To find out what interface is
+actually available, type @kbd{C-h f previous-matching-history-element}.
+
+The history feature is available for all uses of the minibuffer, but
+there are separate history lists for different kinds of input. For
+example, there is a list for file names, used by all the commands that
+read file names. There is a list for arguments of commands like
+@code{query-replace}. There are also very specific history lists, such
+as the one that @code{compile} uses for compilation commands.
+
+@subheading Remote File Access
+
+@cindex ftp
+@cindex remote file access
+You can refer to files on other machines using a special file name syntax:
+
+@example
+@group
+/@var{host}:@var{filename}
+/@var{user}@@@var{host}:@var{filename}
+@end group
+@end example
+
+When you do this, Emacs uses the FTP program to read and write files on
+the specified host. It logs in through FTP using your user name or the
+name @var{user}. It may ask you for a password from time to time; this
+is used for logging in on @var{host}.
+
+@subheading Using Flow Control
+
+@cindex flow control in V19
+@cindex xon-xoff in V19
+There is now a convenient way to enable flow control when your terminal
+or your connection won't work without it. Suppose you want to do this
+on VT-100 and H19 terminals; put the following in your @file{.emacs}
+file:
+
+@findex evade-flow-control-on @r{(V19)}
+@example
+(evade-flow-control-on "vt100" "h19")
+@end example
+
+When flow control is enabled, you must type @kbd{C-\} to get the effect
+of a @kbd{C-s}, and type @kbd{C-^} to get the effect of a @kbd{C-q}.
+
+@subheading Controlling Backup File Names
+
+@vindex version-control @r{(V19)}
+@vindex VERSION_CONTROL
+The default setting of the Lisp variable @code{version-control} now
+comes from the environment variable @code{VERSION_CONTROL}. Thus, you
+can select a style of backup file naming for Emacs and other GNU
+utilities all together.
+
+@node Binding Changes
+@section Changed Key Bindings
+
+@table @kbd
+@item M-@{
+@kindex M-@{ @r{(V19)}
+This is the new key sequence for @code{backward-paragraph}. The old key
+sequence for this, @kbd{M-[}, is now undefined by default.
+
+The reason for this change is to avoid conflict with the sequences that
+function keys send on most terminals.
+
+@item M-@}
+@kindex M-@} @r{(V19)}
+This is the new key sequence for @code{forward-paragraph}. The old key
+sequence for this, @kbd{M-]}, is now undefined by default.
+
+We changed this to go along with @kbd{M-@{}.
+
+@item C-x C-u
+@itemx C-x C-l
+@kindex C-x C-u @r{(V19)}
+@kindex C-x C-l @r{(V19)}
+The two commands, @kbd{C-x C-u} (@code{upcase-region}) and @kbd{C-x
+C-l} (@code{downcase-region}), are now disabled by default; these
+keys seem to be often hit by accident, and can be quite
+destructive if their effects are not noticed immediately.
+
+@item C-x 3
+@kindex C-x 3 @r{(V19)}
+@kbd{C-x 3} is now the key binding for @code{split-window-horizontally},
+which splits a window into two side-by-side windows. This used to be
+@kbd{C-x 5}.
+
+@item @kbd{C-x 4 C-o}
+@kindex C-x 4 C-o @r{(V19)}
+@findex display-buffer @r{(V19)}
+This key now runs @code{display-buffer}, which displays a specified
+buffer in another window without selecting it.
+
+@item M-g
+@kindex M-g @r{(V19)}
+@kbd{M-g} is now undefined. It used to run the command @code{fill-region}.
+This command used to be run more often by mistake than on purpose.
+
+@item C-x a
+@itemx C-x n
+@itemx C-x r
+@kindex C-x a @r{(V19)}
+@kindex C-x n @r{(V19)}
+@kindex C-x r @r{(V19)}
+Three new prefix keys have been created to make many of the @w{@kbd{C-x}}
+commands more systematic: @w{@kbd{C-x a}}, @w{@kbd{C-x n}} and @w{@kbd{C-x r}}.
+@w{@kbd{C-x a}} is used for abbreviation commands, @w{@kbd{C-x n}} for commands
+pertaining to narrowing, and @w{@kbd{C-x r}} for register and rectangle
+commands. These are the new bindings, in detail:
+
+@table @kbd
+@item C-x a l
+@code{add-mode-abbrev} (previously @kbd{C-x C-a}).
+@item C-x a g
+@code{add-global-abbrev} (previously @kbd{C-x +}).
+@item C-x a i g
+@code{inverse-add-mode-abbrev} (previously @kbd{C-x C-h}).
+@item C-x a i l
+@code{inverse-add-global-abbrev} (previously @kbd{C-x -}).
+@item C-x a e
+@code{expand-abbrev} (previously @kbd{C-x '}).
+
+@sp 1
+
+@item C-x n n
+@code{narrow-to-region} (previously @kbd{C-x n}).
+@item C-x n p
+@code{narrow-to-page} (previously @kbd{C-x p}).
+@item C-x n w
+@code{widen} (previously @kbd{C-x w}).
+
+@sp 1
+
+@item C-x r C-@key{SPC}
+@code{point-to-register} (previously @kbd{C-x /}).
+@item C-x r @key{SPC}
+Also @code{point-to-register} (previously @kbd{C-x /}).
+@item C-x r j
+@code{jump-to-register} (previously @kbd{C-x j}).
+@item C-x r s
+@code{copy-to-register} (previously @kbd{C-x x}).
+@item C-x r i
+@code{insert-register} (previously @kbd{C-x g}).
+@item C-x r r
+@code{copy-rectangle-to-register} (previously @kbd{C-x r}).
+@item C-x r k
+@code{kill-rectangle} (no previous key binding).
+@item C-x r y
+@code{yank-rectangle} (no previous key binding).
+@item C-x r o
+@code{open-rectangle} (no previous key binding).
+@item C-x r f
+@code{frame-configuration-to-register} (a new command)
+saves the state of all windows in all frames.
+Use @kbd{C-x r j} to restore the configuration.
+@c !!! following generates acceptable underfull hbox
+@item C-x r w
+@code{window-configuration-to-register} (a new command)
+saves the state of all windows in the selected frame.
+Use @kbd{C-x r j} to restore the configuration.
+@end table
+
+The old key bindings @kbd{C-x /}, @kbd{C-x j}, @kbd{C-x x} and @kbd{C-x
+g} have not yet been removed. The other old key bindings listed have
+been removed. The old key binding @kbd{C-x a}, which was
+@code{append-to-buffer}, was removed to make way for a prefix key; now
+@code{append-to-buffer} has no keybinding.
+
+@item C-x v
+@kbd{C-x v} is a new prefix character, used for version control commands.
+@xref{Version Control}.
+@end table
+
+@node Changed Commands
+@section Changed Everyday Commands
+
+@table @kbd
+@item C-o
+@kindex C-o @r{(V19)}
+When you have a fill prefix, the command @kbd{C-o} inserts the prefix on
+the newly created line.
+
+@item M-^
+@kindex M-^ @r{(V19)}
+When you have a fill prefix, the command @kbd{M-^} deletes the prefix
+(if it occurs) after the newline that it deletes.
+
+@item M-z
+@kindex M-z @r{(V19)}
+The @kbd{M-z} command (@code{zap-to-char}) now kills through the target
+character. In version 18, it killed up to but not including the target
+character.
+
+@item M-!
+@kindex M-! @r{(V19)}
+The command @kbd{M-!} (@code{shell-command}) now runs the specified
+shell command asynchronously if it ends in @samp{&}, just as the shell
+does.
+
+@item C-x 2
+@kindex C-x 2 @r{(V19)}
+@vindex split-window-keep-point @r{(V19)}
+The @kbd{C-x 2} command (@code{split-window-vertically}) now tries to
+avoid scrolling by putting point in whichever window happens to contain
+the screen line the cursor is already on. If you don't like this, you
+can turn it off by setting @code{split-window-keep-point} to
+@code{nil}.
+
+@item C-x s
+@kindex C-x s @r{(V19)}
+The @kbd{C-x s} command (@code{save-some-buffers}) now gives you more
+options when it asks whether to save a particular buffer. The options
+are analogous to those of @code{query-replace}. Here they are:
+
+@table @kbd
+@item y
+Save this buffer and ask about the rest of the buffers.
+@item n
+Don't save this buffer, but ask about the rest of the buffers.
+@item !
+Save this buffer and all the rest with no more questions.
+@c !!! following generates acceptable underfull hbox
+@item @key{ESC}
+Terminate @code{save-some-buffers} without any more saving.
+@item .
+@c !!! following written verbosely to avoid overfull hbox
+Save only this buffer, then exit @code{save-some-buffers} without even asking
+about other buffers.
+@item C-r
+View the buffer that you are currently being asked about. When you exit
+View mode, you get back to @code{save-some-buffers}, which asks the
+question again.
+@item C-h
+Display a help message about these options.
+@end table
+
+@item C-x C-v
+@kindex C-x C-v @r{(V19)}
+This command (@kbd{find-alternate-file}) now inserts the entire current
+file name in the minibuffer. This is convenient if you made a small
+mistake in typing it. Point goes after the last slash, before the last
+file name component, so if you want to replace it entirely, you can use
+@kbd{C-k} right away to delete it.
+
+@item C-M-f
+@kindex C-M-f @r{(V19)}
+Expression and list commands such as @kbd{C-M-f} now ignore parentheses
+within comments in Lisp mode.
+@end table
+
+@node M-x Changes
+@section Changes in Common @kbd{M-x} Commands
+
+@table @asis
+@item @kbd{M-x make-symbolic-link}
+@findex make-symbolic-link @r{(V19)}
+This command now does not expand its second argument. This lets you
+make a link with a target that is a relative file name.
+
+@item @kbd{M-x add-change-log-entry}
+@itemx @kbd{C-x 4 a}
+@findex add-change-log-entry @r{(V19)}
+@kindex C-x 4 a @r{(V19)}
+These commands now automatically insert the name of the file and often
+the name of the function that you changed. They also handle grouping of
+entries.
+
+There is now a special major mode for editing @file{ChangeLog} files.
+It makes filling work conveniently. Each bunch of grouped entries is
+one paragraph, and each collection of entries from one person on one day
+is considered a page.
+
+@item @kbd{M-x compare-windows}
+@findex compare-windows @r{(V19)}
+With a prefix argument, @code{compare-windows} ignores changes in
+whitespace. If the variable @code{compare-ignore-case} is
+non-@code{nil}, it ignores differences in case as well.
+
+@item @kbd{M-x view-buffer}
+@itemx @kbd{M-x view-file}
+@findex view-buffer @r{(V19)}
+@findex view-file @r{(V19)}
+The View commands (such as @kbd{M-x view-buffer} and @kbd{M-x
+view-file}) no longer use recursive edits; instead, they switch
+temporarily to a different major mode (View mode) specifically designed
+for moving around through a buffer without editing it.
+
+@item @kbd{M-x manual-entry}
+@findex manual-entry @r{(V19)}
+@kbd{M-x manual-entry} now uses View mode for the buffer showing the
+man page.
+
+@item @kbd{M-x compile}
+@findex compile @r{(V19)}
+You can repeat any previous @code{compile} conveniently using the
+minibuffer history commands, while in the minibuffer entering the
+compilation command.
+
+While a compilation is going on, the string @samp{Compiling} appears
+in the mode line. When this string disappears, the compilation is
+finished.
+
+The buffer of compiler messages is in Compilation mode. This mode
+provides the keys @key{SPC} and @key{DEL} to scroll by screenfuls, and
+@kbd{M-n} and @kbd{M-p} to move to the next or previous error message.
+You can also use @kbd{M-@{} and @kbd{M-@}} to move up or down to an
+error message for a different source file. Use @kbd{C-c C-c} on any
+error message to find the corresponding source code.
+
+Emacs 19 has a more general parser for compiler messages. For example, it
+can understand messages from lint, and from certain C compilers whose
+error message format is unusual.
+@end table
+
+@node New Commands
+@section New Everyday Commands
+
+@table @asis
+@item @kbd{C-z}
+@kindex C-z @r{(V19)}
+@findex iconify-frame @r{(V19)}
+When you are using X windows, @kbd{C-z} (@code{iconify-frame}) now
+iconifies the current frame.
+
+@item @kbd{C-M-l}
+@kindex C-M-l @r{(V19)}
+@findex reposition-window @r{(V19)}
+The @kbd{C-M-l} command (@code{reposition-window}) scrolls the current
+window heuristically in a way designed to get useful information onto
+the screen. For example, in a Lisp file, this command tries to get the
+entire current defun onto the screen if possible.
+
+@item @kbd{C-M-r}
+@kindex C-M-r @r{(V19)}
+@findex isearch-backward-regexp @r{(V19)}
+@c !!! following written verbosely to avoid overfull hbox
+The @kbd{C-M-r} key now runs the command @code{isearch-backward-regexp},
+which does reverse incremental regexp search.
+
+@item @kbd{C-x 5}
+@kindex C-x 5 @r{(V19)}
+The prefix key @kbd{C-x 5} is analogous to @kbd{C-x 4}, with parallel
+subcommands. The difference is that @kbd{C-x 5} commands create a new
+frame rather than just a new window.
+
+@item @kbd{C-x 5 C-f}
+@itemx @kbd{C-x 5 b}
+@kindex C-x 5 C-f @r{(V19)}
+@kindex C-x 5 b @r{(V19)}
+@findex find-file-other-frame @r{(V19)}
+@findex switch-to-buffer-other-frame @r{(V19)}
+These new commands switch to a specified file or buffer in a new frame
+(when using X windows). The commands' names are
+@code{find-file-other-frame} and @code{switch-to-buffer-other-frame}.
+
+@item @kbd{C-x 5 m}
+@kindex C-x 5 m @r{(V19)}
+@findex mail-other-frame @r{(V19)}
+Start outgoing mail in another frame (@code{mail-other-frame}).
+
+@item @kbd{C-x 5 .}
+@kindex C-x 5 . @r{(V19)}
+@findex find-tag-other-frame @r{(V19)}
+Find a tag in another frame (@code{find-tag-other-frame}).
+
+@item @kbd{C-x 4 r}
+@kindex C-x 4 r @r{(V19)}
+@findex find-file-read-only-other-window @r{(V19)}
+This is now @code{find-file-read-only-other-window}.
+
+@item arrow keys
+@cindex arrow keys
+The arrow keys now have default bindings to move in the appropriate
+directions.
+
+@item @kbd{C-h C-f}
+@itemx @kbd{C-h C-k}
+@kindex C-h C-f @r{(V19)}
+@kindex C-h C-k @r{(V19)}
+These new help commands enter Info and display the node for a given
+Emacs function name or key sequence, respectively.
+
+@item @kbd{M-a}
+@itemx @kbd{M-e}
+@kindex M-a @r{(C mode in V19)}
+@kindex M-e @r{(C mode in V19)}
+@findex c-beginning-of-statement @r{(V19)}
+@findex c-end-of-statement @r{(V19)}
+In C mode, @kbd{M-a} and @kbd{M-e} now move by complete C statements
+(@code{c-beginning-of-statement} and @code{c-end-of-statement}).
+
+@item @kbd{M-q}
+@kindex M-q @r{(C mode in V19)}
+@findex c-fill-paragraph @r{(V19)}
+@kbd{M-q} in C mode now runs @code{c-fill-paragraph}, which is designed
+for filling C comments. (We assume you don't want to fill the actual C
+code in a C program.)
+
+@item @kbd{M-x c-up-conditional}
+@findex c-up-conditional @r{(V19)}
+In C mode, @code{c-up-conditional} moves back to the containing
+preprocessor conditional, setting the mark where point was previously.
+
+A prefix argument acts as a repeat count. With a negative argument,
+this command moves forward to the end of the containing preprocessor
+conditional. When going backwards, @samp{#elif} acts like @samp{#else}
+followed by @samp{#if}. When going forwards, @samp{#elif} is ignored.
+
+@item @kbd{M-x comment-region}
+@findex comment-region @r{(V19)}
+The @code{comment-region} command adds comment delimiters to the lines
+that start in the region, thus commenting them out. With a negative
+argument, it deletes comment delimiters from the lines in the
+region---this is the inverse of the effect of @code{comment-region}
+without an argument.
+
+With a positive argument, @code{comment-region} adds comment delimiters
+but duplicates the last character of the comment start sequence as many
+times as the argument specifies. This is a way of calling attention to
+the comment. In Lisp, you should use an argument of at least two, because
+the indentation convention for single semicolon comments does not leave
+them at the beginning of a line.
+
+@item @kbd{M-x super-apropos}
+@findex super-apropos @r{(V19)}
+This command is like @code{apropos} except that it searches for a
+regular expression instead of merely a substring.
+
+@findex apropros @r{(V19)}
+@kindex C-h a @r{(V19)}
+If you use a prefix argument (regardless of its value) with
+@code{apropos} or @code{super-apropos}, they also search documentation
+strings for matches as well as symbol names. The prefix argument also
+controls looking up and printing the key bindings of all commands.
+
+@item @kbd{M-x diff}
+@findex diff @r{(V19)}
+@vindex diff-switches @r{(V19)}
+This new command compares two files, displaying the differences in an
+Emacs buffer. The options for the @code{diff} program come from the
+variable @code{diff-switches}, whose value should be a string.
+
+The buffer of differences has Compilation mode as its major mode, so you
+can use @kbd{C-x `} to visit successive changed locations in the two
+source files, or you can move to a particular hunk of changes and type
+@kbd{C-c C-c} to move to the corresponding source. You can also use the
+other special commands of Compilation mode: @key{SPC} and @key{DEL} for
+scrolling, and @kbd{M-p} and @kbd{M-n} for cursor motion.
+
+@item @kbd{M-x diff-backup}
+@findex diff-backup @r{(V19)}
+The command @code{diff-backup} compares a specified file with its most
+recent backup. If you specify the name of a backup file,
+@code{diff-backup} compares it with the source file that it is a backup
+of.
+@end table
+
+@node Search Changes
+@section Changes in Incremental Search
+
+The most important change in incremental search is that @key{RET} now
+terminates a search, and @key{ESC} does not. The other changes are
+useful, but not vital to know about.
+
+@cindex Incremental search in V19
+@findex isearch @r{(V19)}
+@itemize @bullet
+@item
+The character to terminate an incremental search is now @key{RET}. This
+is for compatibility with the way most other arguments are read.
+
+To search for a newline in an incremental search, type @key{LFD} (also
+known as @kbd{C-j}).
+
+(This change is somewhat of an experiment; it might be taken back by
+the time Emacs 19 is really released.)
+
+@item
+Incremental search now maintains a ring of previous search strings. Use
+@kbd{M-p} and @kbd{M-n} to move through the ring to pick a search string
+to reuse. These commands leave the selected search ring element in the
+minibuffer, where you can edit it. Type @key{RET} to finish editing and
+search for the chosen string.
+
+@item
+When there is an upper-case letter in the search
+string, then the search is case sensitive.
+
+@item
+Incremental search is now implemented as a major mode. When you type
+@kbd{C-s}, it switches temporarily to a different keymap which defines
+each key to do what it ought to do for incremental search. This has
+next to no effect on the user-visible behavior of searching, but makes
+it easier to customize that behavior.
+@end itemize
+
+@node Filling Changes
+@section Changes in Fill Commands
+
+@itemize @bullet
+@item
+@findex fill-individual-paragraphs @r{(V19)}
+@code{fill-individual-paragraphs} now has two modes. Its default mode
+is that any change in indentation starts a new paragraph. The alternate
+mode is that only separator lines separate paragraphs; this can handle
+paragraphs with extra indentation on the first line. To select the
+alternate mode, set @code{fill-individual-varying-indent} to a
+non-@code{nil} value.
+
+@item
+@cindex Adaptive Fill mode
+@findex fill-region-as-paragraph @r{(V19)}
+Filling is now partially controlled by a new minor mode, Adaptive Fill
+mode. When this mode is enabled (and it is enabled by default), if you
+use @code{fill-region-as-paragraph} on an indented paragraph and you
+don't have a fill prefix, it uses the indentation of the second line of
+the paragraph as the fill prefix.
+
+Adaptive Fill mode doesn't have much effect on @kbd{M-q} in most major
+modes, because an indented line will probably count as a paragraph
+starter and thus each line of an indented paragraph will be considered
+a paragraph of its own.
+
+@item
+@kindex M-q @r{(C mode in V19)}
+@findex c-fill-paragraph @r{(V19)}
+@kbd{M-q} in C mode now runs @code{c-fill-paragraph}, which is designed
+for filling C comments. (We assume you don't want to fill the actual C
+code in a C program.)
+@end itemize
+
+@node TeX Mode Changes
+@section Changes in @TeX{} Mode
+
+@cindex Tex mode in V19
+@kindex C-c @{ @r{(TeX mode in V19)}
+@kindex C-c @} @r{(TeX mode in V19)}
+The old @TeX{} mode bindings of @kbd{M-@{} and @kbd{M-@}} have been
+moved to @kbd{C-c @{} and @kbd{C-c @}}. (These commands are
+@code{up-list} and @code{tex-insert-braces}; they are the @TeX{}
+equivalents of @kbd{M-(} and @kbd{M-)}.)
+
+@c !!! following generates acceptable underfull hbox
+@kindex C-c C-e @r{(TeX mode in V19)}
+@kindex C-c C-o @r{(TeX mode in V19)}
+@findex tex-latex-block @r{(V19)}
+@findex tex-close-latex-block @r{(V19)}
+The new command @kbd{C-c C-o} (@code{tex-latex-block}) inserts a
+matching @samp{\begin}--@samp{\end} pair. The new command @kbd{C-c C-e}
+(@code{tex-close-latex-block}) inserts a matching @samp{\end} for the
+last unterminated @samp{\begin}.
+
+@kindex C-c @key{TAB} @r{(TeX mode in V19)}
+@findex tex-bibtex-file @r{(V19)}
+You can run Bib@TeX{} on the current file using @kbd{C-c @key{TAB}}
+(@code{tex-bibtex-file}).
+
+@kindex C-c C-v @r{(TeX mode in V19)}
+@findex tex-view @r{(V19)}
+There is a new command @kbd{C-c C-v} (@code{tex-view}) for running a
+DVI previewer.
+
+@vindex tex-directory @r{(V19)}
+You can specify the directory to use for running @TeX{} by setting the
+variable @code{tex-directory}. @code{"."} is the default value. If
+your environment variable @code{TEXINPUTS} contains relative directory
+names, or if your files contains @samp{\input} commands with relative
+file names, then @code{tex-directory} @emph{must} be @code{"."} or you
+will get the wrong results. Otherwise, it is safe to specify some other
+directory, such as @file{/tmp}.
+
+There is now a third variant of @TeX{} mode, for Sli@TeX{}. This is in
+addition to the variants for plain @TeX{} and La@TeX{}. As before, the
+correct variant is chosen automatically when you visit a file.
+
+@node Shell Changes
+@section Changes in Shell Mode
+
+@cindex Shell mode in V19
+Shell mode has been completely replaced with a new implementation.
+The basic idea is the same: Emacs runs a subshell, and all input
+and output to the subshell go through the shell buffer. But the
+special commands of Shell mode have been redesigned.
+
+@table @kbd
+@item @key{TAB}
+@kindex @key{TAB} @r{(Shell mode in V19)}
+@findex comint-dynamic-complete @r{(V19)}
+Complete the file name before point in the shell buffer
+(@code{comint-dynamic-complete}).
+
+@item M-?
+@kindex M-? @r{(Shell mode in V19)}
+@findex comint-dynamic-list-completions @r{(V19)}
+To get a list of all possible completions of the file name before, type
+@kbd{M-?} (@code{comint-dynamic-list-completions}).
+
+@item M-p
+@itemx M-n
+@kindex M-p @r{(Shell mode in V19)}
+@kindex M-n @r{(Shell mode in V19)}
+@findex comint-next-input @r{(V19)}
+@findex comint-previous-input @r{(V19)}
+There is a new convenient history mechanism for repeating previous
+shell inputs. Use the command @kbd{M-p} (@code{comint-previous-input}) to
+recall the last input; it copies the text of that input to the place
+where you are editing. If you repeat @w{@kbd{M-p}}, it replaces the copied
+input with successively earlier inputs. @kbd{M-n} is similar but goes in the
+opposite direction, towards the present (@code{comint-next-input}).
+
+When you find the previous input you want, you can resubmit it by typing
+@key{RET}, or you can edit it first and then resubmit it if you wish.
+
+These shell history commands operate outside the minibuffer, but they
+are completely analogous to the minibuffer history commands.
+
+@item M-r
+@itemx M-s
+@kindex M-r @r{(Shell mode in V19)}
+@kindex M-s @r{(Shell mode in V19)}
+@findex comint-previous-matching-input @r{(V19)}
+@findex comint-next-matching-input @r{(V19)}
+You can also use @kbd{M-r} and @kbd{M-s} to search for (respectively)
+earlier or later inputs starting with a given string. First type the
+string, then type @kbd{M-r} (@code{comint-previous-matching-input}) to
+yank a previous input from the history which starts with that string.
+You can repeat @kbd{M-r} to find successively earlier inputs starting
+with the same string.
+
+You can start moving in the opposite direction (toward more recent
+inputs) by typing @kbd{M-s} (@code{comint-next-matching-input}) instead
+of @kbd{M-r}. As long as you don't use any commands except @kbd{M-r}
+and @kbd{M-s}, they keep using the same string that you had entered
+initially.
+
+These commands serve a purpose similar to that of @kbd{M-r} and
+@kbd{M-s} in the minibuffer, but do not work in quite the same way. We
+may change the interface of these commands, as well as that of the
+analogous minibuffer commands; one goal will be to make the two sets of
+commands compatible. But we haven't yet figured out which of the
+possible interfaces is best. To find out what interface is actually
+supported in Emacs 19, type @kbd{C-h f comint-previous-matching-input
+@key{RET}}.
+
+@item C-c C-o
+@kindex C-c C-o @r{(Shell mode in V19)}
+@findex comint-kill-output @r{(V19)}
+Kill the last batch of output from a shell command
+(@code{comint-kill-output}). This is useful if a shell command spews
+out lots of output that just gets in the way.
+
+@item C-c C-r
+@kindex C-c C-r @r{(Shell mode in V19)}
+@findex comint-show-output @r{(V19)}
+Scroll to display the
+beginning of the last batch of output at the top of the window; it also
+moves the cursor there (@code{comint-show-output}).
+
+@item C-a
+@kindex C-a @r{(Shell mode in V19)}
+If you type @kbd{C-a} on a line that starts with a shell prompt, it
+moves to the end of the prompt, not to the very beginning of the line.
+
+@item C-d
+@kindex C-d @r{(Shell mode in V19)}
+Typed at the end of the shell buffer, @kbd{C-d} sends EOF to the
+subshell. Typed at any other position in the buffer, @kbd{C-d}
+deletes a character as usual.
+
+@item M-x dirs
+@findex dirs @r{(V19)}
+If Emacs gets confused while trying to track changes in the shell's
+current directory, type @kbd{M-x dirs} to re-synchronize.
+
+@item M-x send-invisible
+@findex send-invisible @r{(V19)}
+This command reads a line of text without echoing it, and sends it to
+the shell.
+
+@item M-x comint-continue-subjob
+@findex comint-continue-subjob @r{(V19)}
+If you accidentally suspend your process, use this command to continue it.
+@end table
+
+@node Spell Changes
+@section Changes in Spell Checking
+
+@cindex Spell checking in V19
+@cindex @code{ispell} program @r{(V19)}
+@findex kill-ispell @r{(V19)}
+Emacs 19 uses the Ispell program for spelling correction instead of the
+Unix spell program. Ispell has many advantages; one is that it can be
+started the first time you check a word, and left running thereafter,
+which makes further checking much faster. If you want to get rid of the
+Ispell process, use @kbd{M-x kill-ispell}.
+
+@findex ispell-buffer @r{(V19)}
+@findex ispell-region @r{(V19)}
+To check the entire current buffer, use @kbd{M-x ispell-buffer}. Use
+@kbd{M-x ispell-region} to check just the current region.
+
+@kindex M-$ @r{(V19)}
+Ispell commands often involve interactive replacement of words.
+You can interrupt the interactive replacement with @kbd{C-g}.
+You can restart it again afterward with @kbd{C-u M-$}.
+
+Interactive replacement shows you one misspelling at a time and asks you
+what to do. To answer, type one of the following characters:
+
+@table @kbd
+@item @var{digit}
+Replace the word (this time) with one of the displayed near-misses.
+The digit you use says which near-miss to use.
+
+@item a
+Accept this word this time.
+
+@item i
+Insert this word in your private dictionary
+so that Ispell will consider it correct it from now on.
+
+@item r
+Replace the word this time with a string typed by you.
+@end table
+
+When the Ispell process starts, it reads your private dictionary which
+is the file @file{~/ispell.words}. Words that you ``insert'' with the
+@kbd{i} command are added to that file, but not right away---only at the
+end of the interactive replacement procedure.
+
+@c !!! Written verbosely to avoid overfull hbox.
+@findex reload-ispell @r{(V19)}
+Use the @kbd{M-x reload-ispell} command
+to reload your private dictionary from
+@file{~/ispell.words} if you edit the file outside of Ispell.
+
+@node Mail Changes
+@section Changes in Mail Reading and Sending
+
+@cindex Mail mode in V19
+@samp{%} is now a word-separator character in Mail mode. This is because
+that character frequently appears in addresses.
+
+@vindex mail-signature @r{(V19)}
+If you set the variable @code{mail-signature} non-@code{nil}, then
+@code{mail} inserts the contents of your @file{.signature} file
+automatically when it initializes a mail buffer. If you don't want your
+signature in a particular message, just delete it from the buffer before
+you send the message.
+
+@vindex mail-yank-prefix @r{(V19)}
+You can specify the text to insert at the beginning of each line when
+you use @kbd{C-c C-y} to yank the message you are replying to. Set
+@code{mail-yank-prefix} to the desired string. A value of @code{nil}
+(the default) means to use indentation, as in Emacs 18. If you use
+@kbd{C-u} by itself as the prefix argument to @kbd{C-c C-y}, then it
+does not insert anything at the beginning of the lines, regardless of
+the value of @code{mail-yank-prefix}.
+
+@findex unrmail
+You can easily convert an Rmail file to system mailbox format with the
+command @code{unrmail}. This command reads two arguments, the name of
+the Rmail file to convert, and the name of the new mailbox file.
+The Rmail file is unchanged by this command.
+
+@cindex Rmail in V19
+Rmail now initially positions you at the first message in the Rmail file
+that you have not seen. This may not be a message that just arrived; it
+may have arrived in a previous session during which you did not select
+it. You can then read all the unseen messages going forwards.
+
+@kindex C-M-m @r{(Rmail in V19)}
+@findex rmail-retry-failure @r{(V19)}
+When a message that you sent ``bounces'' back to you, you can retry
+sending it by typing @kbd{C-M-m} (@code{rmail-retry-failure}) on the
+failure message.
+
+@findex rmail-resend @r{(V19)}
+By contrast, the new command @kbd{M-x rmail-resend} is used for
+forwarding a message and marking it as ``resentby'' you,
+with the special header fields @samp{Resent-by:} and @samp{Resent-to:}.
+
+@kindex < @r{(Rmail in V19)}
+Another new Rmail command is @kbd{<}, which moves to the first message.
+(This is for symmetry with @kbd{>}.) @kbd{<} is actually an alias for
+@kbd{j}.
+
+@kindex e @r{(Rmail in V19)}
+@kindex x @r{(Rmail in V19)}
+@c !!!! overfull hbox cured by ugly change
+@kbd{e} (@code{rmail-edit-current-message}) is now the command
+to edit a message. To expunge, type @kbd{x}. We know
+this will surprise people some of the time, but the surprise will not be
+disastrous---if you type @kbd{e} meaning to expunge, just type @kbd{C-c
+C-c} to leave Rmail Edit mode, and then type @kbd{x}.
+
+@vindex rmail-output-file-alist
+The variable @code{rmail-output-file-alist} now controls the default
+for the file to output a message to.
+
+@kindex C-n @r{(Rmail summary in V19)}
+@kindex C-p @r{(Rmail summary in V19)}
+@kindex M-n @r{(Rmail summary in V19)}
+@kindex M-p @r{(Rmail summary in V19)}
+@kindex p @r{(Rmail summary in V19)}
+@kindex n @r{(Rmail summary in V19)}
+In the Rmail summary, @kbd{C-n} and @kbd{C-p} are now ordinary cursor
+motion commands. To move in the summary @emph{and} select a new
+message, use @kbd{n} and @kbd{p} (which skip deleted messages) or
+@kbd{M-n} and @kbd{M-p} (which stop at all messages). These are, of
+course, the same commands you would use in the Rmail buffer.
+
+@node Tags Changes
+@section Changes in Tags Commands
+
+@cindex tags in V19
+@kindex M-. @r{(V19)}
+@kbd{M-.} (@code{find-tag}) and the other commands to find a tag now
+look first for an exact match in the tags table, and try substring
+matches only afterward.
+
+Another change in @kbd{M-.} is that it has no effect on what @kbd{M-,}
+will do subsequently. You can no longer use @kbd{M-,} to find the next
+similar tag; instead, use @kbd{M-.} with a prefix argument.
+
+@findex find-tag-regexp @r{(V19)}
+The new command @code{find-tag-regexp} successively visits the tags that
+match a specified regular expression.
+
+You can now use more than one tags table. Using @code{visit-tags-table}
+to load a new tags table does not discard the other tables previously
+loaded. The other tags commands use all the tags tables that are
+loaded; the first one they use is the one that mentions the current
+visited file.
+
+You can specify a precise list of tags tables by setting the variable
+@code{tags-table-list} to a list of strings, like this:
+
+@c keep this on two lines for formatting in smallbook
+@example
+@group
+(setq tags-table-list
+ '("~/emacs" "/usr/local/lib/emacs/src"))
+@end group
+@end example
+
+@noindent
+This tells @code{find-tag} to look at the @file{TAGS} files in your
+@file{~/emacs} directory and in the @file{/usr/local/lib/emacs/src}
+directory. The order depends on which file you are in and which tags
+table mentions that file, as explained above.
+
+@kindex M-@key{TAB} @r{(V19)}
+You can now use the tags table for completion of names during ordinary
+editing. The command @kbd{M-@key{TAB}} (except in Emacs Lisp and Lisp
+Interaction modes) completes the identifier in the buffer before point,
+using the set of all tags as the list of possible completions.
+
+@code{tags-query-replace} and @code{tags-search} now create buffers only
+temporarily for the files that they have to search (those which are not
+already visited in Emacs buffers). If one of these files contains a
+match for the search pattern, then its buffer continues to exist;
+otherwise, it is killed.
+
+@node Info Changes
+@section Changes in Info
+
+@cindex Info mode in V19
+There are new commands in Info mode.
+
+@c I don't think individual index entries for these commands
+@c are useful. I don't think anyone would ever look them up.--RMS.
+@table @kbd
+@item ]
+Move forward a node, going up and down levels as needed in a depth-first
+tree walk. This command treats all the nodes in the file as forming a
+single sequence in which the ``children'' of a node follow that node.
+It is the equivalent of reading a printed manual sequentially.
+
+@item [
+Similar, but move backward.
+
+@item <
+Move to the top node of the current Info file.
+
+@item >
+Move to the last node of the file.
+
+@c ??? Not done yet
+@item @key{SPC}
+Scroll through this node, or advance to the next node in depth-first
+order (like @kbd{]}).
+
+@c ??? Not done yet
+@item i @var{string} @key{RET}
+Move to the node associated with @var{string} in the index or indices of
+this manual. If there is more than one match for @var{string}, the
+@kbd{i} command finds the first match.
+
+@c ??? Not done yet
+@item ,
+Find the next match for the string in the previous @kbd{i} command, and
+go to that node.
+@end table
+
+If you click the middle mouse button near a cross-reference,
+menu item or node pointer while in Info, you will go to the node
+which is referenced.
+
+@vindex Info-directory-list @r{(V19)}
+@vindex INFOPATH
+The variable @code{Info-directory-list} specifies a list of directory
+names that contain Info files. Each time Info looks for an Info file,
+it searches all these directories. This makes it easy to install the
+Info files that come with various packages. You can specify the path
+with the environment variable @code{INFOPATH}.
+
+@node Dired Changes
+@section Changes in Dired
+
+@cindex Dired in V19
+Dired has many new features which allow you to do these things:
+
+@itemize @bullet
+@item
+Make distinguishable types of marks for different operations.
+
+@item
+Rename, copy, or make links to many files at once.
+
+@item
+Display contents of subdirectories in the same Dired buffer as the
+parent directory.
+@end itemize
+
+@menu
+* Marks in Dired:: Flagging for deletion vs marking for other actions.
+* Multiple Files:: How to copy, rename, print, compress, etc.
+ either one file or several files.
+* Shell Commands in Dired:: Running a shell command on the marked files.
+* Dired Regexps:: Using patterns to rename multiple files.
+* Dired Case Conversion:: Converting file names to upper or lower case.
+* Comparison in Dired:: Running `diff' by way of Dired.
+* Subdirectories in Dired:: Adding subdirectories to the Dired buffer.
+* Hiding Subdirectories:: Making subdirectories visible or invisible.
+* Editing Dired Buffer:: Discarding lines for files of no interest.
+* Dired and Find:: Using `find' to select the files for Dired to show.
+@end menu
+
+@node Marks in Dired
+@subsection Setting and Clearing Marks
+
+@cindex Marks in Dired (V19)
+There are now two kinds of marker that you can put on a file in Dired:
+@samp{D} for deletion, and @samp{*} for any other kind of operation.
+The @kbd{x} command deletes only files marked with @samp{D}, and most
+other Dired commands operate only on the files marked with @samp{*}.
+
+To mark files with @samp{D} (also called @dfn{flagging} the files), you
+can use @kbd{d} as usual. Here are some commands for marking with
+@samp{*} (and also for unmarking):
+
+@table @kbd
+@kindex m @r{(Dired, V19)}
+@findex dired-mark @r{(V19)}
+@item m
+Mark the current file with @samp{*}, for an
+operation other than deletion (@code{dired-mark}).
+
+@kindex * @r{(Dired, V19)}
+@findex dired-mark-executables @r{(V19)}
+@item *
+Mark all executable files (@code{dired-mark-executables}).
+With a prefix argument, unmark all those files.
+
+@item @@
+@kindex @@ @r{(Dired, V19)}
+@findex dired-mark-symlinks @r{(V19)}
+Mark all symbolic links (@code{dired-mark-symlinks}). With a
+prefix argument, unmark all those files.
+
+@item /
+@kindex / @r{(Dired, V19)}
+@findex dired-mark-directories @r{(V19)}
+Mark all files which are actually directories, except for @file{.} and
+@file{..} (@code{dired-mark-directories}). With a prefix argument,
+unmark all those files.
+
+@item M-@key{DEL}
+@kindex M-@key{DEL} @r{(Dired, V19)}
+@findex dired-unmark-all-files @r{(V19)}
+Remove a specific or
+all marks from every file (@code{dired-unmark-all-files}).
+With an argument, query for each marked file.
+Type your help character, usually @kbd{C-h}, at that time for help.
+
+@item c @var{old} @var{new}
+@kindex c @r{(Dired, V19)}
+@findex dired-change-marks @r{(V19)}
+Replace all marks that use the character @var{old} with marks that use
+the character @var{new}. You can use almost any character as a mark
+character by means of this command, to distinguish various classes of
+files. If @var{old} is @samp{ }, then the command operates on all
+unmarked files; if @var{new} is @samp{ }, then the command unmarks the
+files it acts on.
+
+To illustrate the power of this command, here is how to put @samp{*}
+marks on all the files that were unmarked, while unmarking all those
+that had @samp{*} marks:
+
+@example
+c * t c SPC * c t SPC
+@end example
+@end table
+
+@node Multiple Files
+@subsection Operating on Multiple Files
+
+@cindex Multiple file ops, Dired (V19)
+@cindex Dired multiple file ops (V19)
+The Dired commands to operate on files (rename them, copy them, and so
+on) have been generalized to work on multiple files. There are also
+some additional commands in this series.
+
+All of these commands use the same convention to decide which files to
+manipulate:
+
+@itemize @bullet
+@item
+If you give the command a numeric prefix argument @var{n}, it operates
+on the next @var{n} files, starting with the current file.
+
+@item
+Otherwise, if there are marked files, the commands operate on all the
+marked files.
+
+@item
+Otherwise, the command operates on the current file only.
+@end itemize
+
+Here are the commands that operate on multiple files in this way:
+
+@table @kbd
+@findex dired-do-copy @r{(V19)}
+@kindex C @r{(Dired, V19)}
+@item C
+Copy the specified files (@code{dired-do-copy}). You must
+specify a directory to copy into, or (if copying a single file) a new
+name.
+
+@vindex dired-copy-preserve-time @r{(V19)}
+If @code{dired-copy-preserve-time} is non-@code{nil}, then copying with
+this command sets the modification time of the new file to be the same
+as that of the old file.
+
+@findex dired-do-rename @r{(V19)}
+@kindex R @r{(Dired, V19)}
+@item R
+Rename the specified files (@code{dired-do-rename}). You must
+specify a directory to rename into, or (if renaming a single file) a new
+name.
+
+Dired automatically changes the visited file name of buffers associated
+with renamed files so that they refer to the new names.
+
+@findex dired-do-hardlink @r{(V19)}
+@kindex H @r{(Dired, V19)}
+@item H
+Make hard links to the specified
+files (@code{dired-do-hardlink}).
+You must specify a directory to make the links in, or (if making
+just one link) the name to give the link.
+
+@findex dired-do-symlink @r{(V19)}
+@kindex S @r{(Dired, V19)}
+@item S
+Make symbolic links to the specified
+files (@code{dired-do-symlink}).
+You must specify a directory to make the links in, or (if making
+just one link) the name to give the link.
+
+@findex dired-do-chmod @r{(V19)}
+@kindex M @r{(Dired, V19)}
+@item M
+Change the mode (also called ``permission bits'')
+of the specified files (@code{dired-do-chmod}). This calls the
+@code{chmod} program, so you can describe the desired mode change with
+any argument that @code{chmod} would handle.
+
+@findex dired-do-chgrp @r{(V19)}
+@kindex G @r{(Dired, V19)}
+@item G
+Change the group of the specified files (@code{dired-do-chgrp}).
+
+@vindex dired-chown-program @r{(V19)}
+@findex dired-do-chown @r{(V19)}
+@kindex O @r{(Dired, V19)}
+@item O
+Change the owner of the specified
+files (@code{dired-do-chown}).
+(On most systems, only the superuser can do this.)
+
+The variable @code{dired-chown-program} specifies the name of the
+program to use to do the work (different systems put @code{chown} in
+different places.
+
+@findex dired-do-compress @r{(V19)}
+@kindex Z @r{(Dired, V19)}
+@item Z
+@c !!! Rewrote to prevent overfull hbox.
+Compress or uncompress the specified files.
+If the file appears to be a compressed file, it is uncompressed;
+otherwise, it is compressed (@code{dired-do-compress}).
+
+@findex dired-do-load @r{(V19)}
+@kindex L @r{(Dired, V19)}
+@item L
+Load the specified Emacs Lisp files (@code{dired-do-load}).
+
+@findex dired-do-byte-compile @r{(V19)}
+@kindex B @r{(Dired, V19)}
+@item B
+Byte compile the specified Emacs Lisp files
+(@code{dired-do-byte-compile}).
+
+@findex dired-do-print @r{(V19)}
+@kindex P @r{(Dired, V19)}
+@item P
+Print the specified files (@code{dired-do-print}). This command uses
+the variables @code{lpr-command} and @code{lpr-switches} just as
+@code{lpr-file} does (@pxref{Hardcopy}).
+@end table
+
+@node Shell Commands in Dired
+@subsection Shell Commands in Dired
+@cindex shell commands, Dired V19
+
+@findex dired-do-shell-command @r{(V19)}
+@kindex ! @r{(Dired, V19)}
+The dired command @kbd{!} (@code{dired-do-shell-command}) reads a shell
+command string in the minibuffer and runs the shell command on all the
+specified files. There are two ways of applying a shell command to
+multiple files:
+
+@itemize @bullet
+@item
+If you use @samp{*} in the shell command, then it runs just once, with
+the list of file names substituted for the @samp{*}.
+
+Thus, @kbd{! tar cf foo.tar * @key{RET}} runs @code{tar} on the entire
+list of file names, putting them into one tar file @file{foo.tar}. The
+file names are inserted in the order that they appear in the Dired
+buffer.
+
+@item
+If the command string doesn't contain @samp{*}, then it runs once
+@emph{for each file}, with the file name attached at the end.
+
+For example, @kbd{! uudecode @key{RET}} runs @code{uudecode} on each
+file.
+@end itemize
+
+What if you want to run the shell command once for each file but with
+the file name inserted in the middle? Or if you want to use the file
+names in a more complicated fashion? Use a shell loop. For example,
+this shell command would run @code{uuencode} on each of the specified
+files, writing the output into a corresponding @file{.uu} file:
+
+@example
+for file in *; uuencode $file $file >$file.uu; done
+@end example
+
+The working directory for the shell command is the top level directory
+of the Dired buffer.
+
+The @kbd{!} command does not attempt to update the Dired buffer to show
+new or modified files, because it doesn't know what those files might
+be. Type @kbd{g} to update the Dired buffer.
+
+@node Dired Regexps
+@subsection Regular Expression File Name Substitution
+
+Here are commands that select files according to a regular
+expression:
+
+@table @kbd
+@findex dired-mark-files-regexp @r{(V19)}
+@kindex % m @r{(Dired, V19)}
+@item % m @var{regexp} @key{RET}
+Mark all files whose names match the regular expression @var{regexp}
+(@code{dired-mark-files-regexp}).
+
+Only the non-directory part of the file name is used in matching. Use
+@samp{^} and @samp{$} to anchor matches. Exclude subdirs by hiding
+them (@pxref{Hiding Subdirectories}).
+
+@item % d @var{regexp} @key{RET}
+@findex dired-flag-files-regexp @r{(V19)}
+@kindex % d @r{(Dired, V19)}
+Flag for deletion all files whose names match the regular expression
+@var{regexp} (@code{dired-flag-files-regexp}).
+
+@item % R @var{from} @key{RET} @var{to} @key{RET}
+@kindex % R @r{(Dired, V19)}
+@findex dired-do-rename-regexp @r{(V19)}
+@itemx % C @var{from} @key{RET} @var{to} @key{RET}
+@kindex % C @r{(Dired, V19)}
+@findex dired-do-copy-regexp @r{(V19)}
+@itemx % H @var{from} @key{RET} @var{to} @key{RET}
+@kindex % H @r{(Dired, V19)}
+@findex dired-do-hardlink-regexp @r{(V19)}
+@itemx % S @var{from} @key{RET} @var{to} @key{RET}
+@kindex % S @r{(Dired, V19)}
+@findex dired-do-symlink-regexp @r{(V19)}
+These four commands rename, copy, make hard links and make soft links,
+in each case computing the new name by regular expression substitution
+from the name of the old file.
+@end table
+
+The four regular expression substitution commands effectively perform
+@code{query-replace-regexp} on the selected file names in the Dired
+buffer. They read two arguments: a regular expression @var{from}, and a
+substitution pattern @var{to}. Each selected file name is matched
+against the regular expression, and then the part which matched is
+replaced with the substitution pattern. You can use @samp{\&} and
+@samp{\@var{digit}} in the substitution pattern to refer to all or part
+of the old file name.
+@c ??? xref{???query replace???}.
+
+Thus, @kbd{% R ^.*$ @key{RET} x-\& @key{RET}} renames each selected file
+by prepending @samp{x-} to its name. The inverse of this is to remove
+@samp{x-} from the front of each file name. One way to do that is
+@kbd{% R ^x-.*$ @key{RET} \& @key{RET}}; another is @w{@kbd{% R ^x-
+@key{RET} @key{RET}}}. (Use @samp{^} and @samp{$} to anchor matches that
+should span the whole filename.)
+
+If the regular expression matches more than once in a file name,
+only the first match is replaced.
+
+Normally, the replacement process does not consider the directory names;
+it operates on the file name within the directory. If you specify a
+prefix argument of zero, then replacement affects the entire file name.
+
+Often you will want to apply the command to all files matching the same
+@var{regexp} that you use in the command. To do this, mark those files
+with @w{@kbd{% m @var{regexp} @key{RET}}}, then use the same regular
+expression in @kbd{% R}. To make this easier, @kbd{% R} uses the
+last regular expression specified in a @kbd{%} command as a default.
+
+@node Dired Case Conversion
+@subsection Dired Case Conversion
+@cindex case conversion of file names @r{(V19)}
+
+Here are commands for changing the case of selected files:
+
+@table @code
+@findex dired-upcase @r{(V19)}
+@kindex % u @r{(Dired, V19)}
+@item % u
+Rename each of the selected files to an
+upper case name (@code{dired-upcase}).
+
+@item % l
+@findex dired-downcase @r{(V19)}
+@kindex % l @r{(Dired, V19)}
+Rename each of the selected files to
+a lower case name (@code{dired-downcase}).
+@end table
+
+@node Comparison in Dired
+@subsection File Comparison with Dired
+
+Here are two commands to run @code{diff} on selected files:
+
+@table @kbd
+@findex dired-diff @r{(V19)}
+@kindex = @r{(Dired, V19)}
+@item =
+Compare the current file with another file (the file at the mark), by
+running the @code{diff} program (@code{dired-diff}). The file at the
+mark is the first argument of @code{diff}, and the file at point is the
+second argument.
+
+@findex dired-backup-diff @r{(V19)}
+@kindex M-= @r{(Dired, V19)}
+@item M-=
+Compare the current file with its
+backup file (@code{dired-backup-diff}).
+If there are several numerical backups, use the most
+recent one. If this file is a backup, compare it to its
+original. The backup file is the first file given to @code{diff}.
+@end table
+
+@node Subdirectories in Dired
+@subsection Subdirectories in Dired
+@cindex subdirectories in Dired (V19)
+@cindex expanding subdirectories in Dired (V19)
+
+One Dired buffer can now display more than one directory.
+
+The simplest way to include multiple directories is to specify the
+options @samp{-lR} for running @code{ls}. That produces a recursive
+directory listing showing all subdirectories, all within the same Dired
+buffer.
+
+But the simplest way is not usually the most convenient way---usually
+the complete recursive listing is more than you want. So there is a
+Dired command to insert a single subdirectory into the Dired buffer:
+
+@table @kbd
+@findex dired-maybe-insert-subdir @r{(V19)}
+@kindex i @r{(Dired, V19)}
+@item i
+@cindex inserted subdirectory (Dired, V19)
+@cindex expanded subdirectory (Dired, V19)
+@cindex in-situ subdirectory (Dired, V19)
+@cindex headerline (Dired, V19)
+Use the @kbd{i} (@code{dired-maybe-insert-subdir}) command on a line
+that describes a file which is a directory. It inserts the contents of
+that directory into the same Dired buffer. Inserted subdirectory
+contents follow the top-level directory of the Dired buffer, just as
+they do in @samp{ls -lR} output.
+
+If the subdirectory's contents are already present in the buffer, the
+@kbd{i} command just moves to it (type @kbd{l}
+(@code{dired-do-redisplay}) to refresh it). It sets the Emacs mark
+before moving, so @kbd{C-x C-x} takes you back to the old position in
+the buffer.
+@end table
+
+When you have subdirectories in the Dired buffer, you can use the page
+motion commands @kbd{C-x [} and @kbd{C-x ]} to move by entire directories.
+
+The following commands move up and down in the tree of directories
+in one Dired buffer:
+
+@table @kbd
+@findex dired-tree-up @r{(V19)}
+@kindex C-M-u @r{(Dired, V19)}
+@item C-M-u
+Go up to the parent directory's headerline (@code{dired-tree-up}).
+
+@findex dired-tree-down @r{(V19)}
+@kindex C-M-d @r{(Dired, V19)}
+@item C-M-d
+Go down in the tree, to the first
+subdirectory's headerline (@code{dired-tree-down}).
+@end table
+
+The following commands move forwards and backwards to subdirectory headerlines:
+
+@table @kbd
+@findex dired-next-subdir @r{(V19)}
+@kindex C-M-n @r{(Dired, V19)}
+@item C-M-n
+Go to next subdirectory headerline,
+regardless of level (@code{dired-next-subdir}).
+
+@findex dired-prev-subdir @r{(V19)}
+@kindex C-M-p @r{(Dired, V19)}
+@item C-M-p
+@c !!! added @* to prevent overfull hbox
+Go to previous subdirectory headerline,
+regardless of level@*
+(@code{dired-prev-subdir}).
+@end table
+
+@node Hiding Subdirectories
+@subsection Hiding Subdirectories
+
+@cindex hiding in Dired (Dired, V19)
+@dfn{Hiding} a subdirectory means to make it invisible, except for its
+headerline. Files inside a hidden subdirectory are never considered by
+Dired. For example, the commands to operate on marked files ignore
+files in hidden directories even if they are marked. Thus you can use
+hiding to temporarily exclude subdirectories from operations without
+having to remove the markers.
+
+The hiding commands toggle; that is they unhide what was hidden and vice
+versa.
+
+@table @kbd
+@item $
+@findex dired-hide-subdir @r{(V19)}
+@kindex $ @r{(Dired, V19)}
+Hide or reveal the current subdirectory and move point to the next
+subdirectory (@code{dired-hide-subdir}). A prefix argument serves as
+a repeat count.
+
+@item M-$
+@findex dired-hide-all @r{(V19)}
+@kindex M-$ @r{(Dired, V19)}
+Hide all subdirectories, leaving only their header lines
+(@code{dired-hide-all}). Or, if any subdirectory is currently hidden,
+make all subdirectories visible again. You can use this command to get
+an overview in very deep directory trees or to move quickly to
+subdirectories far away.
+@end table
+
+@node Editing Dired Buffer
+@subsection Editing the Dired Buffer
+
+@table @kbd
+@kindex l @r{(Dired, V19)}
+@findex dired-do-redisplay @r{(V19)}
+@item l
+@c !!! rewrote to prevent overfull hbox
+Update the specified files in a Dired buffer. This means reading their
+current status from the file system and changing the buffer to reflect
+it properly (@code{dired-do-redisplay}).
+
+If you use this command on a subdirectory header line, it updates the
+contents of the subdirectory.
+
+@kindex g @r{(Dired, V19)}
+@findex revert-buffer @r{(Dired, V19)}
+@item g
+Update the entire contents of the Dired buffer
+(@code{revert-buffer}). Preserve all marks except for those on files
+that have vanished. Hidden subdirectories are updated but remain
+hidden.
+
+@kindex k @r{(Dired, V19)}
+@findex dired-do-kill-lines @r{(V19)}
+@item k
+Kill all marked lines (@code{dired-do-kill-lines}). With a prefix
+argument, kill that many lines starting with the current line.
+
+This command does not delete files; it just deletes text from the Dired
+buffer.
+
+If you kill the line for a file that is a directory, then its contents
+are also deleted from the buffer. Typing @kbd{C-u k} on the header line
+for a subdirectory is another way to delete a subdirectory from the
+Dired buffer.
+
+The @kbd{g} command will bring back any individual lines that you have
+killed in this way, but not subdirectories---you must use @kbd{i} to
+reinsert each subdirectory.
+@end table
+
+@node Dired and Find
+@subsection Dired and @code{find}
+@cindex @code{find} and Dired
+
+ You can select a set of files for display in a Dired buffer more
+flexibly by using the @code{find} utility to choose the files.
+
+@findex find-name-dired
+To search for files with names matching a wildcard pattern use
+@code{find-name-dired}. Its arguments are @var{directory} and
+@var{pattern}. It selects all the files in @var{directory} or its
+subdirectories whose own names match @var{pattern}.
+
+The files thus selected are displayed in a Dired buffer in which the
+ordinary Dired commands are available.
+
+@findex find-grep-dired
+If you want to test the contents of files, rather than their names, use
+@code{find-grep-dired}. This command takes two minibuffer arguments,
+@var{directory} and @var{regexp}; it selects all the files in
+@var{directory} or its subdirectories that contain a match for
+@var{regexp}. It works by running @code{find} and @code{grep}.
+
+@findex find-dired
+The most general command in this series is @code{find-dired}, which lets
+you specify any condition that @code{find} can test. It takes two
+minibuffer arguments, @var{directory} and @var{find-args}; it runs
+@code{find} in @var{directory} with @var{find-args} as the
+arguments to @code{find} that specify which files to accept. To use this
+command, you need to know how to use @code{find}.
+
+@node GNUS
+@section GNUS
+@cindex @sc{gnus}
+@cindex reading netnews
+
+@sc{gnus} is an Emacs subsystem for reading and responding to netnews. You
+can use @sc{gnus} to browse through news groups, look at summaries of
+articles in specific group, and read articles of interest. You can
+respond to authors or write replies to all the readers of a news group.
+
+This document introduces @sc{gnus} and describes several basic features.
+Full documentation will appear in @cite{The GNU Emacs Extensions Manual}.
+
+@kindex M-x gnus @r{(V19)}
+@findex gnus @r{(V19)}
+To start @sc{gnus}, type @kbd{M-x gnus @key{RET}}.
+
+@menu
+* Buffers of GNUS:: The Newsgroups, Summary and Article buffers.
+* GNUS Startup:: What you should know about starting GNUS.
+* Summary of GNUS:: A short description of the basic GNUS commands.
+@end menu
+
+@node Buffers of GNUS
+@subsection @sc{GNUS}'s Three Buffers
+
+@sc{gnus} creates and uses three Emacs buffers, each with its own
+particular purpose and its own major mode.
+
+The @dfn{Newsgroup buffer} contains a list of newsgroups. This is the
+first buffer that @sc{gnus} displays when it starts up. Normally the list
+contains only the newsgroups to which you subscribe (which are listed in
+your @file{.newsrc} file) and which contain unread articles. Use this
+buffer to select a specific newsgroup.
+
+The @dfn{Summary buffer} lists the articles in a single newsgroup,
+including their subjects, their numbers, and who posted them. @sc{gnus}
+creates a Summary buffer for a newsgroup when you select the group in
+the Newsgroup buffer. Use this buffer to select an article, and to move
+around in an article.
+
+The @dfn{Article buffer} displays the text of an article. You rarely
+need to select this buffer because you can read the text while keeping
+the Summary buffer selected.
+
+@node GNUS Startup
+@subsection When @sc{GNUS} Starts Up
+
+At startup, @sc{gnus} reads your @file{.newsrc} news initialization file
+and attempts to communicate with the local news server, which is a
+repository of news articles. The news server need not be the same
+computer you are logged in on.
+
+If you start @sc{gnus} and connect to the server, but do not see any
+newsgroups listed in the Newsgroup buffer, type @kbd{L} to get a listing
+of all the newsgroups. Then type @kbd{u} to unsubscribe from particular
+newsgroups. (Move the cursor using @kbd{n} and @kbd{p} or the usual
+Emacs commands.) When you quit with @kbd{q}, @sc{gnus} automatically
+records the subscribed groups in your @file{.newsrc} initialization
+file. (You do not have to edit this file yourself, although you may.)
+Next time you start @sc{gnus}, you will see only the subscribed groups.
+
+@node Summary of GNUS
+@subsection Summary of GNUS Commands
+
+Reading news is a two step process:
+
+@enumerate
+@item
+Choose a newsgroup in the Newsgroup buffer.
+
+@item
+Choose an article in the Summary buffer. The article is displayed in
+the Article buffer in a large window, below the Summary buffer in its
+small window.
+@end enumerate
+
+Each buffer has commands particular to it, but commands that do the same
+things have similar keybindings. Here are commands for the Newsgroup
+and Summary buffers:
+
+@table @kbd
+@kindex z @r{(Group mode)} @r{(GNUS, V19)}
+@findex gnus-Group-suspend @r{(V19)}
+@item z
+In the Newsgroup buffer, suspend @sc{gnus}. You can return to @sc{gnus} later by
+selecting the Newsgroup buffer and typing @kbd{g} to get newly arrived
+articles.
+
+@kindex q @r{(Group mode)} @r{(GNUS, V19)}
+@findex gnus-Group-exit @r{(V19)}
+@item q
+In the Newsgroup buffer, update your @file{.newsrc} initialization file
+and quit @sc{gnus}.
+
+In the Summary buffer, exit the current newsgroup and return to the
+Newsgroup buffer. Thus, typing @kbd{q} twice quits @sc{gnus}.
+
+@kindex L @r{(Group mode)} @r{(GNUS, V19)}
+@findex gnus-Group-list-all-groups @r{(V19)}
+@item L
+In the Newsgroup buffer, list all the newsgroups available on your news
+server. This may be a long list!
+
+@kindex l @r{(Group mode)} @r{(GNUS, V19)}
+@findex gnus-Group-list-groups @r{(V19)}
+@item l
+In the Newsgroup buffer, list only the newsgroups to which you subscribe
+and which contain unread articles.
+
+@kindex u @r{(Group mode)} @r{(GNUS, V19)}
+@findex gnus-Group-unsubscribe-current-group @r{(V19)}
+@cindex subscribe newsgroups (V19)
+@cindex unsubscribe newsgroups (V19)
+@item u
+In the Newsgroup buffer, unsubscribe from (or subscribe to) the
+newsgroup listed in the line that point is on. When you quit @sc{gnus} by
+typing @kbd{q}, @sc{gnus} lists your subscribed-to newsgroups in your
+@file{.newsrc} file. The next time you start @sc{gnus}, you see only the
+newsgroups listed in your @file{.newsrc} file.
+
+You may also edit your @file{.newsrc} file directly in Emacs. First quit
+@sc{gnus}, then visit the @file{.newsrc} file. For example, you can remove
+all the @file{alt.} groups by going to the beginning of the file and
+typing @kbd{M-x flush-lines RET alt RET}. Next time you start @sc{gnus}, you
+will see only the newsgroups still listed in the @file{.newsrc} file.
+
+@kindex SPC @r{(Group mode)} @r{(GNUS, V19)}
+@findex gnus-Group-read-group @r{(V19)}
+@item @key{SPC}
+In the Newsgroup buffer, select the group on the line under the cursor
+and display the first unread article in that group.
+
+@kindex SPC @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-next-page @r{(V19)}
+@need 1000
+In the Summary buffer,
+
+@itemize @minus
+@item
+Select the article on the line under the cursor if none is selected.
+
+@item
+Scroll the text of the article if one is selected.
+
+@item
+Select the next unread article if at the end of the current article.
+@end itemize
+
+Thus, you can move through all the articles by repeatedly typing @key{SPC}.
+
+@kindex DEL @r{(Group mode)} @r{(GNUS, V19)}
+@item @key{DEL}
+In the Newsgroup Buffer, move point to the previous newsgroup containing
+unread articles.
+
+@kindex DEL @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-prev-page @r{(V19)}
+In the Summary buffer, scroll the text of the article backwards.
+
+@kindex n @r{(Group mode)} @r{(GNUS, V19)}
+@findex gnus-Group-next-unread-group @r{(V19)}
+@item n
+Move point to the next unread newsgroup, or select the next unread
+article.
+
+@kindex p @r{(Group mode)} @r{(GNUS, V19)}
+@findex gnus-Group-prev-unread-group @r{(V19)}
+@item p
+Move point to the previous unread newsgroup, or select the previous
+unread article.
+
+@kindex C-n @r{(Group mode)} @r{(GNUS, V19)}
+@findex gnus-Group-next-group @r{(V19)}
+@kindex C-p @r{(Group mode)} @r{(GNUS, V19)}
+@findex gnus-Group-prev-group @r{(V19)}
+@kindex C-n @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-next-subject @r{(V19)}
+@kindex C-p @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-prev-subject @r{(V19)}
+@itemx C-n
+@itemx C-p
+Move point to the next or previous item, even if it is marked as read.
+This does not select the article or newsgroup on that line.
+
+@kindex s @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-isearch-article @r{(V19)}
+@item s
+In the Summary buffer, do an incremental search of the current text in
+the Article buffer, just as if you switched to the Article buffer and
+typed @kbd{C-s}.
+
+@kindex M-s @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-search-article-forward @r{(V19)}
+@item M-s @var{regexp} RET
+In the Summary buffer, search forward for articles containing a match
+for @var{regexp}.
+
+@c kindex C-c C-s C-n @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-sort-by-number @r{(V19)}
+@c kindex C-c C-s C-s @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-sort-by-subject @r{(V19)}
+@c kindex C-c C-s C-d @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-sort-by-date @r{(V19)}
+@c kindex C-c C-s C-a @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-sort-by-author @r{(V19)}
+@item C-c C-s C-n
+@itemx C-c C-s C-s
+@itemx C-c C-s C-d
+@itemx C-c C-s C-a
+In the Summary buffer, sort the list of articles by number, subject,
+date, or author.
+
+@kindex C-M-n @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-next-same-subject @r{(V19)}
+@kindex C-M-p @r{(Summary mode)} @r{(GNUS, V19)}
+@findex gnus-Summary-prev-same-subject @r{(V19)}
+@item C-M-n
+@itemx C-M-p
+In the Summary buffer, read the next or previous article with the same
+subject as the current article.
+@end table
+
+@ignore
+@node Where to Look
+@subsection Where to Look Further
+
+@c Too many references to the name of the manual if done with xref in TeX!
+@sc{gnus} is powerful and customizable. Here are references to a few
+@ifinfo
+additional topics:
+
+@end ifinfo
+@iftex
+additional topics in @cite{The GNUS Manual}:
+
+@itemize @bullet
+@item
+Follow discussions on specific topics.@*
+See section ``Thread-based Reading''.
+
+@item
+Read digests. See section ``Digest Articles''
+
+@item
+Refer to and jump to the parent of the current article.@*
+See section ``Referencing Articles''.
+
+
+@item
+Refer to articles by using Message-IDs included in the messages.@*
+See section ``Article Commands''.
+
+@item
+Save articles. See section ``Saving Articles''.
+
+@item
+Create filters that preselect which articles you will see, according to
+regular expressions in the articles or their headers.@*
+See section ``Kill File''.
+
+@item
+Send an article to a newsgroup.@*
+See section ``Posting Articles''.
+@end itemize
+@end iftex
+@ifinfo
+@itemize @bullet
+@item
+Follow discussions on specific topics.@*
+@xref{Thread-based Reading, , Reading Based on Conversation Threads,
+gnus, The GNUS Manual}.
+
+@item
+Read digests. @xref{Digest Articles, , , gnus, The GNUS Manual}.
+
+@item
+Refer to and jump to the parent of the current article.@*
+@xref{Referencing Articles, , , gnus, The GNUS Manual}.
+
+
+@item
+Refer to articles by using Message-IDs included in the messages.@*
+@xref{Article Commands, , , gnus, The GNUS Manual}.
+
+@item
+Save articles. @xref{Saving Articles, , , gnus, The GNUS Manual}.
+
+@item
+Create filters that preselect which articles you will see, according to
+regular expressions in the articles or their headers.@*
+@xref{Kill File, , , gnus, The GNUS Manual}.
+
+@item
+Send an article to a newsgroup.@*
+@xref{Posting Articles, , , gnus, The GNUS Manual}.
+@end itemize
+@end ifinfo
+@end ignore
+
+@node Calendar/Diary
+@section Calendar and Diary
+
+The calendar facility in Emacs 19 is almost completely new, and it
+comes with a diary feature. You can use the diary to keep track of
+appointments, anniversaries, and other events.
+@c ??? reference to top node, Diary in GNU Emacs Calendar
+@c @xref{diary, , Diary, calendar, The GNU Emacs Calendar}, for more
+@c complete information.
+
+To use the diary, you must write diary entries in a particular file,
+called your @dfn{diary file}. Its name is @file{~/diary}. Emacs
+displays the entries for particular dates by finding them in the diary
+file, formatting them, and displaying them in a diary display buffer.
+
+@menu
+* Calendar:: New features of the calendar proper.
+* Entries: Diary Entries. The location and form of a diary entry.
+* New Entries:: Inserting diary entries using the calendar.
+* Displaying Diary:: How to display diary entries from the calendar.
+* European Calendar Style :: Day-month-year style for dates.
+* Simple and Fancy:: The diary has two modes for display.
+* Other Diary Features:: The diary has many advanced commands.
+* Startup Diary:: How to display your diary when you start Emacs.
+* Printing Diary:: Print selected entries of the diary.
+@end menu
+
+@node Calendar
+@subsection Calendar
+@cindex calendar @r{(V19)}
+
+In Emacs 19 you can use ordinary Emacs cursor commands to move through
+the calendar, which scrolls automatically to display different months or
+different years. Character motion translates to days, line motion to
+weeks, sentence and paragraph motion to months, and page motion to
+years. The vertical and horizontal scroll commands also handle the
+calendar suitably.
+
+@c The index entries for the key bindings of Calendar and Diary modes
+@c are commented out because they don't seem very useful.
+@c @kindex p d (Calendar mode)
+@c @kindex g d (Calendar mode)
+@c @kindex . (Calendar mode)
+@kbd{p d} displays the selected date as a day within the year. @kbd{g
+d} selects a date given as month, day, year. Type @kbd{.} to go back
+to today's date.
+
+@c @kindex M-= (Calendar mode)
+@findex calendar-count-days-region @r{(V19)}
+The command @kbd{M-=}, which normally gives the number of lines in the
+region, in Calendar mode gives the number of days in the region
+(@code{calendar-count-days-region}).
+
+The calendar facility also knows about other important calendars. The
+commands for these come in pairs; the commands to convert @emph{to}
+another calendar start with the @kbd{p} prefix (short for ``print''),
+and the commands to convert from another calendar start with the @kbd{g}
+prefix (short for ``go to''). Here is a complete list:
+
+@c !!! Insert line breaks to prevent overfull hboxes.
+@table @asis
+@item @kbd{g a}, @kbd{p a}
+@findex calendar-print-astro-date @r{(V19)}
+@findex calendar-goto-astro-date @r{(V19)}
+@cindex astronomical calendar
+@cindex Julian day number
+The astronomical calendar, a simple count of days elapsed since noon,
+Monday, January 1, 4713 B.C. on the Julian calendar. The number of days
+elapsed is also called the @dfn{Julian day number}
+(@code{calendar-goto-astro-date}, @code{calendar-print-astro-date}).
+
+@item @kbd{g c}, @kbd{p c}
+@c @kindex g c (Calendar mode)
+@c @kindex p c (Calendar mode)
+@findex calendar-print-iso-date @r{(V19)}
+@findex calendar-goto-iso-date @r{(V19)}
+@cindex ISO commercial calendar
+ISO commercial calendar@*
+(@code{calendar-goto-iso-date}, @code{calendar-print-iso-date}).
+
+@item @kbd{g f}, @kbd{p f}
+@c @kindex p f (Calendar mode)
+@findex calendar-goto-french-date @r{(V19)}
+@findex calendar-print-french-date @r{(V19)}
+@cindex French revolutionary calendar
+@c !!! added @* to prevent overfull hbox
+French revolutionary calendar@*
+(@code{calendar-goto-french-date},@*
+@code{calendar-print-french-date}).
+
+@item @kbd{g h}, @kbd{p h}
+@c @kindex g h (Calendar mode)
+@c @kindex p h (Calendar mode)
+@findex calendar-print-hebrew-date @r{(V19)}
+@findex calendar-goto-hebrew-date @r{(V19)}
+@cindex Hebrew calendar
+@c !!! added @* to prevent overfull hbox
+Hebrew calendar@*
+(@code{calendar-goto-hebrew-date},@*
+@code{calendar-print-hebrew-date}).
+
+@item @kbd{g i}, @kbd{p i}
+@c @kindex g i (Calendar mode)
+@c @kindex p i (Calendar mode)
+@findex calendar-print-islamic-date @r{(V19)}
+@findex calendar-goto-islamic-date @r{(V19)}
+@cindex Islamic calendar
+@c !!! added @* to prevent overfull hbox
+Islamic calendar@*
+(@code{calendar-goto-islamic-date},@*
+@code{calendar-print-islamic-date}).
+
+@item @kbd{g j}, @kbd{p j}
+@c @kindex g j (Calendar mode)
+@c @kindex p j (Calendar mode)
+@findex calendar-print-julian-date @r{(V19)}
+@findex calendar-goto-julian-date @r{(V19)}
+@cindex Julian calendar
+@c !!! added @* to prevent overfull hbox
+Julian calendar@*
+(@code{calendar-goto-julian-date},@*
+@code{calendar-print-julian-date}).
+
+@item @kbd{p m}
+@c @kindex p m (Calendar mode)
+@findex calendar-print-mayan-date @r{(V19)}
+@cindex Mayan calendar
+Mayan calendar (@code{calendar-print-mayan-date}).
+@end table
+
+@ignore
+ Several commands are needed to handle selecting dates in the Mayan
+calendar.
+
+@table @kbd
+@item g m l @var{baktun}.@var{katun}.@var{tun}.@var{uinic}.@var{kin} @key{RET}
+@cindex long count @r{(V19)}
+Move point to a date specified in the Mayan long count calendar
+(@code{calendar-goto-long-count-date}). The argument consists of numbers
+separated by periods.
+@item g m p t @var{number} @var{name} @key{RET}
+@cindex tzolkin @r{(V19)}
+Move point to the previous occurrence of a specified date in the Mayan
+tzolkin calendar (@code{calendar-previous-tzolkin-date}). Here @var{name}
+is one of the twenty tzolkin day names, and @var{number} is between 1 and 13.
+@item g m n t @var{number} @var{name} @key{RET}
+Move point to the next occurrence of a specified date in the
+tzolkin calendar (@code{calendar-next-tzolkin-date}).
+@item g m p h @var{kin} @var{uinal} @key{RET}
+@cindex haab @r{(V19)}
+Move point to the previous occurrence of a specified date in the Mayan
+haab calendar (@code{calendar-previous-haab-date}). Here @var{uinal}
+is a haab month name, and @var{kin} is a number from 1 to 19 (or 0).
+@item g m n h @var{kin} @var{uinal} @key{RET}
+Move point to the next occurrence of a specified date in the
+haab calendar (@code{calendar-next-haab-date}).
+@item g m p c @var{number} @var{name} @var{kin} @var{uinal} @key{RET}
+@cindex calendar round @r{(V19)}
+Move point to the previous occurrence of a specified date in the Mayan
+calendar round (@code{calendar-previous-calendar-round-date}). Specify
+a tzolkin date followed by a haab date.
+@item g m n c @var{number} @var{name} @var{kin} @var{uinal} @key{RET}
+Move point to the next occurrence of a specified date in the
+calendar round (@code{calendar-next-calendar-round-date}).
+@end table
+@end ignore
+
+@findex calendar-cursor-holidays @r{(V19)}
+@findex mark-calendar-holidays @r{(V19)}
+@findex calendar-unmark @r{(V19)}
+The calendar also knows the dates of standard holidays. Type @kbd{h}
+(@code{calendar-cursor-holidays}) to display a list of holidays for the
+selected date. This list appears in another window. Type @kbd{x}
+(@code{mark-calendar-holidays}) to mark each day that is a holiday with
+@samp{*} in the calendar itself. The command @kbd{u}
+(@code{calendar-unmark}) turns off this marking.
+
+@findex holidays @r{(V19)}
+At any time, you can use @kbd{M-x holidays} to display a list of
+holidays for the present month and the preceding and following months.
+
+@node Diary Entries
+@subsection Diary Entries
+@cindex diary entries (V19)
+
+@vindex diary-file @r{(V19)}
+To use the diary feature, you must write @dfn{diary entries} that
+describe plans associated with particular dates, and put them in your
+@dfn{diary file}, which is normally the file @file{~/diary}. You can
+specify a different name for it by setting the variable
+@code{diary-file}; you would do this before using any of the commands
+that operate on the diary.
+
+Diary file entries follow a simple convention: begin entries with a date
+at the beginning of a line, followed optionally by a time, and then by
+the text of the entry:
+
+@example
+@var{date} @var{optional-time-of-day} @var{text-of-entry}
+@end example
+
+@noindent
+To continue an entry over two or more lines, indent the second and
+subsequent lines. The lines of the entry after the first are called
+@dfn{continuation lines}. Other lines in the diary file that are not
+part of any entry are comment lines; Emacs does not display these.
+
+When you make diary entries using Calendar mode, Emacs inserts the date
+for you in the appropriate format and places the cursor so you can type
+the text of the entry.
+
+You can write entries in any order and Emacs will display the entries by
+date. However, time-of-day entries can be sorted chronologically only
+in a diary mode called Fancy mode; in Simple mode, Emacs displays
+time-of-day entries in their order in the diary file.
+
+@node Displaying Diary
+@subsection Calendar Commands to Display Diary Entries
+@cindex diary display (V19)
+@cindex display of diary (V19)
+
+In Calendar mode, use the following commands to display your diary
+entries:
+
+@table @kbd
+@findex view-diary-entries @r{(V19)}
+@c @kindex d (Calendar mode) @r{(V19)}
+@item d
+Display any diary entries for the date under the cursor
+(@code{view-diary-entries}).
+
+With a numeric argument, Emacs shows the diary entries for that many
+successive days, starting with and including the date under the cursor.
+Thus, @kbd{2 d} displays all the entries for the selected date and for
+the following day.
+
+@findex show-all-diary-entries @r{(V19)}
+@c @kindex s (Calendar mode) @r{(V19)}
+@item s
+Display your entire diary file (@code{show-all-diary-entries}).
+
+@findex mark-diary-entries @r{(V19)}
+@c @kindex m (Calendar mode) @r{(V19)}
+@item m
+In the calendar, mark all visible dates that have diary entries
+(@code{mark-diary-entries}).
+
+@findex calendar-unmark @r{(V19)}
+@c @kindex u (Calendar mode) @r{(V19)}
+@item u
+Unmark the calendar (@code{calendar-unmark}).
+@end table
+
+At any time, not just in Calendar mode, you can display today's diary
+entries by typing:
+
+@findex diary @r{(V19)}
+@example
+M-x diary
+@end example
+
+@noindent
+With a prefix argument @var{n}, this command displays diary entries for
+@var{n} successive days, starting from and including today.
+
+@node New Entries
+@subsection Calendar Commands for Making Diary Entries
+@cindex diary entries, inserting (V19)
+
+Calendar mode provides several commands to help you make diary file
+entries. These commands work by visiting the diary file and inserting
+the date information; you must finish the job by inserting the text of
+the entry, and then save the diary file with @kbd{C-x C-s}. The
+commands are:
+
+@table @kbd
+@findex insert-diary-entry @r{(V19)}
+@c @kindex i d (Calendar mode) @r{(V19)}
+@item i d
+Add a diary entry for the selected date in the calendar
+(@code{insert-diary-entry}).
+
+@findex insert-weekly-diary-entry @r{(V19)}
+@c @kindex i w (Calendar mode) @r{(V19)}
+@item i w
+Add a diary entry for the selected day of the week
+(@code{insert-weekly-diary-entry}). This entry is displayed each week
+on the selected day.
+
+@findex insert-monthly-diary-entry @r{(V19)}
+@c @kindex i m (Calendar mode) @r{(V19)}
+@item i m
+Add a diary entry for the selected day of the month
+(@code{insert-monthly-diary-entry}). This entry is displayed each month
+on the selected day.
+
+@findex insert-yearly-diary-entry @r{(V19)}
+@c @kindex i y (Calendar mode) @r{(V19)}
+@item i y
+Add a diary entry for the selected day of the year
+(@code{insert-yearly-diary-entry}). This entry is displayed each year
+on the selected day.
+@end table
+
+Here are commands for entering more complex kinds of diary entries in
+Calendar mode. These kinds of entries operate properly only in Fancy
+Diary Display mode (@pxref{Simple and Fancy}).
+
+@table @kbd
+@findex insert-anniversary-diary-entry @r{(V19)}
+@c @kindex i a (Calendar mode diary) @r{(V19)}
+@item i a
+Add an anniversary diary entry for the selected date
+(@code{insert-anniversary-diary-entry}).
+
+Select the date you want remembered, in the proper year---if it is a
+birthday, remember to go to the person's year of birth! Then type
+@kbd{i a} and enter the text of the entry.
+
+In the textual part of the entry you can type @samp{%d}. When Emacs
+displays the entry in the diary buffer, the @samp{%d} is replaced by the
+number of years since the date. Thus, if you use @samp{%d years old} as
+the text of the entry, it will display as @samp{53 years old} on the
+53rd birthday.
+
+@findex insert-cyclic-diary-entry @r{(V19)}
+@c @kindex i c (Calendar mode diary) @r{(V19)}
+@item i c
+Add a cyclic diary entry starting at the date
+(@code{insert-cyclic-diary-entry}). An entry is displayed on a
+specified starting date and then is repeatedly displayed at the
+specified interval. This is useful for ten day cycles of preventive
+maintenance and similar activities.
+
+To use this command, first select the start date. The command reads the
+interval (the number of days between repetitions) using the minibuffer,
+then inserts the beginning of the entry.
+
+@findex insert-block-diary-entry @r{(V19)}
+@c @kindex i b (Calendar mode diary) @r{(V19)}
+@item i b
+Add a block diary entry for the current region
+(@code{insert-block-diary-entry}). With a block entry, Emacs
+writes the same message in the display for successive days.
+
+Position point and mark at the beginning and end of the block of days
+you want entered and type @kbd{i b}. This sets up the diary entry's
+date info and positions point so you can write the text of the entry.
+People usually use this command for trips or vacations.
+@end table
+
+@node European Calendar Style
+@subsection European Calendar Style
+@cindex European date style (Calendar, V19)
+@cindex American date style (Calendar, V19)
+@cindex dates, style of writing (Calendar, V19)
+
+By default, Emacs interprets and displays diary dates in civilian
+American form, @samp{@var{month}/@var{day}/@var{year}}:
+@samp{2/15/1993}, or @samp{February 15, 1993}.
+
+@vindex european-calendar-style @r{(V19)}
+@cindex European calendar style (V19)
+Alternatively, you can specify the European calendar style for writing
+dates: @samp{@var{day}/@var{month}/@var{year}}, @samp{15/2/1993} or
+@samp{15 February 1993}. To do this, set the variable
+@code{european-calendar-style} to @code{t}, before using any calendar or
+diary command. This also affects display of dates.
+
+ Here's how to do this in your @file{.emacs} file:
+
+@example
+(setq european-calendar-style t)
+@end example
+
+@node Simple and Fancy
+@subsection Simple and Fancy Diary Display
+@cindex Simple Diary mode (V19)
+@cindex Fancy Diary mode (V19)
+
+There are two modes for displaying a subset of diary entries: Simple
+mode and Fancy mode. Fancy mode provides a more dramatic display for
+the diary, and can also display the actual matching date for diary
+entries that match more than one date.
+
+@vindex diary-display-hook @r{(V19)}
+@findex fancy-diary-display @r{(V19)}
+By default, Emacs uses Simple mode, which is quicker than Fancy mode.
+Another advantage of Simple mode is that you can edit the displayed
+diary entries ``in place'' and save them. When you use Fancy mode, it
+is useless to edit the displayed subset of the diary; instead you must
+visit the diary file separately. To select Fancy mode, set
+@code{diary-display-hook} to @code{fancy-diary-display} like this:
+
+@example
+(setq diary-display-hook 'fancy-diary-display)
+@end example
+
+@node Other Diary Features
+@subsection Other Diary Features
+
+Here are some additional diary features. These will be explained in
+full in @cite{The GNU Emacs Extensions Manual}.
+
+You can schedule meetings on a date such as the first Tuesday of every
+month. This is called an @dfn{offset} date. The diary has commands
+for specifying such meetings, but not in Calendar mode. To create
+such an entry, you need to edit the diary file yourself.
+@c !!! reference to diary offset in
+@c !!! xref{diary offset, , Offset Events, calendar, The GNU Emacs
+@c !!! Calendar}, for more information.
+
+You can make entries according to Hebrew and Islamic dates. Calendar
+mode provides commands of the form @kbd{i h d} to add a diary entry
+for the Hebrew date corresponding to the selected date and @kbd{i i d}
+to add a diary entry for the Islamic date corresponding to the selected
+date. You can make entries that repeat every week, month, or year.
+Before using these commands, you must set the
+@code{nongregorian-diary-listing-hook} and the
+@code{nongregorian-diary-marking-hook} in your @file{.emacs} file.
+@c !!! reference to Hebrew/Islamic Entries in The GNU Emacs Calendar
+@c !!! @xref{Hebrew/Islamic Entries, , Hebrew- and Islamic-Date Diary
+@c !!! Entries, calendar, The GNU Emacs Calendar}.
+
+You can include other diary files in your diary display. This way, a
+group of people can share a common diary file.
+@c !!! reference to Including Diary Files in The GNU Emacs Calendar
+@c !!! xref{Including Diary Files, , Including Other Diary Files, calendar, The
+@c !!! GNU Emacs Calendar}.
+
+@node Startup Diary
+@subsection Displaying your Diary on Emacs Startup
+@cindex diary and Emacs startup (V19)
+
+If you start a new Emacs each day, you might want to display your diary
+automatically at that time. To do so, put this in your @file{.emacs}
+file:
+
+@example
+(diary)
+@end example
+
+If you want to see both the calendar and your diary at startup, use this
+instead:
+
+@example
+@group
+(setq view-diary-entries-initially t)
+(calendar)
+@end group
+@end example
+
+@node Printing Diary
+@subsection Printing the Displayed Part of the Diary
+@cindex Printing diary (V19)
+
+@findex print-diary-entries @r{(V19)}
+To print the selected diary entries as they appear on the screen, use
+@kbd{M-x print-diary-entries}. The same variables that customize
+@code{lpr-buffer} also affect this command.
+
+In Simple mode, the diary display buffer uses selective display
+(@pxref{Selective Display}). This means that what you see on the screen
+is just part of the text in the Emacs buffer. The diary entries that
+don't apply to the dates you asked for are still in the buffer, but
+hidden. The ordinary printing commands such as @code{lpr-buffer} would
+not do what you want; they print the entire text, including the hidden
+parts. This is why we need @code{print-diary-entries}.
+
+@node Version Control
+@section Version Control
+@cindex version control
+
+ @dfn{Version control systems} are packages that can record multiple
+versions of a source file, usually storing the unchanged parts of the
+file just once. Version control systems also record history information
+such as the creation time of each version, who created it, and a
+description of what was changed in that version.
+
+ The GNU project recommends the version control system known as RCS,
+which is free software and available from the Free Software Foundation.
+Emacs supports use of either RCS or SCCS (a proprietary, but widely
+used, version control system that is not quite as powerful as RCS)
+through a facility called VC. The same Emacs commands work with either
+RCS or SCCS, so you hardly have to know which one of them you are
+using.
+
+@menu
+* Concepts of VC::
+* Editing with VC::
+* Variables for Check-in/out::
+* Comparing Versions::
+* VC Status::
+* Renaming and VC::
+* Snapshots::
+* Log Entries::
+* Change Logs and VC::
+* Version Headers::
+@end menu
+
+@node Concepts of VC
+@subsection Concepts of Version Control
+@cindex RCS
+@cindex SCCS
+@cindex master file
+@cindex registered file
+@cindex work file
+
+ When a file is under version control, we also say that it is
+@dfn{registered} in the version control system. Each registered file
+has a corresponding @dfn{master file} which represents the file's
+present state plus its change history, so that you can reconstruct from
+it either the current version or any specified earlier version. Usually
+the master file also records a change comment for each version.
+
+ The file that is maintained under version control is sometimes called
+the @dfn{work file} corresponding to its master file.
+
+@cindex checking out files
+@cindex checking in files
+@cindex locking and version control
+ To examine a file, you @dfn{check it out}. This extracts a version
+of the file (typically, the most recent) from the master. If you want
+to edit the file, you must check it out @dfn{locked}. Only one user can
+do this at a time for any given source file. When you are done with
+your editing, you must @dfn{check in} the new version. This records the
+new version in the master file, and unlocks the source file so that
+other people can lock it and thus modify it.
+
+ These are the basic operations of version control.
+Checking in and checking out both use the single Emacs command
+@w{@kbd{C-x C-q}} (@code{vc-toggle-read-only}).
+
+@node Editing with VC
+@subsection Editing with Version Control
+
+ When you visit a file that is maintained using version control, the
+mode line displays @samp{RCS} or @samp{SCCS} to inform you that version
+control is in use, and also (in case you care) which low-level system
+the file is actually stored in. Normally, such a source file is
+read-only, and the mode line indicates this with @samp{%%}.)
+
+ These are the commands that you use to edit a file maintained with
+version control:
+
+@table @kbd
+@item C-x C-q
+Check the visited file in or out.
+
+@item C-x v u
+Revert the buffer and the file to the last checked in version.
+
+@item C-x v c
+Remove the last-entered change from the master for the visited file.
+This undoes your last check-in.
+
+@item C-x v i
+Register the visited file in version control.
+@end table
+
+@noindent
+(@kbd{C-x v} is the prefix key for version control commands; all of these
+commands except for @kbd{C-x C-q} start with @kbd{C-x v}.)
+
+@kindex C-x C-q @r{(V19)}
+@findex vc-toggle-read-only @r{(V19)}
+ If you want to edit the file, type @kbd{C-x C-q}
+(@code{vc-toggle-read-only}). This @dfn{checks out} and locks the file,
+so that you can edit it. The file is writable after check-out, but only
+for you, not for anyone else.
+
+@vindex vc-make-backups @r{(V19)}
+ Emacs does not save backup files for source files that are maintained
+with version control. If you want to make backup files despite version
+control, set the variable @code{vc-make-backups} to a non-@code{nil} value.
+
+ When you are finished editing the file, type @kbd{C-x C-q} again.
+When used on a file that is checked out, this command checks the file
+in. But check-in does not start immediately; first, you must enter a
+@dfn{log entry}---a description of the changes in the new version.
+@kbd{C-x C-q} pops up a buffer for you to enter this in. When you are
+finished typing in the log entry, type @kbd{C-c C-c} to terminate it; this is
+when actual check-in takes place.
+
+ Once you have checked in your changes, the file is unlocked, so that
+other users can lock it and modify it.
+
+@vindex vc-keep-workfiles @r{(V19)}
+ Normally the work file exists all the time, whether it is locked or
+not. If you set @code{vc-keep-workfiles} to @code{nil}, then checking
+in a new version with @kbd{C-x C-q} deletes the work file; but any
+attempt to visit the file with Emacs creates it again.
+
+ Actually, it is not impossible to lock a file that someone else has
+locked. If you try to check out a file that is locked, @kbd{C-x C-q}
+asks you whether you want to ``steal the lock.'' If you say yes, the
+file becomes locked by you, but a message is sent to the person who had
+formerly locked the file, to inform him or her of what has happened.
+
+@kindex C-x v u @r{(V19)}
+@findex vc-revert-buffer @r{(V19)}
+ If you want to discard your current set of changes and revert to the
+last version checked in, use @kbd{C-x v u} (@code{vc-revert-buffer}).
+This cancels your last check-out, leaving the file unlocked. If you want
+to make a different set of changes, you must first check the file out
+again. @kbd{C-x v u} requies confirmation, unless it sees that
+you haven't made any changes since the last checked-in version.
+
+ @kbd{C-x v u} is also the command to use if you lock a file and then
+don't actually change it.
+
+@kindex C-x v c @r{(V19)}
+@findex vc-cancel-version @r{(V19)}
+ You can even cancel a change after checking it in, with @kbd{C-x v c}
+(@code{vc-cancel-version}). Normally, @kbd{C-x v c} reverts your
+workfile and buffer to the previous version (the one that precedes the
+version that is deleted), but you can prevent the reversion by giving
+the command a prefix argument. Then the buffer does not change.
+
+ This command with a prefix argument is useful when you have checked in
+a change and then discover a trivial error in it; you can cancel the
+erroneous check-in, fix the error, and repeat the check-in.
+
+ Be careful when invoking @kbd{C-x v c}, as it is easy to throw away a
+lot of work with it. To help you be careful, this command always asks
+for confirmation with @samp{yes}.
+
+@kindex C-x v i @r{(V19)}
+@findex vc-register @r{(V19)}
+ You can register the visited file for version control using
+@w{@kbd{C-x v i}} (@code{vc-register}). This uses RCS if RCS
+is installed on your system; otherwise, it uses SCCS.
+
+ By default, the initial version number is 1.1. If you want to use a
+different number, give @kbd{C-x v i} a prefix argument; then it reads
+the initial version number using the minibuffer.
+
+ After @kbd{C-x v i}, the file is unlocked and read-only. Type
+@kbd{C-x C-q} if you wish to edit it.
+
+@vindex vc-initial-comment @r{(V19)}
+ If @code{vc-initial-comment} is non-@code{nil}, @kbd{C-x v i} reads
+an initial comment (much like a log entry) to describe the purpose of
+this source file.
+
+@node Variables for Check-in/out
+@subsection Variables Affecting Check-in and Check-out
+@c There is no need to tell users about vc-master-templates.
+
+@vindex vc-suppress-confirm @r{(V19)}
+ If @code{vc-suppress-confirm} is non-@code{nil}, then @kbd{C-x C-q}
+and @kbd{C-x v i} can save the current buffer without asking, and
+@kbd{C-x v u} also operates without asking for confirmation.
+(This variable does not affect @kbd{C-x v c}; that is so drastic
+that it should always ask for confirmation.)
+
+@vindex vc-command-messages @r{(V19)}
+ VC mode does much of its work by running the shell commands for RCS
+and SCCS. If @code{vc-command-messages} is non-@code{nil}, VC displays
+messages to indicate which shell commands it runs, and additional
+messages when the commands finish.
+
+ Normally, VC assumes that it can deduce the locked/unlocked state of
+files by looking at the file permissions of the work file; this is
+fast. However, if the @file{RCS} or @file{SCCS} subdirectory is
+actually a symbolic link, then VC does not trust the file permissions to
+reflect this status.
+
+@vindex vc-mistrust-permissions @r{(V19)}
+You can specify the criterion for whether to trust the file permissions
+by setting the variable @code{vc-mistrust-permissions}. Its value may
+be @code{t} (always mistrust the file permissions and check the master
+file), @code{nil} (always trust the file permissions), or a function of
+one argument which makes the decision. The argument is the directory
+name of the @file{RCS} or @file{SCCS} subdirectory. A non-@code{nil}
+value from the function says to mistrust the file permissions.
+
+ If you find that the file permissions of work files are changed
+erroneously, then you can set @code{vc-mistrust-permissions} to @code{t}
+so that VC always checks the master file.
+
+@node Log Entries
+@subsection Log Entries
+
+When you're editing an initial or change comment for inclusion in a
+master file, finish your entry by typing @kbd{C-c C-c}.
+
+@table @kbd
+@item C-c C-c
+Finish the comment edit normally (@code{vc-finish-logentry}).
+This finishes check-in.
+@end table
+
+To abort check-in, just don't type @kbd{C-c C-c} in that buffer. You
+can switch buffers and do other editing. As long as you don't try to
+check in another file, the comment you were editing remains in its
+buffer, and you can go back to that buffer at any time to complete the
+check-in.
+
+If you change several source files for the same reason, it is often
+convenient to specify the same log entry for many of the files. To do
+this, use the history of previous log entries. The commands
+@kbd{M-n}, @kbd{M-p}, @kbd{M-s} and @kbd{M-r} for doing this work just
+like the minibuffer history commands (except that they don't use the
+minibuffer).
+
+The history of previous log entries is actually stored in previous pages
+of the log entry editing buffer; they are normally hidden by narrowing.
+
+@vindex vc-log-mode-hook @r{(V19)}
+Each time you check in a file, the log entry buffer is put into VC Log
+mode, which involves running two hook variables: @code{text-mode-hook}
+and @code{vc-log-mode-hook}.
+
+@node Change Logs and VC
+@subsection Change Logs and VC
+
+Emacs users often record brief summaries of program changes in a file
+called @file{ChangeLog}, which is kept in the same directory as the
+source files, and is usually meant to be distributed along with the
+source files. You can maintain @file{ChangeLog} from the version
+control logs with the following command.
+
+@table @kbd
+@item C-x v a
+@kindex C-x v a @r{(V19)}
+@findex vc-update-change-log @r{(V19)}
+Visit the current directory's change log file and create new entries for
+versions checked in since the most recent entry in the change log file
+(@code{vc-update-change-log}).
+
+This command works with RCS only; it does not work with SCCS.
+@end table
+
+For example, suppose the first line of @file{ChangeLog} is dated 10
+April 1992, and suppose the only check-in since then was by Nathaniel
+Bowditch to @file{rcs2log} on 8 May 1992 with log text @samp{Ignore log
+messages that start with `#'.}. Then @kbd{C-x v a} visits
+@file{ChangeLog} and inserts text like this:
+
+@example
+@group
+Fri May 8 21:45:00 1992 Nathaniel Bowditch (nat@@apn.org)
+
+ * rcs2log: Ignore log messages that start with `#'.
+@end group
+@end example
+
+@noindent
+You can then further edit as you wish.
+
+A log entry whose text begins with @samp{#} is not copied to
+@file{ChangeLog}. For example, if you merely fix some misspellings in
+comments, you can log the change with an entry beginning with @samp{#}
+to avoid putting such trivia into @file{ChangeLog}.
+
+When @kbd{C-x v a} adds several change log entries at once, it groups
+related log entries together if they all are checked in by the same
+author at nearly the same time. If the log entries for several such
+files all have the same text, it coalesces them into a single entry.
+For example, suppose the most recent check-ins have the following log
+entries:
+
+@example
+@exdent For @file{vc.texinfo}:
+Fix expansion typos.
+@exdent For @file{vc.el}:
+Don't call expand-file-name.
+@exdent For @file{vc-hooks.el}:
+Don't call expand-file-name.
+@end example
+
+They appear like this in @file{ChangeLog}:
+
+@example
+@group
+Wed Apr 1 08:57:59 1992 Nathaniel Bowditch (nat@@apn.org)
+
+ * vc.texinfo: Fix expansion typos.
+
+ * vc.el, vc-hooks.el: Don't call expand-file-name.
+@end group
+@end example
+
+Normally, @kbd{C-x v a} separates log entries by a blank line, but you
+can mark several related log entries to be clumped together (without an
+intervening blank line) by starting the text of each related log entry
+with a label of the form @w{@samp{@{@var{clumpname}@} }}. The label
+itself is not copied to @file{ChangeLog}. For example, suppose the log
+entries are:
+
+@example
+@exdent For @file{vc.texinfo}:
+@{expand@} Fix expansion typos.
+@exdent For @file{vc.el}:
+@{expand@} Don't call expand-file-name.
+@exdent For @file{vc-hooks.el}:
+@{expand@} Don't call expand-file-name.
+@end example
+
+Then the text in @file{ChangeLog} looks like this:
+
+@example
+@group
+Wed Apr 1 08:57:59 1992 Nathaniel Bowditch (nat@@apn.org)
+
+ * vc.texinfo: Fix expansion typos.
+ * vc.el, vc-hooks.el: Don't call expand-file-name.
+@end group
+@end example
+
+Normally, the log entry for file @file{foo} is displayed as @samp{* foo:
+@var{text of log entry}}. But by convention, the @samp{:} after
+@file{foo} is omitted if the text of the log entry starts with
+@w{@samp{(@var{functionname}): }}. For example, if the log entry for
+@file{vc.el} is @samp{(vc-do-command): Check call-process status.}, then
+the text in @file{ChangeLog} looks like this:
+
+@example
+@group
+Wed May 6 10:53:00 1992 Nathaniel Bowditch (nat@@apn.org)
+
+ * vc.el (vc-do-command): Check call-process status.
+@end group
+@end example
+
+@node Comparing Versions
+@subsection Comparing Versions
+
+@findex vc-diff @r{(V19)}
+@kindex C-x v = @r{(V19)}
+ To compare two versions of a file, use @kbd{C-x v =} (@code{vc-diff}).
+
+ Plain @kbd{C-x v =} compares the current buffer contents (saving them
+in the file if necessary) with the last checked-in version of the file.
+With a prefix argument, @kbd{C-x v =} reads a filename and two version
+numbers, and compares those versions of the file you specify.
+
+ If you supply a directory name instead of the name of a work file,
+this command compares the two specified versions of all registered files
+in that directory and its subdirectories. You can also specify a
+snapshot name (@pxref{Snapshots}) instead of one or both version
+numbers.
+
+ You can specify a checked-in version by its number; you can specify
+the most recent checked-in version with @samp{-}; and you can specify
+the current buffer contents with @samp{+}. Thus, you can compare two
+checked-in versions, or compare a checked-in version with the text you
+are editing.
+@c ??? + and - as args are not implemented yet.
+
+@c ??? Currently it uses vc-diff-options.
+ This command works by running the @code{diff} utility, getting the
+options from the variable @code{diff-switches}. It displays the output
+in a special buffer in another window.
+
+@node VC Status
+@subsection VC Status Commands
+
+@kindex C-x v l @r{(V19)}
+@findex vc-print-log @r{(V19)}
+ To get the detailed version control status of one file, type @kbd{C-x
+v l} (@code{vc-print-log}). It displays the history of changes to the
+current file, including the text of the log entries. The output appears
+in a separate window.
+
+ When you are working on a large program, it's often useful to find all
+the files that are currently locked, or all the files maintained in
+version control at all. You can do so using these commands, both of
+which operate on the branch of the file system starting at the current
+directory.
+
+@kindex C-x v d @r{(V19)}
+@findex vc-directory @r{(V19)}
+ You can use @kbd{C-x v d} (@code{vc-directory}) to show all the locked
+files in or beneath the current directory. This includes all files that
+are locked by any user.
+
+ With a prefix argument, @kbd{C-x v d} shows all the version control
+activity in the current directory---it lists all files in or beneath the
+current directory that are maintained with version control.
+
+@node Renaming and VC
+@subsection Renaming VC Work Files and Master Files
+
+@findex vc-rename-file @r{(V19)}
+ When you rename a registered file, you must also rename its master
+file correspondingly to get proper results. Use @code{vc-rename-file}
+to rename the source file as you specify, and rename its master file
+accordingly. It also updates any snapshots (@pxref{Snapshots}) that
+mention the file, so that they use the new name; despite this, the
+snapshot thus modified may not completely work (@pxref{Snapshot
+Caveats}).
+
+ You cannot use @code{vc-rename-file} on a file that is locked by
+someone else.
+
+ @code{vc-rename-file} is not bound to a key because it's not likely
+to be used frequently.
+
+@node Snapshots
+@subsection Snapshots
+@cindex snapshots and version control
+
+ A @dfn{snapshot} is a named set of file versions (one for each
+registered file) that you can treat as a unit. One important kind of
+snapshot is a @dfn{release}, a (theoretically) stable version of the
+system that is ready for distribution to users.
+
+@menu
+* Making Snapshots:: The snapshot facilities.
+* Snapshot Caveats:: Things to be careful of, when using snapshots.
+@end menu
+
+@node Making Snapshots
+@subsubsection Making and Using Snapshots
+
+ There are two basic commands for snapshots; one makes a
+snapshot with a given name, the other retrieves a named snapshot.
+
+@table @code
+@item C-x v s @var{name} @key{RET}
+@kindex C-x v s @r{(V19)}
+@findex vc-create-snapshot @r{(V19)}
+Define the last saved versions of every registered file in or under the
+current directory as a snapshot named @var{name}
+(@code{vc-create-snapshot}).
+
+@item C-x v r @var{name} @key{RET}
+@kindex C-x v r @r{(V19)}
+@findex vc-retrieve-snapshot @r{(V19)}
+Check out all registered files at or below the current directory level
+using whatever versions correspond to the snapshot @var{name}
+(@code{vc-retrieve-snapshot}).
+
+This function reports an error if any files are locked at or below the
+current directory, without changing anything; this is to avoid
+overwriting work in progress.
+@end table
+
+You shouldn't need to use @code{vc-retrieve-snapshot} very often; you
+can get difference reports between two snapshots without retrieving
+either one, using @kbd{C-x =} (@pxref{Comparing Versions}). Thus,
+retrieving a snapshot is only necessary if you need to study or compile
+portions of the snapshot.
+
+A snapshot uses a very small amount of resources---just enough to record
+the list of file names and which version belongs to the snapshot. Thus,
+you need not hesitate to create snapshots whenever they are useful.
+
+You can give a snapshot name as an argument to @kbd{C-x v =}
+(@pxref{Comparing Versions}). Thus, you can use it to compare a
+snapshot against the current files, or two snapshots against each other,
+or a snapshot against a named version.
+
+@node Snapshot Caveats
+@subsubsection Snapshot Caveats
+
+@cindex named configurations (RCS)
+VC's snapshot facilities are modeled on RCS's named-configuration
+support. They use RCS's native facilities for this, so under VC
+snapshots made using RCS are visible even when you bypass VC.
+
+@c !!! worded verbosely to avoid overfull hbox.
+For SCCS, VC implements snapshots itself. The files it uses contain
+name/file/version-number triples. These snapshots are visible only
+through VC.
+
+File renaming and deletion can create some difficulties with snapshots.
+This is not a VC-specific problem, but a general design issue in version
+control systems that no one has solved very well yet.
+
+If you rename a registered file, you need to rename its master along
+with it (the function @code{vc-rename-file} does this automatically).
+If you are using SCCS, you must also update the records of the snapshot,
+to mention the file by its new name (@code{vc-rename-file} does this,
+too). This makes the snapshot remain valid for retrieval, but it does
+not solve all problems.
+
+For example, some of the files in the program probably refer to others
+by name. At the very least, the makefile probably mentions the file
+that you renamed. If you retrieve an old snapshot, the renamed file
+is retrieved under its new name, which is not the name that the makefile
+expects. So the program won't really work.
+
+If you use snapshots, don't rename either work files or master files
+except by means of @code{vc-rename-file}. It knows how to update
+snapshots so that you can still retrieve them. An old snapshot that
+refers to a master file that no longer exists under the recorded name is
+invalid; VC can no longer retrieve it. It would be beyond the scope of this
+manual to explain enough about RCS and SCCS to teach the reader how to
+update the snapshots by hand.
+
+@node Version Headers
+@subsection Inserting Version Control Headers
+
+ Sometimes it is convenient to put version identification strings
+directly into working files. Certain special strings called
+@dfn{version headers} are replaced in each successive version by the
+number of that version.
+
+@kindex C-x v h @r{(V19)}
+@findex vc-insert-headers @r{(V19)}
+ You can use the @kbd{C-x v h} command (@code{vc-insert-headers}) to
+insert a suitable header string.
+
+@table @kbd
+@item C-x v h
+Insert headers in a file for use with your version-control system.
+@end table
+
+@vindex vc-header-string @r{(V19)}
+@c ??? Currently the name is vc-header-strings
+The default header string is @samp{$ld$} for RCS and @samp{%W%} for
+SCCS. You can specify other headers to insert by setting the variable
+@code{vc-header-string}. Its value (if non-@code{nil}) should be the
+string to be inserted. You can also specify a list of strings; then
+each string in the list is inserted as a separate header on a line of
+its own. (It is often important to use ``superfluous'' backslashes when
+writing a Lisp string constant for this use, to prevent the string in
+the constant from being interpreted as a header itself if the Emacs Lisp
+file containing it is maintained with version control.)
+
+@vindex vc-comment-alist @r{(V19)}
+Each header is inserted surrounded by tabs, inside comment delimiters,
+on a new line at the start of the buffer. Normally the ordinary comment
+start and comment end strings of the current mode are used, but for
+certain modes, there are special comment delimiters for this purpose;
+the variable @code{vc-comment-alist} specifies them. Each element of
+this list has the form @code{(@var{mode} @var{starter} @var{ender})}.
+
+@vindex vc-static-header-alist @r{(V19)}
+@code{vc-static-header-alist} is consulted to add further strings based
+on the name of the buffer. Its value should be a list of
+dotted pairs; the @sc{car} of each pair is a regular expression that
+should match the buffer name, and the @sc{cdr} is the format to use on
+each header. A string is inserted for each file name pattern that
+matches the buffer name, and for each header taken from
+@code{vc-header-string}. The default value for
+@code{vc-static-header-alist} is:
+
+@example
+@group
+(("\\.c$" .
+ "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\
+#endif /* lint */\n"))
+@end group
+@end example
+
+@noindent
+which specifies insertion of a string of this form:
+
+@example
+@group
+
+#ifndef lint
+static char vcid[] = "@var{header-string}";
+#endif /* lint */
+@end group
+@end example
+
+@node Emerge
+@section Emerge
+@cindex Emerge (V19)
+@cindex merging files (V19)
+
+It's not unusual for programmers to get their signals crossed and modify
+the same program in two different directions. To recover from this
+confusion, you need to merge the two versions. Emerge makes this
+easier.
+
+@menu
+* Overview of Emerge::
+* Submodes of Emerge::
+* State of Difference::
+* Merge Commands::
+* Exiting Emerge::
+* Combining in Emerge::
+* Fine Points of Emerge::
+@end menu
+
+@node Overview of Emerge
+@subsection Overview of Emerge
+
+To start Emerge, run one of these four commands:
+
+@table @kbd
+@item M-x emerge-files
+@findex emerge-files @r{(V19)}
+Merge two specified files.
+
+@item M-x emerge-files-with-ancestor
+@findex emerge-files-with-ancestor @r{(V19)}
+Merge two specified files, with reference to a common ancestor.
+
+@item M-x emerge-buffers
+@findex emerge-buffers @r{(V19)}
+Merge two buffers (the currently accessible portions).
+
+@item M-x emerge-buffers-with-ancestor
+@findex emerge-buffers-with-ancestor @r{(V19)}
+Merge two buffers (the currently accessible portions) with reference to a
+common ancestor in another buffer.
+@end table
+
+@cindex merge buffer (Emerge)
+@cindex A and B buffers (Emerge)
+The Emerge commands compare two texts, and display the results in three
+buffers: one for each input text (the @dfn{A buffer} and the @dfn{B
+buffer}), and one (the @dfn{merge buffer}) where merging takes place.
+The merge buffer does not show just the differences. Rather, it shows
+you the full text, but wherever the input texts differ, you can choose
+which one of them to include in the merge buffer.
+
+If a common ancestor version is available, from which the two texts to
+be merged were both derived, Emerge can use it to guess which
+alternative is right. Wherever one current version agrees with the
+ancestor, Emerge presumes that the other current version is a deliberate
+change which should be kept in the merged version. Use the
+``with-ancestor'' commands if you want to specify a common ancestor
+text. These commands read three file or buffer names---variant A,
+variant B, and the common ancestor.
+
+After the comparison is done and the buffers are prepared, the actual
+merging starts. You control the merging interactively by editing the
+merge buffer. The merge buffer shows you a full merged text, not just
+differences. For each point where the input texts differ, you can
+choose which one of them to include in the merge buffer.
+
+The merge buffer has a special major mode, Emerge mode, with commands
+for making these choices. But you can also edit the buffer with
+ordinary Emacs commands.
+
+At any given time, the attention of Emerge is focused on one particular
+difference, called the @dfn{selected} difference. This difference is
+marked off in the three buffers by
+
+@example
+vvvvvvvvvvvvvvvvvvvv
+@end example
+
+@noindent
+above and
+
+@example
+^^^^^^^^^^^^^^^^^^^^
+@end example
+
+@noindent
+below. Emerge numbers all the differences sequentially and the mode
+line always shows the number of the selected difference.
+
+Normally, the merge buffer starts out with the A version of the text.
+But when the A version of a part of the buffer agrees with the common
+ancestor, then the B version is preferred for that part.
+
+Normally, Emerge stores the merged output in place of the first input
+text (the A file or buffer). If you give a prefix argument to
+@code{emerge-files} or @code{emerge-files-with-ancestor}, it reads the
+name of the output file using the minibuffer. (This is the last file
+name those commands read.)
+
+If you abort Emerge with @kbd{C-u q}, the output is not saved.
+
+@node Submodes of Emerge
+@subsection Submodes of Emerge
+
+You can choose between two modes for giving merge commands: Fast mode
+and Edit mode. In Fast mode, basic Emerge commands are single
+characters, but ordinary Emacs commands are disabled. This is
+convenient if you use only Emerge commands.
+
+In Edit mode, all Emerge commands start with the prefix character
+@kbd{C-c}, and the normal Emacs commands are also available. This
+allows editing the merge buffer, but slows down Emerge operations.
+
+Use @kbd{e} to switch to Edit mode, and @kbd{f} to switch to Fast mode.
+The mode line indicates Edit and Fast modes with @samp{E} and @samp{F}.
+
+Emerge has two additional submodes that affect how particular merge
+commands work: Auto Advance mode and Skip Prefers mode.
+
+If Auto Advance mode is in effect, the @kbd{a} and @kbd{b} commands
+advance to the next difference. This lets you go through the merge
+faster doing ordinary things. The mode line indicates Auto Advance mode
+with @samp{A}.
+
+If Skip Prefers mode is in effect, the @kbd{n} and @kbd{p} commands skip
+over differences in states prefer-A and prefer-B. Thus you will only
+see differences for which neither version is presumed ``correct''. The
+mode line indicates Skip Prefers mode with @samp{S}.
+
+@findex emerge-auto-advance-mode @r{(V19)}
+@findex emerge-skip-prefers-mode @r{(V19)}
+Use the command @code{emerge-auto-advance-mode} to set or clear Auto
+Advance mode. Use @code{emerge-skip-prefers-mode} to set or clear Skip
+Prefers mode. A positive argument turns the mode on, a nonpositive
+argument turns it off, and no argument toggles it.
+
+@node State of Difference
+@subsection State of a Difference
+
+In the merge buffer, a difference is marked
+@samp{vvvvvvvvvvvvvvvvvvvv} above and @samp{^^^^^^^^^^^^^^^^^^^^}
+below. Such a difference can have one of seven states:
+
+@table @asis
+@item A
+The difference is showing the A version. The @kbd{a} command always
+produces this state; the mode line indicates it with @samp{A}.
+
+@item B
+The difference is showing the B version. The @kbd{b} command always
+produces this state; the mode line indicates it with @samp{B}.
+
+@item default-A
+@itemx default-B
+The difference is showing the A or the B state by default, because you
+haven't made a choice. All differences start in the default-A state
+(and thus the merge buffer is a copy of the A buffer), except those for
+which one alternative is ``preferred'' (see below).
+
+When you select a difference, its state changes from default-A or
+default-B to plain A or B. Thus, the selected difference never has
+state default-A or default-B, and these states are never displayed in
+the mode line.
+
+The command @kbd{d a} chooses default-A as the default state, and @kbd{d
+b} chooses default-B. This chosen default applies to all differences
+which you haven't selected and for which no alternative is preferred.
+If you are moving through the merge sequentially, the differences you
+haven't selected are those following the selected one. Thus, while
+moving sequentially, you can effectively make the A version the default
+for some sections of the merge buffer and the B version the default for
+others by using @kbd{d a} and @kbd{d b} at the end of each section.
+
+@item prefer-A
+@itemx prefer-B
+The difference is showing the A or B state because it is
+@dfn{preferred}. This means that you haven't made an explicit choice,
+but one alternative seems likely to be right because the other
+alternative agrees with the common ancestor. Thus, where the A buffer
+agrees with the common ancestor, the B version is preferred, because
+chances are it is the one that was actually changed.
+
+These two states are displayed in the mode line as @samp{A*} and @samp{B*}.
+
+@item combined
+The difference is showing a combination of the A and B states, as a
+result of the @kbd{x c} or @kbd{x C} commands.
+
+Once a difference is in this state, the @kbd{a} and @kbd{b} commands
+don't do anything to it unless you give them a prefix argument.
+
+The mode line displays this state as @samp{comb}.
+@end table
+
+@node Merge Commands
+@subsection Merge Commands
+
+Here are the Merge commands for Fast mode; in Edit mode, precede these with
+@kbd{C-c} and turn all the letters into control characters.
+
+@table @kbd
+@item p
+Select the previous difference.
+
+@item n
+Select the next difference.
+
+@item a
+Choose the A version of this difference.
+
+@item b
+Choose the B version of this difference.
+
+@item j
+Select a particular difference; specify the sequence number of that
+difference as a prefix argument.
+
+@item M-x emerge-select-difference
+@c ??? This isn't true yet.
+Select the run of differences containing the current location. You can
+use this command in the merge buffer or in the A or B buffer.
+
+@item q
+Quit---finish the merge. With an argument, abort the merge.
+
+@item f
+Go into fast mode.
+
+@item e
+Go into edit mode.
+
+@item l
+Recenter (like @kbd{C-l}) all three windows.
+
+@item -
+Specify part of a prefix numeric argument.
+@c Don't use itemx here, it is confusing in printed output!
+@itemx @var{digit}
+Also specify part of a prefix numeric argument.
+
+@item d a
+Choose the A version as the default from here down in
+the merge buffer.
+
+@item d b
+Choose the B version as the default from here down in
+the merge buffer.
+
+@item c a
+Copy the A version of this difference into the kill ring.
+
+@item c b
+Copy the B version of this difference into the kill ring.
+
+@item i a
+Insert the A version of this difference at the point.
+
+@item i b
+Insert the B version of this difference at the point.
+
+@item m
+Put the point and mark around the difference region.
+
+@item ^
+Scroll all three windows down (like @kbd{M-v}).
+
+@item v
+Scroll all three windows up (like @kbd{C-v}).
+
+@item <
+Scroll all three windows left (like @kbd{C-x <}).
+
+@item >
+Scroll all three windows right (like @kbd{C-x >}).
+
+@item |
+Reset horizontal scroll on all three windows.
+
+@item x 1
+Shrink the merge window to one line. (Use @kbd{C-u l} to restore it
+to full size.)
+
+@item x c
+Combine the two versions of this difference.
+
+@item x f
+Show the files/buffers Emerge is operating on in Help window.
+(Use @kbd{C-u l} to restore windows.)
+
+@item x j
+Join this difference with the following one.
+(@kbd{C-u x j} joins this difference with the previous one.)
+
+@item x s
+Split this difference into two differences. Before you use this
+command, position point in each of the three buffers to the place where
+you want to split the difference.
+
+@item x t
+Trim identical lines off top and bottom of the difference.
+Such lines occur when the A and B versions are
+identical but differ from the ancestor version.
+@end table
+
+@node Exiting Emerge
+@subsection Exiting Emerge
+
+The @kbd{q} (@code{emerge-quit}) command finishes the merge, storing the
+results into the output file. It restores the A and B buffers to their
+proper contents, or kills them if they were created by Emerge. It also
+disables the Emerge commands in the merge buffer, since executing them
+later could damage the contents of the various buffers.
+
+@kbd{C-u q} aborts the merge. Aborting means that Emerge does not write
+the output file.
+
+If Emerge was called from another Lisp program, then its return value
+is @code{t} or @code{nil} to indicate success or failure.
+
+@node Combining in Emerge
+@subsection Combining the Two Versions
+
+Sometimes you want to keep @emph{both} alternatives for a particular
+locus. To do this, use @kbd{x c}, which edits the merge buffer like this:
+
+@example
+@group
+#ifdef NEW
+@var{version from A file}
+#else /* NEW */
+@var{version from B file}
+#endif /* NEW */
+@end group
+@end example
+
+@vindex emerge-combine-template @r{(V19)}
+While this example shows C preprocessor conditionals delimiting the two
+alternative versions, you can specify the strings you want by setting
+the variable @code{emerge-combine-template} to a list of three strings.
+The default setting, which produces the results shown above, looks like this:
+
+@example
+@group
+("#ifdef NEW\n"
+ "#else /* NEW */\n"
+ "#endif /* NEW */\n")
+@end group
+@end example
+@c ??? This is not how it currently works;
+@c ??? emerge.el needs to be changed.
+
+@c ??? Must change the mechanism that disables saving during emerge
+@c ??? to use a write-file-function instead.
+
+@c ??? Emerge should use flag strings that start with # for C programs
+@c ??? and with ; for Lisp programs.
+
+@node Fine Points of Emerge
+@subsection Fine Points of Emerge
+
+You can have any number of merges going at once---just don't use any
+one buffer as input to more than one merge at once, since that will
+cause the read-only/modified/auto-save status save-and-restore to
+screw up.
+
+Starting Emerge can take a long time because it needs to compare the
+files. Emacs can't do anything else until @code{diff} finishes. Perhaps in
+the future someone will change Emerge to do the comparison in the
+background when the input files are large---then you could keep on doing
+other things with Emacs until Emerge gets ready to accept commands.
+
+@ignore
+@c ??? This name hasn't been changed yet.
+@vindex emerge-ok-lines-regexp @r{(V19)}
+Emerge tests each of the lines that differ against the regular
+expression @code{emerge-ok-lines-regexp}. If a line fails to fit the
+pattern, then Emerge displays a warning instead of displaying the merge
+buffer. After you get the warning, you must switch to the merge buffer
+and either continue the merge or abort it.
+@end ignore
+
+@vindex emerge-startup-hook @r{(V19)}
+After the merge has been set up, Emerge runs the hooks in
+@code{emerge-startup-hook}.
+
+During the merge, you musn't try to edit the A and B buffers yourself.
+Emerge modifies them temporarily, but ultimately puts them back the way
+they were.
+
+@node Debuggers
+@section Running Debuggers Under Emacs
+@cindex debuggers
+@cindex GDB
+@cindex DBX
+@cindex SDB
+
+@c Do you believe in GUD?
+The GUD (Grand Unified Debugger) library provides an interface to various
+symbolic debuggers from within Emacs. We recommend the debugger GDB,
+which is free software, but you can also run DBX or SDB if you have them.
+
+@menu
+* Starting GUD:: How to start a debugger subprocess.
+* Debugger Operation:: Connection between the debugger and source buffers.
+* Commands of GUD:: Keybindings for common commands.
+* GUD Customization:: Defining your own commands for GUD.
+@end menu
+
+@node Starting GUD
+@subsection Starting GUD
+
+There are three commands for starting a debugger. Each corresponds to a
+particular debugger program.
+
+@table @kbd
+@item M-x gdb @key{RET} @var{file} @key{RET}
+@itemx M-x dbx @key{RET} @var{file} @key{RET}
+@findex gdb @r{(V19)}
+@findex dbx @r{(V19)}
+Run GDB or DBX in a subprocess of Emacs. Both of these commands select
+the buffer used for input and output to the debugger.
+
+@item M-x sdb @key{RET} @var{file} @key{RET}
+@findex sdb @r{(V19)}
+Run SDB in a subprocess of Emacs. SDB's messages do not mention file
+names, so the Emacs interface to SDB depends on having a tags table
+(@pxref{Tags}) to find which file each function is in. If you have not
+visited a tags table or the tags table doesn't list one of the
+functions, you get a message saying @samp{The sdb support requires a
+valid tags table to work}. If this happens, generate a valid tags table
+in the working directory and try again.
+@end table
+
+You can only run one debugger process at a time.
+
+@node Debugger Operation
+@subsection Debugger Operation
+
+When you run a debugger with GUD, the debugger displays source files
+via Emacs---Emacs finds the source file and moves point to the line
+where the program is executing. An arrow (@samp{=>}) indicates the
+current execution line, and it stays put even if you move the cursor.
+
+You can start editing the file at any time. The arrow is not part of
+the file's text; it appears only on the screen. If you do modify a
+source file, keep in mind that inserting or deleting lines will throw
+off the arrow's positioning; GUD has no way of figuring out which line
+corresponded before your changes to the line number in a debugger
+message. Also, you'll typically have to recompile and restart the
+program for your changes to be reflected in the debugger's tables.
+
+If you wish, you can control your debugger process entirely through the
+debugger buffer, which uses a variant of Shell mode. All the usual
+commands for your debugger are available, and you can use the Shell mode
+history commands to repeat them.
+
+@node Commands of GUD
+@subsection Commands of GUD
+
+GUD provides a command available in all buffers for setting
+breakpoints. This command is defined globally because you need to use
+it in the source files' buffers.
+
+@table @kbd
+@item C-x @key{SPC}
+@kindex C-x @key{SPC} @r{(V19)}
+Set a breakpoint on the line that point is on.
+@end table
+
+The debugger buffer has a number of keybindings for invoking common
+debugging commands quickly:
+
+@table @kbd
+@item C-c C-l
+@kindex C-c C-l @r{(GUD in V19)}
+@findex gud-refresh @r{(V19)}
+Display in another window the last line referred to in the GUD
+buffer (that is, the line indicated in the last location message).
+This runs the command @code{gud-refresh}.
+
+@item C-c C-s
+@kindex C-c C-s @r{(GUD in V19)}
+@findex gud-step @r{(V19)}
+Execute a single line of code (@code{gud-step}). If the code contains
+a function call, execution stops after entering the called function.
+
+@item C-c C-n
+@kindex C-c C-n @r{(GUD in V19)}
+@findex gud-next @r{(V19)}
+Execute a single line of code, stepping across entire function calls
+at full speed (@code{gud-next}).
+
+@item C-c C-i
+@kindex C-c C-i @r{(GUD in V19)}
+@findex gud-stepi @r{(V19)}
+Execute a single machine instruction (@code{gud-stepi}).
+
+@item C-c C-c
+@kindex C-c C-c @r{(GUD in V19)}
+@findex gud-cont @r{(V19)}
+Continue execution until the next breakpoint, or other event that would
+normally stop the program (@code{gud-cont}).
+@end table
+
+The above commands are common to all supported debuggers. If you are
+using GDB or (some versions of) DBX, these additional commands are available:
+
+@table @kbd
+@item C-c <
+@kindex C-c < @r{(GUD in V19)}
+@findex gud-up @r{(V19)}
+Select the next enclosing stack frame (@code{gud-up}). This is
+equivalent to the @samp{up} command.
+
+@item C-c >
+@kindex C-c > @r{(GUD in V19)}
+@findex gud-down @r{(V19)}
+Select the next inner stack frame (@code{gud-down}). This is
+equivalent to the @samp{down} command.
+@end table
+
+If you are using GDB, two additional keybindings are available:
+
+@table @kbd
+@item C-c C-f
+@kindex C-c C-f @r{(GUD in V19)}
+@findex gud-finish @r{(V19)}
+Run the program until the selected stack frame returns (or until it
+stops for some other reason).
+
+@item @key{TAB}
+Complete the symbol in the buffer before point, using the set of all
+symbols known to GDB.
+@end table
+
+These commands interpret a prefix argument as a repeat count, when that
+makes sense.
+
+After each command that changes the program counter, GUD displays the
+new current source line, and updates the location of the arrow.
+
+@node GUD Customization
+@subsection GUD Customization
+
+@vindex gdb-mode-hook
+@vindex dbx-mode-hook
+@vindex sdb-mode-hook
+On startup, GUD executes one of the following hooks:
+@code{gdb-mode-hook}, if you are using GDB; @code{dbx-mode-hook}, if you
+are using DBX; and @code{sdb-mode-hook}, if you are using SDB. You can
+use these hooks to define custom keybindings for the debugger
+interaction buffer.
+
+Here is a convenient way to define a command that sends a particular
+command string to the debugger, and set up a key binding for it in the
+debugger interaction buffer:
+
+@findex gud-def @r{(V19)}
+@example
+(gud-def @var{function} @var{cmdstring} @var{binding} @var{docstring})
+@end example
+
+ This defines a command named @var{function} which sends
+@var{cmdstring} to the debugger process, with documentation string
+@var{docstring}, and binds it to @var{binding} in the debugger buffer's
+mode. (If @var{binding} is @code{nil}, this defines the command but
+does not make a binding for it; you can make a binding explicitly,
+perhaps using one of the above hooks.)
+
+ Commands defined with @code{gud-def} handle prefix arguments by
+passing them to the debugger, appended to end of @var{cmdstring} with a
+space in between. (This use of prefix arguments works with GDB and DBX,
+but not with SDB.)
+
+You can also set up commands that you can send to the debugger while in
+another buffer, such as a source file. Set the variable
+@code{gud-commands} to a list of strings containing debugger commands
+you might want to send.
+
+@table @kbd
+@item C-x &
+@kindex C-x & @r{(GUD in V19)}
+@findex send-gud-command @r{(V19)}
+Send a custom command to the debugger process
+(@code{send-gud-command}). Normally, send the @sc{car} of the
+@code{gud-commands} list; a prefix argument specifies which element of
+that list to use (counting from 0).
+
+If the string contains @samp{%s}, @kbd{C-x &} substitutes a numeric
+value found in the buffer at or near point. It looks for decimal,
+octal, or hexadecimal numbers, with @samp{0x} allowed. This lets you
+define commands to chase pointers whose numeric values have been
+displayed.
+@end table
+
+@node Other New Modes
+@section Other New Modes
+
+There is now a Perl mode for editing Perl programs and an Icon mode
+for editing Icon programs.
+
+@cindex C++ mode @r{(V19)}
+@findex fill-c++-comment @r{(V19)}
+C++ mode is like C mode, except that it understands C++ comment syntax
+and certain other differences between C and C++. It also has a command
+@code{fill-c++-comment} which fills a paragraph made of comment lines.
+The command @code{comment-region} is useful in C++ mode for commenting
+out several consecutive lines, or removing the commenting out of such
+lines.
+
+@cindex WordStar mode @r{(V19)}
+WordStar emulation is available---type @kbd{M-x wordstar-mode}.
+For more information, type @kbd{C-h f wordstar-mode @key{RET}}.
+
+@cindex Buffer Menu mode @r{(V19)}
+The command @kbd{C-o} in Buffer Menu mode now displays the current
+line's buffer in another window but does not select it. This is like
+the existing command @kbd{o} which selects the current line's buffer in
+another window.
+
+@menu
+* Asm Mode:: A major mode for editing assembler files.
+* Edebug Mode:: A new Lisp debugger.
+* Editing Binary Files::Hexl mode lets you edit a binary file as numbers.
+@end menu
+
+@node Asm Mode
+@subsection Asm Mode
+
+@cindex Asm mode @r{(V19)}
+Asm mode is a new major mode for editing files of assembler code.
+It defines these commands:
+
+@table @kbd
+@item @key{TAB}
+@code{tab-to-tab-stop}.
+@item @key{LFD}
+Insert a newline and then indent using @code{tab-to-tab-stop}.
+@item :
+Insert a colon and then remove the indentation from before the label
+preceding colon. Then do @code{tab-to-tab-stop}.
+@item ;
+Insert or align a comment.
+@end table
+
+@node Edebug Mode
+@subsection Edebug Mode
+@cindex Edebug mode @r{(V19)}
+
+Edebug is a new source-level debugger for Emacs Lisp programs.
+
+@findex edebug-defun @r{(V19)}
+To use Edebug, use the command @kbd{M-x edebug-defun} to ``evaluate'' a
+function definition in an Emacs Lisp file. We put ``evaluate'' in
+quotation marks because it doesn't just evaluate the function, it also
+inserts additional information to support source-level debugging.
+
+You must also do this:
+
+@example
+(setq debugger 'edebug-debug)
+@end example
+
+@noindent
+to cause errors and single-stepping to use Edebug instead of the usual
+Emacs Lisp debugger.
+
+@c ??? Need xref to Edebug manual
+For more information, see @cite{The Emacs Extensions Manual}, which
+should be included in the Emacs 19 distribution.
+
+@node Editing Binary Files
+@subsection Editing Binary Files
+
+@cindex Hexl mode @r{(V19)}
+@cindex editing binary files @r{(V19)}
+There is a new major mode for editing binary files: Hexl mode. To use
+it, use @kbd{M-x hexl-find-file} instead of @kbd{C-x C-f} to visit the
+file. This command converts the file's contents to hexadecimal and lets
+you edit the translation. When you save the file, it is converted
+automatically back to binary.
+
+You can also use @kbd{M-x hexl-mode} to translate an existing buffer
+into hex. This is useful if you visit a file normally and discover it
+is a binary file.
+
+Hexl mode has a few other commands:
+
+@c I don't think individual index entries for these commands are useful--RMS.
+@table @kbd
+@item C-M-d
+Insert a byte with a code typed in decimal.
+
+@item C-M-o
+Insert a byte with a code typed in octal.
+
+@item C-M-x
+Insert a byte with a code typed in hex.
+
+@item C-x [
+Move to the beginning of a 1k-byte ``page''.
+
+@item C-x ]
+Move to the end of a 1k-byte ``page''.
+
+@item M-g
+Move to an address specified in hex.
+
+@item M-j
+Move to an address specified in decimal.
+
+@item C-c C-c
+Leave Hexl mode, going back to the major mode this buffer had before you
+invoked @code{hexl-mode}.
+@end table
+
+@node Key Sequence Changes
+@section Changes in Key Sequences
+@cindex function keys (V19)
+@cindex mouse buttons (V19)
+@cindex key sequence changes (V19)
+
+In Emacs 18, a key sequence was a sequence of characters, which
+represented keyboard input.
+
+In Emacs 19, you can still use a sequence of characters as a key
+sequence, but you aren't limited to characters. You can also use Lisp
+symbols which represent terminal function keys or mouse buttons. If the
+function key has a word as its label, then that word is also the name of
+the symbol which represents the function key. Other function keys
+are assigned Lisp names as follows:
+
+@table @asis
+@item @code{kp-add}, @code{kp-decimal}, @code{kp-divide}, @dots{}
+Keypad keys (to the right of the regular keyboard), with names or punctuation
+@item @code{kp-0}, @code{kp-1}, @dots{}
+Keypad keys with digits
+@item @code{kp-f1}, @code{kp-f2}, @code{kp-f3}, @code{kp-f4}
+Keypad PF keys
+@item @code{left}, @code{up}, @code{right}, @code{down}
+Cursor arrow keys
+@end table
+
+A key sequence which contains non-characters must be a vector rather
+than a string.
+
+Thus, to bind function key @samp{f1} to @code{rmail}, write the
+following:
+
+@example
+(global-set-key [f1] 'rmail)
+@end example
+
+@noindent
+(To find the name of a key, type @kbd{C-h k} and then the key.)
+
+To bind the right-arrow key to the command @code{forward-char},
+you can use this expression:
+
+@example
+(global-set-key [right] 'forward-char)
+@end example
+
+@noindent
+using the Lisp syntax for a vector containing the symbol @code{right}.
+
+And this is how to make @kbd{C-x @key{RIGHTARROW}} move forward a page:
+
+@example
+(global-set-key [?\C-x right] 'forward-page)
+@end example
+
+@noindent
+where @code{?\C-x} is the Lisp syntax for an integer whose value is the
+code for the character @kbd{C-x}.
+
+You can use modifier keys such as @key{CTRL}, @key{META} and @key{SHIFT}
+with function keys. To represent these modifiers, prepend the strings
+@samp{C-}, @samp{M-} and @samp{S-} to the symbol name. Thus, here is
+how to make @kbd{M-@key{RIGHTARROW}} move forward a word:
+
+@example
+(global-set-key [M-right] 'forward-word)
+@end example
+
+Emacs uses symbols to designate mouse buttons, too.
+The ordinary mouse events in Emacs are @dfn{click} events; these
+happen when you press a button and release it without moving the mouse.
+You can also get @dfn{drag} events, when you move the mouse while
+holding the button down. Drag events happen when you finally let go
+of the button.
+
+The symbols for basic click events are @code{mouse-1} for the leftmost
+button, @code{mouse-2} for the next, and so on. Here is how you can
+redefine the second mouse button to split the current window:
+
+@findex global-set-key @r{(V19)}
+@example
+(global-set-key [mouse-2] 'split-window-vertically)
+@end example
+
+The symbols for drag events are similar, but have the prefix @samp{drag-}
+before the word @samp{mouse}. For example, dragging the left button
+generates a @code{drag-mouse-1} event.
+
+You can also request events when the mouse button is pressed down.
+These events start with @samp{down-} instead of @samp{drag-}. Such
+events are generated only if they have key bindings. When you get a
+button-down event, a corresponding click or drag event will always
+follow.
+
+The symbols for mouse events also indicate the status of the modifier
+keys, with the usual prefixes @samp{C-}, @samp{M-} and @samp{S-}.
+These always follow @samp{drag-} or @samp{down-}.
+@c ??? This is a change; currently they precede.
+
+When mouse events occur in special parts of a frame or window, such as a
+mode line or a scroll bar, the event symbol shows nothing special. The
+information about the special part is implicit in other data (the screen
+location of the event). But @code{read-key-sequence} figures out this
+aspect of the event, and encodes it with make-believe prefix keys, all
+of which are symbols: @code{mode-line}, @code{vertical-line},
+@code{horizontal-scrollbar} and @code{vertical-scrollbar}. Thus, to
+define the command for clicking the left button in a mode line, you
+could use this key sequence:
+
+@example
+[mode-line mouse-1]
+@end example
+
+You are not limited to defining individual function keys or mouse
+buttons; these can appear anywhere in a key sequence, just as characters
+can. You can even mix together all three kinds of inputs in one key
+sequence---but mixing mouse buttons with keyboard inputs is probably not
+convenient for actual use.
+
+@node Hook Changes
+@section Changes Regarding Hooks
+@cindex normal hook (V19)
+@cindex hook variable (V19)
+
+A @dfn{hook variable} is a variable that exists so that you can store in
+it functions for Emacs to call on certain occasions. (The functions that
+you put in hook variables are called @dfn{hook functions}.) Emacs 19
+has a new convention for naming hook variables that indicates more
+reliably how to use them.
+
+All the variables whose names end in @samp{-hook} are @dfn{normal
+hooks}; their values are lists of functions to be called with no
+arguments. You can use @code{add-hook} (see below) to install hook
+functions in these hooks. We have made all Emacs hooks into normal
+hooks except when there is some reason this won't work.
+
+A few hook-like variables are @dfn{abnormal}---they don't use the normal
+convention. This is either because the user-supplied functions receive
+arguments, or because their return values matter. These variables have
+names that end in @samp{-function} (if the value is a single function)
+or @samp{-functions} (if the value is a list of functions).
+
+Thus, you can always tell from the variable's name precisely how to
+install a new hook function in the variable. If the name indicates a
+normal hook, then you also know how to write your hook function.
+
+@findex add-hook @r{(V19)}
+To add a hook function to a normal hook, use @code{add-hook}. It takes
+care of adding a new hook function to any functions already installed in
+a given hook. It takes two arguments, the hook symbol and the function
+to add. For example,
+
+@example
+(add-hook 'text-mode-hook 'my-text-hook-function)
+@end example
+
+@noindent
+is how to arrange to call @code{my-text-hook-function} when entering
+Text mode or related modes.
+@vindex pre-abbrev-expand-hook @r{(V19)}
+@vindex kill-buffer-hook @r{(V19)}
+Two new hooks are worth noting here. Expansion of an abbrev
+first runs the hook @code{pre-abbrev-expand-hook}.
+@code{kill-buffer-hook} now runs whenever a buffer is killed.
+@c end antenews
+
+@node Manifesto,, Version 19, Top
+@unnumbered The GNU Manifesto
+
+@b{By Richard M. Stallman, 1986}
+
+@unnumberedsec What's GNU? Gnu's Not Unix!
+
+GNU, which stands for Gnu's Not Unix, is the name for the complete
+Unix-compatible software system which I am writing so that I can give it
+away free to everyone who can use it. Several other volunteers are helping
+me. Contributions of time, money, programs and equipment are greatly
+needed.
+
+So far we have an Emacs text editor with Lisp for writing editor commands,
+a source level debugger, a yacc-compatible parser generator, a linker, and
+around 35 utilities. A shell (command interpreter) is nearly completed. A
+new portable optimizing C compiler has compiled itself and may be released
+this year. An initial kernel exists but many more features are needed to
+emulate Unix. When the kernel and compiler are finished, it will be
+possible to distribute a GNU system suitable for program development. We
+will use @TeX{} as our text formatter, but an nroff is being worked on. We
+will use the free, portable X window system as well. After this we will
+add a portable Common Lisp, an Empire game, a spreadsheet, and hundreds of
+other things, plus on-line documentation. We hope to supply, eventually,
+everything useful that normally comes with a Unix system, and more.
+
+GNU will be able to run Unix programs, but will not be identical to Unix.
+We will make all improvements that are convenient, based on our experience
+with other operating systems. In particular, we plan to have longer
+filenames, file version numbers, a crashproof file system, filename
+completion perhaps, terminal-independent display support, and perhaps
+eventually a Lisp-based window system through which several Lisp programs
+and ordinary Unix programs can share a screen. Both C and Lisp will be
+available as system programming languages. We will try to support UUCP,
+MIT Chaosnet, and Internet protocols for communication.
+
+GNU is aimed initially at machines in the 68000/16000 class with virtual
+memory, because they are the easiest machines to make it run on. The extra
+effort to make it run on smaller machines will be left to someone who wants
+to use it on them.
+
+To avoid horrible confusion, please pronounce the `G' in the word `GNU'
+when it is the name of this project.
+
+@unnumberedsec Why I Must Write GNU
+
+I consider that the golden rule requires that if I like a program I must
+share it with other people who like it. Software sellers want to divide
+the users and conquer them, making each user agree not to share with
+others. I refuse to break solidarity with other users in this way. I
+cannot in good conscience sign a nondisclosure agreement or a software
+license agreement. For years I worked within the Artificial Intelligence
+Lab to resist such tendencies and other inhospitalities, but eventually
+they had gone too far: I could not remain in an institution where such
+things are done for me against my will.
+
+So that I can continue to use computers without dishonor, I have decided to
+put together a sufficient body of free software so that I will be able to
+get along without any software that is not free. I have resigned from the
+AI lab to deny MIT any legal excuse to prevent me from giving GNU away.
+
+@unnumberedsec Why GNU Will Be Compatible with Unix
+
+Unix is not my ideal system, but it is not too bad. The essential features
+of Unix seem to be good ones, and I think I can fill in what Unix lacks
+without spoiling them. And a system compatible with Unix would be
+convenient for many other people to adopt.
+
+@unnumberedsec How GNU Will Be Available
+
+GNU is not in the public domain. Everyone will be permitted to modify and
+redistribute GNU, but no distributor will be allowed to restrict its
+further redistribution. That is to say, proprietary modifications will not
+be allowed. I want to make sure that all versions of GNU remain free.
+
+@unnumberedsec Why Many Other Programmers Want to Help
+
+I have found many other programmers who are excited about GNU and want to
+help.
+
+Many programmers are unhappy about the commercialization of system
+software. It may enable them to make more money, but it requires them to
+feel in conflict with other programmers in general rather than feel as
+comrades. The fundamental act of friendship among programmers is the
+sharing of programs; marketing arrangements now typically used essentially
+forbid programmers to treat others as friends. The purchaser of software
+must choose between friendship and obeying the law. Naturally, many decide
+that friendship is more important. But those who believe in law often do
+not feel at ease with either choice. They become cynical and think that
+programming is just a way of making money.
+
+By working on and using GNU rather than proprietary programs, we can be
+hospitable to everyone and obey the law. In addition, GNU serves as an
+example to inspire and a banner to rally others to join us in sharing.
+This can give us a feeling of harmony which is impossible if we use
+software that is not free. For about half the programmers I talk to, this
+is an important happiness that money cannot replace.
+
+@unnumberedsec How You Can Contribute
+
+I am asking computer manufacturers for donations of machines and money.
+I'm asking individuals for donations of programs and work.
+
+One consequence you can expect if you donate machines is that GNU will run
+on them at an early date. The machines should be complete, ready to use
+systems, approved for use in a residential area, and not in need of
+sophisticated cooling or power.
+
+I have found very many programmers eager to contribute part-time work for
+GNU. For most projects, such part-time distributed work would be very hard
+to coordinate; the independently-written parts would not work together.
+But for the particular task of replacing Unix, this problem is absent. A
+complete Unix system contains hundreds of utility programs, each of which
+is documented separately. Most interface specifications are fixed by Unix
+compatibility. If each contributor can write a compatible replacement for
+a single Unix utility, and make it work properly in place of the original
+on a Unix system, then these utilities will work right when put together.
+Even allowing for Murphy to create a few unexpected problems, assembling
+these components will be a feasible task. (The kernel will require closer
+communication and will be worked on by a small, tight group.)
+
+If I get donations of money, I may be able to hire a few people full or
+part time. The salary won't be high by programmers' standards, but I'm
+looking for people for whom building community spirit is as important as
+making money. I view this as a way of enabling dedicated people to devote
+their full energies to working on GNU by sparing them the need to make a
+living in another way.
+
+@unnumberedsec Why All Computer Users Will Benefit
+
+Once GNU is written, everyone will be able to obtain good system software
+free, just like air.
+
+This means much more than just saving everyone the price of a Unix license.
+It means that much wasteful duplication of system programming effort will
+be avoided. This effort can go instead into advancing the state of the
+art.
+
+Complete system sources will be available to everyone. As a result, a user
+who needs changes in the system will always be free to make them himself,
+or hire any available programmer or company to make them for him. Users
+will no longer be at the mercy of one programmer or company which owns the
+sources and is in sole position to make changes.
+
+Schools will be able to provide a much more educational environment by
+encouraging all students to study and improve the system code. Harvard's
+computer lab used to have the policy that no program could be installed on
+the system if its sources were not on public display, and upheld it by
+actually refusing to install certain programs. I was very much inspired by
+this.
+
+Finally, the overhead of considering who owns the system software and what
+one is or is not entitled to do with it will be lifted.
+
+Arrangements to make people pay for using a program, including licensing of
+copies, always incur a tremendous cost to society through the cumbersome
+mechanisms necessary to figure out how much (that is, which programs) a
+person must pay for. And only a police state can force everyone to obey
+them. Consider a space station where air must be manufactured at great
+cost: charging each breather per liter of air may be fair, but wearing the
+metered gas mask all day and all night is intolerable even if everyone can
+afford to pay the air bill. And the TV cameras everywhere to see if you
+ever take the mask off are outrageous. It's better to support the air
+plant with a head tax and chuck the masks.
+
+Copying all or parts of a program is as natural to a programmer as
+breathing, and as productive. It ought to be as free.
+
+@unnumberedsec Some Easily Rebutted Objections to GNU's Goals
+
+@quotation
+``Nobody will use it if it is free, because that means they can't rely
+on any support.''
+
+``You have to charge for the program to pay for providing the
+support.''
+@end quotation
+
+If people would rather pay for GNU plus service than get GNU free without
+service, a company to provide just service to people who have obtained GNU
+free ought to be profitable.
+
+We must distinguish between support in the form of real programming work
+and mere handholding. The former is something one cannot rely on from a
+software vendor. If your problem is not shared by enough people, the
+vendor will tell you to get lost.
+
+If your business needs to be able to rely on support, the only way is to
+have all the necessary sources and tools. Then you can hire any available
+person to fix your problem; you are not at the mercy of any individual.
+With Unix, the price of sources puts this out of consideration for most
+businesses. With GNU this will be easy. It is still possible for there to
+be no available competent person, but this problem cannot be blamed on
+distribution arrangements. GNU does not eliminate all the world's problems,
+only some of them.
+
+Meanwhile, the users who know nothing about computers need handholding:
+doing things for them which they could easily do themselves but don't know
+how.
+
+Such services could be provided by companies that sell just hand-holding
+and repair service. If it is true that users would rather spend money and
+get a product with service, they will also be willing to buy the service
+having got the product free. The service companies will compete in quality
+and price; users will not be tied to any particular one. Meanwhile, those
+of us who don't need the service should be able to use the program without
+paying for the service.
+
+@quotation
+``You cannot reach many people without advertising,
+and you must charge for the program to support that.''
+
+``It's no use advertising a program people can get free.''
+@end quotation
+
+There are various forms of free or very cheap publicity that can be used to
+inform numbers of computer users about something like GNU. But it may be
+true that one can reach more microcomputer users with advertising. If this
+is really so, a business which advertises the service of copying and
+mailing GNU for a fee ought to be successful enough to pay for its
+advertising and more. This way, only the users who benefit from the
+advertising pay for it.
+
+On the other hand, if many people get GNU from their friends, and such
+companies don't succeed, this will show that advertising was not really
+necessary to spread GNU. Why is it that free market advocates don't want
+to let the free market decide this?
+
+@quotation
+``My company needs a proprietary operating system
+to get a competitive edge.''
+@end quotation
+
+GNU will remove operating system software from the realm of competition.
+You will not be able to get an edge in this area, but neither will your
+competitors be able to get an edge over you. You and they will compete in
+other areas, while benefitting mutually in this one. If your business is
+selling an operating system, you will not like GNU, but that's tough on
+you. If your business is something else, GNU can save you from being
+pushed into the expensive business of selling operating systems.
+
+I would like to see GNU development supported by gifts from many
+manufacturers and users, reducing the cost to each.
+
+@quotation
+``Don't programmers deserve a reward for their creativity?''
+@end quotation
+
+If anything deserves a reward, it is social contribution. Creativity can
+be a social contribution, but only in so far as society is free to use the
+results. If programmers deserve to be rewarded for creating innovative
+programs, by the same token they deserve to be punished if they restrict
+the use of these programs.
+
+@quotation
+``Shouldn't a programmer be able to ask for a reward for his creativity?''
+@end quotation
+
+There is nothing wrong with wanting pay for work, or seeking to maximize
+one's income, as long as one does not use means that are destructive. But
+the means customary in the field of software today are based on
+destruction.
+
+Extracting money from users of a program by restricting their use of it is
+destructive because the restrictions reduce the amount and the ways that
+the program can be used. This reduces the amount of wealth that humanity
+derives from the program. When there is a deliberate choice to restrict,
+the harmful consequences are deliberate destruction.
+
+The reason a good citizen does not use such destructive means to become
+wealthier is that, if everyone did so, we would all become poorer from the
+mutual destructiveness. This is Kantian ethics; or, the Golden Rule.
+Since I do not like the consequences that result if everyone hoards
+information, I am required to consider it wrong for one to do so.
+Specifically, the desire to be rewarded for one's creativity does not
+justify depriving the world in general of all or part of that creativity.
+
+@quotation
+``Won't programmers starve?''
+@end quotation
+
+I could answer that nobody is forced to be a programmer. Most of us cannot
+manage to get any money for standing on the street and making faces. But
+we are not, as a result, condemned to spend our lives standing on the
+street making faces, and starving. We do something else.
+
+But that is the wrong answer because it accepts the questioner's implicit
+assumption: that without ownership of software, programmers cannot possibly
+be paid a cent. Supposedly it is all or nothing.
+
+The real reason programmers will not starve is that it will still be
+possible for them to get paid for programming; just not paid as much as
+now.
+
+Restricting copying is not the only basis for business in software. It is
+the most common basis because it brings in the most money. If it were
+prohibited, or rejected by the customer, software business would move to
+other bases of organization which are now used less often. There are
+always numerous ways to organize any kind of business.
+
+Probably programming will not be as lucrative on the new basis as it is
+now. But that is not an argument against the change. It is not considered
+an injustice that sales clerks make the salaries that they now do. If
+programmers made the same, that would not be an injustice either. (In
+practice they would still make considerably more than that.)
+
+@quotation
+``Don't people have a right to control how their creativity is used?''
+@end quotation
+
+``Control over the use of one's ideas'' really constitutes control over
+other people's lives; and it is usually used to make their lives more
+difficult.
+
+People who have studied the issue of intellectual property rights carefully
+(such as lawyers) say that there is no intrinsic right to intellectual
+property. The kinds of supposed intellectual property rights that the
+government recognizes were created by specific acts of legislation for
+specific purposes.
+
+For example, the patent system was established to encourage inventors to
+disclose the details of their inventions. Its purpose was to help society
+rather than to help inventors. At the time, the life span of 17 years for
+a patent was short compared with the rate of advance of the state of the
+art. Since patents are an issue only among manufacturers, for whom the
+cost and effort of a license agreement are small compared with setting up
+production, the patents often do not do much harm. They do not obstruct
+most individuals who use patented products.
+
+The idea of copyright did not exist in ancient times, when authors
+frequently copied other authors at length in works of non-fiction. This
+practice was useful, and is the only way many authors' works have survived
+even in part. The copyright system was created expressly for the purpose
+of encouraging authorship. In the domain for which it was
+invented---books, which could be copied economically only on a printing
+press---it did little harm, and did not obstruct most of the individuals
+who read the books.
+
+All intellectual property rights are just licenses granted by society
+because it was thought, rightly or wrongly, that society as a whole would
+benefit by granting them. But in any particular situation, we have to ask:
+are we really better off granting such license? What kind of act are we
+licensing a person to do?
+
+The case of programs today is very different from that of books a hundred
+years ago. The fact that the easiest way to copy a program is from one
+neighbor to another, the fact that a program has both source code and
+object code which are distinct, and the fact that a program is used rather
+than read and enjoyed, combine to create a situation in which a person who
+enforces a copyright is harming society as a whole both materially and
+spiritually; in which a person should not do so regardless of whether the
+law enables him to.
+
+@quotation
+``Competition makes things get done better.''
+@end quotation
+
+The paradigm of competition is a race: by rewarding the winner, we
+encourage everyone to run faster. When capitalism really works this way,
+it does a good job; but its defenders are wrong in assuming it always works
+this way. If the runners forget why the reward is offered and become
+intent on winning, no matter how, they may find other strategies---such as,
+attacking other runners. If the runners get into a fist fight, they will
+all finish late.
+
+Proprietary and secret software is the moral equivalent of runners in a
+fist fight. Sad to say, the only referee we've got does not seem to
+object to fights; he just regulates them (``For every ten yards you run,
+you can fire one shot''). He really ought to break them up, and penalize
+runners for even trying to fight.
+
+@quotation
+``Won't everyone stop programming without a monetary incentive?''
+@end quotation
+
+Actually, many people will program with absolutely no monetary incentive.
+Programming has an irresistible fascination for some people, usually the
+people who are best at it. There is no shortage of professional musicians
+who keep at it even though they have no hope of making a living that way.
+
+But really this question, though commonly asked, is not appropriate to the
+situation. Pay for programmers will not disappear, only become less. So
+the right question is, will anyone program with a reduced monetary
+incentive? My experience shows that they will.
+
+For more than ten years, many of the world's best programmers worked at the
+Artificial Intelligence Lab for far less money than they could have had
+anywhere else. They got many kinds of non-monetary rewards: fame and
+appreciation, for example. And creativity is also fun, a reward in itself.
+
+Then most of them left when offered a chance to do the same interesting
+work for a lot of money.
+
+What the facts show is that people will program for reasons other than
+riches; but if given a chance to make a lot of money as well, they will
+come to expect and demand it. Low-paying organizations do poorly in
+competition with high-paying ones, but they do not have to do badly if the
+high-paying ones are banned.
+
+@quotation
+``We need the programmers desperately. If they demand that we
+stop helping our neighbors, we have to obey.''
+@end quotation
+
+You're never so desperate that you have to obey this sort of demand.
+Remember: millions for defense, but not a cent for tribute!
+
+@quotation
+``Programmers need to make a living somehow.''
+@end quotation
+
+In the short run, this is true. However, there are plenty of ways that
+programmers could make a living without selling the right to use a program.
+This way is customary now because it brings programmers and businessmen the
+most money, not because it is the only way to make a living. It is easy to
+find other ways if you want to find them. Here are a number of examples.
+
+A manufacturer introducing a new computer will pay for the porting of
+operating systems onto the new hardware.
+
+The sale of teaching, hand-holding and maintenance services could also
+employ programmers.
+
+People with new ideas could distribute programs as freeware, asking for
+donations from satisfied users, or selling hand-holding services. I have
+met people who are already working this way successfully.
+
+Users with related needs can form users' groups, and pay dues. A group
+would contract with programming companies to write programs that the
+group's members would like to use.
+
+All sorts of development can be funded with a Software Tax:
+
+@quotation
+Suppose everyone who buys a computer has to pay x percent of
+the price as a software tax. The government gives this to
+an agency like the NSF to spend on software development.
+
+But if the computer buyer makes a donation to software development
+himself, he can take a credit against the tax. He can donate to
+the project of his own choosing---often, chosen because he hopes to
+use the results when it is done. He can take a credit for any amount
+of donation up to the total tax he had to pay.
+
+The total tax rate could be decided by a vote of the payers of
+the tax, weighted according to the amount they will be taxed on.
+
+The consequences:
+
+@itemize @bullet
+@item
+The computer-using community supports software development.
+@item
+This community decides what level of support is needed.
+@item
+Users who care which projects their share is spent on
+can choose this for themselves.
+@end itemize
+@end quotation
+
+In the long run, making programs free is a step toward the post-scarcity
+world, where nobody will have to work very hard just to make a living.
+People will be free to devote themselves to activities that are fun, such
+as programming, after spending the necessary ten hours a week on required
+tasks such as legislation, family counseling, robot repair and asteroid
+prospecting. There will be no need to be able to make a living from
+programming.
+
+We have already greatly reduced the amount of work that the whole society
+must do for its actual productivity, but only a little of this has
+translated itself into leisure for workers because much nonproductive
+activity is required to accompany productive activity. The main causes of
+this are bureaucracy and isometric struggles against competition. Free
+software will greatly reduce these drains in the area of software
+production. We must do this, in order for technical gains in productivity
+to translate into less work for us.
+
+@node Glossary, Key Index, Intro, Top
+@unnumbered Glossary
+
+@table @asis
+@need 150
+@item Abbrev
+An abbrev is a text string which expands into a different text string
+when present in the buffer. For example, you might define a short
+word as an abbrev for a long phrase that you want to insert
+frequently. @xref{Abbrevs}.
+
+@need 150
+@item Aborting
+Aborting means getting out of a recursive edit (q.v.@:). The
+commands @kbd{C-]} and @kbd{M-x top-level} are used for this.
+@xref{Quitting}.
+
+@need 150
+@item Auto Fill mode
+Auto Fill mode is a minor mode in which text that you insert is
+automatically broken into lines of fixed width. @xref{Filling}.
+
+@need 150
+@item Auto Saving
+Auto saving is when Emacs automatically stores the contents of an
+Emacs buffer in a specially-named file so that the information will
+not be lost if the buffer is lost due to a system error or user error.
+@xref{Auto Save}.
+
+@need 150
+@item Backup File
+A backup file records the contents that a file had before the current
+editing session. Emacs makes backup files automatically to help you
+track down or cancel changes you later regret making. @xref{Backup}.
+
+@need 150
+@item Balance Parentheses
+Emacs can balance parentheses manually or automatically. Manual
+balancing is done by the commands to move over balanced expressions
+(@pxref{Lists}). Automatic balancing is done by blinking the
+parenthesis that matches one just inserted (@pxref{Matching,,Matching
+Parens}).
+
+@need 150
+@item Bind
+To bind a key is to change its binding (q.v.@:). @xref{Rebinding}.
+
+@need 150
+@item Binding
+A key gets its meaning in Emacs by having a binding which is a
+command (q.v.@:), a Lisp function that is run when the key is typed.
+@xref{Commands,Binding}. Customization often involves rebinding a
+character to a different command function. The bindings of all keys
+are recorded in the keymaps (q.v.@:). @xref{Keymaps}.
+
+@need 150
+@item Blank Lines
+Blank lines are lines that contain only whitespace. Emacs has several
+commands for operating on the blank lines in the buffer.
+
+@need 150
+@item Buffer
+The buffer is the basic editing unit; one buffer corresponds to one
+piece of text being edited. You can have several buffers, but at any
+time you are editing only one, the `selected' buffer, though several
+can be visible when you are using multiple windows. @xref{Buffers}.
+
+@need 150
+@item Buffer Selection History
+Emacs keeps a buffer selection history which records how recently each
+Emacs buffer has been selected. This is used for choosing a buffer to
+select. @xref{Buffers}.
+
+@need 150
+@item C-
+@samp{C} in the name of a character is an abbreviation for Control.
+@xref{Characters,C-}.
+
+@need 150
+@item C-M-
+@samp{C-M-} in the name of a character is an abbreviation for
+Control-Meta. @xref{Characters,C-M-}.
+
+@need 150
+@item Case Conversion
+Case conversion means changing text from upper case to lower case or
+vice versa. @xref{Case}, for the commands for case conversion.
+
+@need 150
+@item Characters
+Characters form the contents of an Emacs buffer; also, Emacs commands
+are invoked by keys (q.v.@:), which are sequences of one or more
+characters. @xref{Characters}.
+
+@need 150
+@item Command
+A command is a Lisp function specially defined to be able to serve as
+a key binding in Emacs. When you type a key (q.v.@:), its binding
+(q.v.@:) is looked up in the relevant keymaps (q.v.@:) to find the
+command to run. @xref{Commands}.
+
+@need 150
+@item Command Name
+A command name is the name of a Lisp symbol which is a command
+(@pxref{Commands}). You can invoke any command by its name using
+@kbd{M-x} (@pxref{M-x}).
+
+@need 150
+@item Comments
+A comment is text in a program which is intended only for humans
+reading the program, and is marked specially so that it will be
+ignored when the program is loaded or compiled. Emacs offers special
+commands for creating, aligning and killing comments.
+@xref{Comments}.
+
+@need 150
+@item Compilation
+Compilation is the process of creating an executable program from
+source code. Emacs has commands for compiling files of Emacs Lisp
+code (@pxref{Lisp Libraries}) and programs in C and other languages
+(@pxref{Compilation}).
+
+@need 150
+@item Complete Key
+A complete key is a character or sequence of characters which, when typed
+by the user, fully specifies one action to be performed by Emacs. For
+example, @kbd{X} and @kbd{Control-f} and @kbd{Control-x m} are keys. Keys
+derive their meanings from being bound (q.v.@:) to commands (q.v.@:).
+Thus, @kbd{X} is conventionally bound to a command to insert @samp{X} in
+the buffer; @kbd{C-x m} is conventionally bound to a command to begin
+composing a mail message. @xref{Keys}.
+
+@need 150
+@item Completion
+Completion is what Emacs does when it automatically fills out an
+abbreviation for a name into the entire name. Completion is done for
+minibuffer (q.v.@:) arguments when the set of possible valid inputs
+is known; for example, on command names, buffer names, and
+file names. Completion occurs when @key{TAB}, @key{SPC} or @key{RET}
+is typed. @xref{Completion}.@refill
+
+@need 150
+@item Continuation Line
+When a line of text is longer than the width of the screen, it
+takes up more than one screen line when displayed. We say that the
+text line is continued, and all screen lines used for it after the
+first are called continuation lines. @xref{Basic,Continuation,Basic
+Editing}.
+
+@need 150
+@item Control-Character
+@sc{ascii} characters with octal codes 0 through 037, and also code 0177,
+do not have graphic images assigned to them. These are the control
+characters. Any control character can be typed by holding down the
+@key{CTRL} key and typing some other character; some have special keys
+on the keyboard. @key{RET}, @key{TAB}, @key{ESC}, @key{LFD} and
+@key{DEL} are all control characters. @xref{Characters}.@refill
+
+@need 150
+@item Copyleft
+A copyleft is a notice giving the public legal permission to redistribute
+a program or other work of art. Copylefts are used by leftists to enrich
+the public just as copyrights are used by rightists to gain power over
+the public.
+
+@need 150
+@item Current Buffer
+The current buffer in Emacs is the Emacs buffer on which most editing
+commands operate. You can select any Emacs buffer as the current one.
+@xref{Buffers}.
+
+@need 150
+@item Current Line
+The line point is on (@pxref{Point}).
+
+@need 150
+@item Current Paragraph
+The paragraph that point is in. If point is between paragraphs, the
+current paragraph is the one that follows point. @xref{Paragraphs}.
+
+@need 150
+@item Current Defun
+The defun (q.v.@:) that point is in. If point is between defuns, the
+current defun is the one that follows point. @xref{Defuns}.
+
+@need 150
+@item Cursor
+The cursor is the rectangle on the screen which indicates the position
+called point (q.v.@:) at which insertion and deletion takes place.
+The cursor is on or under the character that follows point. Often
+people speak of `the cursor' when, strictly speaking, they mean
+`point'. @xref{Basic,Cursor,Basic Editing}.
+
+@need 150
+@item Customization
+Customization is making minor changes in the way Emacs works. It is
+often done by setting variables (@pxref{Variables}) or by rebinding
+keys (@pxref{Keymaps}).
+
+@need 150
+@item Default Argument
+The default for an argument is the value that will be assumed if you
+do not specify one. When the minibuffer is used to read an argument,
+the default argument is used if you just type @key{RET}.
+@xref{Minibuffer}.
+
+@need 150
+@item Default Directory
+When you specify a file name that does not start with @samp{/} or @samp{~},
+it is interpreted relative to the current buffer's default directory.
+@xref{Minibuffer File,Default Directory}.
+
+@need 150
+@item Defun
+A defun is a list at the top level of parenthesis or bracket structure
+in a program. It is so named because most such lists in Lisp programs
+are calls to the Lisp function @code{defun}. @xref{Defuns}.
+
+@need 150
+@item @key{DEL}
+@key{DEL} is a character that runs the command to delete one character of
+text. @xref{Basic,DEL,Basic Editing}.
+
+@need 150
+@item Deletion
+Deletion means erasing text without saving it. Emacs deletes text
+only when it is expected not to be worth saving (all whitespace, or
+only one character). The alternative is killing (q.v.@:).
+@xref{Killing,Deletion}.
+
+@need 150
+@item Deletion of Files
+Deleting a file means erasing it from the file system.
+@xref{Misc File Ops}.
+
+@need 150
+@item Deletion of Messages
+Deleting a message means flagging it to be eliminated from your mail
+file. This can be undone by undeletion until the mail file is expunged.
+@xref{Rmail Deletion}.
+
+@need 150
+@item Deletion of Windows
+Deleting a window means eliminating it from the screen. Other windows
+expand to use up the space. The deleted window can never come back,
+but no actual text is thereby lost. @xref{Windows}.
+
+@need 150
+@item Directory
+Files in the Unix file system are grouped into file directories.
+@xref{ListDir,,Directories}.
+
+@need 150
+@item Dired
+Dired is the Emacs facility that displays the contents of a file
+directory and allows you to ``edit the directory'', performing
+operations on the files in the directory. @xref{Dired}.
+
+@need 150
+@item Disabled Command
+A disabled command is one that you may not run without special
+confirmation. The usual reason for disabling a command is that it is
+confusing for beginning users. @xref{Disabling}.
+
+@need 150
+@item Dribble File
+A file into which Emacs writes all the characters that the user types
+on the keyboard. Dribble files are used to make a record for
+debugging Emacs bugs. Emacs does not make a dribble file unless you
+tell it to. @xref{Bugs}.
+
+@need 150
+@item Echo Area
+The echo area is the bottom line of the screen, used for echoing the
+arguments to commands, for asking questions, and printing brief
+messages (including error messages). @xref{Echo Area}.
+
+@need 150
+@item Echoing
+Echoing is acknowledging the receipt of commands by displaying them
+(in the echo area). Emacs never echoes single-character keys; longer
+keys echo only if you pause while typing them.
+
+@need 150
+@item Error
+An error occurs when an Emacs command cannot execute in the current
+circumstances. When an error occurs, execution of the command stops
+(unless the command has been programmed to do otherwise) and Emacs
+reports the error by printing an error message (q.v.). Type-ahead
+is discarded. Then Emacs is ready to read another editing command.
+
+@need 150
+@item Error Messages
+Error messages are single lines of output printed by Emacs when the
+user asks for something impossible to do (such as, killing text
+forward when point is at the end of the buffer). They appear in the
+echo area, accompanied by a beep.
+
+@need 150
+@item @key{ESC}
+@key{ESC} is a character, used to end incremental searches and as a
+prefix for typing Meta characters on keyboards lacking a @key{META}
+key. Unlike the @key{META} key (which, like the @key{SHIFT} key, is held
+down while another character is typed), the @key{ESC} key is pressed
+once and applies to the next character typed.
+
+@need 150
+@item Fill Prefix
+The fill prefix is a string that should be expected at the beginning
+of each line when filling is done. It is not regarded as part of the
+text to be filled. @xref{Filling}.
+
+@need 150
+@item Filling
+Filling text means moving text from line to line so that all the lines
+are approximately the same length. @xref{Filling}.
+
+@need 150
+@item Global
+Global means `independent of the current environment; in effect
+throughout Emacs'. It is the opposite of local (q.v.@:). Particular
+examples of the use of `global' appear below.
+
+@need 150
+@item Global Abbrev
+A global definition of an abbrev (q.v.@:) is effective in all major
+modes that do not have local (q.v.@:) definitions for the same abbrev.
+@xref{Abbrevs}.
+
+@need 150
+@item Global Keymap
+The global keymap (q.v.@:) contains key bindings that are in effect
+except when overridden by local key bindings in a major mode's local
+keymap (q.v.@:). @xref{Keymaps}.
+
+@need 150
+@item Global Substitution
+Global substitution means replacing each occurrence of one string by
+another string through a large amount of text. @xref{Replace}.
+
+@need 150
+@item Global Variable
+The global value of a variable (q.v.@:) takes effect in all buffers
+that do not have their own local (q.v.@:) values for the variable.
+@xref{Variables}.
+
+@need 150
+@item Graphic Character
+Graphic characters are those assigned pictorial images rather than
+just names. All the non-Meta (q.v.@:) characters except for the
+Control (q.v.@:) characters are graphic characters. These include
+letters, digits, punctuation, and spaces; they do not include
+@key{RET} or @key{ESC}. In Emacs, typing a graphic character inserts
+that character (in ordinary editing modes). @xref{Basic,,Basic Editing}.
+
+@need 150
+@item Grinding
+Grinding means adjusting the indentation in a program to fit the
+nesting structure. @xref{Indentation,Grinding}.
+
+@need 150
+@item Hardcopy
+Hardcopy means printed output. Emacs has commands for making printed
+listings of text in Emacs buffers. @xref{Hardcopy}.
+
+@need 150
+@item @key{HELP}
+You can type @key{HELP} at any time to ask what options you have, or
+to ask what any command does. @key{HELP} is really @kbd{Control-h}.
+@xref{Help}.
+
+@need 150
+@item Inbox
+An inbox is a file in which mail is delivered by the operating system.
+Rmail transfers mail from inboxes to mail files (q.v.) in which the
+mail is then stored permanently or until explicitly deleted.
+@xref{Rmail Inbox}.
+
+@need 150
+@item Indentation
+Indentation means blank space at the beginning of a line. Most
+programming languages have conventions for using indentation to
+illuminate the structure of the program, and Emacs has special
+features to help you set up the correct indentation.
+@xref{Indentation}.
+
+@need 150
+@item Insertion
+Insertion means copying text into the buffer, either from the keyboard
+or from some other place in Emacs.
+
+@need 150
+@item Justification
+Justification means adding extra spaces to lines of text to make them
+come exactly to a specified width. @xref{Filling,Justification}.
+
+@need 150
+@item Keyboard Macros
+Keyboard macros are a way of defining new Emacs commands from
+sequences of existing ones, with no need to write a Lisp program.
+@xref{Keyboard Macros}.
+
+@need 150
+@item Key
+A key is a sequence of characters that, when input to Emacs, specify
+or begin to specify a single action for Emacs to perform. That is,
+the sequence is not more than a single unit. If the key is enough to
+specify one action, it is a complete key (q.v.); if it is less than
+enough, it is a prefix key (q.v.). @xref{Keys}.
+
+@need 150
+@item Keymap
+The keymap is the data structure that records the bindings (q.v.@:) of
+keys to the commands that they run. For example, the keymap binds the
+character @kbd{C-n} to the command function @code{next-line}.
+@xref{Keymaps}.
+
+@need 150
+@item Kill Ring
+The kill ring is where all text you have killed recently is saved.
+You can reinsert any of the killed text still in the ring; this is
+called yanking (q.v.@:). @xref{Yanking}.
+
+@need 150
+@item Killing
+Killing means erasing text and saving it on the kill ring so it can be
+yanked (q.v.@:) later. Some other systems call this ``cutting''.
+Most Emacs commands to erase text do killing, as opposed to deletion
+(q.v.@:). @xref{Killing}.
+
+@need 150
+@item Killing Jobs
+Killing a job (such as, an invocation of Emacs) means making it cease
+to exist. Any data within it, if not saved in a file, is lost.
+@xref{Exiting}.
+
+@need 150
+@item List
+A list is, approximately, a text string beginning with an open
+parenthesis and ending with the matching close parenthesis. In C mode
+and other non-Lisp modes, groupings surrounded by other kinds of matched
+delimiters appropriate to the language, such as braces, are also
+considered lists. Emacs has special commands for many operations on
+lists. @xref{Lists}.
+
+@need 150
+@item Local
+Local means `in effect only in a particular context'; the relevant
+kind of context is a particular function execution, a particular
+buffer, or a particular major mode. It is the opposite of `global'
+(q.v.@:). Specific uses of `local' in Emacs terminology appear below.
+
+@need 150
+@item Local Abbrev
+A local abbrev definition is effective only if a particular major mode
+is selected. In that major mode, it overrides any global definition
+for the same abbrev. @xref{Abbrevs}.
+
+@need 150
+@item Local Keymap
+A local keymap is used in a particular major mode; the key bindings
+(q.v.@:) in the current local keymap override global bindings of the
+same keys. @xref{Keymaps}.
+
+@need 150
+@item Local Variable
+A local value of a variable (q.v.@:) applies to only one buffer.
+@xref{Locals}.
+
+@need 150
+@item M-
+@kbd{M-} in the name of a character is an abbreviation for @key{META},
+one of the modifier keys that can accompany any character.
+@xref{Characters}.
+
+@need 150
+@item M-C-
+@samp{M-C-} in the name of a character is an abbreviation for
+Control-Meta; it means the same thing as @samp{C-M-}. If your
+terminal lacks a real @key{META} key, you type a Control-Meta character by
+typing @key{ESC} and then typing the corresponding Control character.
+@xref{Characters,C-M-}.
+
+@need 150
+@item M-x
+@kbd{M-x} is the key which is used to call an Emacs command by name.
+This is how commands that are not bound to keys are called.
+@xref{M-x}.
+
+@need 150
+@item Mail
+Mail means messages sent from one user to another through the computer
+system, to be read at the recipient's convenience. Emacs has commands for
+composing and sending mail, and for reading and editing the mail you have
+received. @xref{Sending Mail}. @xref{Rmail}, for how to read mail.
+
+@need 150
+@item Mail File
+A mail file is a file which is edited using Rmail and in which Rmail
+stores mail. @xref{Rmail}.
+
+@need 150
+@item Major Mode
+The major modes are a mutually exclusive set of options each of which
+configures Emacs for editing a certain sort of text. Ideally, each
+programming language has its own major mode. @xref{Major Modes}.
+
+@need 150
+@item Mark
+The mark points to a position in the text. It specifies one end of
+the region (q.v.@:), point being the other end. Many commands operate
+on all the text from point to the mark. @xref{Mark}.
+
+@need 150
+@item Mark Ring
+The mark ring is used to hold several recent previous locations of the
+mark, just in case you want to move back to them. @xref{Mark Ring}.
+
+@need 150
+@item Message
+See `mail'.
+
+@need 150
+@item Meta
+Meta is the name of a modifier bit which a command character may have.
+It is present in a character if the character is typed with the
+@key{META} key held down. Such characters are given names that start
+with @kbd{Meta-}. For example, @kbd{Meta-<} is typed by holding down
+@key{META} and at the same time typing @kbd{<} (which itself is done,
+on most terminals, by holding down @key{SHIFT} and typing @kbd{,}).
+@xref{Characters,Meta}.
+
+@need 150
+@item Meta Character
+A Meta character is one whose character code includes the Meta bit.
+
+@need 150
+@item Minibuffer
+The minibuffer is the window that appears when necessary inside the
+echo area (q.v.@:), used for reading arguments to commands.
+@xref{Minibuffer}.
+
+@need 150
+@item Minor Mode
+A minor mode is an optional feature of Emacs which can be switched on
+or off independently of all other features. Each minor mode has a
+command to turn it on or off. @xref{Minor Modes}.
+
+@need 150
+@item Mode Line
+The mode line is the line at the bottom of each text window (q.v.@:),
+which gives status information on the buffer displayed in that window.
+@xref{Mode Line}.
+
+@need 150
+@item Modified Buffer
+A buffer (q.v.@:) is modified if its text has been changed since the
+last time the buffer was saved (or since when it was created, if it
+has never been saved). @xref{Saving}.
+
+@need 150
+@item Moving Text
+Moving text means erasing it from one place and inserting it in
+another. This is done by killing (q.v.@:) and then yanking (q.v.@:).
+@xref{Killing}.
+
+@need 150
+@item Named Mark
+A named mark is a register (q.v.@:) in its role of recording a
+location in text so that you can move point to that location.
+@xref{Registers}.
+
+@need 150
+@item Narrowing
+Narrowing means creating a restriction (q.v.@:) that limits editing in
+the current buffer to only a part of the text in the buffer. Text
+outside that part is inaccessible to the user until the boundaries are
+widened again, but it is still there, and saving the file saves it
+all. @xref{Narrowing}.
+
+@need 150
+@item Newline
+@key{LFD} characters in the buffer terminate lines of text and are
+called newlines. @xref{Characters,Newline}.
+
+@need 150
+@item Numeric Argument
+A numeric argument is a number, specified before a command, to change
+the effect of the command. Often the numeric argument serves as a
+repeat count. @xref{Arguments}.
+
+@need 150
+@item Option
+An option is a variable (q.v.@:) that exists so that you can customize
+Emacs by giving it a new value. @xref{Variables}.
+
+@need 150
+@item Overwrite Mode
+Overwrite mode is a minor mode. When it is enabled, ordinary text
+characters replace the existing text after point rather than pushing
+it to the right. @xref{Minor Modes}.
+
+@need 150
+@item Page
+A page is a unit of text, delimited by formfeed characters (@sc{ascii}
+Control-L, code 014) coming at the beginning of a line. Some Emacs
+commands are provided for moving over and operating on pages.
+@xref{Pages}.
+
+@need 150
+@item Paragraphs
+Paragraphs are the medium-size unit of English text. There are
+special Emacs commands for moving over and operating on paragraphs.
+@xref{Paragraphs}.
+
+@need 150
+@item Parsing
+We say that Emacs parses words or expressions in the text being
+edited. Really, all it knows how to do is find the other end of a
+word or expression. @xref{Syntax}.
+
+@need 150
+@item Point
+Point is the place in the buffer at which insertion and deletion
+occur. Point is considered to be between two characters, not at one
+character. The terminal's cursor (q.v.@:) indicates the location of
+point. @xref{Basic,Point}.
+
+@need 150
+@item Prefix Key
+A prefix key is a key (q.v.@:) whose sole function is to introduce a
+set of multi-character keys. @kbd{Control-x} is an example of prefix
+key; thus, any two-character sequence starting with @kbd{C-x} is also
+a legitimate key. @xref{Keys}.
+
+@need 150
+@item Primary Mail File
+Your primary mail file is the file named @samp{RMAIL} in your home
+directory, where all mail that you receive is stored by Rmail unless you
+make arrangements to do otherwise. @xref{Rmail}.
+
+@need 150
+@item Prompt
+A prompt is text printed to ask the user for input. Printing a prompt
+is called prompting. Emacs prompts always appear in the echo area
+(q.v.@:). One kind of prompting happens when the minibuffer is used
+to read an argument (@pxref{Minibuffer}); the echoing which happens
+when you pause in the middle of typing a multicharacter key is also a
+kind of prompting (@pxref{Echo Area}).
+
+@need 150
+@item Quitting
+Quitting means cancelling a partially typed command or a running
+command, using @kbd{C-g}. @xref{Quitting}.
+
+@need 150
+@item Quoting
+Quoting means depriving a character of its usual special significance.
+In Emacs this is usually done with @kbd{Control-q}. What constitutes special
+significance depends on the context and on convention. For example,
+an ``ordinary'' character as an Emacs command inserts itself; so in
+this context, a special character is any character that does not
+normally insert itself (such as @key{DEL}, for example), and quoting
+it makes it insert itself as if it were not special. Not all contexts
+allow quoting. @xref{Basic,Quoting,Basic Editing}.
+
+@need 150
+@item Read-only Buffer
+A read-only buffer is one whose text you are not allowed to change.
+Normally Emacs makes buffers read-only when they contain text which
+has a special significance to Emacs; for example, Dired buffers.
+Visiting a file that is write protected also makes a read-only buffer.
+@xref{Buffers}.
+
+@need 150
+@item Recursive Editing Level
+A recursive editing level is a state in which part of the execution of
+a command involves asking the user to edit some text. This text may
+or may not be the same as the text to which the command was applied.
+The mode line indicates recursive editing levels with square brackets
+(@samp{[} and @samp{]}). @xref{Recursive Edit}.
+
+@need 150
+@item Redisplay
+Redisplay is the process of correcting the image on the screen to
+correspond to changes that have been made in the text being edited.
+@xref{Screen,Redisplay}.
+
+@need 150
+@item Regexp
+See `regular expression'.
+
+@need 150
+@item Region
+The region is the text between point (q.v.@:) and the mark (q.v.@:).
+Many commands operate on the text of the region. @xref{Mark,Region}.
+
+@need 150
+@item Registers
+Registers are named slots in which text or buffer positions or
+rectangles can be saved for later use. @xref{Registers}.
+
+@need 150
+@item Regular Expression
+A regular expression is a pattern that can match various text strings;
+for example, @samp{l[0-9]+} matches @samp{l} followed by one or more
+digits. @xref{Regexps}.
+
+@need 150
+@item Replacement
+See `global substitution'.
+
+@need 150
+@item Restriction
+A buffer's restriction is the amount of text, at the beginning or the
+end of the buffer, that is temporarily invisible and inaccessible.
+Giving a buffer a nonzero amount of restriction is called narrowing
+(q.v.). @xref{Narrowing}.
+
+@need 150
+@item @key{RET}
+@key{RET} is a character that in Emacs runs the command to insert a
+newline into the text. It is also used to terminate most arguments
+read in the minibuffer (q.v.@:). @xref{Characters,Return}.
+
+@need 150
+@item Saving
+Saving a buffer means copying its text into the file that was visited
+(q.v.@:) in that buffer. This is the way text in files actually gets
+changed by your Emacs editing. @xref{Saving}.
+
+@need 150
+@item Scrolling
+Scrolling means shifting the text in the Emacs window so as to see a
+different part of the buffer. @xref{Display,Scrolling}.
+
+@need 150
+@item Searching
+Searching means moving point to the next occurrence of a specified
+string. @xref{Search}.
+
+@need 150
+@item Selecting
+Selecting a buffer means making it the current (q.v.@:) buffer.
+@xref{Buffers,Selecting}.
+
+@need 150
+@item Self-documentation
+Self-documentation is the feature of Emacs which can tell you what any
+command does, or give you a list of all commands related to a topic
+you specify. You ask for self-documentation with the help character,
+@kbd{C-h}. @xref{Help}.
+
+@need 150
+@item Sentences
+Emacs has commands for moving by or killing by sentences.
+@xref{Sentences}.
+
+@need 150
+@item Sexp
+A sexp (short for `s-expression') is the basic syntactic unit of Lisp
+in its textual form: either a list, or Lisp atom. Many Emacs commands
+operate on sexps. The term `sexp' is generalized to languages other
+than Lisp, to mean a syntactically recognizable expression.
+@xref{Lists,Sexps}.
+
+@need 150
+@item Simultaneous Editing
+Simultaneous editing means two users modifying the same file at once.
+Simultaneous editing if not detected can cause one user to lose his
+work. Emacs detects all cases of simultaneous editing and warns the
+user to investigate them. @xref{Interlocking,,Simultaneous Editing}.
+
+@need 150
+@item String
+A string is a kind of Lisp data object which contains a sequence of
+characters. Many Emacs variables are intended to have strings as
+values. The Lisp syntax for a string consists of the characters in
+the string with a @samp{"} before and another @samp{"} after. A
+@samp{"} that is part of the string must be written as @samp{\"} and a
+@samp{\} that is part of the string must be written as @samp{\\}. All
+other characters, including newline, can be included just by writing
+them inside the string; however, escape sequences as in C, such as
+@samp{\n} for newline or @samp{\241} using an octal character code,
+are allowed as well.
+
+@need 150
+@item String Substitution
+See `global substitution'.
+
+@need 150
+@item Syntax Table
+The syntax table tells Emacs which characters are part of a word,
+which characters balance each other like parentheses, etc.
+@xref{Syntax}.
+
+@need 150
+@item Tag Table
+A tag table is a file that serves as an index to the function
+definitions in one or more other files. @xref{Tags}.
+
+@need 150
+@item Termscript File
+A termscript file contains a record of all characters sent by Emacs to
+the terminal. It is used for tracking down bugs in Emacs redisplay.
+Emacs does not make a termscript file unless you tell it to.
+@xref{Bugs}.
+
+@need 150
+@item Text
+Two meanings (@pxref{Text}):
+
+@need 150
+@itemize @bullet
+@need 150
+@item
+Data consisting of a sequence of characters, as opposed to binary
+numbers, images, graphics commands, executable programs, and the like.
+The contents of an Emacs buffer are always text in this sense.
+@need 150
+@item
+Data consisting of written human language, as opposed to programs,
+or following the stylistic conventions of human language.
+@end itemize
+
+@need 150
+@item Top Level
+Top level is the normal state of Emacs, in which you are editing the
+text of the file you have visited. You are at top level whenever you
+are not in a recursive editing level (q.v.@:) or the minibuffer
+(q.v.@:), and not in the middle of a command. You can get back to top
+level by aborting (q.v.@:) and quitting (q.v.@:). @xref{Quitting}.
+
+@need 150
+@item Transposition
+Transposing two units of text means putting each one into the place
+formerly occupied by the other. There are Emacs commands to transpose
+two adjacent characters, words, sexps (q.v.@:) or lines
+(@pxref{Transpose}).
+
+@need 150
+@item Truncation
+Truncating text lines in the display means leaving out any text on a
+line that does not fit within the right margin of the window
+displaying it. See also `continuation line'.
+@xref{Basic,Truncation,Basic Editing}.
+
+@need 150
+@item Undoing
+Undoing means making your previous editing go in reverse, bringing
+back the text that existed earlier in the editing session.
+@xref{Undo}.
+
+@need 150
+@item Variable
+A variable is an object in Lisp that can store an arbitrary value.
+Emacs uses some variables for internal purposes, and has others (known
+as `options' (q.v.@:)) just so that you can set their values to
+control the behavior of Emacs. The variables used in Emacs that you
+are likely to be interested in are listed in the Variables Index in
+this manual. @xref{Variables}, for information on variables.
+
+@need 150
+@item Visiting
+Visiting a file means loading its contents into a buffer (q.v.@:)
+where they can be edited. @xref{Visiting}.
+
+@need 150
+@item Whitespace
+Whitespace is any run of consecutive formatting characters (space,
+tab, newline, and backspace).
+
+@need 150
+@item Widening
+Widening is removing any restriction (q.v.@:) on the current buffer;
+it is the opposite of narrowing (q.v.@:). @xref{Narrowing}.
+
+@need 150
+@item Window
+Emacs divides the screen into one or more windows, each of which can
+display the contents of one buffer (q.v.@:) at any time.
+@xref{Screen}, for basic information on how Emacs uses the screen.
+@xref{Windows}, for commands to control the use of windows.
+
+@need 150
+@item Word Abbrev
+Synonymous with `abbrev'.
+
+@need 150
+@item Word Search
+Word search is searching for a sequence of words, considering the
+punctuation between them as insignificant. @xref{Word Search}.
+
+@need 150
+@item Yanking
+Yanking means reinserting text previously killed. It can be used to
+undo a mistaken kill, or for copying or moving text. Some other
+systems call this ``pasting''. @xref{Yanking}.
+@end table
+
+@node Key Index, Command Index, Glossary, Top
+@unnumbered Key (Character) Index
+@printindex ky
+
+@node Command Index, Variable Index, Key Index, Top
+@unnumbered Command and Function Index
+@printindex fn
+
+@node Variable Index, Concept Index, Command Index, Top
+@unnumbered Variable Index
+@printindex vr
+
+@node Concept Index, Screen, Variable Index, Top
+@unnumbered Concept Index
+@printindex cp
+
+@tex
+\global\baselineskip 11.5pt
+@end tex
+
+@summarycontents
+@contents
+@bye