]> code.delx.au - gnu-emacs/blobdiff - doc/emacs/mark.texi
(Acknowledgments): Another update based mainly on AUTHORS.
[gnu-emacs] / doc / emacs / mark.texi
index be446ab6bfc091d579c8bf351ac714311161c2ff..b9a1188a73e92a811969b94ada76329ff947b676 100644 (file)
@@ -1,6 +1,6 @@
 @c This is part of the Emacs manual.
 @c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002,
-@c   2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+@c   2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Mark, Killing, Help, Top
 @chapter The Mark and the Region
 current buffer.  To specify the text for such a command to operate on,
 you set @dfn{the mark} at one end of it, and move point to the other
 end.  The text between point and the mark is called @dfn{the region}.
-Emacs highlights the region whenever there is one, if you enable
-Transient Mark mode (@pxref{Transient Mark}).
-
-  Certain Emacs commands set the mark; other editing commands do not
-affect it, so the mark remains where you set it last.  Each Emacs
-buffer has its own mark, and setting the mark in one buffer has no
-effect on other buffers' marks.  When you return to a buffer that was
-current earlier, its mark is at the same place as before.
-
-  The ends of the region are always point and the mark.  It doesn't
-matter which of them was put in its current place first, or which one
-comes earlier in the text---the region starts from point or the mark
-(whichever comes first), and ends at point or the mark (whichever
-comes last).  Every time you move point, or set the mark in a new
-place, the region changes.
-
-  Many commands that insert text, such as @kbd{C-y} (@code{yank}) and
-@kbd{M-x insert-buffer}, position point and the mark at opposite ends
-of the inserted text, so that the region consists of 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, each buffer remembers 16 previous locations of the
-mark in the @dfn{mark ring}.
+  If the mark is active, the region always extends between point and
+the mark, no matter which one comes earlier in the text; each time you
+move point, the region changes.  Whenever the mark is active, Emacs
+highlights the region.  You can customize the appearance of this
+highlighting by changing the @code{region} face (@pxref{Face
+Customization}).
+
+  The region persists only until you use it.  The mark is
+automatically @dfn{deactivated} after certain non-motion commands,
+including any command that changes the text in the buffer.  You can
+also explicitly deactivate the mark at any time, by typing @kbd{C-g}
+(@pxref{Quitting}).
+
+@vindex highlight-nonselected-windows
+  Setting the mark in one buffer has no effect on the marks in other
+buffers.  When you return to a buffer with an active mark, the mark is
+at the same place as before.  When multiple windows show the same
+buffer, they can have different values of point, and thus different
+regions, but they all share one common mark position.  @xref{Windows}.
+Ordinarily, only the selected window highlights its region; however,
+if the variable @code{highlight-nonselected-windows} is
+non-@code{nil}, each window highlights its own region.
 
 @menu
 * Setting Mark::       Commands to set the mark.
-* Transient Mark::     How to make Emacs highlight the region--
-                         when there is one.
-* Momentary Mark::      Enabling Transient Mark mode momentarily.
-* Using Region::       Summary of ways to operate on contents of the region.
 * Marking Objects::    Commands to put region around textual units.
+* Using Region::       Summary of ways to operate on contents of the region.
 * Mark Ring::          Previous mark positions saved so you can go back there.
 * Global Mark Ring::    Previous mark positions in various buffers.
+* Shift Selection::     Using shifted cursor motion keys.
+* Persistent Mark::    Keeping the mark active all the time.
 @end menu
 
 @node Setting Mark
@@ -56,244 +53,159 @@ mark in the @dfn{mark ring}.
 
 @table @kbd
 @item C-@key{SPC}
-Set the mark where point is (@code{set-mark-command}).
+Set the mark at point (@code{set-mark-command}).
 @item C-@@
 The same.
 @item C-x C-x
-Interchange mark and point (@code{exchange-point-and-mark}).
+Set the mark at point, and move point where the mark was
+(@code{exchange-point-and-mark}).
 @item Drag-Mouse-1
 Set point and the mark around the text you drag across.
 @item Mouse-3
-Set the mark where point is, then move point to where you click
+Set the mark at point, then move point to where you click
 (@code{mouse-save-then-kill}).
