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


11

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

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

Я хочу сделать это на 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
Для этой простой задачи метод jtb работает лучше, потому что xdotools иногда выдает ошибки X, а wmctrl быстрее.
Иван

Ответы:


10

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. Спасибо!
Иван

Я забыл упомянуть, что я также использовал глобальные ярлыки и команды в gconf для полного достижения эффекта (консоль Quake для бедного человека!).
Иван

Ах, да, я сам не использовал xdotool, но, похоже, это даст вам больше гибкости. Хороший вопрос по поводу gconf. Поскольку это довольно неочевидно, я мог бы также отредактировать ответ, чтобы включить больше деталей для всех, кто хочет это сделать.
JTB

Poort Man's Quake консоль? Ты имеешь ввиду Тильду? freshmeat.net/projects/tilda
предварительное утверждение

Да, я тоже использую Tilda, но я работаю над несколькими проектами в течение недели, и для каждого из них я всегда открываю три или четыре вкладки, поэтому быстрое переключение на консоль проекта («рабочее пространство») без загромождения Tilda очень полезно для меня.
Иван

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/

ура :)


0

Ответ, опубликованный jtb ранее, превосходен, но иногда вам может потребоваться сопоставить точные заголовки (например, вы хотите открыть «GitKraken», но заголовок вашего браузера «GitKraken vs CLI» также соответствует запросу).

#!/bin/bash
if [ $1 == "-exact" ]
then
    additional_arguments="-F "
    app_launch_command=$2
    app_title=$3
else
    additional_arguments=""
    app_launch_command=$1
    app_title=$2
fi

if [ `wmctrl -l $additional_arguments| grep -c "$app_title"` != 0 ]
then
    wmctrl $additional_arguments -a "$app_title"
else
    $app_launch_command &
fi

Так что теперь вы можете вызывать свой сценарий принесения:

#exact match
./bringToFront.sh -exact "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh -exact <command_to_launch_the_app> <app_title

#partial match like the old script
./bringToFront.sh "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh <command_to_launch_the_app> <app_title>


0

Это решение не параметризовано, но я использовал его для фокусировки или запуска гном-калькулятора.

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

0

У меня была такая же проблема, и так как я не нашел подходящего решения, я сделал одно:

https://hyperkeys.xureilab.com

https://github.com/xurei/hyperkeys

Вы можете прикрепить окно с помощью определенного вами ярлыка. Я лично использую SHIFT + ALT + [QWER], чтобы закрепить, и ALT + [QWER], чтобы вывести на передний план. Вы не можете открыть приложение, если оно не открыто.

Это инструмент с открытым исходным кодом, linux-first. Версия для Windows также доступна.

Надеюсь, поможет ! Я жду обратной связи, поэтому, если у вас есть какие-либо вопросы, создайте проблему ;-)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.