在Linux上检索和设置窗口信息(通过扩展窗口管理器提示)
项目描述
==== EWMH ====
EWMH(扩展窗口管理器提示)可以用于检索和设置Linux系统上窗口的信息。这是通过调用并解析诸如wmctrl之类的程序的输出实现的。
示例
from subprocess import Popen from ruamel.ewmh import ExtendedWindowManagerHints as EWMH Popen(['xclock', '-name', 'test_xclock']) # there can be more than one window matching the title # therfore .by_title() returns a list clk = EWMH().by_title('test_xclock')[0] clk.resize_and_move(200, 200, 300, 600)
为什么不使用wmctrl包?
在编写此库之前,我尝试了Antonio Cuni的wmctrl包。这个库看起来已经被遗弃(至少从2013年4月到2014年10月)。
我开始开发ewmh是因为我遇到了性能问题和异常,最初无法修复。当我注意到这些问题是由于设计决策造成的,与我不需要的功能(例如检索WM_CLASS)相关,并且因为我需要更简单但能工作的东西,我从零开始。
wmctrl的输出信息没有缓存,并且最初获取信息非常慢。如果你的机器上有M个窗口打开,并且你想要N个窗口的状态,这将导致通过commands.getoutput调用外部程序的总数为N * (M+1)次。在我的系统上有200多个打开的窗口时,获取信息需要几秒钟的时间,而且对于我感兴趣的每个窗口都是如此。
使用commands.getoutput(),但自2008年以来已经弃用了它,应该使用subprocess.checkout_output()。
没有检查getoutput()的输出是否有错误。
使用了os.system(),导致不必要的shell调用。
程序对系统上打开的每个窗口都调用了 xprop,尽管通常情况下,这些信息通常都不使用。
为了激活窗口,包通过 wmctrl 调用 wmctrl -id -a <ID>,我不确定那里的 d 是要做什么,没有它,命令的效果/输出相同。
在尝试修补这些问题并进行测试后,发生了异常,迫使我放弃它,因为从头开始做更省时。
我通过编写 emwh 获得的认知是,wmctrl 包目前至少无法处理包含空格的窗口类,而且当桌面上某个地方有 无标题窗口 时,程序调用库也无法生存。
大部分与 wmctrl 库一起提供的原始测试,只需进行少量调整(似乎与我的窗口顶部菜单有关)和在 emwh 中的包装类。因此,从 wmctrl 移动到 ewmh 应该很容易。
ruamel.ewmh-0.1.4.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | e86882ea0e621ff1140a34924a0986c1031e6b5b87c2829fef3ba4af589d32c7 |
|
MD5 | fc42e47375629f3b1edbb1762f1ce9de |
|
BLAKE2b-256 | f47a8d56ce29e9244590831398ba3bc773f57c7e268c53e44d5a47eeef8f4424 |
ruamel.ewmh-0.1.4-py2.py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 960c0965e85352c63d653cdc6cd7f3a56836b608ba3275c8f102f9b4f676d091 |
|
MD5 | 8082cfc8be853ba68a64fc669dd537b9 |
|
BLAKE2b-256 | dcd3e1e0b66428e9331e9e38c14b50aecaa67e3a18771eb57634b9ca09976039 |