我将功能键用于特定应用程序(F1 chrome、F2 终端等)。我有一个绑定到快捷键的脚本来激活正确的应用程序,并且该脚本有效,但它不会激活最近聚焦的窗口。该脚本列出了窗口,wmctrl -lx
其中似乎按反向创建顺序列出了窗口。有没有什么方法可以请求或跟踪特定窗口的激活顺序,以便我可以编写“激活最近的终端窗口”脚本?
或者,似乎如果我能够获得由xfwm4
(循环浏览窗口时使用的)维护的窗口堆栈顺序,这似乎也可以解决我的问题,但我没有看到命令行界面来获取该窗口堆栈顺序。
答案1
在脚本中,您可以使用wmctrl
、xprop
和awk
来使用窗口管理器维护的激活时间。 (参见例如wm-规格 1.5)。例如,使用(多行)命令行,如下所示:
W=$(wmctrl -l | \
awk '$ ~ "Terminal" {print $1;}' | while read x ; do \
echo "$x $(xprop -id $(xprop -id $x \
| awk '$1 ~ /_NET_WM_USER_TIME/ {print $NF}' \
) \
| awk '{print $NF}' \
)" ; \
done | awk '$2>t {i=$1; t=$2} END {print i}' \
)
用言语来说:
- 通过过滤传递
wmctrl
列表以选择指定应用程序的窗口 ID(上例中的“终端”);然后 - 将其传递给(最里面的)
xprop
以获取上次使用时间的(假装)窗口 ID,以及 - 使用另一个(外部)来获取该时间戳,这是原始窗口
xprop
的“假装窗口”的(单个)属性;_NET_WM_USER_TIME_WINDOW
然后 - 将所有生成的 id 和时间戳行通过
awk
过滤器,该过滤器报告具有最大时间戳的 id。