如何强制终结者动态重新加载配置?

如何强制终结者动态重新加载配置?

我使用终结者作为终端模拟器,我非常喜欢它,我只想做一件事,但我一直不知道如何去做。

所以,我知道如何右键单击,转到首选项,然后选择颜色配置文件和字体。然后,当我完成时,我访问首选项的终结器实例反映了我刚刚所做的更新(即颜色/字体不同)。我希望能够做到这一点,但通过手动编辑配置文件,~/.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 来解析屏幕像素以查找某些按钮的坐标),这些工具实际上会根据按钮的按钮来选择按钮文本,但这现在对我有用。分享以防有人遇到这个令人沮丧的问题。

相关内容