xterm-color和xterm-256color之间有什么区别?

39

在尝试设置终端程序使用颜色时,我遇到了xterm-colorxterm-256color这两个选项 - 也就是说,您可以将您的TERM环境变量设置为其中之一。 我想知道有人能描述一下这两者之间的区别吗?

我已经在我的Ubuntu服务器和Mac上搜索了文档,但没有找到任何内容。 我只能在/usr/share/terminfo目录下找到各种二进制文件。


你可以自己确定你的终端是否支持256种颜色 - Franklin Yu
3个回答

57

xterm-256color 是启用了支持 256 种颜色的 Xterm 终端。而 xterm-color 则是支持 8 种颜色的 Xterm 的旧版本。由于 xterm-color 描述的是一个功能较少且不太可能使用的 Xterm 变体,因此不建议使用它。通常情况下,您会希望使用 xtermxterm-16colorxterm-256color

特别地,xterm-256color 是从 Mac OS X 10.7 Lion 开始终端默认的值,其次推荐使用的值为 xterm-16colorxterm(仅支持 8 种 ANSI 颜色)。在 10.7 之前,xterm-color 是默认值,因为终端不支持推荐的 Xterm terminfo 值中描述的某些关键功能,例如背景颜色擦除(BCE)、现代代码用于切换主/备用屏幕和支持 256 种颜色等。

有时人们会明确将 TERM 设置为 xterm-color(而不是推荐的 Xterm 值),以禁用功能或解决特定计算机上可用的 terminfo 值与终端仿真器之间的不兼容性问题。

请注意,从技术上讲,终端应该具有自己的最新的 terminfo 值,以准确描述其支持的功能,而不是使用 Xterm 的值。但是:

  1. 目前还没有最新的值可用。 nsterm 表示来自 NeXTSTEP 的终端祖先。显然,有人最近更新了 nsterm(在过去的几年中),但我不知道这是否已经纳入了 ncurses 发行版中,并且它可能与 10.7 中的终端不完全兼容。
  2. 许多程序和 shell 自定义脚本明确检查是否 $TERM 以(或等于)xterm 开头。因此,某些用户仍需要了解在终端中使用推荐的 Xterm 值以实现与这些值的兼容性。
如果您对terminfo系统不熟悉,请查看x-man-page://5/terminfo手册页面。此外,您可以使用infocmp命令查看当前的terminfo设置或比较两个不同的设置,例如,infocmp xterm-color xterm-256color将显示这两者之间的所有差异。

有些是错误的:xterm-color 一直都只有8种颜色。nsterm 在不同版本中自2001年以来一直存在于ncurses中(但由于苹果没有提供文档,这取决于其他人调查和更新ncurses)。苹果的ncurses副本自5.7(2008)以来就没有更新过。 - Thomas Dickey
1
@ThomasDickey:谢谢。我已经更正了xterm-color声明的颜色数量。我一定是在某个地方误读了颜色数量。顺便说一下,关于Xterm,我总是听从您的意见——您通常是我的信息来源。 - Chris Page

8
似乎在OS/X上,xterm-256color是Terminal.app终端。它们之间的差异并不小 - 我在Ubuntu上使用infocmp比较了xterm-colorxterm-256color,并对其进行了归一化处理,发现有很多差异。我甚至可以说xterm-256color不再是xterm了。
通常情况下,当您使用特定的终端模拟器时,您需要“知道”哪个terminfo条目与其最佳匹配。它们是一对匹配项,尽管有时您可以在vt220终端上使用vt100 terminfo 条目。
好处是,几乎所有东西都与vt100兼容。

“我甚至可能会说,xterm-256color 已经不再是真正的xterm了。”你的意思不只是指 Xterm,因为现在有许多流行的终端模拟器也支持了同样的一些特性? - Chris Page
但是“许多相同的功能”并不等同于“全部”(甚至不是“大多数”)。这在ncurses FAQ中有说明。 - Thomas Dickey

3
根据ncurses FAQxterm-color已经过时:

最初,xterm-color对应于20世纪90年代中期的color_xterm。1996年,它被XFree86 xterm所取代。

终端数据库提供了详细信息。它最初被设计为通用终端描述符,但从一开始就没有成功,因为它与XFree86 xterm不匹配,特别是颜色行为(即背景颜色擦除功能)。现在没有人使用nxterm了。

xterm-256color终端描述是通过修改颜色行为(添加更多颜色,但不包括背景颜色擦除功能)从(XFree86)xterm终端描述构建而成。使用infocmp查看区别:

$ infocmp xterm-color xterm-256color |wc -l
122
$ infocmp xterm xterm-256color |wc -l
14
$ infocmp xterm xterm-256color
comparing xterm to xterm-256color.
    comparing booleans.
        ccc: F:T.
    comparing numbers.
        colors: 8, 256.
        pairs: 64, 32767.
    comparing strings.
        initc: NULL, '\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\'.
        oc: NULL, '\E]104\007'.
        rs1: '\Ec', '\Ec\E]104\007'.
        setab: '\E[4%p1%dm', '\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m'.
        setaf: '\E[3%p1%dm', '\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m'.
        setb: '\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m', NULL.
        setf: '\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m', NULL.

因为 xterm-color 已经过时,所以它在很长一段时间内被忽视了,直到某个(匿名的)苹果开发人员决定在终端应用程序中重新使用它(在 10.5 Leopard 中),尽管这并不是一个好的选择。ncurses 中的 nsterm-16color 描述是由某个人(显然是苹果公司之外的人)贡献的,以匹配 10.5 版本中的行为。虽然 xterm-color 使用8种颜色,但 nsterm-16color 使用16种颜色,也许这导致了用户的困惑。无论如何,终端应用程序的终端描述选择对终端应用程序本身没有影响,只会设置 TERM 环境变量,许多应用程序使用该变量来决定如何使用终端。
有趣的是,尽管 MacOS 的许多用户界面来自 BSD,但它的 ncurses 配置并非如此。MacOS 有 tic/infocmp 实用程序,而 BSD 没有(尽管 Apple 已经超过十年没有更新它了:ncurses 5.7 在 2008 年发布)。在 MacOS 的后续版本中,Terminal.app 的开发人员更改了菜单,提供了“xterm-256color”而不是“xterm-color”。但这并没有改善用户体验,因为使用相应终端描述的终端行为仍然不同。ncurses FAQ 中提到:

此外,据报道,Mac OS X 10.7 默认使用 xterm-256color 作为 $TERM 值。这与 xterm-color 有几个不同之处,特别是对 bce 的支持。它还与推荐的 nsterm-256color 不同(infocmp 报告了 111 个差异)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接