控制字符可以使用另一种读取语法来表示。它由问号、反斜杠、脱字符 ‘^’ 以及对应的非控制字符组成,字母大小写均可。例如,‘?\^I’ 和 ‘?\^i’ 都是字符 C-i(值为 9)的合法读取语法。
你也可以用 ‘C-’ 代替 ‘^’,因此 ‘?\C-i’ 等价于 ‘?\^I’ 和 ‘?\^i’:
?\^I ⇒ 9 ?\C-I ⇒ 9
在字符串和缓冲区中,只允许使用 ASCII 中存在的控制字符;但在键盘输入场景下,你可以通过 ‘C-’ 将任意字符变成控制字符。这类非-ASCII 控制字符的编码,会在对应非控制字符编码的基础上,加上 2**26 这一位。并非所有文本终端都能生成非-ASCII 控制字符,但在 X 窗口系统及其他窗口系统下可以很方便地生成。
由于历史原因,Emacs 将 DEL 字符视为 ? 的控制等价字符:
?\^? ⇒ 127 ?\C-? ⇒ 127
因此,目前无法通过 ‘\C-’ 来表示 Control-? 这个在 X 窗口系统下有实际意义的输入字符。想要修改这一点并不容易,因为很多 Lisp 文件都以这种方式引用 DEL。
对于表示文件或字符串中的控制字符,我们推荐使用 ‘^’ 语法;对于键盘输入中的控制字符,更推荐使用 ‘C-’ 语法。使用哪种写法不会影响程序含义,但会帮助阅读代码的人更好地理解意图。