2011-09-25 43 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