如何判断stdout是否支持ANSI转义码
How to judge whether stdout supports ANSI escape code
在不支持ANSI转义码的终端中,输出类似\033[0m这样的颜色控制码不仅没有效果,还会干扰终端
我知道一个json格式化工具jq,判断终端是否可以使用ANSI转义码。
我想知道,如何通过C语言实现这个功能?
在 Linux 并且可能 POSIX systems, you might use isatty(3) with STDOUT_FILENO
. See also stdio(3) and fileno(3)。
所以你的代码是
if (isatty(STDOUT_FILENO)) {
// standard output is a tty
...
}
而且您敢打赌,到 2021 年,大多数终端仿真器都将支持 ANSI TTY escapes。
顺便提一下,jq is an open source 软件工具。您可以下载并研究其源代码。
注意 C 编程语言标准(阅读 n1570 or better) does not know about ttys. Read the TTY demystified 网页。
在不支持ANSI转义码的终端中,输出类似\033[0m这样的颜色控制码不仅没有效果,还会干扰终端
我知道一个json格式化工具jq,判断终端是否可以使用ANSI转义码。
我想知道,如何通过C语言实现这个功能?
在 Linux 并且可能 POSIX systems, you might use isatty(3) with STDOUT_FILENO
. See also stdio(3) and fileno(3)。
所以你的代码是
if (isatty(STDOUT_FILENO)) {
// standard output is a tty
...
}
而且您敢打赌,到 2021 年,大多数终端仿真器都将支持 ANSI TTY escapes。
顺便提一下,jq is an open source 软件工具。您可以下载并研究其源代码。
注意 C 编程语言标准(阅读 n1570 or better) does not know about ttys. Read the TTY demystified 网页。