检查控制台是否支持 Java 中的 ANSI 转义码
Check if console supports ANSI escape codes in Java
我正在 Java 中构建一个程序,该程序使用使用 ANSI 转义码的不同颜色的菜单。像
System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m");
问题是我想检查将要执行代码的控制台是否支持使用此代码,如果不支持,请打印一个没有代码的替代版本。
它将类似于:
if(console.supportsANSICode){
System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m");
}
else{
System.out.println("Menu option");
}
java 中有检查这个的方法吗?
我不知道Java有没有什么特殊的方法来处理这个问题,但是有两种方法可以处理这个问题本身。通常使用的方法(至少在 unix 世界中)是从 TERM
环境变量中获取使用的终端并从 terminfo/termcap database (usually using curses or slang 中查找它的功能)。另一种更粗略的方法是发送设备状态报告代码("\u001B[6n"
)并检查终端是否响应。这当然有点 hack,因为支持 DSR 代码的终端可能不支持颜色。
仅 java 的简单解决方案:
if (System.console() != null && System.getenv().get("TERM") != null) {
System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m");
} else {
System.out.println("Menu option");
}
第一个术语用于检查是否连接了终端,第二个术语用于查看是否定义了 TERM env var(不在 Windows 上)。这并不完美,但在我的情况下效果很好。
我正在 Java 中构建一个程序,该程序使用使用 ANSI 转义码的不同颜色的菜单。像
System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m");
问题是我想检查将要执行代码的控制台是否支持使用此代码,如果不支持,请打印一个没有代码的替代版本。
它将类似于:
if(console.supportsANSICode){
System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m");
}
else{
System.out.println("Menu option");
}
java 中有检查这个的方法吗?
我不知道Java有没有什么特殊的方法来处理这个问题,但是有两种方法可以处理这个问题本身。通常使用的方法(至少在 unix 世界中)是从 TERM
环境变量中获取使用的终端并从 terminfo/termcap database (usually using curses or slang 中查找它的功能)。另一种更粗略的方法是发送设备状态报告代码("\u001B[6n"
)并检查终端是否响应。这当然有点 hack,因为支持 DSR 代码的终端可能不支持颜色。
仅 java 的简单解决方案:
if (System.console() != null && System.getenv().get("TERM") != null) {
System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m");
} else {
System.out.println("Menu option");
}
第一个术语用于检查是否连接了终端,第二个术语用于查看是否定义了 TERM env var(不在 Windows 上)。这并不完美,但在我的情况下效果很好。