5.2.6 insert-buffer 的新主体

GNU Emacs 22 版本中的主体比原始版本更令人困惑。

它包含两个表达式,

  (push-mark
   (save-excursion
     (insert-buffer-substring (get-buffer buffer))
     (point)))

   nil

除外,这是使初学者困惑的地方,push-mark 表达式内部执行了非常重要的工作。

get-buffer 函数返回一个以提供的名称命名的缓冲区。请注意,该函数并被称为 get-buffer-create;如果不存在缓冲区,则不会创建一个。由 get-buffer 返回的缓冲区(已存在的缓冲区)被传递给 insert-buffer-substring,该函数插入整个缓冲区(因为您没有指定其他内容)。

push-mark 记录插入缓冲区的位置。然后,该函数返回 nil,即其最后一条命令的值。换句话说,insert-buffer 函数仅用于产生副作用,即插入另一个缓冲区,而不是返回任何值。