![如何强制终结者动态重新加载配置?](https://linux22.com/image/6319/%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%E7%BB%88%E7%BB%93%E8%80%85%E5%8A%A8%E6%80%81%E9%87%8D%E6%96%B0%E5%8A%A0%E8%BD%BD%E9%85%8D%E7%BD%AE%EF%BC%9F.png)
我使用终结者作为终端模拟器,我非常喜欢它,我只想做一件事,但我一直不知道如何去做。
所以,我知道如何右键单击,转到首选项,然后选择颜色配置文件和字体。然后,当我完成时,我访问首选项的终结器实例反映了我刚刚所做的更新(即颜色/字体不同)。我希望能够做到这一点,但通过手动编辑配置文件,~/.config/terminator/config
然后让活动终止器会话重新加载配置文件,然后反映这些更改,而无需重新启动模拟器。
有没有办法做到这一点?--发送某种命令到终结器,告诉它从配置文件中重新加载自身,而不必关闭实际的程序?我觉得这应该是可能的,因为如果我通过 GUI 手动编辑配置,更改就会得到反映,而无需重新启动进程。
答案1
不是命令行解决方案,但您可以打开“首选项”对话框并关闭它以手动重新加载配置文件,而无需杀死终结者。
答案2
如果你想进入源代码并制定自己的解决方案 - 由于 terminator 是用 python 编写的,因此很容易进入源代码 - 我发现了以下内容:
在 中terminatorlib
,有一个模块terminal.py
:如果您在类中运行以下两行Terminal
,它就会达到预期的效果。
self.config.base.reload()
self.reconfigure()
例如,您可以将其放在on_buttonpress
类的Terminal
处理鼠标左键事件的部分中:
if event.button == self.MOUSEBUTTON_LEFT:
# Ctrl+leftclick on a URL should open it
if self.config["link_single_click"] or event.get_state() & Gdk.ModifierType.CONTROL_MASK == Gdk.ModifierType.CONTROL_MASK:
# Check new OSC-8 method first
url = self.vte.hyperlink_check_event(event)
dbg('url: %s' % url)
if url:
self.open_url(url, prepare=False)
else:
dbg('OSC-8 URL not detected dropping back to regex match')
url = self.vte.match_check_event(event)
if url[0]:
self.open_url(url, prepare=True)
else:
dbg("No regex match, discard event.")
self.config.base.reload() # <------ reload config file
self.reconfigure() # <------ refresh terminal profile
terminatorlib
位于/usr/lib/python3.11/site-packages/terminatorlib
我的机器上,但当然您可以发现它只是在运行:sudo find / -name terminatorlib
。
更新: 看起来他们添加了这个原生地(这里);因此,无论是从源代码构建还是等待下一个版本,您都不必自己编写任何代码:)
答案3
我刚刚编写了这个非常盲目/脆弱的脚本,以编程方式移动鼠标,以通过使用 xdotool ( sudo apt-get install xdotool
) 的终结者设置窗口来完成更改配色方案的步骤。它将鼠标移动屏幕上的 x,y 坐标,我纯粹通过反复试验找到了屏幕上的 x,y 坐标 - 不知道坐标在其他计算机上是否相同。我使用的是 Ubuntu 20。
#!/bin/bash
if [ "$1" != "light" ] && [ "$1" != "dark" ]; then
echo "Need to pass \"light\" or \"dark\" as arg"
exit 1
fi
xdotool mousemove 100 100
xdotool click 3
xdotool mousemove 140 350
xdotool click 1
xdotool mousemove 140 100
sleep 1
xdotool click 1
xdotool mousemove 420 140
xdotool click 1
xdotool mousemove 420 250
xdotool click 1
if [ "$1" = "light" ]; then
xdotool mousemove 420 230
xdotool click 1
else
xdotool mousemove 420 280
xdotool click 1
fi
xdotool mousemove 840 720
xdotool click 1
可能有一些方法可以在 Linux 上使用一些类似 Selenium 的工具(我想我已经看到了一些针对 Ubuntu 的描述,它们使用 OpenCV 来解析屏幕像素以查找某些按钮的坐标),这些工具实际上会根据按钮的按钮来选择按钮文本,但这现在对我有用。分享以防有人遇到这个令人沮丧的问题。