eintr: Complete copy-region-as-kill

 
 The complete ‘copy-region-as-kill’ function definition
 ------------------------------------------------------
 
 Here 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.