(Mark): Rearrange nodes.
(Persistent Mark): Rename from Transient Mark. (Mark, Setting Mark, Marking Objects, Persistent Mark, Mark Ring): Describe Transient Mark mode as the default.
This commit is contained in:
parent
7186a83034
commit
a8a31aaeea
1 changed files with 245 additions and 295 deletions
|
@ -12,39 +12,40 @@
|
|||
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 region always extends between point and the mark, no matter
|
||||
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, the region
|
||||
changes. When a region is active, Emacs highlights it using the
|
||||
@code{region} face. You can customize the appearance of the
|
||||
highlighting by changing this face (@pxref{Face Customization}).
|
||||
|
||||
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.
|
||||
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}).
|
||||
|
||||
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.
|
||||
@vindex highlight-nonselected-windows
|
||||
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 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 (though they all share one
|
||||
common mark position). @xref{Windows}. Ordinarily, only the selected
|
||||
window highlights its region, if a region exists; however, if the
|
||||
variable @code{highlight-nonselected-windows} is non-@code{nil}, each
|
||||
window highlights its own region.
|
||||
|
||||
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 Delete Selection mode is enabled, some commands delete the region
|
||||
when used while the mark is active. @xref{Mouse Commands}.
|
||||
|
||||
@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.
|
||||
* Persistent Mark:: Keeping the mark active all the time.
|
||||
* Mark Ring:: Previous mark positions saved so you can go back there.
|
||||
* Global Mark Ring:: Previous mark positions in various buffers.
|
||||
@end menu
|
||||
|
@ -60,7 +61,8 @@ 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}).
|
||||
Set the mark where point was, 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
|
||||
|
@ -68,252 +70,65 @@ Set the mark where point is, then move point to where you click
|
|||
(@code{mouse-save-then-kill}).
|
||||
@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
|
||||
@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.
|
||||
The most common way to set the mark is with @kbd{C-@key{SPC}}
|
||||
(@code{set-mark-command}). This sets the mark where point is. You
|
||||
can then 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}.
|
||||
For example, suppose you wish to convert part of the buffer to upper
|
||||
case. To accomplish this, first go to the beginning of the text to be
|
||||
capitalized, type @kbd{C-@key{SPC}}, and move point until the desired
|
||||
portion of text is highlighted. You can now type @kbd{C-x C-u}
|
||||
(@code{upcase-region}), which converts the text in the region to upper
|
||||
case. This also automatically deactivates the mark. (Alternatively,
|
||||
you could set the mark at the end, move to the beginning, and do
|
||||
@kbd{C-x C-u}.)
|
||||
|
||||
@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 command @kbd{C-x C-x} (@code{exchange-point-and-mark}) puts the
|
||||
mark where point was and moves point where the mark was, keeping the
|
||||
region unchanged. If no mark is active, Emacs reactivates the mark at
|
||||
the position where 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); 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.
|
||||
|
||||
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.
|
||||
You can also set the mark with the mouse. In fact, there are two
|
||||
ways to do this. You can press the left mouse button
|
||||
(@kbd{down-mouse-1}) and drag the mouse across a range of text while
|
||||
holding down the button; this sets the mark where you first pressed
|
||||
the mouse button, and point where you release it. Alternatively, you
|
||||
can click the right mouse button (@kbd{mouse-3}), which sets the mark
|
||||
at point and then moves point to where you clicked.
|
||||
|
||||
@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}.
|
||||
Using the mouse to mark a region also copies the region into the
|
||||
kill ring (@pxref{Kill Ring}). If you don't want to modify the kill
|
||||
ring, you must use keyboard commands to set the mark. @xref{Mouse
|
||||
Commands}.
|
||||
|
||||
@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
|
||||
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}).
|
||||
|
||||
@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
|
||||
|
||||
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.
|
||||
|
||||
@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
|
||||
|
||||
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.
|
||||
|
||||
Momentary use of Transient Mark mode is also a way to highlight the
|
||||
region for the time being.
|
||||
|
||||
@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:
|
||||
|
||||
@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}).
|
||||
@item
|
||||
Convert case with @kbd{C-x C-l} or @kbd{C-x C-u} (@pxref{Case}).
|
||||
@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}).
|
||||
@item
|
||||
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}).
|
||||
@end itemize
|
||||
|
||||
Most commands that operate on the text in the region have the word
|
||||
@code{region} in their names.
|
||||
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.
|
||||
|
||||
@node Marking Objects
|
||||
@section Commands to Mark Textual Objects
|
||||
|
||||
@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.
|
||||
object such as a word, list, paragraph or page:
|
||||
|
||||
@table @kbd
|
||||
@item M-@@
|
||||
|
@ -322,23 +137,23 @@ 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}).
|
||||
Move point to the beginning of the current paragraph, and set mark at
|
||||
the end (@code{mark-paragraph}).
|
||||
@item C-M-h
|
||||
Put region around current defun (@code{mark-defun}).
|
||||
Move point to the beginning of the current defun, and set mark at the
|
||||
end (@code{mark-defun}).
|
||||
@item C-x h
|
||||
Put region around the entire buffer (@code{mark-whole-buffer}).
|
||||
Move point to the beginning of the buffer, and set mark at the end
|
||||
(@code{mark-whole-buffer}).
|
||||
@item C-x C-p
|
||||
Put region around current page (@code{mark-page}).
|
||||
Move point to the beginning of the current page, and set mark at the
|
||||
end (@code{mark-page}).
|
||||
@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.
|
||||
arguments just like @kbd{M-f} and @kbd{C-M-f}.
|
||||
|
||||
@kindex C-x h
|
||||
@findex mark-whole-buffer
|
||||
|
@ -352,8 +167,7 @@ paragraph. With a prefix argument, if the argument's value is positive,
|
|||
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.
|
||||
and the mark goes at the start of the region.
|
||||
|
||||
@kbd{C-M-h} (@code{mark-defun}) similarly puts point before, and the
|
||||
mark after, the current (or following) major top-level definition, or
|
||||
|
@ -367,51 +181,182 @@ 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.
|
||||
|
||||
While the mark is active, repeating the above commands extends the
|
||||
region accordingly. For example, you can type either @kbd{C-u 2 M-@@}
|
||||
or @kbd{M-@@ M-@@} to mark the next two words. Similarly, repeating
|
||||
the @kbd{M-h} command extends the region to subsequent paragraphs.
|
||||
|
||||
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 Using Region
|
||||
@section Operating on the Region
|
||||
|
||||
@cindex operations on a marked 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
|
||||
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}).
|
||||
@item
|
||||
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
|
||||
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 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 it
|
||||
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 an
|
||||
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 toggle Transient Mark mode
|
||||
using the menu bar: in the @samp{Options} menu, use 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.
|
||||
|
||||
@node Mark Ring
|
||||
@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, 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.
|
||||
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 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
|
||||
|
||||
@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 want 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
|
||||
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.
|
||||
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}.
|
||||
|
||||
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.
|
||||
|
||||
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,10 +365,15 @@ 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
|
||||
|
|
Loading…
Add table
Reference in a new issue