21.3 使用迷你缓冲读取 Lisp 对象

本节描述用于通过迷你缓冲读取 Lisp 对象的函数。

Function: read-minibuffer prompt &optional initial

该函数使用迷你缓冲读取一个 Lisp 对象,不进行求值直接返回。参数 promptinitial 的用法与 read-from-minibuffer 相同。

这是对 read-from-minibuffer 的简化接口:

(read-minibuffer prompt initial)
≡
(let (minibuffer-allow-text-properties)
  (read-from-minibuffer prompt initial nil t))

下面示例中,我们提供字符串 "(testing)" 作为初始输入:

(read-minibuffer
 "Enter an expression: " (format "%s" '(testing)))

;; Here is how the minibuffer is displayed:

---------- Buffer: Minibuffer ----------
Enter an expression: (testing)∗
---------- Buffer: Minibuffer ----------

用户可直接按 RET 使用初始输入作为默认值,也可编辑后再输入。

Function: eval-minibuffer prompt &optional initial

该函数使用迷你缓冲读取一个 Lisp 表达式,对其求值并返回结果。参数 promptinitial 的用法与 read-from-minibuffer 相同。

该函数仅对 read-minibuffer 的调用结果进行求值:

(eval-minibuffer prompt initial)
≡
(eval (read-minibuffer prompt initial))
Function: edit-and-eval-command prompt form

该函数在迷你缓冲中读取 Lisp 表达式,求值并返回结果。它与 eval-minibuffer 的区别在于:初始 form 不是可选参数,且被当作 Lisp 对象转换为打印表示,而非文本字符串。它使用 prin1 打印,因此如果是字符串,初始文本中会出现双引号(‘"’)。See 输出函数

下面示例中,我们向用户提供一个初始内容已是合法表达式的输入:

(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 ----------

直接按 RET 会退出小缓冲并求值该表达式,从而将光标向前移动一个单词。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike