在尝试将终端程序设置为使用颜色时,我遇到了这两个选项xterm-color
,xterm-256color
即您可以将TERM
环境变量设置为任何一个。
我想知道是否有人可以描述两者之间的区别?
我在我的 Ubuntu 服务器和我的 mac 上搜索了文档,但没有找到任何文档。我只能在/usr/share/terminfo
.
xterm-256color
描述了支持 256 色的 Xterm。xterm-color
描述了支持八种颜色的 Xterm 的旧分支。xterm-color
不推荐使用,因为它描述了 Xterm 的一个变体,它功能较少,而且您不太可能使用。通常你会想要使用xterm
,xterm-16color
或xterm-256color
.
尤其xterm-256color
是从 Mac OS X 10.7 Lion 开始的终端的默认值,次优推荐值为xterm-16color
或xterm
(仅描述对八种 ANSI 颜色的支持)。在 10.7 之前,xterm-color
这是默认设置,因为 Terminal 不支持推荐的 Xterm terminfo 值所描述的一些关键功能,例如,背景颜色擦除 (BCE)、用于切换主/备用屏幕的现代代码、256 色。
有时人们明确设置TERM
为xterm-color
(与推荐的 Xterm 值相反)以禁用功能或解决特定计算机上可用的 terminfo 值与正在使用的终端仿真器之间的不兼容问题。
请注意,从技术上讲,终端应该有自己的最新 terminfo 值,准确描述它支持的功能,而不是使用 Xterm 的值,但是:
nsterm
代表终端在 NeXTSTEP 的祖先。显然有人nsterm
最近更新了(过去几年的某个时候),但我不知道这是否已经进入 ncurses 发行版,而且它可能与 10.7 中的 Terminal 不完全同步。$TERM
以(或等于)开头xterm
。因此,一些用户仍然需要了解如何在终端中使用推荐的 Xterm 值以与这些值兼容。如果您不熟悉 terminfo 系统,请查看 x-man-page://5/terminfo 手册页。此外,您可以使用该infocmp
命令查看当前的 terminfo 设置或比较两个不同的设置,例如,infocmp xterm-color xterm-256color
将显示这两者之间的所有差异。
这似乎xterm-256color
是 OS/X 上的 Terminal.app。差异并不小 - 我在一个 Ubuntu 机器上进行了 infocmp'dxterm-color
并xterm-256color
对其进行了一些标准化,并得到了很多差异。我什至可以说xterm-256color
不再是真正的 xterm 了。
通常,当您使用特定的终端仿真器时,您需要“只知道”哪个 terminfo 条目最适合它。它们是一对匹配的,尽管有时您可以,例如,在 vt220 终端上使用 vt100 terminfo 条目。
从好的方面来说,今天几乎所有东西都兼容 vt100。
根据ncurses FAQ,xterm-color早已过时:
最初,xterm-color 对应于 1990 年代中期的 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 已经过时,它在很大程度上被忽略了,直到 Apple 的一些(当然是匿名的)开发人员决定将它重用于 Terminal.app(在 10.5 Leopard中),尽管它不适合。ncurses 中的nsterm-16color描述由某人(显然在 Apple 之外)提供,以匹配 10.5 的行为。尽管 xterm-color 使用8种颜色,但 nsterm-16color 可能会使用16。也许这导致了用户的困惑。在任何情况下,Terminal.app 的终端描述选择对 Terminal.app 没有影响,除了设置TERM
环境变量,许多应用程序使用它来决定如何使用终端。
有趣的是,尽管大部分 MacOS 用户空间来自 BSD,但它的 ncurses 配置却不是。与 BSD 不同,MacOS 具有 tic/infocmp 实用程序(尽管 Apple 已经有十多年没有更新它了:ncurses 5.7 于2008年发布)。在后来的 MacOS 版本中,Terminal.app 的开发人员更改了菜单以提供“xterm-256color”而不是“xterm-color”。这并没有改善用户体验,因为使用相应终端描述的终端行为仍然不同。ncurses 常见问题解答提到:
此外,据报道 Mac OS X 10.7 使用 xterm-256color 作为默认 $TERM 值。这在几个方面与 xterm-color 不同,特别是对 bce 的支持。它也不同于推荐的 nsterm-256color(infocmp 报告 111 个差异)。