+@item @samp{Shifted motion keys}
+Set the mark at point if the mark is inactive, then move point.
 @end table
 
-  For example, suppose you wish to convert part of the buffer to
-upper case, using 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}.
-
 @kindex C-SPC
+@kindex C-@@
 @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.
-
-  There are two ways to set the mark with the mouse.  You can drag mouse
-button one across a range of text; that puts point where you release the
-mouse button, and sets the mark at the other end of that range.  Or you
-can click mouse button three, which sets the mark at point (like
-@kbd{C-@key{SPC}}) and then moves point where you clicked (like
-@kbd{Mouse-1}).
-
-  Using the mouse to mark a region copies the region into the kill
-ring in addition to setting the mark; that gives behavior consistent
-with other window-driven applications.  If you don't want to modify
-the kill ring, you must use keyboard commands to set the mark.
-@xref{Mouse Commands}.
+  The most common way to set the mark is with @kbd{C-@key{SPC}}
+(@code{set-mark-command}), which sets the mark where point
+is@footnote{There is no @kbd{C-@key{SPC}} character in
+@acronym{ASCII}; usually, typing @kbd{C-@key{SPC}} on a text terminal
+gives the character @kbd{C-@@}.  This key is also bound to
+@code{set-mark-command}, so unless you are unlucky enough to have an
+text terminal that behaves differently, you might as well think of
+@kbd{C-@@} as @kbd{C-@key{SPC}}.}. You can then move point away,
+leaving the mark behind.
+
+  For example, suppose you wish to convert part of the buffer to upper
+case.  To accomplish this, go to the beginning of the desired text,
+type @kbd{C-@key{SPC}}, and move point until the desired portion of
+text is highlighted.  Now type @kbd{C-x C-u} (@code{upcase-region}).
+This converts the text in the region to upper case, and then
+deactivates the mark.
 
 @kindex C-x C-x
 @findex exchange-point-and-mark
