2011-09-25 45 views
2

我目前正在嘗試爲基於Linux的系統找到一個終端模擬器,它允許我根據正在運行的應用程序更改背景。我認爲這對於一些OSC轉義序列應該很容易做到,但是我找不到任何有關支持它的終端的文檔。允許動態更改背景顏色的終端模擬器

有什麼建議嗎?

+0

我覺得ETERM可以做到這一點 –

+0

看起來是這樣!謝謝! – Hobblin

回答

5

如果您的終端仿真程序支持背景顏色擦除(BCE),您可以使用「擦除顯示」轉義序列來設置顯示器的背景顏色。例如,該設置背景爲紅色在bash:

tput setab 1; tput clear 

tput setab 1設置 「ANSI背景顏色」 爲1(紅色)。 put clear清除屏幕,通常通過發出代碼將光標移動到頂部/左側角並清除顯示。如果你不想刪除整個顯示器,你可以從當前行擦除到顯示的末尾:

tput setab 1; tput ed 

如果你的終端仿真器支持BCE,各種命令,顯示清晰的部分將用當前背景顏色填充已清除的區域。你可以告訴如果你的終端仿真器支持使用tput BCE:

tput bce && echo Yes || echo No 

這將顯示「是」如果支持BCE。

要利用此功能,您可以使用shell函數(或腳本文件)來包裝要爲其設置顏色的命令。例如,在bash這將在顯示器運行的ssh當設置爲藍色:

ssh() { 
    trap 'tput sgr0; tput ed' RETURN; 
    tput setab 4; tput ed 
    command ssh $*; 
} 

使用trap確保它重置的背景顏色(以及其他文本屬性)在函數返回時。我在這裏使用tput ed,所以它隻影響運行ssh命令時輸出行的背景顏色。如果您希望填充整個顯示器,並且您不介意在命令的開始(和/或結束)刪除當前內容,則可以使用tput clear

當然,如果您使用遠程主機進行的任何操作都會更改背景顏色,它將會覆蓋您的顏色。

+0

這不是我的意思。你在談論的是改變當前終端會話的默認背景顏色值(或使用陷阱時的當前函數調用),這是一個非常好的解決方案!我讚賞這一點,並認爲我會找到它的用處。這不是我想到的,但這可能是爲什麼,我腦海中沒有實現的原因。我希望能夠改變終端的圖形(X部分)中的背景顏色,以便能夠使用諸如透明度效果之類的東西,並通常將背景色調爲某種顏色。 – Hobblin

+0

我認爲Xterm會讓你以編程方式改變使用OSC轉義序列的終端配色方案。能否在同一個shell會話中運行命令並更改終端外觀很重要,還是隻需要在具有所需外觀的新終端中運行命令就足夠了?後者可以通過幾種不同的自動工作方式在Terminal上完成。如果這可能有幫助,我可以在另一個答案中發佈它們。 –

+0

OSC esc-seq做它是我想要做的,我真的不想開始一個新的終端。 – Hobblin

1

您可以使用xterm使用xtermset做到這一點:

xtermset -bg darkred 

或xtermcontrol:

xtermcontrol --bg=darkred