我正在尝试实现一个键盘快捷键,以便我可以在 xfce4 中仅在经过筛选的窗口列表(仅特定应用程序的窗口)之间进行切换。我想通过隐藏不需要的窗口,然后使用正常的窗口选择机制(使用 alt+tab)从剩余的窗口中选择一个窗口来实现这一点。
过滤和隐藏效果很好。在我的快捷方式中,我用来xdotool
假装按下alt+tab
并开始选择窗口。但我不知道在我的脚本中如何确定窗口选择是否完成。因为之后我需要取消隐藏从选择范围内排除的窗口。
是否有进程或窗口 ID 或其他内容可用于确定窗口选择进程是否仍处于活动状态?
答案1
我不确定这在您的脚本中是如何工作的,但我知道通常用户按住alt并使用tab选择一个窗口,然后释放alt。如果是这种情况,那么您可以使用释放该键来确定选择结束。
您可以通过多种方式监视 X11 键盘事件,其中之一是使用
xinput --test-xi2 --root
.这为每个事件输出几行;例如,当我释放Meta_Rwhich在键盘上实现alt时,我得到:
EVENT type 14 (RawKeyRelease)
device: 3 (9)
detail: 105
...
EVENT type 3 (KeyRelease)
device: 9 (9)
detail: 105
...
modifiers: locked 0 latched 0 base 0x9 effective: 0x8
这里的要点是细节这是钥匙的键码,以及有效修饰语,在事件发生之前按下 Shift 键的位掩码;它是 0x8,因为它对应于mod1
.因此,您可以只查找修饰符为 0 的事件,或者详细信息为 105 的 KeyRelease 或 RawKeyRelease(在我的例子中)。您可以通过测试或从xmodmap -pk
和找到密钥代码xmodmap -pm
。
以下内容对我有用,在alt未按下或释放时退出。
sed -n '
/modifiers:.* 0$/q
/KeyRelease/{n;n;/ 105$/q}
' < <(xinput --test-xi2 --root)
注意 bash 进程替换的使用<()
。使用管道会导致脚本等待管道完成,这xinput
仅在收到 SIGPIPE 后的事件上执行。