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 只用于产生副作用(插入另一个缓冲区的内容),而不返回有意义的值。