-  When Emacs was developed, terminals had only one cursor, so Emacs
-does not show where the mark is located--you have to remember.  If you
-enable Transient Mark mode (see below), then the region is highlighted
-when it is active; you can tell mark is at the other end of the
-highlighted region.  But this only applies when the mark is active.
-
-  The usual solution to this problem is to set the mark and then use
-it soon, before you forget where it is.  Alternatively, you can see
-where the mark is with the command @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 position of the mark.
-In Transient Mark mode, this command also reactivates the mark.
-
-  @kbd{C-x C-x} is also useful when you are satisfied with the position
-of point but want to move the other end of the region (where the mark
-is); do @kbd{C-x C-x} to put point at that end of the region, and then
-move it.  Using @kbd{C-x C-x} a second time, if necessary, puts the mark at
-the new position with point back at its original position.
-
-  For more facilities that allow you to go to previously set marks, see
-@ref{Mark Ring}.
-
-@kindex C-@@
-  There is no such character as @kbd{C-@key{SPC}} in @acronym{ASCII};
-when you type @key{SPC} while holding down @key{CTRL} on a text
-terminal, what you get is the character @kbd{C-@@}.  This key is also
-bound to @code{set-mark-command}--so unless you are unlucky enough to
-have a text 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}}.
-
-@node Transient Mark
-@section Transient Mark Mode
-@cindex mode, Transient Mark
-@cindex Transient Mark mode
-@cindex highlighting region
-@cindex region highlighting
-
-  On a terminal that supports colors, Emacs has the ability to
-highlight the current region.  But normally it does not.  Why not?
-
-  In the normal mode of use, every command that sets the mark also
-activates it, and nothing ever deactivates it.  Thus, once you have
-set the mark in a buffer, there is @emph{always} a region in that
-buffer.  Highlighting the region all the time would be a nuisance.  So
-normally Emacs highlights the region only immediately after you have
-selected one with the mouse.
-
-  If you want region highlighting, you can use Transient Mark mode.
-This is a more rigid mode of operation in which the region ``lasts''
-only until you use it; operating on the region text deactivates the
-mark, so there is no region any more.  Therefore, you must explicitly
-set up a region for each command that uses one.
-
-  When Transient Mark mode is enabled, Emacs highlights the region,
-whenever there is a region.  In Transient Mark mode, most of the time
-there is no region; therefore, highlighting the region when it exists
-is useful and not annoying.
-
-@findex transient-mark-mode
-  To enable Transient Mark mode, type @kbd{M-x transient-mark-mode}.
-This command toggles the mode; you can use the same command to turn
-the mode off again.
-
-  Here are the details of Transient Mark mode:
-
-@itemize @bullet
-@item
-To set the mark, type @kbd{C-@key{SPC}} (@code{set-mark-command}).
-This makes the mark active and thus begins highlighting of the region.
-As you move point, you will see the highlighted region grow and
-shrink.
-
-@item
-The mouse commands for specifying the mark also make it active.  So do
-keyboard commands whose purpose is to specify a region, including
-@kbd{M-@@}, @kbd{C-M-@@}, @kbd{M-h}, @kbd{C-M-h}, @kbd{C-x C-p}, and
-@kbd{C-x h}.
-
-@item
-You can tell that the mark is active because the region is highlighted.
-
-@item
-When the mark is active, you can execute commands that operate on the
-region, such as killing, indenting, or writing to a file.
-
-@item
-Any change to the buffer, such as inserting or deleting a character,
-deactivates the mark.  This means any subsequent command that operates
-on a region will get an error and refuse to operate.  You can make the
-region active again by typing @kbd{C-x C-x}.
-
-@item
-If Delete Selection mode is also enabled, some commands delete the
-region when used while the mark is active.  @xref{Mouse Commands}.
-
-@item
-Quitting with @kbd{C-g} deactivates the mark.
-
-@item
-Commands like @kbd{M->} and @kbd{C-s}, that ``leave the mark behind'' in
-addition to some other primary purpose, do not activate the new mark.
-You can activate the new region by executing @kbd{C-x C-x}
-(@code{exchange-point-and-mark}).
+  The command @kbd{C-x C-x} (@code{exchange-point-and-mark}) exchanges
+the positions of point and the mark, keeping the region unchanged.  If
+no mark is active, Emacs first reactivates the mark wherever it was
+last set.  @kbd{C-x C-x} is useful when you are satisfied with the
+position of point but want to move the other end of the region (where
+the mark is).  Using @kbd{C-x C-x} a second time, if necessary, puts
+the mark at the new position with point back at its original position.
+
+  You can also set the mark with the mouse.  If you press the left
+mouse button (@kbd{down-mouse-1}) and drag the mouse across a range of
+text while holding down this button, this sets the mark where you
+first pressed the mouse button and puts point where you release it.
+Alternatively, clicking the right mouse button (@kbd{mouse-3}) sets
+the mark at point and then moves point to where you clicked.  Using
+the mouse to mark a region also copies the region into the kill ring
+(@pxref{Kill Ring}).  @xref{Mouse Commands}, for a more detailed
+description of these mouse commands.
+
+@cindex shift-selection
+  Finally, you can set the mark by holding down the shift key while
+typing certain cursor motion commands (such as @kbd{S-@key{right}},
+@kbd{S-C-f}, @kbd{S-C-n}, etc.)  This is referred to as
+@dfn{shift-selection}.  This sets the mark at point before moving
+point, but only if there is no active mark set via shift-selection.
+The mark set by mouse commands and by shift-selection behaves slightly
+differently from the usual mark: any subsequent unshifted cursor
+motion command deactivates it automatically.  For details, @xref{Shift
+Selection}.
+
+  Whenever the mark is active, you can deactivate it by typing
+@kbd{C-g} (@pxref{Quitting}).  The mark is also automatically
+deactivated after certain non-motion commands.
 
