# Ratpoison - screen в иксах

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

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

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

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

Но сегодня я постараюсь осветить тайловый оконный менеджер *RatPoison*, о котором в
русскоязычном интернете практически ничего не слышно. Появлялись небольшие обзорные статьи
<a href="http://muhas.ru" rel="nofollow">muhas</a>, но он не описывал сам процесс настройки оконного менеджера. А это самое интересное! Кстати, перевод базового руководства *ratpoison* на русский язык можно найти на <a href="http://muhas.ru/?p=62" rel="nofollow">странице его  сайта</a>.

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

![](https://static.juev.org/2009/09/ratpoison.png)

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

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

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

```conf
escape s-z
```

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

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

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

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

```conf
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*, например для изменения запуска терминала на другую программу:

```conf
unbind c
bind c exec sakura
```

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

```conf
definekey top s-S-Return exec sakura
```

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

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

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

```conf
# -- 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-&#123;F1-F9}, для переопределения можно использовать следующую конструкцию:

```conf
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.**

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

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

```conf
definekey top s-w exec ratpoison -c "select `ratpoison -c "windows" | dmenu | awk '&#123;print $1}'`"
```

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

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

```conf
set padding 0 14 0 0
```

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

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

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

