2015-05-07 54 views
1

我在寫一個需要輸出樣式文本的控制檯程序。現在,我正在使用固定的ANSI轉義碼作爲前景色和背景色,粗體和下劃線。例如,我可以編寫\033[35m將前景色更改爲紫色。用terminfo可以同時改變前景色和背景色嗎?

自己編寫代碼的好處是我可以鏈接它們。我可以改變背景顏色前景色用一個命令,從而節省了寶貴的字節:

\033[48;5;200;38;5;100m

我想切換到使用的terminfo庫,使其他類型的我的工作方案終端。然而,我找不到一種方法來一次更新多種顏色 - 我想設置粗體和下劃線顏色只有一個\033和只有一個m

有標準中所列出下面的命令,而不是隻能做這些都不似乎做我想要的,我不能實際查找視頻的第一和第二組實際上屬性是什麼:

  • set_a_attributes:定義第二組視頻屬性#1〜#6
  • set_a_background:設置背景顏色爲#1使用ANSI轉義
  • set_a_foreground:小號使用等前景色爲#1的ANSI逃脫
  • set_attributes:定義第一組視頻的屬性#1-#9

有沒有辦法讓我想要的東西只用terminfo命令?提前致謝。

回答

1

否 - terminfo的不做到這一點:

  • 它列出功能,這很可能會提供許多不同的終端
  • 標準的功能被定義......而回。當然,termcap也一樣。
  • 顏色等屬性(最常見的終端現在)的東西,你可能會認爲,可以任意組合,但畢竟是相當近期—沒有保證
  • 所以能力在小塊(更新前景色,更新背景顏色)。
  • 有一個例外是sgr,它一次最多可以設置9個視頻屬性。這些都不是顏色。

如果你碰巧使用ncurses的,你可以定義你自己的能力,使用tic -x,並使用那些你自己的解釋(見例如在終端數據庫ncurses user-definable capabilities)。只要它們的語法與其他terminfo字符串匹配,就可以使用tparm來填充數字(比printf稍好一點)。

+0

嗯,這很煩人!有意義,但。 –