Node:zap-to-char interactive, Next:zap-to-char body, Previous:Complete zap-to-char, Up:zap-to-char
The interactive expression in the
zap-to-char command looks like
(interactive "*p\ncZap to char: ")
The part within quotation marks,
"*p\ncZap to char: ", specifies
three different things. First, and most simply, the asterisk,
causes an error to be signalled if the buffer is read-only. This means that
if you try
zap-to-char in a read-only buffer you will not be able to
remove text, and you will receive a message that says "Buffer is
read-only"; your terminal may beep at you as well.
The version 21 implementation does not have the asterisk,
function works the same as in version 19: in both cases, it cannot
remove text from a read-only buffer but the function does copy the
text that would have been removed to the kill ring. Also, in both
cases, you see an error message.
However, the version 19 implementation copies text from a read-only
buffer only because of a mistake in the implementation of
interactive. According to the documentation for
interactive, the asterisk,
*, should prevent the
zap-to-char function from doing anything at all when the buffer
is read only. The function should not copy the text to the kill ring.
It is a bug that it does.
In version 21,
interactive is implemented correctly. So the
*, had to be removed from the interactive
specification. If you insert an
* and evaluate the function
definition, then the next time you run the
on a read-only buffer, you will not copy any text.
That change aside, and a change to the documentation, the two versions
zap-to-char function are identical.
Let us continue with the interactive specification.
The second part of
"*p\ncZap to char: " is the
This part is separated from the next part by a newline,
p means that the first argument to the function will be
passed the value of a `processed prefix'. The prefix argument is
passed by typing C-u and a number, or M- and a number. If
the function is called interactively without a prefix, 1 is passed to
The third part of
"*p\ncZap to char: " is
cZap to char:
. In this part, the lower case
c indicates that
interactive expects a prompt and that the argument will be a
character. The prompt follows the
c and is the string
to char: (with a space after the colon to make it look good).
What all this does is prepare the arguments to
zap-to-char so they
are of the right type, and give the user a prompt.