我想从Java应用程序中检测系统控制台是否支持ANSI颜色代码(以及哪些颜色代码),而不依赖于本机代码(意思是,我不能与ncurses交互)。
是否有一种简单可靠的方法将$TERM
映射到控制台支持的颜色代码列表?
我的应用程序是否真的需要支持在http://invisible-island.net/ncurses/terminfo.src.html上找到的数百个终端代码,或者是否有一个我应该检查的最小列表(例如xterm
, xterm-color
和xterm-256color
)?
UPDATE:我在http://tldp.org/HOWTO/Text-Terminal-HOWTO-16.html
这里有两种不同的互补方法:
- 您希望您的系统在任何可能的终端上工作(包括旧的真实终端,如dec-vt100或televideo-tvi950) =>使用[n]诅咒构建一些东西。它是为这种用途而开发的:从真实终端抽象程序
- 你希望你的系统工作在一个单一的终端类型(比如xterm-color),并依靠模拟器来实现它。您可以简单地测试
TERM
环境变量是否为xterm-color
,或者将一个选项传递给程序以尝试使用或不使用颜色。
这两种情况现在都是可以接受的,事实上你可以找到实现它们的Java库,比如前者的Java Curses或后者的Lanterna(这里有更多参考)
你应该在你的文档中清楚地说明。比如:
这个应用程序需要一个xterm兼容的终端。如果
TERM
环境变量是xterm-color
,或者如果这个参数传递给系统属性存在,它将使用颜色。
(用相关选项替换this and that…)
另外:
这个应用程序是基于
terminfo
系统。确保将TERM
环境变量设置为最佳模拟。如果TERMINFO
数据库中存在颜色,则应用程序支持。