如何赋予 GNU Screen 中的每个虚拟终端自己的背景颜色?

如何赋予 GNU Screen 中的每个虚拟终端自己的背景颜色?

我有一个梦想:我希望 GNU Screen 内的每个虚拟终端都有自己独特的背景颜色。

我认为我可以在 .bashrc 脚本中伪造它,该脚本发出 xterm 控制代码来根据 $WINDOW 变量设置背景颜色——但如果我启动非 bash 进程(即,如果我运行“screen vi foo”),这将不起作用。

每次切换虚拟终端时,是否有更巧妙的方法来实现背景颜色的改变?

答案1

我很乐意被证明是错的,但使用 vt100 终端(即屏幕模拟的终端)似乎不可能设置它们的默认背景颜色;只能通过 CSI 序列将背景颜色更改为其默认值。但是,如果您的主机终端支持,则可以发送 OSC 转义序列来设置默认背景颜色。但是,使用此方法设置背景颜色的结果是不会保留对其他屏幕窗口中的背景颜色所做的更改。换句话说,如果在一个屏幕窗口中更改了主机终端背景颜色,然后您切换到另一个窗口并再次更改默认背景颜色,则当您切换回原始屏幕窗口时看到的是最新的背景颜色更改。

以下示例 .screenrc 演示了概念验证。它适用于 konsole,但不实用,因为它要求每个窗口始终处于可以发送正确序列的 shell 提示符下。

# start a few screen windows
screen 0
screen 1
screen 2
screen 3

# set up key bindings to set the host terminal bg color when you switch windows
# spawn the echo in a subshell to avoid displaying single quote/also need to quote the trailing backslash
bind 0 eval "select 0" "stuff \"(echo -n $'\eP\e]11;navy\cg\e\134\134\134\134') \012\""
bind 1 eval "select 1" "stuff \"(echo -n $'\eP\e]11;forestgreen\cg\e\134\134\134\134') \012\""
bind 2 eval "select 2" "stuff \"(echo -n $'\eP\e]11;slategray\cg\e\134\134\134\134') \012\""
bind 3 eval "select 3" "stuff \"(echo -n $'\eP\e]11;purple\cg\e\134\134\134\134') \012\""

# switch to the first window and set the background color to blue
eval "select 0" "stuff \"(echo -n $'\eP\e]11;navy\cg\e\134\134\134\134') \012\""

对于支持的颜色,请参考Qt 文档

相关内容