last-commandthis-command

通常情况下,每当执行函数时,Emacs将this-command的值设置为正在执行的函数(在本例中将是copy-region-as-kill)。同时,Emacs将last-command的值设置为this-command的先前值。

copy-region-as-kill函数的主体的第一部分中,一个if表达式确定last-command的值是否为kill-region。如果是,if表达式的then-part将被评估;它使用kill-append函数将此次调用函数时复制的文本与kill环的第一个元素(CAR)中已有的文本连接起来。另一方面,如果last-command的值不是kill-region,那么copy-region-as-kill函数将使用kill-new函数将一个新元素附加到kill环中。

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函数,因为它用于测试相等性,但不同之处在于它确定两个表示实际上是计算机内部相同对象,只是具有不同的名称。equal确定两个表达式的结构和内容是否相同。

如果先前的命令是kill-region,则Emacs Lisp解释器调用kill-append函数。