last-command 与 this-command ¶通常,每当函数执行时,Emacs 都会将
this-command 设置为当前执行的函数
(此处即为 copy-region-as-kill)。
同时,Emacs 会将 last-command
设置为 this-command 之前的值。
在 copy-region-as-kill 函数体开头,
一个 if 表达式判断 last-command
是否为 kill-region。若是,
则执行 if 的 then 分支:调用 kill-append
将本次复制的文本与删除环第一个元素(CAR)
中的已有文本拼接。反之,若 last-command
不是 kill-region,则 copy-region-as-kill
通过 kill-new 向删除环添加一个新元素。
该 if 表达式如下,使用了 eq:
(if (eq last-command 'kill-region)
;; then-part
(kill-append (filter-buffer-substring beg end) (< end beg))
;; else-part
(kill-new (filter-buffer-substring beg end)))
(filter-buffer-substring 函数会返回缓冲区中
经过过滤的子串(如有)。该函数可选地删除原文本
或返回不带属性的文本,但此处未使用相关参数,因此均不执行。
该函数用于替代较早的 buffer-substring,
后者出现于文本属性功能之前。)
eq 函数用于判断两个参数是否为同一个 Lisp 对象。
eq 与 equal 类似,都用于判断相等,
但区别在于:eq 判断两个表示是否为计算机内
完全相同的对象(仅名称不同);
而 equal 判断两个表达式的结构与内容是否相同。
若上一条命令是 kill-region,
Emacs Lisp 解释器就会调用 kill-append 函数。