-@item
-Commands that normally set the mark before moving long distances (like
-@kbd{M-<} and @kbd{C-s}) do not alter the mark in Transient Mark mode
-when the mark is active.
-
-@item
-Some commands operate on the region if a region is active.  For
-instance, @kbd{C-x u} in Transient Mark mode operates on the region,
-when there is a region.  (Outside Transient Mark mode, you must type
-@kbd{C-u C-x u} if you want it to operate on the region.)
-@xref{Undo}.  Other commands that act this way are identified in their
-own documentation.
-@end itemize
-
-  The highlighting of the region uses the @code{region} face; you can
-customize the appearance of the highlighted region by changing this
-face.  @xref{Face Customization}.
-
-@vindex highlight-nonselected-windows
-  When multiple windows show the same buffer, they can have different
-regions, because they can have different values of point (though they
-all share one common mark position).  Ordinarily, only the selected
-window highlights its region (@pxref{Windows}).  However, if the
-variable @code{highlight-nonselected-windows} is non-@code{nil}, then
-each window highlights its own region (provided that Transient Mark mode
-is enabled and the mark in the window's buffer is active).
-
-@vindex mark-even-if-inactive
-  If the variable @code{mark-even-if-inactive} is non-@code{nil} in
-Transient Mark mode, then commands can use the mark and the region
-even when it is inactive.  Region highlighting appears and disappears
-just as it normally does in Transient Mark mode, but the mark doesn't
-really go away when the highlighting disappears, so you can still use
-region commands.
-
-@cindex Zmacs mode
-  Transient Mark mode is also sometimes known as ``Zmacs mode''
-because the Zmacs editor on the MIT Lisp Machine handled the mark in a
-similar way.
-
-@node Momentary Mark
-@section Using Transient Mark Mode Momentarily
+@node Marking Objects
+@section Commands to Mark Textual Objects
 
-  If you don't like Transient Mark mode in general, you might still
-want to use it once in a while.  To do this, type @kbd{C-@key{SPC}
-C-@key{SPC}} or @kbd{C-u C-x C-x}.  These commands set or activate the
-mark, and enable Transient Mark mode only until the mark is
-deactivated.
+@cindex marking sections of text
+  Here are the commands for placing point and the mark around a textual
+object such as a word, list, paragraph or page:
 
 @table @kbd
-@item C-@key{SPC} C-@key{SPC}
-@kindex C-@key{SPC} C-@key{SPC}
-Set the mark at point (like plain @kbd{C-@key{SPC}}), and enable
-Transient Mark mode just once until the mark is deactivated.  (This is
-not really a separate command; you are using the @kbd{C-@key{SPC}}
-command twice.)
-
-@item C-u C-x C-x
-@kindex C-u C-x C-x
-Activate the mark without changing it; enable Transient Mark mode just
-once, until the mark is deactivated.  (This is the @kbd{C-x C-x}
-command, @code{exchange-point-and-mark}, with a prefix argument.)
+@item M-@@
+Set mark after end of next word (@code{mark-word}).  This does not
+move point.
+@item C-M-@@
+Set mark after end of following balanced expression
+(@code{mark-sexp}).  This does not move point.
+@item M-h
+Move point to the beginning of the current paragraph, and set mark at
+the end (@code{mark-paragraph}).
+@item C-M-h
+Move point to the beginning of the current defun, and set mark at the
+end (@code{mark-defun}).
+@item C-x C-p
+Move point to the beginning of the current page, and set mark at the
+end (@code{mark-page}).
+@item C-x h
+Move point to the beginning of the buffer, and set mark at the end
+(@code{mark-whole-buffer}).
 @end table
 
-  One of the secondary features of Transient Mark mode is that certain
-commands operate only on the region, when there is an active region.
-If you don't use Transient Mark mode, the region once set never
-becomes inactive, so there is no way for these commands to make such a
-distinction.  Enabling Transient Mark mode momentarily gives you a way
-to use these commands on the region.
+@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 balanced expression (@pxref{Expressions}).  These commands handle
+arguments just like @kbd{M-f} and @kbd{C-M-f}.
+
+@kindex C-x h
+@findex mark-whole-buffer
+   The other commands in the above list set both point and mark, so as
+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 sets the mark at the end of that paragraph
+(@pxref{Paragraphs}).  As a special exception, repeated invocations of
+@kbd{M-h} extend the region to subsequent paragraphs.  This is
+convenient for indenting, case-converting, or killing entire
+paragraphs.
+
+  The @kbd{M-h} command accepts prefix arguments.  If the argument's
+value is positive, @kbd{M-h} marks that many paragraphs starting with
+the one surrounding point; therefore, @kbd{C-u M-h} is equivalent to
+@kbd{M-h M-h M-h M-h}.  If the prefix argument is @minus{}@var{n},
+@kbd{M-h} marks @var{n} paragraphs running back from the one
+surrounding point; in this case, point moves forward to the end of
+that paragraph, and the mark goes at the start of the region.
+
+  Similarly, @kbd{C-M-h} (@code{mark-defun}) sets mark and point
+around major top-level definitions (@pxref{Moving by Defuns}), and
+@kbd{C-x C-p} (@code{mark-page}) does the same for pages
+(@pxref{Pages}).  These treat repeated invokations and prefix
+arguments similarly to @code{mark-paragraph}.
 
-  Momentary use of Transient Mark mode is also a way to highlight the
-region for the time being.
+  Finally, @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.  (In some programs this is called ``select all.'')
 
 @node Using Region
 @section Operating on the Region
 
 @cindex operations on a marked region
-  Once you have a region and the mark is active, here are some of the
-ways you can operate on the region:
+  Once you have a region, here are some of the ways you can operate on
+it:
 
 @itemize @bullet
 @item
 Kill it with @kbd{C-w} (@pxref{Killing}).
 @item
-Save it in a register with @kbd{C-x r s} (@pxref{Registers}).
-@item
-Save it in a buffer or a file (@pxref{Accumulating Text}).
+Copy it to the kill ring with @kbd{M-w} (@pxref{Yanking}).
 @item
 Convert case with @kbd{C-x C-l} or @kbd{C-x C-u} (@pxref{Case}).
 @item
+Undo changes within it using @kbd{C-u C-/} (@pxref{Undo}).
+@item
+Replace text within it using @kbd{M-%} (@pxref{Query Replace}).
+@item
 Indent it with @kbd{C-x @key{TAB}} or @kbd{C-M-\} (@pxref{Indentation}).
 @item
 Fill it as text with @kbd{M-x fill-region} (@pxref{Filling}).
@@ -302,116 +214,81 @@ Print hardcopy with @kbd{M-x print-region} (@pxref{Printing}).
 @item
 Evaluate it as Lisp code with @kbd{M-x eval-region} (@pxref{Lisp Eval}).
 @item
-Undo changes within it using @kbd{C-u C-x u} (@pxref{Undo}).
+Save it in a register with @kbd{C-x r s} (@pxref{Registers}).
+@item
+Save it in a buffer or a file (@pxref{Accumulating Text}).
 @end itemize
 
   Most commands that operate on the text in the region have the word
 @code{region} in their names.
 
-@node Marking Objects
-@section Commands to Mark Textual Objects
+  Some commands have a default behavior when the region is inactive,
+but operate on the text in the region if the region is active.  For
+example, @kbd{M-$} (@code{ispell-word}) normally checks the spelling
+of the word at point, but it checks the text in the region if the
+region is active (@pxref{Spelling}).  Normally, such commands use
+their default behavior if the region is empty (i.e., if mark and point
+are at the same position).  If you want them to operate on the empty
+region, change the variable @code{use-empty-active-region} to
+@code{t}.
+
+@cindex Delete Selection mode
+@cindex mode, Delete Selection
+@findex delete-selection-mode
+  If you enable Delete Selection mode, a minor mode, then inserting
+text while the region is active causes the selected text to be deleted
+first.  This also deactivates the mark.  Many graphical applications
+follow this convention, but Emacs does not.  To toggle Delete
+Selection mode on or off, type @kbd{M-x delete-selection-mode}.
+Another effect of this mode is that some keys, such as @key{DEL} and
+@kbd{C-d}, always kill the region if one exists.
 
-@cindex marking sections of text
-  Here are the commands for placing point and the mark around a textual
-object such as a word, list, paragraph or page.
+@node Mark Ring
+@section The Mark Ring
+
+@cindex mark ring
+  Aside from delimiting the region, the mark is also useful for
+remembering spots that you may want to go back to.  Each buffer
+remembers 16 previous locations of the mark, in the @dfn{mark ring}.
+Commands that set the mark also push the old mark onto this ring.
 
 @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 following balanced expression (@code{mark-sexp}).
-@item M-h
-Put region around current paragraph (@code{mark-paragraph}).
-@item C-M-h
-Put region around current defun (@code{mark-defun}).
-@item C-x h
-Put region around the entire buffer (@code{mark-whole-buffer}).
-@item C-x C-p
-Put region around current page (@code{mark-page}).
+@item C-@key{SPC} C-@key{SPC}
+Set the mark, pushing it onto the mark ring, without activating it.
+@item C-u C-@key{SPC}
+Move point to where the mark was, and restore the mark from the ring
+of former marks.
 @end table
 
-@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 balanced expression (@pxref{Expressions}).  These commands handle
-arguments just like @kbd{M-f} and @kbd{C-M-f}.  Repeating these
-commands extends the region.  For example, you can type either
-@kbd{C-u 2 M-@@} or @kbd{M-@@ M-@@} to mark the next two words.  These
-commands also extend the region in Transient Mark mode, regardless of
-the last command.
-
-@kindex C-x h
-@findex mark-whole-buffer
-   Other commands set both point and mark, to delimit an object in the
-buffer.  For example, @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}).  It
-prepares the region so you can indent, case-convert, or kill a whole
-paragraph.  With a prefix argument, if the argument's value is positive,
-@kbd{M-h} marks that many paragraphs starting with the one surrounding
-point.  If the prefix argument is @minus{}@var{n}, @kbd{M-h} also
-marks @var{n} paragraphs, running back form the one surrounding point.
-In that last case, point moves forward to the end of that paragraph,
-and the mark goes at the start of the region.  Repeating the @kbd{M-h}
-command extends the region to subsequent paragraphs.
-
-  @kbd{C-M-h} (@code{mark-defun}) similarly puts point before, and the
-mark after, the current (or following) major top-level definition, or
-defun (@pxref{Moving by Defuns}).  Repeating @kbd{C-M-h} extends
-the region to subsequent defuns.
-
-  @kbd{C-x C-p} (@code{mark-page}) puts point before the current page,
-and mark at the end (@pxref{Pages}).  The mark goes after the
-terminating page delimiter (to include it in the region), while point
-goes after the preceding page delimiter (to exclude it).  A numeric
-argument specifies a later page (if positive) or an earlier page (if
-negative) instead of the current page.
-
-  Finally, @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.  (In some programs this is called ``select all.'')
-
-  In Transient Mark mode, all of these commands activate the mark.
-
-@node Mark Ring
-@section The Mark Ring
+@kindex C-SPC C-SPC
+  The command C-@key{SPC} C-@key{SPC} is handy when you want to use
+the mark to remember a position to which you may wish to return.  It
+pushes the current point onto the mark ring, without activating the
+mark (which would cause Emacs to highlight the region).  This is
+actually two consecutive invocations of @kbd{C-@key{SPC}}
+(@code{set-mark-command}); the first @kbd{C-@key{SPC}} sets the mark,
+and the second @kbd{C-@key{SPC}} deactivates it.  (When Transient Mark
+mode is off, C-@key{SPC} C-@key{SPC} instead activates Transient Mark
+mode temporarily.  @xref{Persistent Mark}.)
 
 @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, each buffer remembers 16 previous locations of the
