![按主机对终端窗口进行颜色编码](https://linux22.com/image/1302614/%E6%8C%89%E4%B8%BB%E6%9C%BA%E5%AF%B9%E7%BB%88%E7%AB%AF%E7%AA%97%E5%8F%A3%E8%BF%9B%E8%A1%8C%E9%A2%9C%E8%89%B2%E7%BC%96%E7%A0%81.png)
我经常使用 ssh 在不同的主机上工作,有时我会搞不清楚自己在哪台计算机上运行命令。我有时差点向错误的主机发出 halt(8) 命令。
理想情况下,我希望根据我当前登录的主机对终端窗口的顶部功能区进行颜色编码。我使用 Openbox 和 gnome-terminal,但会考虑切换到任何使这种事情变得容易或至少可能的终端仿真器。
有人知道怎么做吗?如果您能告诉我如何以编程方式更改窗口颜色,我就不怕自己做一些工作了。
答案1
你说的“窗口颜色”是指窗口边框的颜色吗?如果是这样,请告诉你的窗口管理器根据窗口标题设置窗口边框的颜色,因为大多数窗口都有一种模式user@host: /path
。它可以很容易地通过窗口类检查这是否是一个终端,然后在标题更改时解析标题并更新使用的颜色。但我不知道所涉及的流程,所以我不知道需要做多少工作。
但这是可能的。
(我不知道 openbox 是否可以做到这一点,但考虑之后发现这是更简单的方法)
更新:
查看了 openbox 的源代码后,我想修补该framerender_frame
功能,openbox/framerender.c
以便如果窗口是取决于标题中的主机的终端,则使用不同的主题而不是全局主题ob_rr_theme
,该主题具有您想要的该窗口的颜色。
[在 的上下文中framerender_frame
,窗口标题可能是self->client->title
]
这样做需要进行更改framerender_frame
,以便它ob_rr_theme
通过本地引用全局theme
,并且需要编写代码来加载主机:主题地图和其他主题
用伪代码(即这不会运行):
RrTheme* theme = ob_rr_theme;
if "gnome-terminal" equals self->client->class: # for example only
host = parse_title(self->client->title)
theme = lookup host in by_host if not found use theme
# and then in the rest of framerender_frame use theme instead of ob_rr_theme
将by_host
主机字符串映射到RrTheme
主题