我用C編寫了一個簡單的控制檯程序,它使用ANSI轉義代碼爲其文本着色。如何在不使用ncurses的情況下在linux終端上設置終端背景顏色?
有沒有辦法將整個終端的背景臨時設置爲黑色並且默認字體顏色爲淺灰色?程序結束後可以恢復嗎?
我寧願避免使用ncurses。
我用C編寫了一個簡單的控制檯程序,它使用ANSI轉義代碼爲其文本着色。如何在不使用ncurses的情況下在linux終端上設置終端背景顏色?
有沒有辦法將整個終端的背景臨時設置爲黑色並且默認字體顏色爲淺灰色?程序結束後可以恢復嗎?
我寧願避免使用ncurses。
可能是要走的最簡單的方法是將你的文字的背景色與ANSI:
例如使用:
echo -e "\e[37m\e[41m"
會給你一個紅色的背景藍色的文字(可以使用這在劇烈的,容易看到的顏色測試效果)。
而
echo -e "\e[97m\e[40m"
將設置前景色爲白色,背景爲黑色爲你的程序的時間。
如果您發現在背景顏色和終端之間出現一種醜陋的過渡區域,只需要輸出足夠數量的換行符來擦除整個屏幕。
要在C中使用它,您顯然需要printf
而不是echo
。
ANSI escape codes上的維客頁面有附加信息。
看起來這是唯一的解決方案,謝謝。儘管我不能贊成你的帖子,但是,如果你點擊我答案旁邊的箭頭下方的大對號,你可以接受我的答案,但這是因果報酬 - _- – user1887348
@ user1887348。 – Richard
如何做到這一點取決於用戶正在使用的終端。它可能是ANSI,可能是VT100,也可能是行式打印機。 ncurses爲你抽象這個恐怖。它使用關於如何與不同種類的終端交談的信息的數據庫(參見$ TERM的內容以查看你正在使用哪一個目前)通常存儲在/lib/terminfo
或/usr/share/terminfo
中。
一旦你在這些文件看,你可能會想不使用ncurses的重新考慮,除非你有特殊要求,以避免它(有沒有足夠的存儲嵌入式系統等)
我知道libncurses是驚人的,但我認爲它不值得付出努力。然後,應該安裝ncurses,以便能夠運行使用ncurses的腳本,但它不在標準包中。 – user1887348
問題是如果您不使用理解這些代碼的終端,只是回顯提出的一個常見的常量將不起作用。如果這足夠好,那麼很好。但是terminfo數據庫(和ncurses作爲它們的接口)存在,所以你不必擔心這一點。 – rjek
是的,直接與終端打交道比使用抽象它們的庫更「*標準」和可移植,而不是更多。使用標準函數輸出終端特定的轉義碼的事實並不會使您所做的是標準或便攜式。 –
這個問題是這樣難以閱讀......我沒有讀過它。請格式化您的問題。 –