簡體   English   中英

使用C / C ++,如何以彩色打印到stdout,但只有終端支持它?

[英]Using C/C++, how do you print to stdout in color, but only if the terminal supports it?

我有一個程序可以將事情記錄到STDOUT

這些日志條目具有關聯的“日志級別”(調試,警告,信息等),我想讓用戶能夠為此輸出着色,具體取決於日志級別。

確定STDOUT是否附加到具有彩色功能的終端的方法是什么? 那我怎么能用顏色輸出我的文字呢?

我正在尋找一個只涉及C或C ++調用的解決方案。 我想curses (或ncurses )有一些東西可以緩解這一點,但我想避免使用它來保持我的依賴關系最小化。

可能最簡單的檢查方法是:

isatty(fileno(STDOUT))

如果您的標准輸出被發送到任何類型的終端,這將返回1 在實踐中,任何終端都將支持或忽略VT100顏色代碼; 檢查terminfo是不必要的,除非您希望輸出到某些非常不尋常的硬件終端。 (其中大部分都沒有在幾十年內完成。)

要輸出顏色,請使用(擴展)SGR序列:

"\x1b[%dm"

其中%d是常用顏色的以下值之一:

0: reset colors/style
1: bold
4: underline
30 - 37: black, red, green, yellow, blue, magenta, cyan, and white text
40 - 47: black, red, green, yellow, blue, magenta, cyan, and white background

有更多的值,但這些是最受支持的值。 同樣,檢查terminfo對於這些控制代碼來說基本上是不必要的,因為每個值得鹽的軟件終端都支持(或忽略)它們。

如果需要一次更改多個屬性,可以一次指定所有屬性,用分號分隔。 例如,以下序列將在綠色背景上用大膽的洋紅色文字灼燒您的眼球:

"\x1b[1;35;42m"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM