20.3 Reading Lisp Objects with the Minibuffer
This section describes functions for reading Lisp objects with the minibuffer.
function
read-minibuffer prompt \&optional initial​
This function reads a Lisp object using the minibuffer, and returns it without evaluating it. The arguments prompt
and initial
are used as in read-from-minibuffer
.
This is a simplified interface to the read-from-minibuffer
function:
(read-minibuffer prompt initial)
≡
(let (minibuffer-allow-text-properties)
(read-from-minibuffer prompt initial nil t))
Here is an example in which we supply the string "(testing)"
as initial input:
(read-minibuffer
"Enter an expression: " (format "%s" '(testing)))
;; Here is how the minibuffer is displayed:
---------- Buffer: Minibuffer ----------
Enter an expression: (testing)∗
---------- Buffer: Minibuffer ----------
The user can type RET
immediately to use the initial input as a default, or can edit the input.
function
eval-minibuffer prompt \&optional initial​
This function reads a Lisp expression using the minibuffer, evaluates it, then returns the result. The arguments prompt
and initial
are used as in read-from-minibuffer
.
This function simply evaluates the result of a call to read-minibuffer
:
(eval-minibuffer prompt initial)
≡
(eval (read-minibuffer prompt initial))
function
edit-and-eval-command prompt form​
This function reads a Lisp expression in the minibuffer, evaluates it, then returns the result. The difference between this command and eval-minibuffer
is that here the initial form
is not optional and it is treated as a Lisp object to be converted to printed representation rather than as a string of text. It is printed with prin1
, so if it is a string, double-quote characters (‘"
’) appear in the initial text. See Output Functions.
In the following example, we offer the user an expression with initial text that is already a valid form:
(edit-and-eval-command "Please edit: " '(forward-word 1))
;; After evaluation of the preceding expression,
;; the following appears in the minibuffer:
---------- Buffer: Minibuffer ----------
Please edit: (forward-word 1)∗
---------- Buffer: Minibuffer ----------
Typing RET
right away would exit the minibuffer and evaluate the expression, thus moving point forward one word.