22.2.2 interactive 的代码字符

下面的代码字符说明中包含若干关键词,其定义如下:

补全(Completion)

提供补全功能。TAB、SPC 和 RET 执行名称补全, 因为参数是通过 completing-read 读取的(see 补全)。 ? 显示可能的补全列表。

已存在(Existing)

要求输入已有对象的名称。不接受无效名称; 如果当前输入不合法,退出小缓冲的命令不会生效。

默认值(Default)

如果用户在小缓冲中未输入任何内容,则使用某种默认值。 默认值取决于代码字符。

无输入输出(No I/O)

该代码字符不读取任何输入即可计算出参数。 因此,它不使用提示字符串,你提供的任何提示字符串都会被忽略。

即使该代码字符不使用提示字符串,如果它不是字符串中的最后一个代码字符, 你仍必须在其后跟随一个换行符。

提示(Prompt)

代码字符后紧跟提示信息。提示在字符串结束或换行符处结束。

特殊(Special)

该代码字符仅在交互式字符串开头有意义,且不寻找提示或换行符。 它是一个单独的、独立的字符。

以下是可用于 interactive 的代码字符说明:

‘*’

如果当前缓冲区为只读,则发出错误信号。特殊。

‘@’

选中调用该命令的按键序列中第一个鼠标事件所对应的窗口。特殊。

‘^’

如果命令是通过 Shift 转换调用的,则在运行命令前设置标记并临时激活区域, 或扩展已激活的区域。 如果命令不是通过 Shift 转换调用,且区域处于临时激活状态, 则在运行命令前取消激活区域。特殊。

‘a’

函数名(即满足 fboundp 的符号)。已存在、补全、提示。

‘b’

已有缓冲区的名称。默认使用当前缓冲区的名称(see 缓冲区)。 已存在、补全、默认值、提示。

‘B’

缓冲区名称。缓冲区不必存在。默认使用当前缓冲区以外最近使用的缓冲区名称。 补全、默认值、提示。

‘c’

字符。光标不会移入回显区。提示。

‘C’

命令名(即满足 commandp 的符号)。已存在、补全、提示。

‘d’

光标位置,以整数表示(see 光标位置)。无输入输出(No I/O)。

‘D’

目录。默认值为当前缓冲区的当前默认目录 default-directory(see 文件名展开相关函数)。 已存在、补全、默认值、提示。

‘e’

调用该命令的按键序列中的第一个或下一个非键盘事件。 更精确地说,‘e’ 获取列表形式的事件,因此你可以查看列表中的数据。 See 输入事件。无输入输出。

‘e’ 用于鼠标事件和特殊系统事件(see 其他系统事件)。 命令接收的事件列表取决于具体事件。 See 输入事件 在对应小节中描述了每种事件的列表形式。

你可以在单个命令的交互式声明中多次使用 ‘e’。 如果调用该命令的按键序列中有 n 个列表形式的事件, 则第 n 个 ‘e’ 提供第 n 个此类事件。 非列表形式的事件(如功能键和 ASCII 字符)不计入 ‘e’ 所关注的事件。

‘f’

已有文件的文件名(see 文件名)。 关于默认值的细节参见 See 读取文件名。 已存在、补全、默认值、提示。

‘F’

文件名。文件不必存在。补全、默认值、提示。

‘G’

文件名。文件不必存在。如果用户只输入目录名,则返回值就是该目录名, 不会在目录后附加文件名。补全、默认值、提示。

‘i’

无关参数。该代码总是提供 nil 作为参数值。无输入输出。

‘k’

按键序列(see 按键序列)。 它会持续读取事件,直到在当前按键映射中找到一个命令(或未定义命令)。 按键序列参数以字符串或向量表示。光标不会移入回显区。提示。

如果 ‘k’ 读取的按键序列以按下事件结束, 它还会读取并丢弃随后的释放事件。 你可以使用 ‘U’ 代码字符获取该释放事件。

这类输入用于 describe-key 和 keymap-global-set 等命令。

‘K’

可用于 keymap-set 等函数的按键序列形式。 工作方式与 ‘k’ 类似,区别在于它会对按键序列中的最后一个输入事件 禁止通常用于(必要时)将未定义按键转换为已定义按键的转换(see 读取按键序列)。 因此该形式通常用于提示输入要绑定到命令的新按键序列。

‘m’

标记位置,以整数表示。无输入输出。

‘M’

任意文本,在小缓冲中使用当前缓冲区的输入法读取,并以字符串返回(see Input Methods in The GNU Emacs Manual)。提示。

‘n’

数字,在小缓冲中读取。如果输入不是数字,用户必须重新输入。 ‘n’ 从不使用前缀参数。提示。

‘N’

数字前缀参数;但如果没有前缀参数,则像 n 一样读取数字。 值始终为数字。See 前缀命令参数。提示。

‘p’

数字前缀参数。(注意此 ‘p’ 为小写。)无输入输出。

‘P’

原始前缀参数。(注意此 ‘P’ 为大写。)无输入输出。

‘r’

光标和标记,作为两个数值参数,较小者在前。 这是唯一指定连续两个参数而非一个参数的代码字母。 如果调用命令时当前缓冲区未设置标记,将会发出错误信号。 如果临时标记模式已开启(see 标记点) — 默认即为开启 — 且用户选项 mark-even-if-inactive 为 nil, 即使标记已设置但未激活,Emacs 也会发出错误信号。无输入输出。

‘s’

任意文本,在小缓冲中读取并以字符串返回(see 使用迷你缓冲区读取文本字符串)。 使用 C-j 或 RET 结束输入。 (可使用 C-q 将这两个字符之一包含到输入中。)提示。

‘S’

名称在小缓冲中读取的已 intern 符号。 使用 C-j 或 RET 结束输入。 其他通常用于结束符号的字符(如空白、圆括号和方括号)在此处不结束输入。提示。

‘U’

按键序列或 nil。 可在 ‘k’ 或 ‘K’ 参数之后使用, 以获取 ‘k’ 或 ‘K’ 读取按下事件后被丢弃的释放事件(如果有)。 如果没有丢弃释放事件,‘U’ 提供 nil 作为参数。无输入输出。

‘v’

声明为用户选项的变量(即满足谓词 custom-variable-p)。 通过 read-variable 读取该变量。See Definition of read-variable。 已存在、补全、提示。

‘x’

Lisp 对象,以其读取语法指定,以 C-j 或 RET 结束。 该对象不会被求值。See 使用迷你缓冲读取 Lisp 对象。提示。

‘X’

Lisp 形式的值。‘X’ 读取方式与 ‘x’ 相同, 然后对该形式求值,使其值成为命令的参数。提示。

‘z’

编码系统名称(符号)。如果用户输入空内容,参数值为 nil。 See 编码系统。补全、已存在、提示。

‘Z’

编码系统名称(符号)——但仅当该命令有前缀参数时有效。 如果没有前缀参数,‘Z’ 提供 nil 作为参数值。 补全、已存在、提示。