tput 可以與組合功能一起使用嗎?

tput 可以與組合功能一起使用嗎?

例如,如果我想要粗體綠色的前綴,我可能會這樣做Green=$(tput bold; tput setaf 2)。這會將 $Green 設定為“\E[1m\E[32m”。但在 Ansi 終端上,它也可以很容易地變成「\E[1;32m」。

這可以用 tput 來完成嗎,還是我要求太多了?

答案1

不, tput 不會(通常)執行此操作,因為您可能只使用預定義/標準終端功能,而這些功能不具有該組合。

使用 ncurses,您可以使用使用者定義的功能定義自己的終端描述,並且 tput 可以使用它。

像這樣的東西會結合顏色:

infocmp -x >foo
printf '\tfgbg=\\E[3%p1%;4%p2%dm,\n' >>foo
sudo tic -x foo

然後(範例為 8 色)

tput fgbg 4 0

會將前景設為藍色,背景設為黑色。然而,還有很多可能性。使用預定義的功能需要花費更少的精力。

答案2

另一種看待這個問題的方式是知道你甚至可以以這種方式組合控制序列是特定於終端系列的事情,這不是 termcap/terminfo 模型。雖然已有 44 年歷史的 ECMA-48 控制序列模型如今已很普遍,但 termcap/terminfo 的設計允許不遵守該模型的終端類型。實際上並不總是可以以這種方式組合控制序列。

相關內容