2017-04-22 70 views

回答

1

終端讓你,你文本彩色文本。如果你想改變一些文本的顏色,你必須知道已經有什麼—和重寫它(當然括號爲tput revtput sgr0命令)。

重寫提示意味着您必須知道寫入提示的屏幕上的位置。對於簡單的大小寫(您的提示不在屏幕底部,導致它在輸入命令時向上滾動),可以保存當前光標位置(使用tput sc),並將其還原以返回提示重寫它(使用tput rc)。

但是,這隻會對簡單的大小寫有幫助,因爲多行(或滾動)命令會使其無法返回提示並重寫該提示。

人們使用curses —編寫類似的應用程序,但zsh的terminfo支持不會對屏幕上顯示的內容進行控制。

+0

任何方式來獲取「已有的東西」? (包括它的當前屬性/顏色);對於多行,我可能會以某種方式向後搜索,直到遇到提示符之前的某個符號 - 在我的例子中它是非常獨特的。有關如何進行搜索的任何提示? – user569825

+0

有沒有便攜的方式來做到這一點... –

0

也許你可以通過操縱調色板來獲得近似值。在xterm-256color中,您可以動態更改256種顏色中的每一種,並使用控制序列爲其分配任意RGB值。例如,要將調色板轉換爲256級中性步驟楔,請使用此功能(並使用reset_colors將其撤消)。當你在屏幕上進行顏色測試(彩色立方體)時,這是最好的。

# Operating System Control. 
OSC=$(printf '\033]') 

BEL=$(printf '\a') 

reset_colors() { 
    printf "${OSC}104${BEL}" 
} 

gray_colors() { 
    c=0 
    while test $c -lt 256; do 
    printf "${OSC}4;$c;rgb:%02x/%02x/%02x${BEL}" $c $c $c 
    : $((++c)) 
    done 
} 

現在如果你的電流指令應爲紅色,變成灰色執行一次,分配等10種顏色相同的紅色的色相,並且一旦顯示下一個提示,將其更改爲灰色,並使用下一個紅色時隙爲新的提示。然後循環顯示10種紅色(假設這是關於屏幕上任何時候的命令數量)。根據自己的喜好調整。