如何从.Xresources中加载变量?

问题描述

我正在使用Regolith加载一堆Xresources,并在某些Xresources文件中使用i3-wm.font: typeface_wm之类的变量。据我了解,这些应该加载到X11窗口系统中,可以从那里读取。如何在python脚本中获得此值,而无需自己解析文件?

我发现了python3-xlib模块,我想应该可以做到这一点,但是我不能从中真正受益匪浅……我知道Xlib非常低级并且很复杂,但是我真的希望有一个Xlib.get_resource("i3-wm.font")这样的命令可以为我获取所需的资源。

解决方法

你说得对,这看起来很复杂!

我在 github here 上发现了一些有一些线索的随机代码。仅允许阅读的蒸馏版本是:

import Xlib
from Xlib.Xatom import RESOURCE_MANAGER,STRING

res_prop = Xlib.display.Display().screen().root.get_full_property(RESOURCE_MANAGER,STRING)
res_kv = (line.split(':',1) for line in res_prop.value.decode().split('\n'))
res_dict = {kv[0]: kv[1].strip() for kv in res_kv if len(kv) == 2}

但请记住,这只是抓取整个 db 并将其推入 dict 中,以便您可以查找确切的键。特别是,它不执行 X 的其余部分所关注的所有 globbing。但是,这应该足以让您入门。特别是 res_dict['i3-wm.font'] 会为您提供。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...