-mark, in the @dfn{mark ring}.  Commands that set the mark also 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.
+  To return to a marked position, use @code{set-mark-command} with a
+prefix argument: @kbd{C-u C-@key{SPC}}.  This moves point to where the
+mark was, and deactivates the mark if it was active.  Each subsequent
+@kbd{C-u C-@key{SPC}} jumps to a prior position stored in the mark
+ring.  The positions you move through in this way are not lost; they
+go to the end of the ring.
 
 @vindex set-mark-command-repeat-pop
   If you set @code{set-mark-command-repeat-pop} to non-@code{nil},
-then when you repeat the character @kbd{C-@key{SPC}} after typing
-@kbd{C-u C-@key{SPC}}, each repetition moves point to a previous mark
-position from the ring.  The mark positions you move through in this
-way are not lost; they go to the end of the ring.
-
-  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 set the mark if they move point.  However, in
-Transient Mark mode, these commands do not set the mark when the mark
-is already active.  You can tell when a command sets the mark because
-it displays @samp{Mark set} in the echo area.
+then immediately after you type @kbd{C-u C-@key{SPC}}, you can type
+@kbd{C-@key{SPC}} instead of @kbd{C-u C-@key{SPC}} to cycle through
+the mark ring.  By default, @code{set-mark-command-repeat-pop} is
+@code{nil}.
 
