我不认为这是内置于系统中的,但是否有可能毫不费力地做到这一点?
假设我用热键打开一个特定的程序,当我再次按下该热键时,程序窗口就会出现在前面。
我想在 Ubuntu 9.04 上执行此操作。
也许使用 D-Bus?有专家吗?
更新:以下是我最终得到的结果,希望对大家有帮助:
#!/bin/bash
if [ -f "/tmp/myterm.pid" ]; then
WID=`cat /tmp/myterm.pid`
xdotool windowactivate $WID
if [ "$?" != "0" ]; then
WID=""
fi
else
WID=`xdotool search --title "UNIQUE TITLE" | head -1`
fi
if [ "$WID" == "" ]; then
/usr/bin/gnome-terminal --window-with-profile=MYPROFILE "$@"
WID=`xdotool search --title "UNIQUE TITLE" | head -1`
echo $WID > /tmp/myterm.pid
else
xdotool windowactivate $WID
fi
当然可以简化,但我不是bash
高手。另外,为了让我的示例能够正常工作,我在终端中创建了一个自定义配置文件,该配置文件将一个唯一的标题应用于窗口,以便以后可以找到它。可能性是无穷无尽的!
答案1
该wmctrl
程序正是您要找的(sudo apt-get install wmctrl
)。您可以使用命令wmctrl -a "AppTitle"
将应用程序置于最前面。wmctrl -l
将列出所有可用窗口,因此编写一个 shell 脚本来检查您的程序是否正在运行并启动它或将其置于最前面应该很容易。然后您只需将其绑定到键盘快捷键即可。
首先将以下脚本保存在某个地方,我将使用/home/jtb/code/bringToFront
。它需要两个参数,第一个是您在终端上键入以启动程序的内容,第二个是程序窗口标题的子字符串。如果标题中没有恒定的唯一字符串,那么您需要做更多的工作来找到程序的窗口。
#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]
then
wmctrl -a "$2"
else
$1 &
fi
将脚本放在当前目录中,运行
chmod +x bringToFront
以使脚本可执行。然后确保它能正常工作;要启动/聚焦 Firefox,您可以运行./bringToFront firefox "Mozilla Firefox"
。现在我们需要绑定一个快捷键。运行
gconf-editor
并向左导航文件夹结构到/apps/metacity/keybinding_commands
。双击第一个
command
空白值,可能是command_1
。输入脚本的完整路径并提供两个参数,例如/home/jtb/code/bringToFront firefox Firefox
。从左侧面板中选择
global_keybindings
下一个文件夹。找到run
与您刚刚定义的命令匹配的条目,可能是run_command_1
。双击它并输入要使用的键盘快捷键。将修饰符放在尖括号中,例如<Ctrl><Alt>F
。
现在Control++会将您的 Firefox 窗口置于最前面,或启动它Alt(F如果它尚未运行)。
答案2
这是使用 的另一种方法xdotools
。弹出的进程由运行它所发出的命令行识别(不需要 pid 文件或唯一的窗口标题)。
#!/bin/bash
cmd="$@"
# command line to be run. Note that the resulting
# process will hold this in /proc/PID/cmdline
pid=`pgrep -nf "^$cmd$"`
# most recent process having "$cmd" in /proc/PID/cmdline
if [ -z "$pid" ]; then # no pid
exec $cmd
# run command
else
winid=`xdotool search --all --pid $pid --onlyvisible | head -1`
# first visible window owned by pid
xdotool windowactivate $winid
# give window focus
fi
答案3
我遇到了同样的问题,由于没有找到合适的解决方案,因此我提出了一个:
https://hyperkeys.xureilab.com
https://github.com/xurei/hyperkeys
您可以使用自己定义的快捷方式固定窗口。我个人使用 SHIFT+ALT+[QWER] 来固定窗口,使用 ALT+[QWER] 来将其置于最前面。但是,如果应用程序未打开,则无法打开它。
这是一个开源的、Linux 优先的工具。还有 Windows 版本。
希望有帮助!我正在寻找反馈,所以如果你有任何问题,请创建一个问题 ;-)
答案4
这个解决方案没有参数化,但我已经用它来聚焦或者开始gnome 计算器。
-R 选项查找窗口或失败,如果找到,则将其移动到当前桌面,提升并赋予焦点。gnome-calculator 将其窗口命名为计算器,它可以轻松参数化,但我从未发现需要这样做。我已将其映射到Ctrl-Alt-c
。
#!/bin/bash
# start the calculator and raise and focus (requires wmctrl)
# X Tian 06sep2017 created
wmctrl -R Calculator
if [[ $? -ne 0 ]]
then
gnome-calculator &
fi