将TERM映射到支持的ANSI颜色代码



我想从Java应用程序中检测系统控制台是否支持ANSI颜色代码(以及哪些颜色代码),而不依赖于本机代码(意思是,我不能与ncurses交互)。

是否有一种简单可靠的方法将$TERM映射到控制台支持的颜色代码列表?

我的应用程序是否真的需要支持在http://invisible-island.net/ncurses/terminfo.src.html上找到的数百个终端代码,或者是否有一个我应该检查的最小列表(例如xterm, xterm-colorxterm-256color)?

UPDATE:我在http://tldp.org/HOWTO/Text-Terminal-HOWTO-16.html

找到了一个很好的terminfo概述

这里有两种不同的互补方法:

  • 您希望您的系统在任何可能的终端上工作(包括旧的真实终端,如dec-vt100或televideo-tvi950) =>使用[n]诅咒构建一些东西。它是为这种用途而开发的:从真实终端抽象程序
  • 你希望你的系统工作在一个单一的终端类型(比如xterm-color),并依靠模拟器来实现它。您可以简单地测试TERM环境变量是否为xterm-color,或者将一个选项传递给程序以尝试使用或不使用颜色。

这两种情况现在都是可以接受的,事实上你可以找到实现它们的Java库,比如前者的Java Curses或后者的Lanterna(这里有更多参考)

你应该在你的文档中清楚地说明。比如:

这个应用程序需要一个xterm兼容的终端。如果TERM环境变量是xterm-color,或者如果这个参数传递给系统属性存在,它将使用颜色。

(用相关选项替换this and that…)

另外:

这个应用程序是基于terminfo系统。确保将TERM环境变量设置为最佳模拟。如果TERMINFO数据库中存在颜色,则应用程序支持。

最新更新