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 之后的两个参数(即 start 与 end)绑定到光标与标记的位置。该参数本身运行正常。)