21.6.4 高级补全函数

本节描述用于通过补全读取特定类型名称的更高级、更便捷的函数。

大多数情况下,你不应在 Lisp 函数的中间调用这些函数。尽可能将所有小缓冲区输入 作为读取命令参数的一部分,放在 interactive 声明中完成。See 定义命令

Function: read-buffer prompt &optional default require-match predicate

该函数读取一个缓冲区的名称并以字符串形式返回。 它使用 prompt 作为提示信息。参数 default 是默认名称, 即当用户以空小缓冲区退出时返回的值。如果非 nil,它可以是字符串、 字符串列表或缓冲区对象。如果是列表,则默认值为列表的第一个元素。 该值会显示在提示中,但不会作为初始内容插入小缓冲区。

参数 prompt 应当是以冒号和空格结尾的字符串。 如果 defaultnil,函数会将其插入到 prompt 的冒号之前, 以遵循带默认值的小缓冲区读取约定(see Emacs Programming Tips)。

可选参数 require-match 的含义与 completing-read 中相同。 See 补全与小缓冲

可选参数 predicate 若非 nil,指定一个用于过滤待考虑缓冲区的函数: 该函数会以每个候选缓冲区为参数被调用,返回 nil 表示拒绝该候选, 返回非 nil 表示接受。

在下例中,用户输入 ‘minibuffer.t’,然后按下 RET。 参数 require-matcht,且唯一以该输入开头的缓冲区名为 ‘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"
User Option: read-buffer-function

如果该变量非 nil,则指定一个用于读取缓冲区名称的函数。 read-buffer 会调用该函数而非执行自身的常规逻辑, 并将传入 read-buffer 的相同参数传递给它。

User Option: read-buffer-completion-ignore-case

如果该变量非 nilread-buffer 在读取缓冲区名称并执行补全时忽略大小写。

Function: read-command prompt &optional default

该函数读取一个命令的名称并以 Lisp 符号形式返回。 参数 prompt 的用法与 read-from-minibuffer 中相同。 回忆一下:命令是指 commandp 返回 t 的任何对象, 命令名是指 commandp 返回 t 的符号。See 交互式调用

参数 default 指定用户输入空内容时返回的值。 它可以是符号、字符串或字符串列表。 如果是字符串,read-command 会在返回前将其 intern。 如果是列表,read-command 会将列表第一个元素 intern。 如果 defaultnil,表示未指定默认值; 此时若用户输入空内容,返回值为 (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-commandcompleting-read 的简化接口。 它使用变量 obarray 在当前所有 Lisp 符号中进行补全, 并使用 commandp 作为谓词,只接受命令名:

(read-command prompt)
≡
(intern (completing-read prompt obarray
                         'commandp t nil))
Function: read-variable prompt &optional default

该函数读取一个可自定义变量的名称并以符号形式返回。 其参数形式与 read-command 相同。 行为也与 read-command 类似,区别仅在于它使用谓词 custom-variable-p 而非 commandp

Command: read-color &optional prompt convert allow-empty display foreground face

该函数读取一个表示颜色规格的字符串,可以是颜色名或类似 #RRRGGGBBB 的 RGB 十六进制值。 它以 prompt 作为提示(默认:"Color (name or #RGB triplet):"), 并为颜色名提供补全,但不为 RGB 十六进制值提供补全。 除标准颜色名外,补全候选还包括光标处的前景色和背景色。

合法的 RGB 值格式见 Color Names

函数返回值是用户在小缓冲区中输入的字符串。 但是,当交互式调用或可选参数 convertnil 时, 它会将输入的颜色名转换为对应的 RGB 值字符串并返回该值。 该函数要求输入合法的颜色规格。 当 allow-emptynil 且用户输入空内容时,允许空颜色名。

交互式调用或 displaynil 时,返回值也会在回显区显示。

可选参数 foregroundface 控制 *Completions* 缓冲区中 补全候选的显示外观。候选以指定的 face 显示,但颜色不同: 如果 foregroundnil,前景色设为候选对应的颜色, 否则将背景色设为候选对应的颜色。

另请参见 User-Chosen Coding Systems 中的 read-coding-systemread-non-nil-coding-system,以及 Input Methods 中的 read-input-method-name


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike