如何动态切换所有打开的终端的终端颜色?

如何动态切换所有打开的终端的终端颜色?

我在 Ubuntu / Fedora 上使用 gnome-terminal。对于我使用的配色方案16 基壳,以及我的编辑器 vi 的相应设置。

我已将其配置.bashrc为在启动时设置 base16 主题。我有时通过更改 bashrc 文件来切换主题。这适用于偶尔更改我的配色方案,因为我可以.bashrc偶尔更改一下,并且以后所有的窗口都会以正确的颜色打开。

我想要的是?

我希望能够gnome-terminal通过单击/命令来更改所有打开的窗口上的配色方案。有没有办法做到这一点?

关于我的工作流程

我通常会打开一堆终端窗口,上面有不同的设置。其中一些打开了文本编辑器,一些文本编辑器程序 (vim) 在后台运行,以允许在同一终端窗口上使用多个文本编辑器进行多任务处理。根据房间的照明情况,我觉得最好在两种配色方案之间切换 - 白天/明亮的房间使用浅色方案,夜间/光线不太好的房间使用深色方案。

我不想在每个打开的终端窗口上键入命令来切换颜色方案。此外,有些程序可能在前台打印中运行,我可能不想中断它。有没有办法“通知”终端切换到自定义配色方案?

我知道在有一个程序在前台活跃运行的终端上可能很难做到这一点。但至少我可以为所有其他在后台有程序或没有运行命令的终端执行此操作。

如果有帮助的话,我愿意探索其他终端。我一直在考虑使用 gnome-terminal 配置文件,但似乎不知道如何实现我想要的。

提前致谢!

答案1

与大多数 GNOME 应用程序一样,GNOME 终端的设置存储在 dconf 数据库中。您可以使用命令dconf或更高级别的替代方法gsettings来查询或更改设置。

GNOME 终端支持多种配置文件。您不能告诉它在所有现有窗口上切换配置文件,但是,您可以随时重新定义配置文件的属性。

终端立即自动获取对底层数据库的更改。

转储数据库,例如使用dconf dump / > outputfile,更改 GNOME 终端的“首选项”对话框中的一些值,然后重复前面的命令并比较两个输出以找出差异。

您可以使用以下命令以编程方式更改值:

dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/background-color "'rgb(200,210,220)'"

foreground-color,字段也类似palette

更标准的#rrggbb表示法也适用。

请注意嵌套的引号,shell 会去掉外部引号,而您设置的实际值也需要包含引号。

如果您使用非默认配置文件,则该配置文件的 ID 将会与您不同。


另一种可能的方法:

OSC 4、10、11 转义序列允许您重新定义颜色运行时间。这些优先于终端的设置,至少在 GNOME 终端的情况下是如此。

迭代 下的所有条目/dev/pts,并向所有这些条目发出这些转义序列。例如:

printf '\e]11;#abcdef\e\\' > /dev/pts/17

其中一些条目属于其他用户,您将获得他们的权限被拒绝。有些属于其他终端,这些终端可能无法识别这些序列。

请注意,终端中正在进行的活动有可能位于多字节 UTF-8 序列或转义序列的中间,并且您可以与之交错。在这种情况下,您会看到内部运行的应用程序的输出损坏。

我建议那些终端支持这些 OSC 序列,但不允许通过其他更安全的方式在运行时修改设置的用户使用此方法。

相关内容