beginning-of-buffer command is a good function to start with
since you are likely to be familiar with it and it is easy to
understand. Used as an interactive command,
moves the cursor to the beginning of the buffer, leaving the mark at the
previous position. It is generally bound to M-<.
In this section, we will discuss a shortened version of the function
that shows how it is most frequently used. This shortened function
works as written, but it does not contain the code for a complex option.
In another section, we will describe the entire function.
(See Complete Definition of
Before looking at the code, let's consider what the function definition has to contain: it must include an expression that makes the function interactive so it can be called by typing M-x beginning-of-buffer or by typing a keychord such as M-<; it must include code to leave a mark at the original position in the buffer; and it must include code to move the cursor to the beginning of the buffer.
Here is the complete text of the shortened version of the function:
(defun simplified-beginning-of-buffer () "Move point to the beginning of the buffer; leave mark at previous position." (interactive) (push-mark) (goto-char (point-min)))
Like all function definitions, this definition has five parts following
the special form
In this function definition, the argument list is empty; this means that this function does not require any arguments. (When we look at the definition for the complete function, we will see that it may be passed an optional argument.)
The interactive expression tells Emacs that the function is intended to
be used interactively. In this example,
interactive does not have
an argument because
simplified-beginning-of-buffer does not
The body of the function consists of the two lines:
(push-mark) (goto-char (point-min))
The first of these lines is the expression,
this expression is evaluated by the Lisp interpreter, it sets a mark at
the current position of the cursor, wherever that may be. The position
of this mark is saved in the mark ring.
The next line is
(goto-char (point-min)). This expression
jumps 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 if it is narrowed. See Narrowing and Widening.)
push-mark command sets a mark at the place where the cursor
was located before it was moved to the beginning of the buffer by the
(goto-char (point-min)) expression. Consequently, you can, if
you wish, go back to where you were originally by typing C-x C-x.
That is all there is to the function definition!
When you are reading code such as this and come upon an unfamiliar
function, such as
goto-char, you can find out what it does by
describe-function command. To use this command, type
C-h f and then type in the name of the function and press
describe-function command will print the
function's documentation string in a *Help* window. For
example, the documentation for
Set point to POSITION, a number or marker. Beginning of buffer is position (point-min), end is (point-max).
The function's one argument is the desired position.
(The prompt for
describe-function will offer you the symbol
under or preceding the cursor, so you can save typing by positioning
the cursor right over or after the function and then typing C-h f
end-of-buffer function definition is written in the same way as
beginning-of-buffer definition except that the body of the
function contains the expression
(goto-char (point-max)) in place