我在 Arch 上使用 alacritty 0.11.0 (8dbaa0bb)。
默认TERM
类型是alacritty
,它适用于除终端 emacs 之外的所有内容(真彩色等)。在终端中,emacs 不显示原色。
但是,如果我export TERM=alacritty-direct
那么一切,包括 emacs,都可以正常工作 AFAICT。
alacritty-direct
什么时候应该使用它的目的是什么?
我现在有这个.zshrc
[[ "${TERM}" == "alacritty" ]] && export TERM=alacritty-direct
的目的
$TERM
是通知程序有关终端据称支持的内容。终端的实际功能不会改变(它始终支持直接颜色),但是许多程序(例如 Emacs)会查看 $TERM 并查询关联的“terminfo”数据库以确定它们是否应该使用直接颜色模式。因此,当您希望此类程序能够检测直接颜色模式时,您应该将 TERM 设置为“alacritty-direct”。
(理想情况下,您的终端本身应该将 TERM 设置为您想要的值,这样即使要求终端直接启动非 shell 程序,它也会生效,但是如果您只以“正常”方式使用终端,那么您的 ~/.zshrc 条目可能已经足够好了。)
您可以使用
infocmp [-L] <name>
打印特定终端的 terminfo 数据库条目,或指定两个名称让 infocmp 比较它们。您会看到 alacritty 的两个条目主要在属性(“set_a_background”和“set_a_foreground”)setaf
上有所不同setab
。当然,有许多程序不使用 terminfo,而是基于 $TERM 进行硬编码假设(例如,它们可能嵌入了 TERM=alacritty 已经表示直接颜色支持的假设),甚至是那些无条件输出直接颜色序列的程序,在这种情况下,'alacritty' 和 'alacritty-direct' 值之间不会有明显的影响——同样,$TERM 值实际上不会使终端失去支持。
例如,在 Vim 中,通常手动
set termguicolors
使其使用直接颜色模式,而不管 $TERM 指示什么,或者直接设置各种t_*
变量(对应于 'termcap' 参数 - terminfo 的前身仍在 BSD 系统中找到)。