34.11 输入法

输入法(Input methods) 提供了从键盘输入非 ASCII 字符的便捷方式。 编码系统的作用是在程序可读的编码与非 ASCII 字符之间进行转换, 而输入法与此不同,它提供更符合人类使用习惯的输入方式。 (关于用户如何使用输入法输入文字,参见 See Input Methods in The GNU Emacs Manual。) 如何定义输入法尚未在本手册中说明,但本节会介绍如何使用它们。

每个输入法都有一个名称,目前为字符串类型; 未来符号类型也可能被用作输入法名称。

Variable: current-input-method

该变量保存当前缓冲区中激活的输入法名称。 (无论以何种方式设置,它在每个缓冲区中都会自动变为局部变量。) 如果当前缓冲区未激活任何输入法,其值为 nil

User Option: default-input-method

该变量保存选择输入法相关命令所使用的默认输入法。 与 current-input-method 不同,该变量通常是全局的。

Command: set-input-method input-method

该命令为当前缓冲区激活 input-method 输入法。 它同时会将 default-input-method 设置为 input-method。 如果 input-methodnil,该命令会关闭当前缓冲区的所有输入法。

Function: read-input-method-name prompt &optional default inhibit-null

该函数通过迷你缓冲区读取一个输入法名称,提示信息为 prompt。 如果 defaultnil,用户输入为空时将返回该默认值。 但如果 inhibit-nullnil,空输入会触发错误。

返回值为字符串类型。

Variable: input-method-alist

该变量定义了所有支持的输入法。 每个元素对应一个输入法,格式如下:

(input-method language-env activate-func
 title description args...)

其中 input-method 是输入法名称,为字符串; language-env 也是字符串,表示该输入法推荐使用的语言环境名称(仅用于文档说明)。

activate-func 是激活该输入法时调用的函数。 args(如果有)会作为参数传递给 activate-func。 最终传给 activate-func 的参数依次为 input-methodargs

title 是该输入法激活时显示在模式行上的字符串。 description 是描述该输入法及其用途的字符串。

输入法的底层接口通过变量 input-method-function 实现。 See 读取单个事件,以及 调用输入法