interactive
In the example, multiply-by-seven
used "p"
as the
argument to interactive
. This argument told Emacs to interpret
your typing either C-u followed by a number or META
followed by a number as a command to pass that number to the function
as its argument. Emacs has more than twenty characters predefined for
use with interactive
. In almost every case, one or other of
these options will enable you to pass the right information
interactively to a function. (See section `Code Characters for interactive
' in The GNU Emacs Lisp Reference Manual.)
For example, the character `r' causes Emacs to pass the beginning and end of the region (the current values of point and mark) to the function as two separate arguments. It is used as follows:
(interactive "r")
On the other hand, a `B' tells Emacs to ask for the name of a
buffer that will be passed to the function. In this case, Emacs will
ask for the name by prompting the user in the minibuffer, using a string
that follows the `B', as in "BAppend to buffer: "
. Not
only will Emacs prompt for the name, but Emacs will complete the name if
you type enough of it and press TAB.
A function with two or more arguments can have information passed to
each argument by adding parts to the string that follows
interactive
. When you do this, the information is passed to
each argument in the same order it is specified in the
interactive
list. In the string, each part is separated from
the next part by a `\n', which is a newline. For example, you
could follow "BAppend to buffer: "
with a `\n') and an
`r'. This would cause Emacs to pass the values of point and mark
to the function as well as prompt you for the buffer--three arguments
in all.
In this case, the function definition would look like the following,
where buffer
, start
, and end
are the symbols to
which interactive
binds the buffer and the current values of the
beginning and ending of the region:
(defun name-of-function (buffer start end) "documentation..." (interactive "BAppend to buffer: \nr") body-of-function...)
(The space after the colon in the prompt makes it look better when you
are prompted. The append-to-buffer
function looks exactly like
this. See section The Definition of append-to-buffer
.)
If a function does not have arguments, then interactive
does not
require any. Such a function contains the simple expression
(interactive)
. The mark-whole-buffer
function is like
this.
Alternatively, if the special letter-codes are not right for your
application, you can pass your own arguments to interactive
as
a list. See section `Using Interactive
' in The GNU Emacs Lisp Reference Manual, for more information about this advanced
technique.
Go to the first, previous, next, last section, table of contents.