4.4.1 The append-to-buffer Interactive Expression

Since the append-to-buffer function will be used interactively, the function must have an interactive expression. (For a review of interactive, see Making a Function Interactive.)

The expression reads as follows:

(interactive
 (list (read-buffer
        "Append to buffer: "
        (other-buffer (current-buffer) t))
       (region-beginning)
       (region-end)))

This expression is not one with letters standing for parts, as described earlier. Instead, it starts a list with these parts:

The first part of the list is an expression to read the name of a buffer and return it as a string. That is read-buffer. The function requires a prompt as its first argument, ‘"Append to buffer: "’. Its second argument tells the command what value to provide if you don’t specify anything.

In this case that second argument is an expression containing the function other-buffer, an exception, and a ‘t’, standing for true.

The first argument to other-buffer, the exception, is yet another function, current-buffer. That is not going to be returned. The second argument is the symbol for true, t. That tells other-buffer that it may show visible buffers (except in this case, it will not show the current buffer, which makes sense).

The expression looks like this:

(other-buffer (current-buffer) t)

The second and third arguments to the list expression are (region-beginning) and (region-end). These two functions specify the beginning and end of the text to be appended.

Originally, the command used the letters ‘B’ and ‘r’. The whole interactive expression looked like this:

(interactive "BAppend to buffer: \nr")

But when that was done, the default value of the buffer switched to was invisible. That was not wanted.

(The prompt was separated from the second argument with a newline, ‘\n’. It was followed by an ‘r’ that told Emacs to bind the two arguments that follow the symbol buffer in the function’s argument list (that is, start and end) to the values of point and mark. That argument worked fine.)