终端仿真器,允许动态更改背景颜色

时间:2011-09-25 19:48:19

标签: linux terminal

我正在尝试为基于Linux的系统找到一个终端模拟器,它允许我根据我正在运行的应用程序更改背景。我认为这对于一些OSC转义序列来说应该很容易,但我找不到任何关于有任何终端支持它的文档。

有什么建议吗?

3 个答案:

答案 0 :(得分: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

当然,如果你对远程主机做的任何事情改变了背景颜色,它将覆盖你的颜色。

答案 1 :(得分:1)

您可以使用xtermset使用xterm执行此操作:

xtermset -bg darkred

或xtermcontrol:

xtermcontrol --bg=darkred

答案 2 :(得分:0)

我将xfce终端用于cmus,并根据封面更改背景。为了更改背景,我使用sed-sleep-sed使图像变了(很想知道更好的方法):

sed -i "s:/path/to/old/image:null:g" $HOME/.config/xfce4/terminal/terminalrc ; \
    sleep 1; \
    sed -i "s:null:/path/to/new/image:g" $HOME/.config/xfce4/terminal/terminalrc