Ratpoison - screen в иксах

11 September 2009 #wm

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

На сегодняшний день уже существует целый ряд тайловых оконных менеджеров, отличающихся своим функционалом.

Начиная от скромного dwm, настройка которого осуществляется путем правкой исходного кода программы с последующей перекомпиляцией, имеющим только базовый функционал и заканчивая xmonad, где настройка осуществляется уже на языке программирования haskell и является не тривиальной задачей.

небольшое отступление: сегодня ради повторного эксперимента установил xmonad, пришлось скачать чуть больше 80 мегабайт пакетов, таких как ghc, xmonad и xmonad-contrib. Работает довольно шустро, но когда попытался изменить конфигурацию по умолчанию – голову сломал. Начал удалять, оказалось, что в установленном виде перечисленные пакеты занимали 289 мегабайт. На мой взгляд тайловому оконному менеджеру отдавать столько пространства – это излишество, проще гном поставить, полноценную DE.

Но сегодня я постараюсь осветить тайловый оконный менеджер RatPoison, о котором в русскоязычном интернете практически ничего не слышно. Появлялись небольшие обзорные статьи muhas, но он не описывал сам процесс настройки оконного менеджера. А это самое интересное! Кстати, перевод базового руководства ratpoison на русский язык можно найти на странице его  сайта.

RatPoison (крысиный яд) – именно такое название выбрали разработчики, показывая, что данный менеджер позволяет управлять окнами без использования мыши. По сути, если посмотреть функционал данного оконного менеджера, то становиться понятным, что он очень близок к функционалу screen, консольной программы, позволяющей организовать работу с программами в консоли.

RatPoison

Метод работы с клавиатурой очень похож на управление, используемое в emacs, где используются клавиатурные комбинации с префиксами.

По умолчанию используется префикс C-t, который используется для того, чтобы показать оконному менеджеру, что следующая комбинация будет предназначена именно для него. Для того, чтобы C-t передать именно текущей программе (например открыть новую вкладку в огнелисе), необходимо использовать комбинацию C-t t.

Для изменения префикса используется команда escape, например для использования win-z:

escape s-z

Все окна открываются на весь экран, не перекрывая друг друга. Причем режим плавающих окон в данном оконном менеджере даже не предусмотрен, хотя диалоговые окна показываются корректно. Рабочую область экрана можно разбивать на определенные части, в которых будут размещаться открытые программы. Управление рабочими областями осуществляется путем ввода определенной клавиатурной последовательности. По умолчанию C-t s разбивает область на две части по горизонтали, а C-t S на две части по вертикали.

Информацию по используемым клавиатурным комбинациям можно получить используя сочетание C-t ?

Настройка оконного менеджера осуществляется путем правки файла конфигурации ~/.raptoisonrc в котором размещаются описание внешнего вида диалогов оконного менеджера, время показа всплывающих сообщений и самое главное – описание клавиатурных комбинаций, определенных пользователем.

Для того, чтобы задать оформление основных элементов RatPoison, используются следующие строки:

unmanage MPlayer                         # делаем MPlayer плавающим
startup_message off                      # отключаем приветствие
exec xsetroot -cursor_name left_ptr      # устанавливаем курсор
# Причем установка курсора действует великолепно, в отличие от awesome.
exec rpws init 4 -k                      # создаем 4 рабочих стола
msgwait 3                                # задаем ожидание при показе оповещений
wrap on                                  #
set winname name                         # отображение имени окна
set winliststyle column                  #
set font -*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-* # используемый шрифт
set bgcolor #e7e3e7                      # цвет фона
set fgcolor #737373                      # цвет шрифта
set inputwidth 300                       # ширина строки ввода по умолчанию
set border 0                             # толщина обрамления окна
set wingravity center                    #
set barborder 1                          # толщина обрамления диалогового окна
set bargravity center                    # расположение диалогового окна
set barpadding 2 2                       #

Теперь нам необходимо определить клавиатурные комбинации для запуска основных программ, переключения между открытыми окнами, и т.д. Для этого используется команда bind, например для изменения запуска терминала на другую программу:

unbind c
bind c exec sakura

При использовании bind нужно помнить, что если описывается только клавиатурная комбинация, то она используется вместе с префиксом C-t, для того, чтобы определить комбинацию, которая будет работать без префикса, необходимо перед описанием сочетания клавиш указывать команду definekey с ключевым словом top, например:

definekey top s-S-Return exec sakura

Для того, чтобы изменить сочетание клавиш на переключение между окнами на привычные Alt-Tab нужно указать следующие строки:

definekey top M-Tab next
definekey top M-ISO_Left_Tab prev

Определим довольно сложную задачу, такую как запуск gimp:

# -- gimp (after second command (s-G), to restore gimp in frames, run s-2)
definekey top s-g exec ratpoison -c "hsplit 1/5" -c "focusright" -c "hsplit 3/4" && exec gimp
definekey top s-G exec ratpoison -c "exchangeright" -c "focusleft" -c "select 0" -c "focusleft" -c "select 1" && exec ratpoison -c "dedicate" -c "focusright" && exec ratpoison -c "dedicate" -c "focusright" && exec ratpoison -c "dedicate" -c "focusleft" && exec ratpoison -c "setenv fs2 `ratpoison -c 'fdump'`"

Для переключения между рабочими столами используются сочетания Alt-{F1-F9}, для переопределения можно использовать следующую конструкцию:

definekey top s-1 exec rpws 1
definekey top s-2 exec rpws 2
definekey top s-3 exec rpws 3
definekey top s-4 exec rpws 4

Для того, чтобы запустить программу, используется сочетание клавиш C-t ! Но для того, чтобы организовать более удобный запуск программ, необходимо использовать сторонние программы. На мой взгляд самой удобной является программа dmenu.

definekey top s-m exec $(dmenu_path | dmenu)

С ее же помощью можно получить список открытых окон на текущем рабочем столе:

definekey top s-w exec ratpoison -c "select `ratpoison -c "windows" | dmenu | awk '{print $1}'`"

Эта же функция есть непосредственно в самом оконном менеджере, и по умолчанию назначена на сочетание клавиш C-t w.

По умолчанию RatPoison не имеет никаких панелей и для получения служебной информации очень удобно использовать dzen2 или conky. Для того, чтобы показывать панель, не перекрываемую другими окнами, достаточно в файла конфигурации добавить следующую строку:

set padding 0 14 0 0

В данном случае показан пример отведения поля в 14 пикселей вверху экрана. И теперь можно в выделенной области выводить панель dzen2 или организовывать вывод conky.

По сути своей RatPoison очень минималистский, но довольно функциональный оконный менеджер. Достаточно только немного поколдовать над его файлом конфигурации. Странно даже, что в России он не пользуется популярностью. Число пользователей по всему миру очень невелико и информации о данном оконном менеджере найти очень тяжело, особенно на русском языке.

Надеюсь, моя статья поможет найти RatPoison своих поклонников и у нас…