30

在尝试将终端程序设置为使用颜色时,我遇到了这两个选项xterm-colorxterm-256color即您可以将TERM环境变量设置为任何一个。

我想知道是否有人可以描述两者之间的区别?

我在我的 Ubuntu 服务器和我的 mac 上搜索了文档,但没有找到任何文档。我只能在/usr/share/terminfo.

4

3 回答 3

49

xterm-256color描述了支持 256 色的 Xterm。xterm-color描述了支持八种颜色的 Xterm 的旧分支。xterm-color不推荐使用,因为它描述了 Xterm 的一个变体,它功能较少,而且您不太可能使用。通常你会想要使用xterm,xterm-16colorxterm-256color.

尤其xterm-256color是从 Mac OS X 10.7 Lion 开始的终端的默认值,次优推荐值为xterm-16colorxterm(仅描述对八种 ANSI 颜色的支持)。在 10.7 之前,xterm-color这是默认设置,因为 Terminal 不支持推荐的 Xterm terminfo 值所描述的一些关键功能,例如,背景颜色擦除 (BCE)、用于切换主/备用屏幕的现代代码、256 色。

有时人们明确设置TERMxterm-color(与推荐的 Xterm 值相反)以禁用功能或解决特定计算机上可用的 terminfo 值与正在使用的终端仿真器之间的不兼容问题。

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

  1. 目前没有一个是最新的。nsterm代表终端在 NeXTSTEP 的祖先。显然有人nsterm最近更新了(过去几年的某个时候),但我不知道这是否已经进入 ncurses 发行版,而且它可能与 10.7 中的 Terminal 不完全同步。
  2. 许多程序和外壳定制脚本明确检查是否$TERM以(或等于)开头xterm。因此,一些用户仍然需要了解如何在终端中使用推荐的 Xterm 值以与这些值兼容。

如果您不熟悉 terminfo 系统,请查看 x-man-page://5/terminfo 手册页。此外,您可以使用该infocmp命令查看当前的 terminfo 设置或比较两个不同的设置,例如,infocmp xterm-color xterm-256color将显示这两者之间的所有差异。

于 2012-04-06T05:04:32.297 回答
6

这似乎xterm-256color是 OS/X 上的 Terminal.app。差异并不小 - 我在一个 Ubuntu 机器上进行了 infocmp'dxterm-colorxterm-256color对其进行了一些标准化,并得到了很多差异。我什至可以说xterm-256color不再是真正的 xterm 了。

通常,当您使用特定的终端仿真器时,您需要“只知道”哪个 terminfo 条目最适合它。它们是一对匹配的,尽管有时您可以,例如,在 vt220 终端上使用 vt100 terminfo 条目。

从好的方面来说,今天几乎所有东西都兼容 vt100。

于 2012-04-04T00:17:03.153 回答
2

根据ncurses FAQxterm-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 个差异)。

于 2019-09-22T10:58:22.313 回答