diff man/xemacs/killing.texi @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children ec9a17fef872
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/man/xemacs/killing.texi	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,753 @@
+
+@iftex
+@chapter Killing and Moving Text
+
+  @dfn{Killing} means erasing text and copying it into the @dfn{kill ring},
+from which it can be retrieved by @dfn{yanking} it.  Some other systems
+that have recently become popular use the terms ``cutting'' and ``pasting''
+for these operations.
+
+  The most common way of moving or copying text with Emacs is to kill it
+and later yank it in one or more places.  This is safe because all the
+text killed recently is stored in the kill ring, and it is versatile,
+because you can use the same commands for killing syntactic units and
+for moving those units.  There are other ways of copying text for
+special purposes.
+
+  Emacs has only one kill ring, so you can kill text in one buffer and yank
+it in another buffer. If you are using XEmacs under X, you can
+also use the X selection mechanism to copy text from one buffer to
+another, or between applications. @xref{Using X Selections}.
+
+@end iftex
+
+@node Killing, Yanking, Additional Mouse Operations, Top
+@section Deletion and Killing
+@findex delete-char
+@findex delete-backward-char
+
+@cindex killing
+@cindex cutting
+@cindex deletion
+@kindex C-d
+@kindex DEL
+  Most commands that erase text from the buffer save it. You can get
+the text back if you change your mind, or you can move or copy it to
+other parts of the buffer.  Commands which erase text and save it in the
+kill ring are known as @dfn{kill} commands.  Some other commands erase
+text but do not save it; they are known as @dfn{delete} commands.  (This
+distinction is made only for erasing text in the buffer.)
+
+The commands' names and individual descriptions use the words
+@samp{kill} and @samp{delete} to indicate what they do.  If you perform
+a kill or delete command by mistake, use the @kbd{C-x u} (@code{undo})
+command to undo it (@pxref{Undo}). The delete commands include @kbd{C-d}
+(@code{delete-char}) and @key{DEL} (@code{delete-backward-char}), which
+delete only one character at a time, and those commands that delete only
+spaces or newlines.  Commands that can destroy significant amounts of
+nontrivial data usually kill.@refill
+
+@subsection Deletion
+
+@table @kbd
+@item C-d
+Delete next character (@code{delete-char}).
+@item @key{DEL}
+Delete previous character (@code{delete-backward-char}).
+@item M-\
+Delete spaces and tabs around point (@code{delete-horizontal-space}).
+@item M-@key{SPC}
+Delete spaces and tabs around point, leaving one space
+(@code{just-one-space}).
+@item C-x C-o
+Delete blank lines around the current line (@code{delete-blank-lines}).
+@item M-^
+Join two lines by deleting the intervening newline, and any indentation
+following it (@code{delete-indentation}).
+@end table
+
+  The most basic delete commands are @kbd{C-d} (@code{delete-char}) and
+@key{DEL} (@code{delete-backward-char}).  @kbd{C-d} deletes the
+character after point, the one the cursor is ``on top of''.  Point
+doesn't move.  @key{DEL} deletes the character before the cursor, and
+moves point back.  You can delete newlines like any other characters in
+the buffer; deleting a newline joins two lines.  Actually, @kbd{C-d} and
+@key{DEL} aren't always delete commands; if you give them an argument,
+they kill instead, since they can erase more than one character this
+way.
+
+@kindex M-\
+@findex delete-horizontal-space
+@kindex M-SPC
+@findex just-one-space
+@kindex C-x C-o
+@findex delete-blank-lines
+@kindex M-^
+@findex delete-indentation
+  The other delete commands delete only formatting characters: spaces,
+tabs and newlines.  @kbd{M-\} (@code{delete-horizontal-space}) deletes
+all spaces and tab characters before and after point.
+@kbd{M-@key{SPC}} (@code{just-one-space}) does the same but leaves a
+single space after point, regardless of the number of spaces that
+existed previously (even zero).
+
+  @kbd{C-x C-o} (@code{delete-blank-lines}) deletes all blank lines after
+the current line. If the current line is blank, it deletes all blank lines
+preceding the current line as well as leaving one blank line, the current
+line.  @kbd{M-^} (@code{delete-indentation}) joins the current line and
+the previous line, or, if given an argument, joins the current line and 
+the next line by deleting a newline and all surrounding spaces, possibly
+leaving a single space.  @xref{Indentation,M-^}.
+
+@subsection Killing by Lines
+
+@table @kbd
+@item C-k
+Kill rest of line or one or more lines (@code{kill-line}).
+@end table
+
+@kindex C-k
+@findex kill-line
+  The simplest kill command is @kbd{C-k}.  If given at the beginning of
+a line, it kills all the text on the line, leaving the line blank.  If
+given on a blank line, the blank line disappears.  As a consequence, a
+line disappears completely if you go to the front of a non-blank line
+and type @kbd{C-k} twice.
+
+  More generally, @kbd{C-k} kills from point up to the end of the line,
+unless it is at the end of a line.  In that case, it kills the newline
+following the line, thus merging the next line into the current one.
+Emacs ignores invisible spaces and tabs at the end of the line when deciding
+which case applies: if point appears to be at the end of the line, you
+can be sure the newline will be killed.
+
+  If you give @kbd{C-k} a positive argument, it kills that many lines
+and the newlines that follow them (however, text on the current line
+before point is not killed).  With a negative argument, @kbd{C-k} kills
+back to a number of line beginnings.  An argument of @minus{}2 means
+kill back to the second line beginning.  If point is at the beginning of
+a line, that line beginning doesn't count, so @kbd{C-u - 2 C-k} with
+point at the front of a line kills the two previous lines.
+
+  @kbd{C-k} with an argument of zero kills all the text before point on the
+current line.
+
+@subsection Other Kill Commands
+@findex kill-region
+@findex kill-word
+@findex backward-kill-word
+@findex kill-sexp
+@findex kill-sentence
+@findex backward-kill-sentence
+@kindex M-d
+@kindex M-DEL
+@kindex C-M-k
+@kindex C-x DEL
+@kindex M-k
+@kindex C-w
+
+@c DoubleWideCommands
+@table @kbd
+@item C-w
+Kill region (from point to the mark) (@code{kill-region}).
+@xref{Words}.
+@item M-d
+Kill word (@code{kill-word}).
+@item M-@key{DEL}
+Kill word backwards (@code{backward-kill-word}).
+@item C-x @key{DEL}
+Kill back to beginning of sentence (@code{backward-kill-sentence}).
+@xref{Sentences}.
+@item M-k
+Kill to end of sentence (@code{kill-sentence}).
+@item C-M-k
+Kill sexp (@code{kill-sexp}).  @xref{Lists}.
+@item M-z @var{char}
+Kill up to next occurrence of @var{char} (@code{zap-to-char}).
+@end table
+
+   @kbd{C-w} (@code{kill-region}) is a very general kill command; it
+kills everything between point and the mark. You can use this command to
+kill any contiguous sequence of characters by first setting the mark at
+one end of a sequence of characters, then going to the other end and
+typing @kbd{C-w}.
+
+@kindex M-z
+@findex zap-to-char
+  A convenient way of killing is combined with searching: @kbd{M-z}
+(@code{zap-to-char}) reads a character and kills from point up to (but not
+including) the next occurrence of that character in the buffer.  If there
+is no next occurrence, killing goes to the end of the buffer.  A numeric
+argument acts as a repeat count.  A negative argument means to search
+backward and kill text before point.
+
+  Other syntactic units can be killed: words, with @kbd{M-@key{DEL}} and
+@kbd{M-d} (@pxref{Words}); sexps, with @kbd{C-M-k} (@pxref{Lists}); and
+sentences, with @kbd{C-x @key{DEL}} and @kbd{M-k}
+(@pxref{Sentences}).@refill
+
+@node Yanking, Using X Selections, Killing, Top
+@section Yanking
+@cindex moving text
+@cindex copying text
+@cindex kill ring
+@cindex yanking
+@cindex pasting
+
+  @dfn{Yanking} means getting back text which was killed. Some systems
+call this ``pasting''.  The usual way to move or copy text is to kill it
+and then yank it one or more times.
+
+@table @kbd
+@item C-y
+Yank last killed text (@code{yank}).
+@item M-y
+Replace re-inserted killed text with the previously killed text
+(@code{yank-pop}).
+@item M-w
+Save region as last killed text without actually killing it
+(@code{copy-region-as-kill}).
+@item C-M-w
+Append next kill to last batch of killed text (@code{append-next-kill}).
+@end table
+
+@menu
+* Kill Ring::       Where killed text is stored.  Basic yanking.
+* Appending Kills:: Several kills in a row all yank together.
+* Earlier Kills::   Yanking something killed some time ago.
+@end menu
+
+@node Kill Ring, Appending Kills, Yanking, Yanking
+@subsection The Kill Ring
+
+@kindex C-y
+@findex Yank
+  All killed text is recorded in the @dfn{kill ring}, a list of blocks of
+text that have been killed.  There is only one kill ring, used in all
+buffers, so you can kill text in one buffer and yank it in another buffer.
+This is the usual way to move text from one file to another.
+(@xref{Accumulating Text}, for some other ways.)
+
+  If you have two separate Emacs processes, you cannot use the kill ring
+to move text. If you are using XEmacs under X, however, you can
+use the X selection mechanism to move text from one to another.
+
+If you are using XEmacs under X and have one Emacs process with
+multiple frames, they do share the same kill ring.  You can kill or
+copy text in one Emacs frame, then yank it in the other frame
+belonging to the same process.
+
+  The command @kbd{C-y} (@code{yank}) reinserts the text of the most recent
+kill.  It leaves the cursor at the end of the text and sets the mark at
+the beginning of the text.  @xref{Mark}.
+
+  @kbd{C-u C-y} yanks the text, leaves the cursor in front of the text,
+and sets the mark after it, if the argument is with just a @kbd{C-u}.
+Any other argument, including @kbd{C-u} and digits, has different
+results, described below, under ``Yanking Earlier Kills''.
+
+@kindex M-w
+@findex copy-region-as-kill
+ To copy a block of text, you can also use @kbd{M-w}
+(@code{copy-region-as-kill}), which copies the region into the kill ring
+without removing it from the buffer. @kbd{M-w} is similar to @kbd{C-w}
+followed by @kbd{C-y} but does not mark the buffer as ``modified'' and
+does not actually cut anything.
+
+@node Appending Kills, Earlier Kills, Kill Ring, Yanking
+@subsection Appending Kills
+
+@cindex television
+  Normally, each kill command pushes a new block onto the kill ring.
+However, two or more kill commands in a row combine their text into a
+single entry, so that a single @kbd{C-y} yanks it all back. This means
+you don't have to kill all the text you want to yank in one command; you
+can kill line after line, or word after word, until you have killed what
+you want, then get it all back at once using @kbd{C-y}. (Thus we join
+television in leading people to kill thoughtlessly.)
+
+  Commands that kill forward from point add onto the end of the previous
+killed text.  Commands that kill backward from point add onto the
+beginning.  This way, any sequence of mixed forward and backward kill
+commands puts all the killed text into one entry without rearrangement.
+Numeric arguments do not break the sequence of appending kills.  For
+example, suppose the buffer contains:
+
+@example
+This is the first
+line of sample text
+and here is the third.
+@end example
+
+@noindent
+with point at the beginning of the second line.  If you type @kbd{C-k C-u 2
+M-@key{DEL} C-k}, the first @kbd{C-k} kills the text @samp{line of sample
+text}, @kbd{C-u 2 M-@key{DEL}} kills @samp{the first} with the newline that
+followed it, and the second @kbd{C-k} kills the newline after the second
+line.  The result is that the buffer contains @samp{This is and here is the
+third.} and a single kill entry contains @samp{the first@key{RET}line of
+sample text@key{RET}}---all the killed text, in its original order.
+
+@kindex C-M-w
+@findex append-next-kill
+  If a kill command is separated from the last kill command by other
+commands (not just numeric arguments), it starts a new entry on the kill
+ring.  To force a kill command to append, first type the command @kbd{C-M-w}
+(@code{append-next-kill}). @kbd{C-M-w} tells the following command,
+if it is a kill command, to append the text it kills to the last killed
+text, instead of starting a new entry.  With @kbd{C-M-w}, you can kill
+several separated pieces of text and accumulate them to be yanked back
+in one place.@refill
+
+@node Earlier Kills,, Appending Kills, Yanking
+@subsection Yanking Earlier Kills
+
+@kindex M-y
+@findex yank-pop
+  To recover killed text that is no longer the most recent kill, you need
+the @kbd{Meta-y} (@code{yank-pop}) command.  You can use @kbd{M-y} only
+after a @kbd{C-y} or another @kbd{M-y}.  It takes the text previously
+yanked and replaces it with the text from an earlier kill.  To recover
+the text of the next-to-the-last kill, first use @kbd{C-y} to recover
+the last kill, then @kbd{M-y} to replace it with the previous
+kill.@refill
+
+  You can think in terms of a ``last yank'' pointer which points at an item
+in the kill ring.  Each time you kill, the ``last yank'' pointer moves to
+the new item at the front of the ring.  @kbd{C-y} yanks the item
+which the ``last yank'' pointer points to.  @kbd{M-y} moves the ``last
+yank'' pointer to a different item, and the text in the buffer changes to
+match.  Enough @kbd{M-y} commands can move the pointer to any item in the
+ring, so you can get any item into the buffer.  Eventually the pointer
+reaches the end of the ring; the next @kbd{M-y} moves it to the first item
+again.
+
+  Yanking moves the ``last yank'' pointer around the ring, but does not
+change the order of the entries in the ring, which always runs from the
+most recent kill at the front to the oldest one still remembered.
+
+  Use @kbd{M-y} with a numeric argument to advance the ``last
+yank'' pointer by the specified number of items.  A negative argument
+moves the pointer toward the front of the ring; from the front of the
+ring, it moves to the last entry and starts moving forward from there.
+
+  Once the text you are looking for is brought into the buffer, you can
+stop doing @kbd{M-y} commands and the text will stay there. Since the
+text is just a copy of the kill ring item, editing it in the buffer does
+not change what's in the ring.  As long you don't kill additional text,
+the ``last yank'' pointer remains at the same place in the kill ring:
+repeating @kbd{C-y} will yank another copy of the same old kill.
+
+  If you know how many @kbd{M-y} commands it would take to find the
+text you want, you can yank that text in one step using @kbd{C-y} with
+a numeric argument.  @kbd{C-y} with an argument greater than one
+restores the text the specified number of entries back in the kill
+ring.  Thus, @kbd{C-u 2 C-y} gets the next to the last block of killed
+text.  It is equivalent to @kbd{C-y M-y}.  @kbd{C-y} with a numeric
+argument starts counting from the ``last yank'' pointer, and sets the
+``last yank'' pointer to the entry that it yanks.
+
+@vindex kill-ring-max
+  The variable @code{kill-ring-max} controls the length of the kill
+ring; no more than that many blocks of killed text are saved.
+
+@node Using X Selections, Accumulating Text, Yanking, Top
+@section Using X Selections
+@comment  node-name,  next,  previous,  up
+
+In the X window system, mouse selections provide a simple mechanism for
+text transfer between different applications.  In a typical X
+application, you can select text by pressing the left mouse button and
+dragging the cursor over the text you want to copy.  The text becomes the
+primary X selection and is highlighted.  The highlighted region is also
+the Emacs selected region.
+
+@itemize @bullet
+@item
+Since the region is the primary X selection, you can go to a different X
+application and click the middle mouse button: the text that you selected in
+the previous application is pasted into the current application.
+@item
+Since the region is the Emacs selected region, you can use all region
+commands (@kbd{C-w, M-w} etc.) as well as the options of the @b{Edit}
+menu to manipulate the selected text.
+@end itemize
+
+@menu
+* X Clipboard Selection::     	Pasting to the X clipboard.
+* X Selection Commands::	Other operations on the selection.
+* X Cut Buffers::       	X cut buffers are available for compatibility.
+* Active Regions::      	Using zmacs-style highlighting of the
+                        	 selected region.
+@end menu
+
+@node X Clipboard Selection, X Selection Commands, Using X Selections, Using X Selections
+@comment  node-name,  next,  previous,  up
+@subsection The Clipboard Selection
+@cindex clipboard selections
+
+There are other kinds of X selections besides the @b{Primary} selection; one
+common one is the @b{Clipboard} selection.  Some applications prefer to
+transfer data using this selection in preference to the @b{Primary}.
+One can transfer text from the @b{Primary} selection to the  @b{Clipboard}
+selection with the @b{Copy} command under the @b{Edit} menu in the menubar.
+
+Usually, the clipboard selection is not visible.  However, if you run the
+@file{xclipboard} application, the text most recently copied to the clipboard
+(with the @b{Copy} command) is displayed in a window.  Any time new text is
+thus copied, the @file{xclipboard} application makes a copy of it and displays
+it in its window.  The value of the clipboard can survive the lifetime of the
+running Emacs process.  The @code{xclipboard} man page provides more details.
+
+Warning: If you use the @file{xclipboard} application, remember that it
+maintains a list of all things that have been pasted to the clipboard (that
+is, copied with the @b{Copy} command).  If you don't manually delete elements
+from this list by clicking on the @b{Delete} button in the @code{xclipboard}
+window, the clipboard will eventually consume a lot of memory.
+
+In summary, some X applications (such as @file{xterm}) allow one to paste
+text in them from XEmacs in the following way:
+
+@itemize @bullet
+@item
+Drag out a region of text in Emacs with the left mouse button,
+making that text be the @b{Primary} selection.
+
+@item
+Click the middle button in the other application, pasting the @b{Primary}
+selection. 
+@end itemize
+
+With some other applications (notably, the OpenWindows and Motif tools) you
+must use this method instead:
+
+@itemize @bullet
+@item
+Drag out a region of text in Emacs with the left mouse button,
+making that text be the @b{Primary} selection.
+
+@item
+Copy the selected text to the @b{Clipboard} selection by selecting the
+@b{Copy} menu item from the @b{Edit} menu, or by hitting the @b{Copy}
+key on your keyboard.
+
+@item
+Paste the text in the other application by selecting @b{Paste} from its
+menu, or by hitting the @b{Paste} key on your keyboard.
+@end itemize
+
+
+@node X Selection Commands, X Cut Buffers, X Clipboard Selection, Using X Selections
+@subsection Miscellaneous X Selection Commands
+@comment  node-name,  next,  previous,  up
+@cindex cut buffers
+@cindex primary selections
+
+@findex x-copy-primary-selection
+@findex x-delete-primary-selection
+@findex x-insert-selection
+@findex x-kill-primary-selection
+@findex x-mouse-kill
+@findex x-own-secondary-selection
+@findex x-own-selection
+@findex x-set-point-and-insert-selection
+@table @kbd
+@item M-x x-copy-primary-selection
+Copy the primary selection to both the kill ring and the Clipboard.
+@item M-x x-insert-selection
+Insert the current selection into the buffer at point.
+@item M-x x-delete-primary-selection
+Deletes the text in the primary selection without copying it to the kill
+ring or the Clipboard.
+@item M-x x-kill-primary-selection
+Deletes the text in the primary selection and copies it to 
+both the kill ring and the Clipboard.
+@item M-x x-mouse-kill
+Kill the text between point and the mouse and copy it to 
+the clipboard and to the cut buffer.
+@item M-x x-own-secondary-selection
+Make a secondary X selection of the given argument. 
+@item M-x x-own-selection
+Make a primary X selection of the given argument.  
+@item M-x x-set-point-and-insert-selection
+Set point where clicked and insert the primary selection or the
+cut buffer.
+@end table
+
+@node X Cut Buffers, Active Regions, X Selection Commands, Using X Selections
+@subsection X Cut Buffers
+@comment  node-name,  next,  previous,  up
+
+X cut buffers are a different, older way of transferring text between
+applications.  XEmacs supports cut buffers for compatibility
+with older programs, even though selections are now the preferred way of
+transferring text.
+
+X has a concept of applications "owning" selections.  When you select
+text by clicking and dragging inside an application, the application
+tells the X server that it owns the selection.  When another
+application asks the X server for the value of the selection, the X
+server requests the information from the owner. When you use
+selections, the selection data is not actually transferred unless
+someone wants it; the act of making a selection doesn't transfer data.
+Cut buffers are different: when you "own" a cut buffer, the data is
+actually transferred to the X server immediately, and survives the
+lifetime of the application.
+
+Any time a region of text becomes the primary selection in Emacs,
+Emacs also copies that text to the cut buffer.  This makes it possible
+to copy text from an XEmacs buffer and paste it into an older,
+non-selection-based application (such as Emacs 18).
+
+Note: Older versions of Emacs could not access the X selections, only
+the X cut buffers.
+
+@node Active Regions, , X Cut Buffers, Using X Selections
+@subsection Active Regions
+@comment  node-name,  next,  previous,  up
+@cindex active regions
+
+  By default, both the text you select in an Emacs buffer using the
+click-and-drag mechanism and text you select by setting point and the
+mark is highlighted. You can use Emacs region commands as well as the
+@b{Cut} and @b{Copy} commands on the highlighted region you selected
+with the mouse.
+
+If you prefer, you can make a distinction between text selected with the
+mouse and text selected with point and the mark by setting the variable
+@code{zmacs-regions} to @code{nil}.  In that case:
+
+@itemize @bullet
+@item
+The text selected with the mouse becomes both the X selection and the
+Emacs selected region. You can use menu-bar commands as well as Emacs
+region commands on it. 
+@item
+The text selected with point and the mark is not highlighted. You can
+only use Emacs region commands on it, not the menu-bar items. 
+@end itemize
+
+  Active regions originally come from Zmacs, the Lisp Machine editor.
+The idea behind them is that commands can only operate on a region when
+the region is in an "active" state.  Put simply, you can only operate on
+a region that is highlighted.
+
+@vindex zmacs-regions
+The variable @code{zmacs-regions} checks whether LISPM-style active
+regions should be used.  This means that commands that operate on the
+region (the area between point and the mark) only work while
+the region is in the active state, which is indicated by highlighting.
+Most commands causes the region to not be in the active state;
+for example, @kbd{C-w} only works immediately after activating the
+region.
+
+More specifically:
+@itemize @bullet
+@item
+Commands that operate on the region only work if the region is active.
+@item
+Only a very small set of commands causes the region to become active---
+those commands whose semantics are to mark an area, such as @code{mark-defun}.
+@item
+The region is deactivated after each command that is executed, except that
+motion commands do not change whether the region is active or not.
+@end itemize 
+
+@code{set-mark-command} (@kbd{C-SPC}) pushes a mark and activates the
+region.  Moving the cursor with normal motion commands (@kbd{C-n},
+@kbd{C-p}, etc.) will cause the region between point and the
+recently-pushed mark to be highlighted.  It will remain highlighted
+until some non-motion comand is executed.
+
+@code{exchange-point-and-mark} (@kbd{C-x C-x}) activates the region.
+So if you mark a region and execute a command that operates on it, you
+can reactivate the same region with @kbd{C-x C-x} (or perhaps @kbd{C-x
+C-x C-x C-x}) to operate on it again.
+
+Generally, commands that push marks as a means of navigation, such as
+@code{beginning-of-buffer} (@kbd{M-<}) and @code{end-of-buffer}
+(@kbd{M->}), do not activate the region.  However, commands that push
+marks as a means of marking an area of text, such as @code{mark-defun}
+(@kbd{M-C-h}), @code{mark-word} (@kbd{M-@@}), and @code{mark-whole-buffer}
+(@kbd{C-x h}), do activate the region.
+
+When @code{zmacs-regions} is @code{t}, there is no distinction between
+the primary X selection and the active region selected by point and the
+mark.  To see this, set the mark (@key{C-SPC}) and move the cursor
+with any cursor-motion command: the region between point and mark is
+highlighted, and you can watch it grow and shrink as you move the
+cursor.
+
+Any other commands besides cursor-motion commands (such as inserting or
+deleting text) will cause the region to no longer be active; it will no
+longer be highlighted, and will no longer be the primary selection.
+Errors also remove highlighting from a region.
+
+Commands that require a region (such as @kbd{C-w}) signal an error if
+the region is not active.  Certain commands cause the region to be in
+its active state.  The most common ones are @code{push-mark}
+(@key{C-SPC}) and @code{exchange-point-and-mark} (@kbd{C-x C-x}).
+
+@vindex zmacs-region-stays
+When @code{zmacs-regions} is @code{t}, programs can be non-intrusive
+on the state of the region by setting the variable @code{zmacs-region-stays}
+to a non-@code{nil} value.  If you are writing a new Emacs command that
+is conceptually a ``motion'' command and should not interfere with the
+current highlightedness of the region, then you may set this variable.
+It is reset to @code{nil} after each user command is executed.
+
+@findex zmacs-activate-region
+When @code{zmacs-regions} is @code{t}, programs can make the region between
+point and mark go into the active (highlighted) state by using the
+function @code{zmacs-activate-region}. Only a small number of commands
+should ever do this. 
+
+@findex zmacs-deactivate-region
+When @code{zmacs-regions} is @code{t}, programs can deactivate the region
+between point and the mark by using @code{zmacs-deactivate-region}.
+Note: you should not have to call this function; the command loop calls
+it when appropriate. 
+
+@node Accumulating Text, Rectangles, Using X Selections, Top
+@section Accumulating Text
+@findex append-to-buffer
+@findex prepend-to-buffer
+@findex copy-to-buffer
+@findex append-to-file
+@cindex copying text
+@cindex accumulating text
+
+  Usually you copy or move text by killing it and yanking it, but there are
+other ways that are useful for copying one block of text in many places, or
+for copying many scattered blocks of text into one place.
+
+  If you like, you can accumulate blocks of text from scattered
+locations either into a buffer or into a file.  The relevant commands
+are described here.  You can also use Emacs registers for storing and
+accumulating text.  @xref{Registers}.
+
+@table @kbd
+@item M-x append-to-buffer
+Append region to contents of specified buffer (@code{append-to-buffer}).
+@item M-x prepend-to-buffer
+Prepend region to contents of specified buffer.
+@item M-x copy-to-buffer
+Copy region into specified buffer, deleting that buffer's old contents.
+@item M-x insert-buffer
+Insert contents of specified buffer into current buffer at point.
+@item M-x append-to-file
+Append region to the end of the contents of specified file.
+@end table
+
+  To accumulate text into a buffer, use the command @kbd{M-x
+append-to-buffer}, which inserts a copy of the region into the buffer
+@var{buffername}, at the location of point in that buffer.  If there is
+no buffer with the given name, one is created.
+
+  If you append text to a buffer that has been used for editing, the
+copied text goes to the place where point is.  Point in that buffer is
+left at the end of the copied text, so successive uses of
+@code{append-to-buffer} accumulate the text in the specified buffer in
+the same order as they were copied.  Strictly speaking, this command does
+not always append to the text already in the buffer; but if this command
+is the only command used to alter a buffer, it does always append to the
+existing text because point is always at the end.
+
+  @kbd{M-x prepend-to-buffer} is similar to @code{append-to-buffer}, but
+point in the other buffer is left before the copied text, so successive
+prependings add text in reverse order.  @kbd{M-x copy-to-buffer} is
+similar, except that any existing text in the other buffer is deleted,
+so the buffer is left containing just the text newly copied into it.
+
+  You can retrieve the accumulated text from that buffer with @kbd{M-x
+insert-buffer}, which takes @var{buffername} as an argument.  It inserts
+a copy of the text in buffer @var{buffername} into the selected buffer.
+You could alternatively select the other buffer for editing, perhaps moving
+text from it by killing or with @code{append-to-buffer}.  @xref{Buffers}, for
+background information on buffers.
+
+  Instead of accumulating text within Emacs in a buffer, you can append
+text directly into a file with @kbd{M-x append-to-file}, which takes
+@var{file-name} as an argument.  It adds the text of the region to the
+end of the specified file.  The file is changed immediately on disk.
+This command is normally used with files that are @i{not} being visited
+in Emacs.  Using it on a file that Emacs is visiting can produce
+confusing results, because the file's text inside Emacs does not change
+while the file itself changes.
+
+@node Rectangles, Registers, Accumulating Text, Top
+@section Rectangles
+@cindex rectangles
+
+  The rectangle commands affect rectangular areas of text: all
+characters between a certain pair of columns, in a certain range of lines.
+Commands are provided to kill rectangles, yank killed rectangles, clear
+them out, or delete them.  Rectangle commands are useful with text in
+multicolumnar formats, like code with comments at the right,
+or for changing text into or out of such formats.
+
+  To specify the rectangle a command should work on, put the mark at one
+corner and point at the opposite corner.  The specified rectangle is
+called the @dfn{region-rectangle} because it is controlled about the
+same way the region is controlled.  Remember that a given
+combination of point and mark values can be interpreted either as
+specifying a region or as specifying a rectangle; it is up to the
+command that uses them to choose the interpretation.
+
+@table @kbd
+@item M-x delete-rectangle
+Delete the text of the region-rectangle, moving any following text on
+each line leftward to the left edge of the region-rectangle.
+@item M-x kill-rectangle
+Similar, but also save the contents of the region-rectangle as the
+``last killed rectangle''.
+@item M-x yank-rectangle
+Yank the last killed rectangle with its upper left corner at point.
+@item M-x open-rectangle
+Insert blank space to fill the space of the region-rectangle.
+The previous contents of the region-rectangle are pushed rightward.
+@item M-x clear-rectangle
+Clear the region-rectangle by replacing its contents with spaces.
+@end table
+
+  The rectangle operations fall into two classes: commands deleting and
+moving rectangles, and commands for blank rectangles.
+
+@findex delete-rectangle
+@findex kill-rectangle
+  There are two ways to get rid of the text in a rectangle: you can discard
+the text (delete it) or save it as the ``last killed'' rectangle.  The
+commands for these two ways are @kbd{M-x delete-rectangle} and @kbd{M-x
+kill-rectangle}.  In either case, the portion of each line that falls inside
+the rectangle's boundaries is deleted, causing following text (if any) on
+the line to move left.
+
+  Note that ``killing'' a rectangle is not killing in the usual sense; the
+rectangle is not stored in the kill ring, but in a special place that
+only records the most recently killed rectangle (that is, does not
+append to a killed rectangle).  Different yank commands
+have to be used and only one rectangle is stored, because yanking
+a rectangle is quite different from yanking linear text and yank-popping
+commands are difficult to make sense of.
+
+  Inserting a rectangle is the opposite of deleting one.  You specify
+where to put the upper left corner by putting point there.  The
+rectangle's first line is inserted at point, the rectangle's second line
+is inserted at a point one line vertically down, and so on.  The number
+of lines affected is determined by the height of the saved rectangle.
+
+@findex yank-rectangle
+  To insert the last killed rectangle, type @kbd{M-x yank-rectangle}.
+This can be used to convert single-column lists into double-column
+lists; kill the second half of the list as a rectangle and then
+yank it beside the first line of the list.
+
+@findex open-rectangle
+@findex clear-rectangle
+  There are two commands for working with blank rectangles: @kbd{M-x
+clear-rectangle} erases existing text, and @kbd{M-x open-rectangle}
+inserts a blank rectangle.  Clearing a rectangle is equivalent to
+deleting it and then inserting a blank rectangle of the same size.
+
+  Rectangles can also be copied into and out of registers.
+@xref{RegRect,,Rectangle Registers}.