问题描述
我正在使用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']
会为您提供。