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

Я хочу связать клавишу так, чтобы конкретное приложение (в моем случае Pidgin или Calculator) получило фокус, затем, когда я закончу и снова нажму клавишу, фокус возвращается к ранее сфокусированному приложению, как будто я никогда не менялся фокус.

Например:

До:

Хром - Alt + Tab → Файлы - Alt + Tab → Chromium

Использование привязки клавиш:

Chromium - (связанный ключ) → Pidgin (ответ в чате) или Calc (вычислить что-либо) - (связанный ключ) → Chromium

После использования выше:

Хром - Alt + Tab → Файлы (не Pidgin) - Alt < / kbd> + Tab → Chromium

Другие альтернативы приветствуются.

2
задан 25 May 2013 в 22:36

1 ответ

Как вы знаете, переключение между двумя приложениями можно выполнить с помощью Alt + Tab . Но он предназначен для прохождения всех открытых окон по 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()))

Чтобы использовать этот сценарий:

  1. Сохраните его в файле, например myswitcher.py. Хорошее место для этого - /home/<user>/bin.
  2. Сделайте его исполняемым: chmod +x myswitcher.py
  3. Вам понадобится: sudo apt-get install python-wnck. Это библиотека, которая работает с окнами Gtk. Он не установлен по умолчанию.
  4. Свяжите скрипт с привязкой клавиш.

    Самый простой способ сделать это - создать собственный ярлык в System Settings >> Keyboard >> Shortcuts >> Custom Shortcuts.

  5. После выделения пользовательских ярлыков в списке слева щелкните знак плюса, чтобы добавить ярлык.

  6. Во всплывающем окне выберите имя для ярлыка и введите команду /path/to/myswitcher.py.

  7. Новый ярлык будет добавлен в список ярлыков в окне. Справа от названия будет слово отключено . Установите привязку клавиш, нажав слово отключено , а затем введите нужную комбинацию клавиш.

  8. Убедитесь, что вы выбрали связывание клавиш, которое не конфликтует с другими программами. Эти привязки установлены на более низком уровне и будут вытеснять сценарий. Я выбрал Ctrl + \ (обратная косая черта), поскольку он больше не используется и является более или менее зеркальным отображением Alt + Tab (по крайней мере, на моей раскладке клавиатуры).

  9. Вам необходимо выйти и снова войти в систему, прежде чем будет работать настраиваемая привязка клавиш.

Благодарность за помощь со сценарием:

Я разработал большую часть логики сценария, прежде чем искать примеры (и в этом нет недостатка в wnck примерах); но мне нужно отдать этот ответ на StackOverflow, который решил некоторые проблемы, с которыми я столкнулся при использовании регулярных выражений, синтаксиса для передачи временной метки gtk и, самое главное, предоставления ключевых строк о событиях Gtk. Без этих двух строк get_windows возвращает пустой список.

0
ответ дан 25 May 2013 в 22:36

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

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