diff options
author | Dave Love <fx@gnu.org> | 1999-09-29 15:17:24 +0000 |
---|---|---|
committer | Dave Love <fx@gnu.org> | 1999-09-29 15:17:24 +0000 |
commit | 730d92a0ce11c117a88a161052fb7f6b6e108bb3 (patch) | |
tree | 5efec5c942136827aa2614988bfbdccd8afc0170 /man/mark.texi | |
parent | 1eaae483c322e4bbfbc7f76d4045094994386474 (diff) | |
download | emacs-730d92a0ce11c117a88a161052fb7f6b6e108bb3.tar.gz |
#
Diffstat (limited to 'man/mark.texi')
-rw-r--r-- | man/mark.texi | 351 |
1 files changed, 351 insertions, 0 deletions
diff --git a/man/mark.texi b/man/mark.texi new file mode 100644 index 00000000000..311a0c6923b --- /dev/null +++ b/man/mark.texi @@ -0,0 +1,351 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Mark, Killing, Help, Top +@chapter The Mark and the Region +@cindex mark +@cindex setting a mark +@cindex region + + Many Emacs commands operate on an arbitrary contiguous part of the +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}). + + You can move point or the mark to adjust the boundaries of the region. +It doesn't matter which one is set first chronologically, or which one +comes earlier in the text. Once the mark has been set, it remains where +you put it until you set it again at another place. Each Emacs buffer +has its own mark, so that when you return to a buffer that had been +selected previously, it has the same mark it had before. + + Many commands that insert text, such as @kbd{C-y} (@code{yank}) and +@kbd{M-x insert-buffer}, position point and the mark at opposite ends of +the inserted text, so that the region contains the text just inserted. + + Aside from delimiting the region, the mark is also useful for +remembering a spot that you may want to go back to. To make this +feature more useful, each buffer remembers 16 previous locations of the +mark in the @dfn{mark ring}. + +@menu +* Setting Mark:: Commands to set the mark. +* Transient Mark:: How to make Emacs highlight the region-- + when there is one. +* Using Region:: Summary of ways to operate on contents of the region. +* Marking Objects:: Commands to put region around textual units. +* Mark Ring:: Previous mark positions saved so you can go back there. +* Global Mark Ring:: Previous mark positions in various buffers. +@end menu + +@node Setting Mark +@section Setting the Mark + + Here are some commands for setting the mark: + +@c WideCommands +@table @kbd +@item C-@key{SPC} +Set the mark where point is (@code{set-mark-command}). +@item C-@@ +The same. +@item C-x C-x +Interchange mark and point (@code{exchange-point-and-mark}). +@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 +(@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. + + 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 (like @kbd{Mouse-1}). Both of +these methods copy the region into the kill ring in addition to setting +the mark; that gives behavior consistent with other window-driven +applications, but if you don't want to modify the kill ring, you must +use keyboard commands to set the mark. @xref{Mouse Commands}. + +@kindex C-x C-x +@findex exchange-point-and-mark + Ordinary terminals have only one cursor, so there is no way for Emacs +to show you where the mark is located. You have to remember. The usual +solution to this problem is to set the mark and then use it soon, before +you forget where it is. 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 +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. A second use of @kbd{C-x C-x}, if necessary, puts the mark at +the new position with point back at its original position. + +@kindex C-@@ + There is no such character as @kbd{C-@key{SPC}} in ASCII; when you +type @key{SPC} while holding down @key{CTRL}, what you get on most +ordinary terminals is the character @kbd{C-@@}. This key is actually +bound to @code{set-mark-command}. But unless you are unlucky enough to +have a terminal where typing @kbd{C-@key{SPC}} does not produce +@kbd{C-@@}, you might as well think of this character as +@kbd{C-@key{SPC}}. Under X, @kbd{C-@key{SPC}} is actually a distinct +character, but its binding is still @code{set-mark-command}. + +@node Transient Mark +@section Transient Mark Mode +@cindex mode, Transient Mark +@cindex Transient Mark mode +@cindex highlighting region +@cindex region highlighting + + Emacs can highlight the current region, using X Windows. But normally +it does not. Why not? + + Highlighting the region doesn't work well ordinarily in Emacs, because +once you have set a mark, there is @emph{always} a region (in that +buffer). And highlighting the region all the time would be a nuisance. + + You can turn on region highlighting by enabling Transient Mark mode. +This is a more rigid mode of operation in which the region ``lasts'' +only temporarily, so you must set up a region for each command that uses +one. In Transient Mark mode, most of the time there is no region; +therefore, highlighting the region when it exists is convenient. + +@findex transient-mark-mode + To enable Transient Mark mode, type @kbd{M-x transient-mark-mode}. +This command toggles the mode, so you can repeat the command to turn off +the mode. + + 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; as you move point, you will see the region +highlighting 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 +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 +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 +@kbd{C-s} when the mark is active does not alter the mark. + +@item +Quitting with @kbd{C-g} deactivates the mark. +@end itemize + + Highlighting of the region uses the @code{region} face; you can +customize how the region is highlighted 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 window's buffer's mark is active). + + When Transient Mark mode is not enabled, every command that sets the +mark also activates it, and nothing ever deactivates it. + +@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. + +@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 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{Hardcopy}). +@item +Evaluate it as Lisp code with @kbd{M-x eval-region} (@pxref{Lisp Eval}). +@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 + +@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 M-@@ +Set mark after end of next word (@code{mark-word}). This command and +the following one do not move point. +@item C-M-@@ +Set mark after end of next Lisp expression (@code{mark-sexp}). +@item M-h +Put region around current paragraph (@code{mark-paragraph}). +@item C-M-h +Put region around current Lisp defun (@code{mark-defun}). +@item C-x h +Put region around entire buffer (@code{mark-whole-buffer}). +@item C-x C-p +Put region around current page (@code{mark-page}). +@end table + +@kbd{M-@@} (@code{mark-word}) puts the mark at the end of the next word, +while @kbd{C-M-@@} (@code{mark-sexp}) puts it at the end of the next Lisp +expression. These commands handle arguments just like @kbd{M-f} and +@kbd{C-M-f}. + +@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. + + @kbd{C-M-h} (@code{mark-defun}) similarly puts point before and the +mark after the current or following defun (@pxref{Defuns}). @kbd{C-x +C-p} (@code{mark-page}) puts point before the current page, and mark at +the end (@pxref{Pages}). The mark goes after the terminating page +delimiter (to include it), while point goes after the preceding page +delimiter (to exclude it). 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 Transient Mark mode, all of these commands activate the mark. + +@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. Thus, repeated use of this command moves point to all of the old +marks on the ring, one by one. 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. 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}). + +@vindex mark-ring-max + The variable @code{mark-ring-max} specifies the maximum number of +entries to keep in the mark ring. If that many entries exist and +another one is pushed, the last one in the list is discarded. Repeating +@kbd{C-u C-@key{SPC}} 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. + +@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. + +@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. + |