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.
See Narrowing and 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.