4.4.1 append-to-buffer 的交互式表达式

由于 append-to-buffer 可交互式使用,函数必须包含 interactive 表达式。(如需回顾 interactive,参见 Making a Function Interactive。)

该表达式如下:

(interactive
 (list (read-buffer
        "Append to buffer: "
        (other-buffer (current-buffer) t))
       (region-beginning)
       (region-end)))

该表达式并非之前介绍的使用字母表示各部分的形式,而是以一个列表开头,包含以下内容:

列表第一部分是读取缓冲区名并返回字符串的表达式,即 read-buffer。该函数的第一个参数为提示符 ‘"Append to buffer: "’。第二个参数指定用户未输入时的默认值。

本例中第二个参数是一个表达式,包含函数 other-buffer、一个例外项与代表真的 ‘t’。

other-buffer 的第一个参数(例外项)是另一个函数 current-buffer,该缓冲区不会被返回。第二个参数为真符号 t,告知 other-buffer 可以显示可见缓冲区(本例中不会显示当前缓冲区,这一设计合理)。

该表达式如下:

(other-buffer (current-buffer) t)

列表表达式的第二个与第三个参数为 (region-beginning)(region-end)。这两个函数指定要追加文本的起始与结束位置。

最初该命令使用字母 ‘B’ 与 ‘r’。完整的 interactive 表达式如下:

(interactive "BAppend to buffer: \nr")

但这样写会导致切换目标缓冲区的默认值不可见,不符合预期。

(提示符与第二个参数之间使用换行符 ‘\n’ 分隔,后跟 ‘r’,告知 Emacs 将函数参数列表中 buffer 之后的两个参数(即 startend)绑定到光标与标记的位置。该参数本身运行正常。)