11.4 The Mark Ring
Each buffer remembers previous locations of the mark, in the mark ring. Commands that set the mark also push the old mark onto this ring. One of the uses of the mark ring is to remember spots that you may want to go back to.
C-SPC C-SPC
Set the mark, pushing it onto the mark ring, without activating it.
C-u C-SPC
Move point to where the mark was, and restore the mark from the ring of former marks.
The command C-SPC C-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 C-SPC
( set-mark-command
); the first C-SPC
sets the mark,
and the second C-SPC
deactivates it. (When Transient Mark
mode is off, C-SPC C-SPC
instead activates Transient
Mark mode temporarily; see Disabling Transient Mark Mode.)
To return to a marked position, use set-mark-command
with a
prefix argument: C-u C-SPC
. This moves point to where the
mark was, and deactivates the mark if it was active. Each subsequent
C-u C-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.
If you set set-mark-command-repeat-pop
to non- nil
,
then immediately after you type C-u C-SPC
, you can type
C-SPC
instead of C-u C-SPC
to cycle through
the mark ring. By default, set-mark-command-repeat-pop
is
nil
.
Each buffer has its own mark ring. All editing commands use the
current buffer’s mark ring. In particular, C-u C-SPC
always stays in the same buffer.
The variable mark-ring-max
specifies the maximum number of
entries to keep in the mark ring. This defaults to 16 entries. If
that many entries exist and another one is pushed, the earliest one in
the list is discarded. Repeating C-u C-SPC
cycles through
the positions currently in the ring.
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 (see Saving
Positions in Registers).