自定义热键/快捷方式打开/带到应用程序前面

Iva*_*van 12 linux keyboard-shortcuts gnome dbus

我不认为这是内置在系统中的,但是是否可以在没有太多麻烦的情况下做到这一点?

假设我用一个热键打开一个特定的程序,当我再次按下那个热键时,程序窗口被带到前面。

我想在 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
Run Code Online (Sandbox Code Playgroud)

当然可以简化,但我不是专家bash。此外,为了让我的示例正常工作,我在终端中创建了一个自定义配置文件,该配置文件将唯一标题应用于窗口,以便稍后找到。可能性是无止境!

jtb*_*jtb 11

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
Run Code Online (Sandbox Code Playgroud)
  1. 使用当前目录中chmod +x bringToFront的脚本,运行以使脚本可执行。然后确保它有效;要启动/聚焦 Firefox,您可以运行./bringToFront firefox "Mozilla Firefox".

  2. 现在我们需要绑定一个快捷键。运行gconf-editor并将文件夹结构导航到左侧/apps/metacity/keybinding_commands

  3. 双击第command一个空白值,可能是command_1。键入脚本的完整路径并提供两个参数,例如/home/jtb/code/bringToFront firefox Firefox.

  4. 从左侧面板中,选择global_keybindings,上一个文件夹。找到与run您刚刚定义的命令匹配的条目,可能是run_command_1。双击它并键入您要使用的键盘快捷键。将修饰符放在尖括号中,例如<Ctrl><Alt>F.

现在Control+ Alt+F将带给你的Firefox窗口前,或启动它,如果它尚未运行。