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,以及将要复制的当前缓冲区的startend

函数的下一部分是文档,非常清晰而完整。按照惯例,这三个参数以大写字母写入,以便您轻松注意到它们。更好的是,它们按照参数列表中的顺序进行描述。

请注意文档区分了缓冲区和其名称。(该函数可以处理任何一种。)