xatk 0.1 — первая стабильная версия переключателя окон
Напомню, что xatk — переключатель окон для иксов. Он работает в качестве демона, и при появлении нового окна присваивает ему уникальное сочетание клавиш, по нажатию на которое, он поднимает его наверх. Более подробно о xatk я писал в своей первой заметке.
С момента первого экспериментального выпуска прошёл почти год. Версию 0.1 я видел несколько другой, но созданию релиза поспособствовало несколько факторов. С момента выхода прошлой версии было устранено несколько серьёзных ошибок, некоторые из которых могли приводить к падениям. Высокой активности вокруг xatk последнее время не было, и текущее состояние я находил достаточно стабильным. Внесение существенных изменений могло бы внести регрессию. Вследствие этого я и создал релиз1.
Что нового?
В xatk 0.1 появились постоянные сочетания клавиш для определённых пользователем окон. Для этого в секции правил для выбранного окна необходимо поставить восклицательный знак перед значением. Например, следующее правило
class.emacs = !e
приведёт к тому, что окна Emacs'а всегда будут вешаться на клавишу e.
Если оставить значение правила пустым, то окно будет проигнорировано (на него не будет повешена ни одна клавиша):
class.firefox =
Помимо свойств окон class и title, теперь можно использовать и instance.
Если выполнить команду xprop WM_CLASS
, то первое значение — это instance, а
второе — class.
Теперь вместо свойства можно использовать шаблоны, комбинирующие несколько свойств одновременно. Шаблон — это произвольная строка, где вместо class, instance и title подставляются реальные свойства окон. Поскольку значением правила является регулярное выражение, это даёт возможность эмулировать логические выражения из указанных свойств. Например:
class and tilte but not instance = myclass and mytitle but not (?!myinstance)
По-умолчанию xatk теперь игнорирует некоторые типы окон. К ним относятся
сплеш-скрины, доки, окна, отвечающие за отрисовку рабочего стола и некоторые
другие. За то, на какие типы окон вешать клавиши, отвечает опция window_types
.
Были добавлены раскладки QWERTZ and AZERTY. Похоже, вовсе не очевидно, зачем это нужно знать xatk. xatk учитывает раскладку при создании сочетаний клавиш для вторых, третьих, ..., n-ых окон в группе. Например, второму окну Firefox'а, которому соответствует клавиша f, будет присвоено сочетание f+g, третьему — f+h и т.д. Клавиши g и h были выбраны, потому что они близко находятся к f, и как следствие их удобнее нажимать. Если алфавитную часть клавиатуры условно разделить на две части, то от клавиши, находящейся в левой части, клавиши второго уровня будут располагаться справа от неё, а от клавиши в правой части — соответственно слева.
Что починено?
Наверное, об устранённых ошибках большинству читать не так интересно, особенно если они с ними не сталкивались. Поэтому расскажу кратко об основных.
Была устранена ошибка, связанная с получением свойств окон, из-за которой xatk мог падать, или могли происходить другие сложно предсказуемые события.
Исправлена ошибка, из-за которой xatk не хотел поднимать окна при активированных Num Lock или Caps Lock.
Раньше нельзя было запустить xatk до менеджера окон, например из файлов ~/.xinitirc или ~/.xprofile. Теперь можно.
Другие изменения
Теперь конфигурационный файл ищется, кроме ~/.xatkrc, ещё и по пути ~/.xatk/xatkrc.
Файл xatk.py был переименован в xatk. Шебанг был изменён с #!/usr/bin/env
python
на #!/usr/bin/env python2
в связи с моим переходом на Arch
PEP 394.
Откуда качать и куда жаловаться?
Главная страница: http://code.google.com/p/xatk
Страница загрузки: http://code.google.com/p/xatk/downloads/list
Баг-трекер: http://code.google.com/p/xatk/issues/list
Вики: http://code.google.com/p/xatk/w/list
Google-группа: http://groups.google.com/group/xatk-discuss, она же и список рассылки: xatk-discuss@googlegroups.com
Чтобы получить свежую версию из репозитория, не дожидаясь следующего релиза, необходимо выполнить следующее:
hg clone https://code.google.com/p/xatk/
Затем можно обновлять репозиторий с помощью следующей команды:
hg pull -u
Что в планах?
Всё, что в планах, можно и даже нужно обсуждать.
-
Сделать запуск нескольких экземпляров xatk невозможным. Зачем? А вы попробуйте запустить :)
-
Возможность запуска программы, если соответствующее окно не существует. С самого начала я не считал необходимым реализовывать данную функцию, полагая, что это задача не xatk. Но фич-реквесты переубедили меня.
Тому ещё поспособствовало две вещи. Первая — это то, что с помощью внешних программ данную проблему не решить. Вторая — реализация постоянных клавиш (без них я фичу представлял несколько иначе). Сейчас оптимальным я вижу решение добавления возможности ручного указания команд для правил с постоянными клавишами.
-
Поднимать окна одной группы можно не в порядке их создания, а в порядке их последнего использования2. Если реализовать данную функцию, то привязка двухуровневых клавиш к окнам одной группы практически станет бессмысленной, так как будет очень сложно угадать, какое сочетание клавиш какому окну в группе соответствует.
-
Возвращение окну предыдущего состояния, если оно не выбрано при циклическом переборе окон. Если сейчас циклически перебирать окна, то все поднятые окна остаются наверху. Правильно было бы возвращать их на предыдущую позицию, а ранее свёрнутые окна опять сворачивать.
-
Если реализовать фичи 3 и 4, то мне кажется, можно было бы выпилить двухуровневые сочетания клавиш. Как вы считаете? Ещё один момент, говорящие в пользу выпиливания: можно будет поднимать окна при нажатии (а не отпускании) клавиш при циклическом переборе. Интересно, кто-то пользуется двухуровневыми сочетаниями клавиш? Как часто? Променяли ли бы вы их на п. 3-4?
-
Может, добавить возможность выйти из программы? :)
-
Получение списка окон, клавиш и свойств. Однажды muhas реквестил нечто подобное. Так вот, я всё ещё помню. Я представлял (и всё ещё представляю) реализацию п.1 с задействованием именованного канала. Его удобно было бы использовать и для разного рода взаимодействия с xatk. Например, посредством команды
xatk remote list
получать список окон, а поxatk remote exit
выходить. Но боюсь, для интерактивного использования, это будет плохо подходить из-за значительного времени старта интерпретатора. Так что, если реализовывать, то, скорее всего, через обычный файл. В общем, эта фича кому-то ещё нужна? -
Интересно, сталкивались ли вы с такими программами, которые спамят заголовки окон частыми изменениями (как, например, это делает xatk)? Если нет, то я бы предпочёл решать проблемы по мере их поступления...
-
Интересно, что xatk 0.0.1 вышел в день выхода GNOME 3, а xatk 0.1 — в день десятилетия Arch Linux. ↩
-
На самом деле в порядке, в котором они находятся в списке окон. Например, когда окно сворачивается, оно может быть помещено в конец списка, несмотря на то, что оно было использовано последним. Реальное поведение может отличаться в разных оконных менеджерах. Например, при сворачивании окно может быть помещено не в конец, а после всех несвёрнутых окон, но перед другими свёрнутыми. ↩
Комментарии