9

Я не думаю, что это встроено в систему, но возможно ли это сделать без особых хлопот?

Скажем, я открываю определенную программу с помощью горячей клавиши, и когда я снова нажимаю эту горячую клавишу, окно программы переносится на передний план.

Я хочу сделать это на 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 Wiz. Также, чтобы мой пример работал, я создал собственный профиль в Терминале, который применяет уникальный заголовок к окну, чтобы его можно было найти позже. Возможности безграничны!

3 ответа3

9

Программа wmctrl именно то, что вы ищете (sudo apt-get install wmctrl). Вы можете использовать команду wmctrl -a "AppTitle" чтобы вывести приложение на передний план . wmctrl -l выведет список всех доступных окон, поэтому должно быть легко написать сценарий оболочки, который проверяет, запущена ли ваша программа, и запускает ее или выводит на передний план. Затем вы можете просто привязать это к сочетанию клавиш.

Сначала сохраните где-нибудь следующий скрипт, я буду использовать /home/jtb/code/bringToFront . Он принимает два аргумента: первый - то, что вы вводите в терминале для запуска программы, второй - подстрока заголовка окна программы. Если в заголовке нет постоянной уникальной строки, вам нужно проделать немного больше работы, чтобы найти окно программы.

#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]  
then
    wmctrl -a "$2"
else
    $1 &
fi
  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 на передний план или запустит его, если оно еще не запущено.

3

Вот еще один способ сделать это с помощью 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
0

Спасибо за это. Я использую его модифицированную версию для создания сценария ярлыка окна, который также поддерживает циклический просмотр нескольких экземпляров. Если ты заинтересован:

http://somanov.wordpress.com/2009/12/02/window-shortcuts-for-linux-desktops/

ура :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .