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
。
函数的下一部分是文档,非常清晰而完整。按照惯例,这三个参数以大写字母写入,以便您轻松注意到它们。更好的是,它们按照参数列表中的顺序进行描述。
请注意文档区分了缓冲区和其名称。(该函数可以处理任何一种。)