copy-region-as-kill
The copy-region-as-kill
function is written so that two or more
kills in a row combine their text into a single entry. If you yank back
the text from the kill ring, you get it all in one piece. Moreover,
kills that kill forward from the current position of the cursor are
added to the end of the previously copied text and commands that copy
text backwards add it to the beginning of the previously copied text.
This way, the words in the text stay in the proper order.
The function makes use of two variables that keep track of the current
and previous Emacs command. The two variables are this-command
and last-command
.
Normally, whenever a function is executed, Emacs sets the value of
this-command
to the function being executed (which in this case
would be copy-region-as-kill
). At the same time, Emacs sets
the value of last-command
to the previous value of
this-command
. However, the copy-region-as-kill
command
is different; it sets the value of this-command
to
kill-region
, which is the name of the function that calls
copy-region-as-kill
.
In the first part of the body of the copy-region-as-kill
function, an if
expression determines whether the value of
last-command
is kill-region
. If so, the then-part of
the if
expression is evaluated; it uses the kill-append
function to concatenate the text copied at this call to the function
with the text already in the first element (the CAR) of the kill
ring. On the other hand, if the value of last-command
is not
kill-region
, then the copy-region-as-kill
function
attaches a new element to the kill ring.
The if
expression reads as follows; it uses eq
, which is
a function we have not yet seen:
(if (eq last-command 'kill-region) ;; then-part (kill-append (buffer-substring beg end) (< end beg))
The eq
function tests whether its first argument is the same Lisp
object as its second argument. The eq
function is similar to the
equal
function in that it is used to test for equality, but
differs in that it determines whether two representations are actually
the same object inside the computer, but with different names.
equal
determines whether the structure and contents of two
expressions are the same.
Go to the first, previous, next, last section, table of contents.