本节描述用于通过补全读取特定类型名称的更高级、更便捷的函数。
大多数情况下,你不应在 Lisp 函数的中间调用这些函数。尽可能将所有小缓冲区输入
作为读取命令参数的一部分,放在 interactive 声明中完成。See 定义命令。
该函数读取一个缓冲区的名称并以字符串形式返回。
它使用 prompt 作为提示信息。参数 default 是默认名称,
即当用户以空小缓冲区退出时返回的值。如果非 nil,它可以是字符串、
字符串列表或缓冲区对象。如果是列表,则默认值为列表的第一个元素。
该值会显示在提示中,但不会作为初始内容插入小缓冲区。
参数 prompt 应当是以冒号和空格结尾的字符串。
如果 default 非 nil,函数会将其插入到 prompt 的冒号之前,
以遵循带默认值的小缓冲区读取约定(see Emacs Programming Tips)。
可选参数 require-match 的含义与 completing-read 中相同。
See 补全与小缓冲。
可选参数 predicate 若非 nil,指定一个用于过滤待考虑缓冲区的函数:
该函数会以每个候选缓冲区为参数被调用,返回 nil 表示拒绝该候选,
返回非 nil 表示接受。
在下例中,用户输入 ‘minibuffer.t’,然后按下 RET。
参数 require-match 为 t,且唯一以该输入开头的缓冲区名为
‘minibuffer.texi’,因此返回该名称。
(read-buffer "Buffer name: " "foo" t)
;; After evaluation of the preceding expression, ;; the following prompt appears, ;; with an empty minibuffer:
---------- Buffer: Minibuffer ---------- Buffer name (default foo): ∗ ---------- Buffer: Minibuffer ----------
;; The user types minibuffer.t RET.
⇒ "minibuffer.texi"
如果该变量非 nil,则指定一个用于读取缓冲区名称的函数。
read-buffer 会调用该函数而非执行自身的常规逻辑,
并将传入 read-buffer 的相同参数传递给它。
如果该变量非 nil,read-buffer 在读取缓冲区名称并执行补全时忽略大小写。
该函数读取一个命令的名称并以 Lisp 符号形式返回。
参数 prompt 的用法与 read-from-minibuffer 中相同。
回忆一下:命令是指 commandp 返回 t 的任何对象,
命令名是指 commandp 返回 t 的符号。See 交互式调用。
参数 default 指定用户输入空内容时返回的值。
它可以是符号、字符串或字符串列表。
如果是字符串,read-command 会在返回前将其 intern。
如果是列表,read-command 会将列表第一个元素 intern。
如果 default 为 nil,表示未指定默认值;
此时若用户输入空内容,返回值为 (intern ""),
即一个名称为空字符串的符号,其打印形式为 ##(see 符号类型)。
(read-command "Command name? ")
;; After evaluation of the preceding expression, ;; the following prompt appears with an empty minibuffer:
---------- Buffer: Minibuffer ---------- Command name? ---------- Buffer: Minibuffer ----------
如果用户输入 forward-c RET,该函数返回 forward-char。
read-command 是 completing-read 的简化接口。
它使用变量 obarray 在当前所有 Lisp 符号中进行补全,
并使用 commandp 作为谓词,只接受命令名:
(read-command prompt)
≡
(intern (completing-read prompt obarray
'commandp t nil))
该函数读取一个可自定义变量的名称并以符号形式返回。
其参数形式与 read-command 相同。
行为也与 read-command 类似,区别仅在于它使用谓词
custom-variable-p 而非 commandp。
该函数读取一个表示颜色规格的字符串,可以是颜色名或类似 #RRRGGGBBB 的 RGB 十六进制值。
它以 prompt 作为提示(默认:"Color (name or #RGB triplet):"),
并为颜色名提供补全,但不为 RGB 十六进制值提供补全。
除标准颜色名外,补全候选还包括光标处的前景色和背景色。
合法的 RGB 值格式见 Color Names。
函数返回值是用户在小缓冲区中输入的字符串。
但是,当交互式调用或可选参数 convert 非 nil 时,
它会将输入的颜色名转换为对应的 RGB 值字符串并返回该值。
该函数要求输入合法的颜色规格。
当 allow-empty 非 nil 且用户输入空内容时,允许空颜色名。
交互式调用或 display 非 nil 时,返回值也会在回显区显示。
可选参数 foreground 和 face 控制 *Completions* 缓冲区中
补全候选的显示外观。候选以指定的 face 显示,但颜色不同:
如果 foreground 非 nil,前景色设为候选对应的颜色,
否则将背景色设为候选对应的颜色。
另请参见 User-Chosen Coding Systems 中的 read-coding-system
和 read-non-nil-coding-system,以及 Input Methods 中的
read-input-method-name。