8.1.2 zap-to-char 函数体

zap-to-char 的函数体包含删除光标当前位置到指定字符(含该字符)之间文本的代码。

代码第一部分如下:

(if (char-table-p translation-table-for-input)
    (setq char (or (aref translation-table-for-input char) char)))
(kill-region (point) (progn
                       (search-forward (char-to-string char) nil nil arg)
                       (point)))

char-table-p 是之前未见过的函数,用于判断参数是否为字符表。如果是,则将传入 zap-to-char 的字符替换为字符表中对应的字符(若存在),否则保持原字符不变。(这对非欧洲语言的某些字符很重要。aref 函数从数组中提取元素,是数组专用函数,本文档不做详细介绍。See Arrays in The GNU Emacs Lisp Reference Manual。)

(point) 表示光标当前位置。

代码下一部分使用了 progn 表达式,其主体包含对 search-forwardpoint 的调用。

先理解 search-forward 更容易掌握 progn 的用法,因此我们先讲解 search-forward,再介绍 progn