Devil's Pie - утилита, дополняющая возможности Metacity - стандартного менеджера окон среды GNOME. Как говорит ее разработчик, Ross Burton, на создание Devil's Pie его вдохновила опция «Matched Windows» старого менеджера, SawFish, и недостаток функционала в Metacity.
Данная утилита позволяет применять к приложениям набор правил по некоторым шаблонам. Например, с ее помощью можно запустить любое приложение в свернутом состоянии, указать его местоположение на экране и номер рабочего стола, не показывать приложение в списке задач и т.п.
Правила
Devil's Pie работает с набором правил вида
(if a b c)
Здесь а - проверяемое условие, b - выполняемое действие, если условие выполнено, с - если условие не выполнено. Правила надо хранить в текстовом файле с расширением .ds. Devil's Pie по умолчанию загружает все такие файлы из папки ~/.devilspie. Создатель рекомендует хранить по одному правилу в файле, однако можно использовать объединение конструкций и хранить несколько правил в одном файле. Можно запускать Devil's Pie, используя только определенные файлы правил, прописывая их в параметрах командной строки.
Условия
В качестве условия может выступать одна из следующих конструкций:
(is a b)
Выполняется, когда строка а совпадает со строкой b.
(contains a b)
Выполняется, когда строка b является подстрокой a.
(matches a b)
Выполняется, когда строка а соотвествует регулярному выражению b. Пример:
(matches "ubuntu" "[bntu]{6}") - true (matches "ubuntu" "[0-9]+") - false
Условия можно усложнять с помощью операторов and, or, not (используется префиксная нотация). Пример:
(or (and a (not b)) c d)
Выражение будет истинным, когда будут истинны либо c, либо d, либо одновременно ф будет истинно и b - ложно.
Свойства окон
В качестве проверяемых строк можно использовать следующие свойства окон:
window_name - заголовок. window_role - роль, определенная в WM_WINDOW_ROLE. application_name - имя приложения. window_workspace - номер рабочего стола. window_class - класс окна. window_xid - XID. window_property свойство - другие свойства.
Полный список возможных параметров можно посмотреть здесь: http://standards.freedesktop.org/wm-spec/wm-spec-latest.html#id2511080
Действия
Основные действия:
geometry - задает положение и размер окна.
В качестве аргумента используется строка X-GeometryString:
[<width>{xX}<height>][{+-}<xoffset>{+-}<yoffset>]
Пример:
(geometry "400x300+0-22")
fullscreen - перевод в полноэкранный режим. maximize - развернуть на весь экран. unmaximize - обратное действие. minimize - свернуть. unminimize - развернуть. close - закрыть окно. pin - поместить на всех рабочих столах. set_workspace N - переместить на рабочий стол N. skip_tasklist - не показывать окно в списке задач. above - окно будет расположено поверх всех окон. wintype тип - задает тип окна: "normal", "dialog", "menu", "toolbar", "splashscreen", "utility", "dock","desktop". opacity N - задает прозрачность в процентах. spawn_sync сommand - выполняет внешнюю команду.
Некоторые действия можно применить не ко всем типам окон, например диалоговые окна не принимают команду изменения размера. Обойти это ограничение можно с помощью команды
wintype "normal"
Более полный набор действий можно посмотреть здесь: http://foosel.org/linux/devilspie.
Объединение действий
Действия можно объединять с помощью конструкции
(begin a1 a2 ... an)
Также можно и объединять несколько правил в одном файле:
(begin (if a b c) (if d e f) )
Примеры
Прикрепить спикок контактов Gaim Buddylist ко всем рабочим столам с размером 340×630 пискелей и с положением x=4, y=150.
(if (and (is (application_name) "gaim") (is (window_name) "Buddy List") ) (begin (pin) (geometry "340x630+4+150") ) )
Переместить firefox на рабочий стол №2 и развернуть окно на весь экран
(if (is (application_name) "firefox-bin") (begin (set_workspace 2) (maximize) ) )
Закрыть окно KAlarm при запуске системы.
Создаем в папке ~/.devilspie файл kalarm.ds:
(if (is (window_name) "KAlarm" ) (begin (close) (spawn_sync "bash -c \"ps auxww| grep -E 'devilspie(.*)kalarm' | awk '{print \$2}'| xargs kill\"") ) )
Добавляем в «Запускаемые приложения» команду
devilspie ~/.devilspie/kalarm.ds
Таким образом, как только Devil's Pie видит окно KAlarm, он закрывает его (сворачивает в трей) и завершает свою работу.
Развернуть окно Counter-Strike, запущенного под wine, на весь экран.
Создаем в папке ~/.devilspie файл cs.ds:
(if (matches (window_name) "Counter-Strike") (begin (wintype "normal") (fullscreen) ) )
Добавляем в «Запускаемые приложения» команду
devilspie ~/.devilspie/cs.ds
Окно диалоговое, и просто так развернуть его во весь экран не получится. Поэтому начала ему назначаем тип. В отличие от первого случая, Devil's Pie будет постоянно отслеживать окно и не будет завершаться после применения правила.
Ссылки
Одна из самых подробнейших документаций по утилите на английском языке http://foosel.org/linux/devilspie
Сайт разработчика: http://www.burtonini.com/blog/computers/devilspie