Как я могу сделать ярлык, чтобы поднять окно приложения, если оно существует?

Я постоянно переключаюсь между Sublime Text, Terminal и Chrome. Я хотел бы связать ярлык, например, "Alt + 1", чтобы открыть мой текущий терминал и текущий Google Chrome.

Прямо сейчас, каждый раз, когда я запускаю Google Chrome или терминал, он открывает новое окно. Любая идея?

Спасибо!

2 ответа

Решение

Метод в ответе мороси будет работать, но имеет несколько недостатков

  • Имеет задержку; при нажатии клавиши Super вам придется подождать около секунды, чтобы появились цифры.
  • Порядок элементов в панели запуска может меняться в зависимости от приложений, которые вы запускаете. Номер Chrome может быть другим тогда.

Альтернативный вариант

Вы можете просто сделать с помощью команды:

wmctrl -a chrome

который поднимет первое найденное окно с "хромом" в его названии. Это также подняло бы окно, в которое я сейчас пишу (a firefox окно с именем: "Ярлык для открытия текущего Google Chrome...")

Использование pid окна предотвратит это. На мой взгляд, поэтому более элегантно поставить команду:

wmctrl -ia "$(wmctrl -lp | grep "$(pgrep chrome)" | tail -1 | awk '{ print $1 }')"

под сочетанием клавиш (Alt + 1 будет работать), учитывая тот факт, что вам нужно иметь wmctrl установил тогда:

sudo apt-get install wmctrl

Как добавить команду в ярлык

  1. устанавливать wmctrl

    sudo apt-get install wmctrl
    
  2. создайте небольшой скрипт (откройте пустой файл, вставьте в него скрипт ниже)

    #!/bin/bash
    wmctrl -ia "$(wmctrl -lp | grep "$(pgrep chrome)" | tail -1 | awk '{ print $1 }')"
    

    Сохранить как raise_chrome.sh

  3. Добавьте скрипт в ярлык; выберите: Системные настройки> "Клавиатура" > "Ярлыки" > "Пользовательские ярлыки". Нажмите "+" и добавьте команду:

    /bin/bash /path/to/raise_chrome.sh
    

    (например) сочетание клавиш Alt + 1.

    Примечание: используйте абсолютный путь, например, не ~

объяснение

Команда на самом деле является "преобразованием" этого, и объяснение аналогично:

В разделе:

"$(wmctrl -lp | grep "$(pgrep chrome)" | tail -1 | awk '{ print $1 }')"

команда:

wmctrl -lp

перечисляет все окна, включая их pid и идентификатор окна. Результат передан

grep "$(pgrep chrome)"

который фильтрует (списки) все вхождения Chrome окна.

Затем,

tail -1

даст нам последний элемент в списке, который является последним созданным окном (так как wmctrl списки окон в хронологическом порядке).

awk '{ print $1 }'

наконец, даст нам первую строку в строке (из вывода wmctrl), который является идентификатором окна.

Команда:

wmctrl -ia <window_id>

Затем поднимет последнее созданное окно Chrome

Заметка

Не нужно говорить, что вы можете заменить chrome в команде любого другого приложения (имя процесса) и поместите их в отдельные комбинации клавиш.


РЕДАКТИРОВАТЬ

использовать приложение в качестве аргумента

Поскольку вы упоминаете Sublime Text, Terminal а также Chrome Вы можете использовать несколько ярлыков и запустить сценарий с приложением в качестве аргумента.

Сделать так

Используйте скрипт с небольшим отличием:

#!/bin/bash
app=$1
wmctrl -ia "$(wmctrl -lp | grep "$(pgrep "$app")" | tail -1 | awk '{ print $1 }')"

и запустить его впоследствии с помощью команд под сочетаниями клавиш:

sh /home/jacob/Bureaublad/raise.sh sublime_text
sh /home/jacob/Bureaublad/raise.sh gnome-terminal

а также

sh /home/jacob/Bureaublad/raise.sh chrome

Вы можете использовать alt-tab для быстрого переключения между программами.

Вы также можете использовать кнопку Super (также известную как кнопка Windows): Super+number. например. Super+3 откроет третье приложение в панели запуска вашего приложения. Чтобы быстро определить номера, связанные с приложениями, нажмите и удерживайте супер кнопку.

Другие вопросы по тегам