О новом пакете, позволяющем настраивать глобальные клавиши на UNIX-подобных системах под X Window System.
Для очередного проекта с GUI на GTK 3 мне понадобилась возможность активировать функции приложения даже когда его окно не находится в фокусе.

Моя Ubuntu работает на X11 (X Window System), в которой имеется возможность перехвата нажатия определённых клавиш на глобальном уровне. То есть, можно запустить перехватчик в отдельной нити процесса приложения, а он будет слушать события X и при наступлении нужных запускать определённые функции.

Казалось бы, учитывая распространённость X11, наверняка существуют готовые пакеты под Python, не слишком большие и при этом гибкие. Однако поиски успехом не увенчались. Пакеты и код похожий на то, что мне нужно действительно встречался во многих местах, но он был привязан к чему-то большему. То к QT, то к GTK, то к выполнению каких-то других задач, в которых тоже требуется перехват.

Короче говоря, так и появился keybind.

Этот пакет можно использовать как из ваших приложений на Python, так и в качестве самостоятельного приложения с CLI.
Рассмотрим примеры использования.

Вызов из Python

В самом простом виде перехват запускается при помощи KeyBinder.activate(), но можно и вручную создать экземпляр KeyBinder и оперировать им.

    from keybinder import KeyBinder


def do():
print('done')


KeyBinder.activate({

'Ctrl-K': do, # Это сочетания запустит функцию do.
'Shift-R': None, # А это мы просто перехватим.

# Если требуется запустить перехватчик в отдельной нити,
# то прямо скажем об этом.
}, run_thread=True)

Использование CLI

После уставночки пакета по команде keybind вам станет доступен интерфейс командной строки.

С его помощью можно назначить на нажатие клавиш запуск каких-либо приложений.

    $ keybind -k "Ctrl-K=gnome-calculator &" -k "Ctrl-D=python run.py somearg --someopt"

В примере выше мы на нажатие Ctrl-K повесили вызов приложения калькулятор, а на Ctrl-D — вызов Python для исполнения какого-то нашего скрипта run.py с неким набором аргументов. Теперь, пока keybind активен, мы можете использовать указанные сочетания клавиш для вызова нужных приложений.

Для гурманов keybind предоставляет возможность сканирования кодов клавиш. После запуска этого режима все нажатия клавиш будут перехвачены, а их коды выведены в консоль. Приготовьте мышь, она может понадобиться.

    $ keybind --sniff

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

Навешу на Ctrl-T кипечение воды для чая.

Категории

Язык
Окружение
Область
Платформа
Проект

На заметку
В разделе «События» можно узнать о надвигающихся событиях мира Python, а также поделиться своими. Если вы являетесь организатором встречи/конференции/спринта, зарегистрируйте это событие в указанном разделе, чтобы о нём узнали все желающие.