Я хочу связать клавишу так, чтобы конкретное приложение (в моем случае Pidgin или Calculator) получило фокус, затем, когда я закончу и снова нажму клавишу, фокус возвращается к ранее сфокусированному приложению, как будто я никогда не менялся фокус.
Например:
До:
Хром - Alt kbd> + Tab kbd> → Файлы - Alt kbd> + Tab kbd> → Chromium
blockquote>Использование привязки клавиш:
Chromium - (связанный ключ) kbd> → Pidgin (ответ в чате) или Calc (вычислить что-либо) - (связанный ключ) kbd> → Chromium
blockquote>После использования выше:
Хром - Alt kbd> + Tab kbd> → Файлы (не Pidgin) - Alt < / kbd> + Tab kbd> → Chromium
blockquote>Другие альтернативы приветствуются.
Как вы знаете, переключение между двумя приложениями можно выполнить с помощью Alt kbd> + Tab kbd>. Но он предназначен для прохождения всех открытых окон по Z-порядку; поэтому каждый раз, когда активируется третье приложение, меняется Z-порядок, и обычно раздражает необходимость синхронизации двух приложений, которые вас интересуют, для переключения.
Я прочитал ваше требование о том, чтобы у вас было основное приложение Chromium и вторичное приложение, давайте перейдем к gnome-calculator
, на которое вы часто переключаетесь и хотели бы переключаться между ними с помощью единой привязки клавиш. [ 1124]
Однако вы можете создать это поведение с помощью сценария и пользовательской привязки клавиш. Чтобы создать сценарий, я хотел что-то простое (для меня) понять, и это можно было легко изменить без компиляции; поэтому я использовал Python.
#!/usr/bin/python
import gtk
import re
import sys
import time
import wnck
#windows are found through the titlebar, not the app name
#edit the titles to change the apps
titlePrimaryApp = re.compile(".*Chromium*")
titleSecondaryApp = re.compile("Calculator")
screen = wnck.screen_get_default()
#needed for the code that gets the windows list to work
while gtk.events_pending():
gtk.main_iteration()
active_window = screen.get_active_window()
open_windows = screen.get_windows()
#if the primary app is already activated, find the secondary app, and activate it
if titlePrimaryApp.match(active_window.get_name()):
for w in open_windows:
if titleSecondaryApp.match(w.get_name()):
w.activate(int(time.time()))
#otherwise, activate the primary app
else:
for w in open_windows:
if titlePrimaryApp.match(w.get_name()):
w.activate(int(time.time()))
Чтобы использовать этот сценарий:
myswitcher.py
. Хорошее место для этого - /home/<user>/bin
. chmod +x myswitcher.py
sudo apt-get install python-wnck
. Это библиотека, которая работает с окнами Gtk. Он не установлен по умолчанию. Свяжите скрипт с привязкой клавиш.
Самый простой способ сделать это - создать собственный ярлык в System Settings >> Keyboard >> Shortcuts >> Custom Shortcuts
.
После выделения пользовательских ярлыков в списке слева щелкните знак плюса, чтобы добавить ярлык.
Во всплывающем окне выберите имя для ярлыка и введите команду /path/to/myswitcher.py
.
Новый ярлык будет добавлен в список ярлыков в окне. Справа от названия будет слово отключено . Установите привязку клавиш, нажав слово отключено , а затем введите нужную комбинацию клавиш.
Убедитесь, что вы выбрали связывание клавиш, которое не конфликтует с другими программами. Эти привязки установлены на более низком уровне и будут вытеснять сценарий. Я выбрал Ctrl kbd> + \ kbd> (обратная косая черта), поскольку он больше не используется и является более или менее зеркальным отображением Alt kbd> + Tab kbd> (по крайней мере, на моей раскладке клавиатуры).
Вам необходимо выйти и снова войти в систему, прежде чем будет работать настраиваемая привязка клавиш.
Благодарность за помощь со сценарием:
Я разработал большую часть логики сценария, прежде чем искать примеры (и в этом нет недостатка в wnck
примерах); но мне нужно отдать этот ответ на StackOverflow, который решил некоторые проблемы, с которыми я столкнулся при использовании регулярных выражений, синтаксиса для передачи временной метки gtk и, самое главное, предоставления ключевых строк о событиях Gtk. Без этих двух строк get_windows возвращает пустой список.