From df36a07ef048613d662365af32566abf392ffdf7 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sun, 19 Feb 2006 23:38:11 +0000 Subject: [PATCH] (Using Interactive): Put string case before list case. --- lispref/commands.texi | 67 +++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/lispref/commands.texi b/lispref/commands.texi index aa05e0a48f2..3b1e9771a1b 100644 --- a/lispref/commands.texi +++ b/lispref/commands.texi @@ -150,40 +150,6 @@ It may be omitted or @code{nil}; then the command is called with no arguments. This leads quickly to an error if the command requires one or more arguments. - -@item -It may be a Lisp expression that is not a string; then it should be a -form that is evaluated to get a list of arguments to pass to the -command. Usually this form will call various functions to read input -from the user, most often through the minibuffer (@pxref{Minibuffer}) -or directly from the keyboard (@pxref{Reading Input}). -@cindex argument evaluation form - -Providing point or the mark as an argument value is also common, but -if you do this @emph{and} read input (whether using the minibuffer or -not), be sure to get the integer values of point or the mark after -reading. The current buffer may be receiving subprocess output; if -subprocess output arrives while the command is waiting for input, it -could relocate point and the mark. - -Here's an example of what @emph{not} to do: - -@smallexample -(interactive - (list (region-beginning) (region-end) - (read-string "Foo: " nil 'my-history))) -@end smallexample - -@noindent -Here's how to avoid the problem, by examining point and the mark after -reading the keyboard input: - -@smallexample -(interactive - (let ((string (read-string "Foo: " nil 'my-history))) - (list (region-beginning) (region-end) string))) -@end smallexample - @item @cindex argument prompt It may be a string; then its contents should consist of a code character @@ -234,6 +200,39 @@ You can use @samp{*} and @samp{@@} together; the order does not matter. Actual reading of arguments is controlled by the rest of the prompt string (starting with the first character that is not @samp{*} or @samp{@@}). + +@item +It may be a Lisp expression that is not a string; then it should be a +form that is evaluated to get a list of arguments to pass to the +command. Usually this form will call various functions to read input +from the user, most often through the minibuffer (@pxref{Minibuffer}) +or directly from the keyboard (@pxref{Reading Input}). +@cindex argument evaluation form + +Providing point or the mark as an argument value is also common, but +if you do this @emph{and} read input (whether using the minibuffer or +not), be sure to get the integer values of point or the mark after +reading. The current buffer may be receiving subprocess output; if +subprocess output arrives while the command is waiting for input, it +could relocate point and the mark. + +Here's an example of what @emph{not} to do: + +@smallexample +(interactive + (list (region-beginning) (region-end) + (read-string "Foo: " nil 'my-history))) +@end smallexample + +@noindent +Here's how to avoid the problem, by examining point and the mark after +reading the keyboard input: + +@smallexample +(interactive + (let ((string (read-string "Foo: " nil 'my-history))) + (list (region-beginning) (region-end) string))) +@end smallexample @end itemize @cindex examining the @code{interactive} form -- 2.39.2