何时应将 TERM 设置为 alacritty-direct

何时应将 TERM 设置为 alacritty-direct

我在 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 的两个条目主要在属性方面不同setafsetab“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 的前身)。

相关内容