43.1.3 终端专用初始化

每种终端类型都可以拥有专属的 Lisp 库,Emacs 会在运行该类型终端时加载它。 库的名称由变量 term-file-prefix 的值与终端类型(由环境变量 TERM 指定) 拼接而成。通常情况下,term-file-prefix 的值为 "term/"; 不建议修改该值。如果 term-file-aliases 关联列表中存在匹配 TERM 的条目,Emacs 会使用关联值替代 TERM。 Emacs 按照常规方式查找文件,通过搜索 load-path 目录, 并尝试 ‘.elc’ 和 ‘.el’ 后缀。

终端专用库的常规作用是让特殊按键发送 Emacs 可识别的字符序列。 如果终端功能库或终端信息条目未指定终端的所有功能按键,库可能还需要 设置或补充 input-decode-map。See 终端输入

当终端类型名称包含连字符或下划线,且未找到名称与终端名称完全一致的库时, Emacs 会从终端名称中剔除最后一个连字符或下划线及其后续所有内容, 然后重新尝试。该过程会重复执行,直到 Emacs 找到匹配的库, 或名称中不再包含连字符/下划线(即不存在终端专用库)。 例如,若终端名称为 ‘xterm-256color’,且不存在 term/xterm-256color.el 库,Emacs 会尝试加载 term/xterm.el。如有需要,终端库可以执行 (getenv "TERM") 来获取终端类型的完整名称。

你可以在初始化文件中将变量 term-file-prefix 设置为 nil, 阻止 Emacs 加载终端专用库。

你还可以通过 tty-setup-hook 覆盖终端专用库的部分操作。 这是一个常规钩子,Emacs 会在初始化新的文本终端后运行它。 你可以使用该钩子为没有专属库的终端定义初始化逻辑。See 钩子

User Option: term-file-prefix

如果该变量的值为非 nil,Emacs 会按照以下方式加载终端专用初始化文件:

(load (concat term-file-prefix (getenv "TERM")))

如果你不希望加载终端初始化文件,可以在初始化文件中将 term-file-prefix 变量设置为 nil

在 MS-DOS 系统中,Emacs 会将 TERM 环境变量设置为 ‘internal’。

User Option: term-file-aliases

该变量是一个关联列表,用于将终端类型映射到其别名。 例如,格式为 ("vt102" . "vt100") 的条目表示将 ‘vt102’ 类型终端按照 ‘vt100’ 类型处理。

Variable: tty-setup-hook

该变量是一个常规钩子,Emacs 会在初始化新的文本终端后运行它。 (该机制适用于 Emacs 以非图形化模式启动,以及建立 tty emacsclient 连接时。) 该钩子会在加载你的初始化文件(如适用)和终端专用 Lisp 文件后运行, 因此你可以用它调整上述文件定义的配置。

相关功能请参考 see window-setup-hook