使wmctrl忽略当前工作空间的窗口

我依靠wmctrl在windows之间切换很多,基本上避免多次输入alt-tab。 我一直使用一个工作区,但现在我想开始使用多个工作区。

我想知道是否可以修改wmctrl的上下文,这样当我键入wmctrl -l ,只显示当前工作空间的窗口,而不是所有工作空间中的所有窗口。

例如,假设我在工作区1中打开了一个Firefox窗口。我在ctrl+alt+f上有一个键盘快捷键,它执行wmctrl -a firefox ,它会切换到Firefox。 如果我在工作区2上打开一个新的Firefox窗口并输入ctrl+alt+f ,它将切换到工作区1的窗口,这不是我想要的。

关于如何解决这个问题的任何建议/想法?

编辑 :我正在使用compiz(Unity)

如果您正在使用Compiz(如果不确定则运行wmctrl -m ),wmctrl只能看到1个桌面(wmctrl -l的第2个字段,即0),但您可以使用几何(-G)选项来了解哪个窗口是什么虚拟桌面。 当前桌面中的所有窗口的x位置都在0和屏幕宽度之间。 0和屏幕高度之间的y位置相同。 所以你可以使用类似的东西

 #!/bin/bash SCREEN_W=$(xwininfo -root | sed -n 's/^ Width: \(.*\)$/\1/p') SCREEN_H=$(xwininfo -root | sed -n 's/^ Height: \(.*\)$/\1/p') NAME='Navigator.Firefox' wmctrl -xlG | awk -v W="$SCREEN_W" -v H="$SCREEN_H" -v NAME="$NAME" '$7==NAME && $3>=0 && $3=0 && $4 

如果愿意,您可以硬编码屏幕的宽度和高度,如果您想要单行,则可以NAME。 我不知道你想如何处理与NAME匹配的多个窗口。 这将集中他们所有。

对于metacity,可以使用wmctrl -lwmctrl -l第二个字段找到桌面窗口数。