diff man/xemacs/text.texi @ 428:3ecd8885ac67 r21-2-22

Import from CVS: tag r21-2-22
author cvs
date Mon, 13 Aug 2007 11:28:15 +0200
parents
children 7844ab77b582
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/man/xemacs/text.texi	Mon Aug 13 11:28:15 2007 +0200
@@ -0,0 +1,1126 @@
+
+@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.  In this
+sense of the word any file that you edit with Emacs is text.  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 and stylistic conventions that editor
+commands should support or use to advantage: conventions involving
+words, sentences, paragraphs, and capital letters.  This chapter describes
+Emacs commands for all 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 a file contains plain text, 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 can
+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
+  You should use Text mode---rather than Fundamental or Lisp mode---to
+edit files of text in a human language.  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 unless they are 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
+  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.  As a result, a line made by Auto Filling,
+or by @key{LFD}, is normally 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 the value of the
+variable @code{text-mode-hook} with no arguments, 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.
+
+  Two modes similar to Text mode are of use for editing text that is to
+be passed through a text formatter before achieving its final readable form.
+
+@menu
+* Nroff Mode::  The major mode for editing input to the formatter nroff.
+* TeX Mode::    The major modes for editing input to the formatter TeX.
+
+
+  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
+@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.  Nroff mode differs from Text mode in only a few ways.  All nroff
+command lines are considered paragraph separators, so that filling never
+garbles the nroff commands.  Pages are separated by @samp{.bp} commands.
+Comments start with backslash-doublequote.  There are also three special
+commands that are not available 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
+
+@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 and you use @key{RET} to end a line containing an nroff command
+that opens a kind of grouping, Emacs automatically 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}}, the matching command @samp{.)b} will be inserted on a new
+line following point.
+
+@vindex nroff-mode-hook
+  Entering Nroff mode calls the value of the variable
+@code{text-mode-hook} with no arguments, if that value exists and is not
+@code{nil}; then it does the same with the variable
+@code{nroff-mode-hook}.
+
+@node TeX Mode, Outline Mode, Nroff Mode, Text Mode
+@subsection @TeX{} Mode
+@cindex TeX
+@cindex LaTeX
+@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; like GNU
+Emacs, it is free.  La@TeX{} is a simplified input format for @TeX{},
+implemented by @TeX{} macros.  It is part of @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,
+which are two distinct major modes that differ only slightly.  These
+modes are designed for editing the two different input formats.  The
+command @kbd{M-x tex-mode} looks at the contents of a buffer to
+determine whether it appears 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 one of the 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
+
+  @TeX{} for Unix systems can be obtained from the University of Washington
+for a distribution fee.
+
+  To order a full distribution, send $140.00 for a 1/2 inch
+9-track tape, $165.00 for two 4-track 1/4 inch cartridge tapes
+(foreign sites $150.00, for 1/2 inch, $175.00 for 1/4 inch, to cover
+the extra postage) payable to the University of Washington to:
+
+@display
+The Director
+Northwest Computer Support Group,  DW-10
+University of Washington
+Seattle, Washington 98195
+@end display
+
+@noindent
+Purchase orders are acceptable, but there is an extra charge of
+$10.00 to pay for processing charges. (The total cost comes to $150 
+for domestic sites, $175 for foreign sites).
+
+  The normal distribution is a tar tape, blocked 20, 1600 bpi, on an
+industry standard 2400 foot half-inch reel.  The physical format for
+the 1/4 inch streamer cartridges uses QIC-11, 8000 bpi, 4-track
+serpentine recording for the SUN.  Also, SystemV tapes can be written
+in cpio format, blocked 5120 bytes, ASCII headers.
+
+@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.
+@item C-c @{
+Insert @samp{@{@}} and position point between them (@code{tex-insert-braces}).
+@item C-c @}
+Move forward past the next unmatched close brace (@code{up-list}).
+@item C-c C-e
+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; you 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 C-c @{ (TeX mode)
+@findex up-list
+@kindex C-c @} (TeX mode)
+  If you prefer to keep braces balanced at all times, you can use @kbd{C-c @{}
+(@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{C-c @}} (@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, not just braces, are
+matched in @TeX{} mode.  This is wrong if you want to  check @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{} using
+@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 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 them, 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, insert two
+special strings in the file: @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 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, so you don't need to do anything special to identify the
+header.
+
+@vindex TeX-mode-hook
+@vindex LaTeX-mode-hook
+@vindex plain-TeX-mode-hook
+  When you enter either kind of @TeX{} mode, Emacs calls with no
+arguments the value of the variable @code{text-mode-hook}, if that value
+exists and is not @code{nil}.  Emacs then calls the variable
+@code{TeX-mode-hook} and either @code{plain-TeX-mode-hook} or
+@code{LaTeX-mode-hook} under the same conditions.
+
+@node Outline Mode,, TeX Mode, Text Mode
+@subsection Outline Mode
+@cindex outlines
+@cindex selective display
+@cindex invisible lines
+
+  Outline mode is a major mode similar to 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
+  When you enter Outline mode, Emacs 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 as well; yanking
+everything 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 can 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 the same length, 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 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.  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
+
+   Some special commands in Outline mode 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}).
+@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)
+  More advanced motion commands understand the levels of headings.
+The 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 exist as 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-d
+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 should 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, one that hides the bodies and one that
+makes 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.@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.  You can
+think of these commands as a pair of opposites even though @kbd{M-x
+show-all} applies to more than just body lines.
+
+@vindex selective-display-ellipses
+You can turn off the use of ellipses at the ends of visible lines by
+setting @code{selective-display-ellipses} to @code{nil}.  The result 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
+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 after the last letter of the
+word, while backward motion stops 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.  (To kill only the
+next word but not the punctuation before it, simply type @kbd{Meta-f} to get
+to 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.   To kill just @samp{FOO}, type
+@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, transposing @w{@samp{FOO,
+BAR}} results in @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.  For example, any character can 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, and therefore are like the word-handling commands.
+
+@table @kbd
+@item M-a
+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 resemble @kbd{Control-a} and
+@kbd{Control-e}, which move to the beginning and end of a line.  Unlike
+their counterparts, @kbd{Meta-a} and @kbd{Meta-e} move over successive
+sentences if repeated or given numeric arguments.  Emacs assumes
+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.@refill
+
+  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
+ @kbd{M-a} and @kbd{M-e} have a corresponding kill command, just like
+@kbd{C-a} and @kbd{C-e} have @kbd{C-k}.  The command is  @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 repeat counts.@refill
+
+  There is a special command, @kbd{C-x @key{DEL}}
+(@code{backward-kill-sentence}), for killing back to the beginning of a
+sentence, which 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-[
+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.  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.  As a result, the paragraph commands continue to
+be useful even though there are no paragraphs per se.
+
+  When there is a fill prefix, paragraphs are delimited by all lines
+which don't start with the fill prefix.  @xref{Filling}.
+
+@kindex M-h
+@findex mark-paragraph
+   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 the 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
+  The precise definition of a paragraph boundary is controlled by the
+variables @code{paragraph-separate} and @code{paragraph-start}.  The value
+of @code{paragraph-start} is a regexp that matches any line that
+either starts or separates paragraphs.  The value of
+@code{paragraph-separate} is another regexp that  matches 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 @code{"^[ @t{\}t@t{\}n@t{\}f]"}
+and @code{paragraph-separate} is @code{"^[ @t{\}t@t{\}f]*$"}.@refill
+
+  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 (ASCII Control-L, octal code 014).  For
+example, if a file is printed on a line printer, each ``page'' of the
+file starts 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}.  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, the command 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).  You can follow this command  by @kbd{C-w} to
+kill a page you want to move elsewhere.  If you insert the page after a page
+delimiter, at a place where @kbd{C-x ]} or @kbd{C-x [} would take you,
+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}) can help you decide
+where to break a page in two.  It prints the total number of lines in
+the current page in the echo area, then divides the lines into those
+preceding the current line and those following it, for example
+
+@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 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
+
+  If you use Auto Fill mode, Emacs @dfn{fills} text (breaks it up into
+lines that fit in a specified width) as you insert it.  When you alter
+existing text it is often no longer be properly filled afterwards and
+you can use explicit commands for filling.
+
+@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 the command always turns
+Auto Fill mode on, and with a negative argument it always turns it off.
+The presence of the word @samp{Fill} in the mode line, inside the
+parentheses, indicates that Auto Fill mode is in effect.  Auto Fill mode
+is a minor mode; you can turn it 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 desired.  Line breaking and rearrangement takes place
+only when you type @key{SPC} or @key{RET}.  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).
+@kbd{C-o} inserts a newline without line breaking.
+
+  Auto Fill mode works well with Lisp mode: when it makes a new line in
+Lisp mode, it indents that line with @key{TAB}.  If a line ending in a
+Lisp 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.  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 using an explicit fill commands.
+
+  Many users like Auto Fill mode and want to use it in all text files.
+The section on init files explains how you can 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 containing point, or
+the one after point if point is between paragraphs, to be refilled.  All
+line breaks are removed, and 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 only blank lines as
+paragraph separators.@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.  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
+
+@vindex auto-fill-inhibit-regexp
+The variable @code{auto-fill-inhibit-regexp} takes as a value a regexp to
+match lines that should not be auto-filled.
+
+@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 then, the default value---initially
+70---is in effect. @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 number 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 is not
+included in filling.  Emacs expects every line to start with a fill
+prefix.
+
+@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.@refill
+
+  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.  Auto Fill mode also inserts the fill prefix inserted on new
+lines it creates.  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 used most frequently.  @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 first letter of the
+word into upper case and the rest into lower case.  The word conversion
+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: 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