eintr: Body of mark-whole-buffer

 
 4.3.1 Body of ‘mark-whole-buffer’
 ---------------------------------
 
 The body of the ‘mark-whole-buffer’ function consists of three lines of
 code:
 
      (push-mark (point))
      (push-mark (point-max) nil t)
      (goto-char (point-min))
 
    The first of these lines is the expression, ‘(push-mark (point))’.
 
    This line does exactly the same job as the first line of the body of
 the ‘simplified-beginning-of-buffer’ function, which is written
 ‘(push-mark)’.  In both cases, the Lisp interpreter sets a mark at the
 current position of the cursor.
 
    I don’t know why the expression in ‘mark-whole-buffer’ is written
 ‘(push-mark (point))’ and the expression in ‘beginning-of-buffer’ is
 written ‘(push-mark)’.  Perhaps whoever wrote the code did not know that
 the arguments for ‘push-mark’ are optional and that if ‘push-mark’ is
 not passed an argument, the function automatically sets mark at the
 location of point by default.  Or perhaps the expression was written so
 as to parallel the structure of the next line.  In any case, the line
 causes Emacs to determine the position of point and set a mark there.
 
    In earlier versions of GNU Emacs, the next line of
 ‘mark-whole-buffer’ was ‘(push-mark (point-max))’.  This expression sets
 a mark at the point in the buffer that has the highest number.  This
 will be the end of the buffer (or, if the buffer is narrowed, the end of
 the accessible portion of the buffer.  SeeNarrowing and Widening
 Narrowing & Widening, for more about narrowing.)  After this mark has
 been set, the previous mark, the one set at point, is no longer set, but
 Emacs remembers its position, just as all other recent marks are always
 remembered.  This means that you can, if you wish, go back to that
 position by typing ‘C-u C-<SPC>’ twice.
 
    In GNU Emacs 22, the ‘(point-max)’ is slightly more complicated.  The
 line reads
 
      (push-mark (point-max) nil t)
 
 The expression works nearly the same as before.  It sets a mark at the
 highest numbered place in the buffer that it can.  However, in this
 version, ‘push-mark’ has two additional arguments.  The second argument
 to ‘push-mark’ is ‘nil’.  This tells the function it _should_ display a
 message that says “Mark set” when it pushes the mark.  The third
 argument is ‘t’.  This tells ‘push-mark’ to activate the mark when
 Transient Mark mode is turned on.  Transient Mark mode highlights the
 currently active region.  It is often turned off.
 
    Finally, the last line of the function is ‘(goto-char (point-min)))’.
 This is written exactly the same way as it is written in
 ‘beginning-of-buffer’.  The expression moves the cursor to the minimum
 point in the buffer, that is, to the beginning of the buffer (or to the
 beginning of the accessible portion of the buffer).  As a result of
 this, point is placed at the beginning of the buffer and mark is set at
 the end of the buffer.  The whole buffer is, therefore, the region.