每种终端类型都可以拥有专属的 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 钩子。
如果该变量的值为非 nil,Emacs 会按照以下方式加载终端专用初始化文件:
(load (concat term-file-prefix (getenv "TERM")))
如果你不希望加载终端初始化文件,可以在初始化文件中将
term-file-prefix 变量设置为 nil。
在 MS-DOS 系统中,Emacs 会将 TERM 环境变量设置为 ‘internal’。
该变量是一个关联列表,用于将终端类型映射到其别名。
例如,格式为 ("vt102" . "vt100") 的条目表示将
‘vt102’ 类型终端按照 ‘vt100’ 类型处理。
该变量是一个常规钩子,Emacs 会在初始化新的文本终端后运行它。
(该机制适用于 Emacs 以非图形化模式启动,以及建立 tty emacsclient 连接时。)
该钩子会在加载你的初始化文件(如适用)和终端专用 Lisp 文件后运行,
因此你可以用它调整上述文件定义的配置。
相关功能请参考 see window-setup-hook。