从 xfce 中的终端确定用户是否正在切换活动窗口

从 xfce 中的终端确定用户是否正在切换活动窗口

我正在尝试实现一个键盘快捷键,以便我可以在 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 后的事件上执行。

相关内容