Info Node: (emacs-lisp-intro.info)Interactive Options
(emacs-lisp-intro.info)Interactive Options
Different Options for `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 of these options will enable you to pass the
right information interactively to a function. (Note:Code Characters
for `interactive'.)
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. When it sees a `B', 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.
Note: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. Note:Using `Interactive', for more
information about this advanced technique.