我在 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
答案1
的目的$TERM
是告知程序关于终端所支持的内容。终端的实际功能不会改变(它始终支持直接颜色),但许多程序(如 Emacs)会查看 $TERM 并查询相关的“terminfo”数据库,以确定它们是否应该是否使用直接彩色模式。
因此,当您希望此类程序能够检测直接色彩模式时,应将 TERM 设置为“alacritty-direct”。
(理想情况下,您的终端本身应该将 TERM 设置为您想要的值,这样即使要求终端直接启动非 shell 程序时它也会有效,但如果您只以“正常”方式使用终端,那么您的 ~/.zshrc 条目可能足够了。)
您可以使用infocmp [-L] <name>
打印特定终端的 terminfo 数据库条目,或指定两个名称让 infocmp 进行比较。您会发现 alacritty 的两个条目主要在属性方面不同setaf
(setab
“set_a_background”和“set_a_foreground”)。
$ infocmp -L alacritty alacritty-direct
comparing alacritty to alacritty-direct.
comparing booleans.
can_change: T:F.
comparing numbers.
max_colors: 256, 16777216.
comparing strings.
initialize_color: '\E]4;%p1%d;rgb\072%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\',
NULL.
orig_colors: '\E]104^G', NULL.
reset_1string: '\Ec\E]104^G', '\Ec'.
set_a_background: '\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m',
'\E[%?%p1%{8}%<%t4%p1%d%e48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%d%;m'.
set_a_foreground: '\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m',
'\E[%?%p1%{8}%<%t3%p1%d%e38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%d%;m'.
当然,有许多程序不使用 terminfo,而是根据 $TERM 做出硬编码假设(例如,它们可能嵌入了 TERM=alacritty 已经表示支持直接颜色的假设),甚至无条件输出直接颜色序列的程序,在这种情况下,'alacritty' 和 'alacritty-direct' 值之间不会有明显的效果——同样,$TERM 值实际上不会使终端失去支持。
例如,在 Vim 中,通常手动set termguicolors
让其使用直接彩色模式,而不管 $TERM 指示什么,或者直接设置各种t_*
变量(对应于“termcap”参数 - 在 BSD 系统上仍然可以找到的 terminfo 的前身)。