Next: copy-region-as-kill body, Up: copy-region-as-kill [Contents][Index]
copy-region-as-kill
function definitionHere is the complete text of the version 22 copy-region-as-kill
function:
(defun copy-region-as-kill (beg end) "Save the region as if killed, but don't kill it. In Transient Mark mode, deactivate the mark. If `interprogram-cut-function' is non-nil, also save the text for a window system cut and paste." (interactive "r")
(if (eq last-command 'kill-region) (kill-append (filter-buffer-substring beg end) (< end beg)) (kill-new (filter-buffer-substring beg end)))
(if transient-mark-mode (setq deactivate-mark t)) nil)
As usual, this function can be divided into its component parts:
(defun copy-region-as-kill (argument-list) "documentation…" (interactive "r") body…)
The arguments are beg
and end
and the function is interactive
with "r"
, so the two arguments must refer to the beginning and end of
the region. If you have been reading through this document from the
beginning, understanding these parts of a function is almost becoming
routine.
The documentation is somewhat confusing unless you remember that the word
“kill” has a meaning different from usual. The Transient Mark and
interprogram-cut-function
comments explain certain side-effects.
After you once set a mark, a buffer always contains a region. If you wish, you can use Transient Mark mode to highlight the region temporarily. (No one wants to highlight the region all the time, so Transient Mark mode highlights it only at appropriate times. Many people turn off Transient Mark mode, so the region is never highlighted.)
Also, a windowing system allows you to copy, cut, and paste among different
programs. In the X windowing system, for example, the
interprogram-cut-function
function is x-select-text
, which
works with the windowing system’s equivalent of the Emacs kill ring.
The body of the copy-region-as-kill
function starts with an if
clause. What this clause does is distinguish between two different
situations: whether or not this command is executed immediately after a
previous kill-region
command. In the first case, the new region is
appended to the previously copied text. Otherwise, it is inserted into the
beginning of the kill ring as a separate piece of text from the previous
piece.
The last two lines of the function prevent the region from lighting up if Transient Mark mode is turned on.
The body of copy-region-as-kill
merits discussion in detail.
Next: copy-region-as-kill body, Up: copy-region-as-kill [Contents][Index]