GNU Info

Info Node: (emacs-lisp-intro.info)Interactive Options

(emacs-lisp-intro.info)Interactive Options


Next: Permanent Installation Prev: Interactive Up: Writing Defuns
Enter node , (file) or (file)node

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.


automatically generated by info2www version 1.2.2.9