-  If you want to move back to the same place over and over, the mark
-ring may not be convenient enough.  If so, you can record the position
-in a register for later retrieval (@pxref{RegPos,, Saving Positions in
-Registers}).
+  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.
 
 @vindex mark-ring-max
   The variable @code{mark-ring-max} specifies the maximum number of
@@ -420,32 +297,152 @@ another one is pushed, the earliest one in the list is discarded.  Repeating
 @kbd{C-u C-@key{SPC}} cycles through the positions currently in the
 ring.
 
-@vindex mark-ring
-  The variable @code{mark-ring} holds the mark ring itself, as a list of
-marker objects, with the most recent first.  This variable is local in
-every buffer.
+@vindex mark-even-if-inactive
+  If the variable @code{mark-even-if-inactive} is @code{nil}, commands
+can only use the mark and the region when it is active.  This variable
+is non-@code{nil} by default.
+
+  If you want to move back to the same place over and over, the mark
+ring may not be convenient enough.  If so, you can record the position
+in a register for later retrieval (@pxref{RegPos,, Saving Positions in
+Registers}).
 
 @node Global Mark Ring
 @section The Global Mark Ring
 @cindex global mark ring
 
   In addition to the ordinary mark ring that belongs to each buffer,
-Emacs has a single @dfn{global mark ring}.  It records a sequence of
-buffers in which you have recently set the mark, so you can go back
-to those buffers.
-
-  Setting the mark always makes an entry on the current buffer's mark
-ring.  If you have switched buffers since the previous mark setting, the
-new mark position makes an entry on the global mark ring also.  The
-result is that the global mark ring records a sequence of buffers that
-you have been in, and, for each buffer, a place where you set the mark.
+Emacs has a single @dfn{global mark ring}.  Each time you set a mark,
+in any buffer, this is recorded in the global mark ring in addition to
+the current buffer's own mark ring.
 
 @kindex C-x C-@key{SPC}
 @findex pop-global-mark
   The command @kbd{C-x C-@key{SPC}} (@code{pop-global-mark}) jumps to
 the buffer and position of the latest entry in the global ring.  It also
 rotates the ring, so that successive uses of @kbd{C-x C-@key{SPC}} take
