append-to-buffer的概述append-to-buffer命令使用insert-buffer-substring函数来复制区域。insert-buffer-substring的名称已经解释了它的功能:它从一个缓冲区中取出子字符串,然后插入到另一个缓冲区中。
大部分append-to-buffer涉及设置insert-buffer-substring工作条件:代码必须指定文本将进入的缓冲区,它来自的窗口以及它要去的窗口,以及将被复制的区域。
下面是该函数的可能实现:
(defun append-to-buffer (buffer start end) "将区域的文本附加到指定缓冲区。 它插入到该缓冲区的点之前。
在从程序调用时,提供三个参数:
BUFFER(或缓冲区名称),START和END。
START和END指定要复制的当前缓冲区的部分。"
(interactive
(list (read-buffer "追加到缓冲区:" (other-buffer
(current-buffer) t))
(region-beginning) (region-end)))
(let ((oldbuf (current-buffer)))
(save-excursion
(let* ((append-to (get-buffer-create buffer))
(windows (get-buffer-window-list append-to t t))
point)
(set-buffer append-to)
(setq point (point))
(barf-if-buffer-read-only)
(insert-buffer-substring oldbuf start end)
(dolist (window windows)
(when (= (window-point window) point)
(set-window-point window (point))))))))
通过查看该函数,可以理解它是一系列填充模板。
最外层模板是函数定义。在这个函数中,它看起来像这样(填充了几个槽):
(defun append-to-buffer (buffer start end) "文档…" (interactive …) 主体…)
函数的第一行包括其名称和三个参数。这些参数是文本将要复制到的buffer,以及将要复制的当前缓冲区的start和end。
函数的下一部分是文档,非常清晰而完整。按照惯例,这三个参数以大写字母写入,以便您轻松注意到它们。更好的是,它们按照参数列表中的顺序进行描述。
请注意文档区分了缓冲区和其名称。(该函数可以处理任何一种。)