eintr: Lisp macro

 
 8.2.2 Lisp macro
 ----------------
 
 The part of the ‘condition-case’ expression that is evaluated in the
 expectation that all goes well has a ‘when’.  The code uses ‘when’ to
 determine whether the ‘string’ variable points to text that exists.
 
    A ‘when’ expression is simply a programmers’ convenience.  It is an
 ‘if’ without the possibility of an else clause.  In your mind, you can
 replace ‘when’ with ‘if’ and understand what goes on.  That is what the
 Lisp interpreter does.
 
    Technically speaking, ‘when’ is a Lisp macro.  A Lisp macro enables
 you to define new control constructs and other language features.  It
 tells the interpreter how to compute another Lisp expression which will
 in turn compute the value.  In this case, the other expression is an
 ‘if’ expression.
 
    The ‘kill-region’ function definition also has an ‘unless’ macro; it
 is the converse of ‘when’.  The ‘unless’ macro is an ‘if’ without a then
 clause
 
    For more about Lisp macros, see SeeMacros (elisp)Macros.  The C
 programming language also provides macros.  These are different, but
 also useful.
 
    Regarding the ‘when’ macro, in the ‘condition-case’ expression, when
 the string has content, then another conditional expression is executed.
 This is an ‘if’ with both a then-part and an else-part.
 
      (if (eq last-command 'kill-region)
          (kill-append string (< end beg) yank-handler)
        (kill-new string nil yank-handler))
 
    The then-part is evaluated if the previous command was another call
 to ‘kill-region’; if not, the else-part is evaluated.
 
    ‘yank-handler’ is an optional argument to ‘kill-region’ that tells
 the ‘kill-append’ and ‘kill-new’ functions how deal with properties
 added to the text, such as bold or italics.
 
    ‘last-command’ is a variable that comes with Emacs that we have not
 seen before.  Normally, whenever a function is executed, Emacs sets the
 value of ‘last-command’ to the previous command.
 
    In this segment of the definition, the ‘if’ expression checks whether
 the previous command was ‘kill-region’.  If it was,
 
      (kill-append string (< end beg) yank-handler)
 
 concatenates a copy of the newly clipped text to the just previously
 clipped text in the kill ring.