将 .Xdefaults 的更改应用到正在运行的 rxvt 终端

将 .Xdefaults 的更改应用到正在运行的 rxvt 终端

有没有办法将更改(例如字体(大小))应用于.Xdefaults会话中所有正在运行的终端?

我可以通过加载 xrdb -load .Xdefaults 将其应用到新终端,但这并不适用于所有正在运行的终端。

如果重要的话,我在 ubuntu 15.10 上使用 urxvt (守护进程模式)作为终端,使用 xmonad 作为窗口管理器。

只是对于字体大小,我有一个想法,可以使用 fontsize perl-extension 向每个打开的终端注入字体大小更改,但我不知道如何做到这一点。

答案1

快速阅读urxvt(1)并从上述概要中urxvt(7)可以看出,rxvt-unicode终端支持可以更改字体的转义序列:

SYNOPSIS
          # set a new font set
          printf '\33]50;%s\007' 9x15,xft:Kochi" Mincho"

这些必须打印到每个开放终端中,并且可能需要一些翻译才能将格式转换.Xdefaults为适合此类打印的格式。

答案2

并非所有程序都支持重新加载配置的功能。特别是 X 资源通常在程序启动时被读取;没有协议可以通知应用程序它应该使用新资源。 Rxvt 往往很小,因此它不支持启动后重新加载配置也就不足为奇了。

一些设置可以动态更改。尤其,可以通过控制序列更改字体。您可以从任何地方发出这些控制序列,只需将输出重定向到正确的终端设备:

printf '\33]50;%s\007' … >/dev/pts/42

我想不出一种方法来列出 rxvt 提供的终端设备。您可以轻松列出正在运行进程的设备,这可能就足够了。

for pts in $(ps x -o tty= | sort -u); do
  case "$pts" in pts/*) printf … >"/dev/$pts";; esac
done

1事实上,有一个——editres——但是谁听说过editres?没有人,就是那个人。

相关内容