eintr: last-command & this-command
‘last-command’ and ‘this-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’.
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 using the ‘kill-new’
function.
The ‘if’ expression reads as follows; it uses ‘eq’:
(if (eq last-command 'kill-region)
;; then-part
(kill-append (filter-buffer-substring beg end) (< end beg))
;; else-part
(kill-new (filter-buffer-substring beg end)))
(The ‘filter-buffer-substring’ function returns a filtered substring
of the buffer, if any. Optionally—the arguments are not here, so
neither is done—the function may delete the initial text or return the
text without its properties; this function is a replacement for the
older ‘buffer-substring’ function, which came before text properties
were implemented.)
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.
If the previous command was ‘kill-region’, then the Emacs Lisp
interpreter calls the ‘kill-append’ function