Go to the previous, next section.

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 or other of these options will enable you to pass the right information interactively to a function. (@xref{Interactive Codes, , Code Characters for  interactive , elisp, 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@dots{}"
  (interactive "BAppend to buffer: \nr")
  body-of-function@dots{})

(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. @xref{interactive, , Using GNU Emacs Lisp Reference Manual}, for more information about this advanced technique.

Go to the previous, next section.