
如何以僅利用終端協定而不依賴儲存在特定終端程式或其運作環境中的任何配置(如「設定檔」)的方式變更終端背景顏色?
我希望能夠編寫一個腳本,該腳本可以可靠地更改使用終端登入電腦並執行腳本的使用者的終端背景顏色。
對「這是不可能的」效果的快速而權威的回答將與解決方案一樣受到讚賞。然而,只有完全了解終端協議並且可以證明不存在這種功能的專家才會接受這樣的答案。
答案1
這是不可能的。我不是一個完全了解終端協議的專家,但我知道存在無法更改背景顏色的終端。例如,在啞終端(例如由預計或M-x shell
在 Emacs 中。大多數硬體終端也是如此,但現在很少人使用。
大多數終端模擬器確實有辦法更改背景顏色。終端模擬器基本上複製了 xterm 作為應用程式和終端之間的接口,因此當您需要這樣的功能時,請嘗試 xterm 方式並期望它可以在某些但不是所有終端模擬器上工作。尋找xterm 控制序列看看是否符合您的要求。
要更改整個終端的背景顏色,有OSC 11; color BEL
, IE
printf '\e]11;%s\a' "$color"
這適用於 xterm、urxvt、gnome-terminal、konsole 和 lxterm,但不適用於 rxvt、xfce4-terminal、terminator 或 Emacs M-x term
。背景顏色變化在終端重置後仍然存在。您也可以透過替換11;
為 來更改前景色10;
。
當然,這是預設的背景顏色。在任何支援此轉義序列的終端以及以任何方式支援顏色的大多數其他終端上,您可以使用\e[41m
(紅色)切換隨後顯示的文字的背景顏色。
如果終端不支援轉義序列,那麼您將無法找到答案。您可以嘗試尋找查詢終端機且同一組終端支援的轉義序列,但通常沒有這樣的序列。
切換到反向視訊\e[?5h
可能適用於大多數終端,但這在終端重置後無法保留。您可以這樣做,然後設定前景色,這樣在大多數終端上都會有視覺效果。