33.21 寄存器

寄存器是 Emacs 编辑中使用的一种特殊变量,可存储多种不同类型的值。每个寄存器由单个字符命名,所有 ASCII 字符及其元变体(C-g 除外)均可作为寄存器名称,因此共有 255 个可用寄存器。在 Emacs Lisp 中,寄存器由其名称对应的字符标识。

Variable: register-alist

该变量是一个关联列表,元素格式为 (name . contents)。通常,每个已使用的 Emacs 寄存器对应列表中的一个元素。

其中 name 是标识寄存器的字符(整数类型)。

寄存器的 contents(内容)可包含以下几种类型:

数字

数字直接表示其本身。若 insert-register 发现寄存器中存储的是数字,会将其转换为十进制形式。

标记(marker)

标记代表一个可跳转至的缓冲区位置。

字符串

字符串是保存在寄存器中的文本内容。

矩形

矩形由字符串列表表示。

(window-configuration position)

该类型表示需恢复的单个框架的窗口配置,以及当前缓冲区中需跳转至的位置。

(frame-configuration position)

该类型表示需恢复的框架配置,以及当前缓冲区中需跳转至的位置。框架配置也被称为框架集(framesets)

(file filename)

该类型表示需访问的文件;跳转到该值时会打开文件 filename

(file-query filename position)

该类型表示需访问的文件及其内部位置;跳转到该值时会打开文件 filename 并定位到缓冲区位置 position。恢复此类位置时会先请求用户确认。

(buffer buffer-name)

该类型表示一个缓冲区;跳转到该值时会切换至缓冲区 buffer-name

除非另有说明,本节中的函数返回值均无固定规律。

Function: get-register reg

该函数返回寄存器 reg 的内容;若寄存器无内容,则返回 nil

Function: set-register reg value

该函数将寄存器 reg 的内容设置为 value。寄存器可被设置为任意值,但其他寄存器函数仅支持特定的数据类型。函数返回值为 value

Command: view-register reg

该命令显示寄存器 reg 中存储的内容。

Command: insert-register reg &optional beforep

该命令将寄存器 reg 的内容插入到当前缓冲区中。

默认情况下,该命令会将点置于插入文本之前,标记置于文本之后。但若可选的第二个参数 beforepnil,则会将标记置于文本之前,点置于文本之后。

以交互方式调用时,命令默认将点置于文本之后;若传入前缀参数,则反转此行为。

若寄存器中存储的是矩形,则该矩形会以其左上角为点的位置插入,即文本会插入到当前行及后续各行的对应位置。

若寄存器中存储的既非保存的文本(字符串)也非矩形(列表),当前会执行无实际意义的操作,此行为可能在未来版本中调整。

Function: register-read-with-preview prompt

该函数读取并返回寄存器名称,以 prompt 提示用户输入,并可能显示现有寄存器及其内容的预览信息。若用户选项 register-preview-delay 的值和 register-alist 均非 nil,则会在该选项指定的延迟时间后,在临时窗口中显示预览。用户请求帮助时(例如输入帮助字符)也会触发预览。我们建议所有读取寄存器名称的交互式命令均使用此函数。