我有一个打开了数十个窗口的特定工作环境。如何以编程方式或使用命令行将已知名称/标题的窗口置于最前面?
答案1
我以前用过wmctrl -a <name>
,效果很好,但最近换成了xdotool
,例如:
xdotool search --name <name-or-regex-for-name> windowraise
它还具有许多其他功能。
安装:
sudo apt-get install xdotool
答案2
好了,在sudo apt-get install wmctrl
-ing 之后,你可以使用这个 bash 脚本:
#! /bin/bash
WINTITLE="Mail/News" # Main Thunderbird window has this in titlebar
PROGNAME="mozilla-thunderbird" # This is the name of the binary for t-bird
# Use wmctrl to list all windows, count how many contain WINTITLE,
# and test if that count is non-zero:
if [ `wmctrl -l | grep -c "$WINTITLE"` != 0 ]
then
wmctrl -a "$WINTITLE" # If it exists, bring t-bird window to front
else
$PROGNAME & # Otherwise, just launch t-bird
fi
exit 0
我发现这里
答案3
使用时xdotool
,似乎很难被带到前面全部仅使用一个命令即可为给定应用程序或类提供窗口。我最终通过for
在 shell 级别将其包装在循环中获得了更好的结果。使用 Bash:
for WINDOW in $(xdotool search --desktop 0 Firefox); do
xdotool windowactivate ${WINDOW}
done
几点说明:
- 默认情况下,
xdotool search
将在窗口名称、类和类名中搜索模式(此处Firefox
)。如果您想限制搜索空间,请使用相关的--class
、--name
或--classname
选项。 - 该
--desktop 0
选项将搜索限制在第一个桌面。这似乎是一种避免XGetWindowProperty[_NET_WM_DESKTOP] failed (code=1)
某些评论中提到的解决方法。 - 在撰写本文时,该
xdotool
项目自 2015 年以来一直处于停滞状态。它仍然是我首选的工具。由于个人原因,Jordan Sissel(原作者)不像过去那么活跃,所以不要犹豫为该项目做出贡献。
这是我在 AskUbuntu 上发布的答案,但我认为它与 Linux 风格无关,因此在这里也可能有用。