如何在 xfce4/xfwm4 中激活最近聚焦的应用程序窗口?

如何在 xfce4/xfwm4 中激活最近聚焦的应用程序窗口?

我将功能键用于特定应用程序(F1 chrome、F2 终端等)。我有一个绑定到快捷键的脚本来激活正确的应用程序,并且该脚本有效,但它不会激活最近聚焦的窗口。该脚本列出了窗口,wmctrl -lx其中似乎按反向创建顺序列出了窗口。有没有什么方法可以请求或跟踪特定窗口的激活顺序,以便我可以编写“激活最近的终端窗口”脚本?

或者,似乎如果我能够获得由xfwm4(循环浏览窗口时使用的)维护的窗口堆栈顺序,这似乎也可以解决我的问题,但我没有看到命令行界面来获取该窗口堆栈顺序。

答案1

在脚本中,您可以使用wmctrlxpropawk来使用窗口管理器维护的激活时间。 (参见例如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}' \
    )

用言语来说:

  1. 通过过滤传递wmctrl列表以选择指定应用程序的窗口 ID(上例中的“终端”);然后
  2. 将其传递给(最里面的)xprop以获取上次使用时间的(假装)窗口 ID,以及
  3. 使用另一个(外部)来获取该时间戳,这是原始窗口xprop的“假装窗口”的(单个)属性;_NET_WM_USER_TIME_WINDOW然后
  4. 将所有生成的 id 和时间戳行通过awk过滤器,该过滤器报告具有最大时间戳的 id。

相关内容