首页 > 解决方案 > bash,查找焦点窗口的顺序(类似于 alt+tab 菜单)

问题描述

高级别的,我正在尝试创建一个实用程序,我可以在其中映射某些键以聚焦某个名称的最近聚焦的窗口。

例如,按 sup+c 将聚焦 chrome;如果没有打开 chrome 窗口,它将创建一个新的 chrome 窗口;如果打开了多个 chrome 窗口,它将聚焦最近聚焦的一个。同样, sup+t 可以对终端等执行相同的操作。

我可以xdotool search --name <window-name>用来查找某个名称的窗口 ID。我可以xdotool windowactivate <id>关注那个窗口。

但是,xdotool search返回匹配窗口的所有 id;而我想找到最后一个聚焦的匹配窗口。

1)有没有办法按最后关注的方式对此进行排序?

2)或者也许是一种通过last-focus获取所有窗口的方法,然后我可以将该列表与返回的id进行比较xdotool search

3)或者也许一种在窗口焦点发生变化时调用回调的方法,以便我可以手动跟踪按最后焦点排序的窗口?

4)还有其他方法吗?

标签: linuxbashdebianwindowfocus

解决方案


偶然发现,似乎xdotool search已经从最旧的聚焦窗口(顶部)到最近聚焦的(底部)排序。

如果您打开 4 个终端窗口,并使用 打印它们的 id xdotool getactivewindow,那么在一种 typexdotool search --name terminal中,它们的 id 将按上述顺序打印。

编辑:显然情况并非总是如此。虽然这在过去几天对我有用,但我注意到 Chrome 窗口将列在其他窗口上方,无论焦点顺序如何。


推荐阅读