-you to earlier and earlier buffers.
+you to earlier buffers and mark positions.
+
+@node Shift Selection
+@section Shift Selection
+@cindex shift-selection
+
+  If you hold down the shift key while typing a cursor motion command,
+this sets the mark before moving point, so that the region extends
+from the original position of point to its new position.  This
+feature, newly introduced in Emacs 23, is referred to as
+@dfn{shift-selection}.  It is similar to the way text is selected in
+other editors.
+
+  The mark set via shift-selection behaves a little differently from
+what we have described above.  Firstly, in addition to the usual ways
+of deactivating the mark (such as changing the buffer text or typing
+@kbd{C-g}), the mark is deactivated by any @emph{unshifted} cursor
+motion command.  Secondly, any subsequent @emph{shifted} cursor motion
+command avoids setting the mark anew.  Therefore, a series of shifted
+cursor motion commands will continuously extend the region.
+
+  Shift-selection only works if the shifted cursor motion key is not
+already bound to a separate command (@pxref{Customization}).  For
+example, if you bind @kbd{S-C-f} to another command, typing
+@kbd{S-C-f} runs that command instead of performing a shift-selected
+version of @kbd{C-f} (@code{forward-char}).
+
+  A mark set via mouse commands behaves the same as a mark set via
+shift-selection (@pxref{Setting Mark}).  For example, if you specify a
+region by dragging the mouse, you can continue to extend the region
+using shifted cursor motion commands.  In either case, any unshifted
+cursor motion command deactivates the mark.
+
+  To turn off shift-selection, set @code{shift-select-mode} to
+@code{nil}.  Doing this does not disable setting the mark via mouse
+commands.
+
+@node Persistent Mark
+@section Persistent Marks
+@cindex mode, Transient Mark
+@cindex Transient Mark mode
+@cindex highlighting region
+@cindex region highlighting
+@cindex Zmacs mode
+
+  By default, the region is highlighted whenever it exists, and
+disappears once you use it or explicitly deactivate the mark.  This
+behavior is called Transient Mark mode@footnote{It is also sometimes
+called @dfn{Zmacs mode}, because the Zmacs editor on the MIT Lisp
+Machine handled the mark in a similar way.}.
+
+@findex transient-mark-mode
+  Turning off Transient Mark mode switches Emacs to an alternative
+mode of operation, which was the default prior to Emacs 23.  When
+Transient Mark mode is off, the mark is persistent: it is @emph{never}
+deactivated, but can be set to different locations using commands such
+as @kbd{C-@key{SPC}}.  After the first time you set the mark in a
+buffer, there is always a region in that buffer.  Emacs will not
+highlight the region, because that would be a nuisance.  As a special
+exception, the region is temporarily highlighted after it is set with
+the mouse.
+
+  To turn off Transient Mark mode, type @kbd{M-x transient-mark-mode}.
+This command toggles the mode; you can use the same command to turn
+Transient Mark mode on again.  You can also turn off Transient Mark
+mode using the menu bar: in the @samp{Options} menu, toggle the
+@samp{Active Region Highlighting} menu item.
+
+  Here are the details of how Emacs behaves when Transient Mark mode
+is off:
+
+@itemize @bullet
+@item
+Emacs does not show 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.  Alternatively, you can check the
+location of the mark by using @kbd{C-x C-x}, which exchanges the
+positions of the point and the mark (@pxref{Setting Mark}).
+
+@item
+Many commands that insert text, such as @kbd{C-y} (@code{yank}),
+position point and the mark at opposite ends of the inserted text, so
+that the region consists of the text just inserted.  You can tell when
+a command sets the mark because it displays @samp{Mark set} in the
+echo area.
+
+@item
+Many commands that move point long distances, like @kbd{M-<} and
+@kbd{C-s}, first set the mark where point was.
+
+@item
+Some commands that ordinarily operate on the region, if one exists,
+act instead on the entire buffer.  For instance, @kbd{C-x u} normally
+reverses changes within the region if one exists; when Transient Mark
+mode is off, it acts on the entire buffer.  However, you can type
+@kbd{C-u C-x u} to make it operate on the region.  @xref{Undo}.  Other
+commands that act this way are identified in their own documentation.
+@end itemize
+
+  While Transient Mark mode is off, you can activate it temporarily
+using @kbd{C-@key{SPC} C-@key{SPC}} or @kbd{C-u C-x C-x}.
+
+@table @kbd
+@item C-@key{SPC} C-@key{SPC}
+@kindex C-@key{SPC} C-@key{SPC}
+Set the mark at point (like plain @kbd{C-@key{SPC}}) and enable
+Transient Mark mode just once, until the mark is deactivated.  (This
+is not really a separate command; you are using the @kbd{C-@key{SPC}}
+command twice.)
+
+@item C-u C-x C-x
+@kindex C-u C-x C-x
+Activate the mark without changing it; enable Transient Mark mode just
+once, until the mark is deactivated.  (This is the @kbd{C-x C-x}
+command, @code{exchange-point-and-mark}, with a prefix argument.)
+@end table
+
+  These commands set or activate the mark, and enable Transient Mark
+mode only until the mark is deactivated.  One reason you may want to
+use them is that some commands operate on the entire buffer instead of
+the region when Transient Mark mode is off.  Enabling Transient Mark
+mode momentarily gives you a way to use these commands on the region.
 
 @ignore
    arch-tag: f35e4d82-911b-4cfc-a3d7-3c87b2abba20