寄存器是 Emacs 编辑中使用的一种特殊变量,可存储多种不同类型的值。每个寄存器由单个字符命名,所有 ASCII 字符及其元变体(C-g 除外)均可作为寄存器名称,因此共有 255 个可用寄存器。在 Emacs Lisp 中,寄存器由其名称对应的字符标识。
该变量是一个关联列表,元素格式为 (name . contents)。通常,每个已使用的 Emacs 寄存器对应列表中的一个元素。
其中 name 是标识寄存器的字符(整数类型)。
寄存器的 contents(内容)可包含以下几种类型:
数字直接表示其本身。若 insert-register 发现寄存器中存储的是数字,会将其转换为十进制形式。
标记代表一个可跳转至的缓冲区位置。
字符串是保存在寄存器中的文本内容。
矩形由字符串列表表示。
(window-configuration position)该类型表示需恢复的单个框架的窗口配置,以及当前缓冲区中需跳转至的位置。
(frame-configuration position) ¶该类型表示需恢复的框架配置,以及当前缓冲区中需跳转至的位置。框架配置也被称为框架集(framesets)。
(file filename)该类型表示需访问的文件;跳转到该值时会打开文件 filename。
(file-query filename position)该类型表示需访问的文件及其内部位置;跳转到该值时会打开文件 filename 并定位到缓冲区位置 position。恢复此类位置时会先请求用户确认。
(buffer buffer-name)该类型表示一个缓冲区;跳转到该值时会切换至缓冲区 buffer-name。
除非另有说明,本节中的函数返回值均无固定规律。
该函数返回寄存器 reg 的内容;若寄存器无内容,则返回 nil。
该函数将寄存器 reg 的内容设置为 value。寄存器可被设置为任意值,但其他寄存器函数仅支持特定的数据类型。函数返回值为 value。
该命令显示寄存器 reg 中存储的内容。
该命令将寄存器 reg 的内容插入到当前缓冲区中。
默认情况下,该命令会将点置于插入文本之前,标记置于文本之后。但若可选的第二个参数 beforep 非 nil,则会将标记置于文本之前,点置于文本之后。
以交互方式调用时,命令默认将点置于文本之后;若传入前缀参数,则反转此行为。
若寄存器中存储的是矩形,则该矩形会以其左上角为点的位置插入,即文本会插入到当前行及后续各行的对应位置。
若寄存器中存储的既非保存的文本(字符串)也非矩形(列表),当前会执行无实际意义的操作,此行为可能在未来版本中调整。
该函数读取并返回寄存器名称,以 prompt 提示用户输入,并可能显示现有寄存器及其内容的预览信息。若用户选项 register-preview-delay 的值和 register-alist 均非 nil,则会在该选项指定的延迟时间后,在临时窗口中显示预览。用户请求帮助时(例如输入帮助字符)也会触发预览。我们建议所有读取寄存器名称的交互式命令均使用此函数。