GNU Info

Info Node: (emacs-lisp-intro.info)last-command & this-command

(emacs-lisp-intro.info)last-command & this-command


Next: kill-append function Prev: copy-region-as-kill body Up: copy-region-as-kill body
Enter node , (file) or (file)node

`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', 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))
         ;; else-part
         (kill-new (buffer-substring beg end)))

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


automatically generated by info2www version 1.2.2.9