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

由于 append-to-buffer 函数将被交互使用,该函数必须具有一个 interactive 表达式。 (有关 interactive 的详细信息,请参阅 使函数具有交互性。)

表达式如下:

(interactive
 (list (read-buffer
        "追加到缓冲区: "
        (other-buffer (current-buffer) t))
       (region-beginning)
       (region-end)))

该表达式不是一个字母代表部分的表达式,如前所述。相反,它以这些部分开始一个列表:

列表的第一部分是一个表达式,用于读取缓冲区的名称并将其作为字符串返回。那就是 read-buffer。该函数需要一个提示作为其第一个参数,即 ‘"追加到缓冲区: "’。其第二个参数告诉命令如果不指定任何值,应提供什么值。

在这种情况下,第二个参数是一个包含函数 other-buffer、一个异常和 ‘t’ 的表达式,表示为真。

other-buffer 的第一个参数是异常,是另一个函数 current-buffer。这不会被返回。第二个参数是真的符号,即 t。这告诉 other-buffer 它可以显示可见缓冲区(在这种情况下,它将不显示当前缓冲区,这是有道理的)。

表达式如下:

(other-buffer (current-buffer) t)

list 表达式的第二个和第三个参数是 (region-beginning)(region-end)。这两个函数指定要追加的文本的开头和结尾。

最初,该命令使用字母 ‘B’ 和 ‘r’。整个 interactive 表达式如下:

(interactive "B追加到缓冲区: \nr")

但是当这样做时,切换到的缓冲区的默认值变为不可见。这是不想要的。

(提示与第二个参数之间用换行符 ‘\n’ 分隔。它后面跟着一个 ‘r’,告诉 Emacs 将跟随函数参数列表中 buffer 符号后面的两个参数(即 startend)绑定到点和标记的值。这个参数运行良好。)