Пользовательские горячие клавиши / ярлыки для открытия / вывода на передний план приложения

4151
Ivan

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

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

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

9
Для этой простой задачи метод jtb работает лучше, потому что xdotools иногда выдает ошибки X, а wmctrl быстрее. Ivan 14 лет назад 1

3 ответа на вопрос

9
jtb

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 на передний план или запустит его, если оно еще не запущено.

Да, я узнал об этом пару минут назад, но я пошел с xdotool. Спасибо! Ivan 14 лет назад 0
Я забыл упомянуть, что я также использовал глобальные ярлыки и команды в gconf, чтобы полностью реализовать эффект (консоль Quake для бедняков!). Ivan 14 лет назад 0
Ах, да, я сам не использовал xdotool, но, похоже, это даст вам больше гибкости. Хороший вопрос по поводу gconf. Поскольку это довольно неочевидно, я мог бы также отредактировать ответ, чтобы включить больше деталей для всех, кто хочет это сделать. jtb 14 лет назад 0
Poort Man's Quake консоль? Ты имеешь ввиду Тильду? http://freshmeat.net/projects/tilda prestomation 14 лет назад 0
Да, я тоже использую Tilda, но я работаю над несколькими проектами в течение недели, и для каждого из них я всегда открываю три или четыре вкладки, поэтому быстрое переключение на консоль проекта («рабочее пространство») без загромождения Tilda очень полезно для меня. Ivan 14 лет назад 0
Милая. Люблю это. Пошел искать что-то подобное, чтобы заменить Guake - я хотел, чтобы эта функциональность не потеряла все мои художественные оформления окна. Fordi 8 лет назад 0
3
etuardu

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

ура :)

Похожие вопросы