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-forward 和 point 的调用。
先理解 search-forward 更容易掌握 progn 的用法,因此我们先讲解 search-forward,再介绍 progn。