Ratpoison – screen в иксах
В задачу тайловых оконных менеджеров вкладывают не только возможность управления окнами программ, но и непосредственное управление расположением окон на экране.
На сегодняшний день уже существует целый ряд тайловых оконных менеджеров, отличающихся своим функционалом.
Начиная от скромного dwm, настройка которого осуществляется путем правкой исходного кода программы с последующей перекомпиляцией, имеющим только базовый функционал и заканчивая xmonad, где настройка осуществляется уже на языке программирования haskell и является не тривиальной задачей.
небольшое отступление: сегодня ради повторного эксперимента установил xmonad, пришлось скачать чуть больше 80 мегабайт пакетов, таких как ghc, xmonad и xmonad-contrib. Работает довольно шустро, но когда попытался изменить конфигурацию по умолчанию – голову сломал. Начал удалять, оказалось, что в установленном виде перечисленные пакеты занимали 289 мегабайт. На мой взгляд тайловому оконному менеджеру отдавать столько пространства – это излишество, проще гном поставить, полноценную DE.
Но сегодня я постараюсь осветить тайловый оконный менеджер RatPoison, о котором в русскоязычном интернете практически ничего не слышно. Появлялись небольшие обзорные статьи muhas, но он не описывал сам процесс настройки оконного менеджера. А это самое интересное! Кстати, перевод базового руководства ratpoison на русский язык можно найти на странице его сайта.
RatPoison (крысиный яд) – именно такое название выбрали разработчики, показывая, что данный менеджер позволяет управлять окнами без использования мыши. По сути, если посмотреть функционал данного оконного менеджера, то становиться понятным, что он очень близок к функционалу screen, консольной программы, позволяющей организовать работу с программами в консоли.
Метод работы с клавиатурой очень похож на управление, используемое в 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 своих поклонников и у нас…


Во как ты подробно и с примерами маленьких хитростей, думаю после твоего поста пользователей крысояда станет побольше, и это есть хорошо
Прочитав его документацию, я так понял, что задать ему какую-то определенную политику размещения окон без перекрытий невозможно. А руками каждый раз сплитить очень влом. Посему малоюзабелен. Но сама идея клавиш ala Emacs конечно сильнА.
Будем надеяться… =)
Определенная политика? Это не динамический тайловый менеджер, тут все руками, сам пользователь решает, куда что кинуть.
Кому то это лишне, а кто то наоборот, к этому стремиться.
Очень интересная статья. Заинтересовался, но пример с запуском гимпа немного напугал
Если честно, пример с запуском гимпа я просто скопировал, в работе даже не пробовал. Может кому пригодиться? =)
А на деле довольно удобный и просто конфигурируемый оконный менеджер. Рекомендую посмотреть!
Спасибо, очень интересно.
Мне больше понравился musca… И правду говорят что он вобрал в себя лучшее от dwm и ratpoison.
У меня пока все еще руки до муски не дойдут… =)
Если надо помочь или рассказать, обращайся
Хорошо, спасибо!
Начинаю только screen осваивать. Не осилил формат caption. Вы не могли бы выложить формат caption, что на скрине?
Предложенный скрин не мой, потому формат конкретно данной конфигурации сказать не могу…
Я использую следующую строку для вывода:
hardstatus alwayslastline «%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a »
Нечто похожее, только с добавлением элементов…
Динамический, не динамический – какая разница? Если декларирует экономичное keyboard-only управление, то ручной сплит неприемлем
Просто надо собраться и прикрутить к awesome кейбинды ala ratpoison (сделано действительно здорово, что есть то есть). Был вроде даже пример на вики.
Согласен! Главное, чтобы удобно было…
А вот кейбинды для авесоме в подобном стиле я еще не встречал. Хотя искал, после емакса с ними гораздо удобнее работать.
Ну как же: http://awesome.naquadah.org/wiki/Awesome_3_configuration/ru раздел про key chains. Правда, там конечно пилить надо сильно, чтобы этим можно было пользоваться.
С авесомом свои проблемы, конечно. Крысояд привлекает тем что у него API стабильное. Замаялся уже при обновлений конфиг править
Теперь буду знать, что есть такая вещь в авесоме. Спасибо!
А вот то, что API меняют – это большой минус, сам уже несколько раз переписывал конфиг, не хочется время тратить на очередные изменения…
Крысояд в этом плане гораздо удобнее!
Небольшая просьба: Клавиша между Ctrl и Alt называется «Super», а не «Win»
глупость, конечно, но всё же, можно исправить в тексте?
Можно и поправить, хотя это спорный вопрос, что за клавиша там находиться… Клавы то у всех разные и на большей части моделей на ней рисуют именно Win…
Super – это уже чисто линуховое определение…
Отнюдь. Вспомните хотя бы клавиатуру Space Cadet.
Зачем вспоминать какие то конкретные модели? Посмотрите на то, что используется большей частью людей… И как называется эта клавиша у них?
Это я к тому что Super появилась ещё когда линуксом и не пахло.
А миллионы мухов, конечно, не могут ошибаться.
До линукса, однако текущее положение дел несколько иное. =)
С чего вы взяли, что миллионы мухов ошибаются? В чем? В том, что на их клавах другое обозначение, нежели вы привыкли??
>Если декларирует экономичное keyboard-only управление, то ручной сплит неприемлем
сделай fdump пару раз и потом его восстанавливай по необходимости, вот и забудешь про ручной сплит, хотя я сам делаю много руками ибо не люблю когда wm ещё и думает за меня куда какое откно воткнуть. в awesome же тоже надо настраивать некую динамичность – куда какое окно выводить и как в каких-то случаях всё разносить по фреймам (иначе опять же рачками) – в этом преимущества довольно спорные
а можно мне помочь? я на арчефоруме спрашивал да как-то ответа не получил, в чём отличие от того же крысояда кроме немного другой работы с мышью и плавающих окон?
а самому пробовать лениво ибо надо немного вникать, а полезность этого вникания пока не видна
В том что
> Super – это уже чисто линуховое определение…
Я его целые сутки делал, пробуя свежий крысояд. Думал, может чего нужного в него добавили. Прочитал всю доку. Увы.
Динамичность в авсоме настраивать не надо – надо лишь выбрать наиболее удобную политику размещения. А если существующие не устраивают – можно написать свою (предварительно подумав, один раз). Экономия времени и переключений контекста налицо.
Я так говорю, потому что последние несколько лет только тут и используется данное определение клавиши…
> «Начал удалять, оказалось, что в установленном виде перечисленные пакеты занимали 289 мегабайт.»
Походу это компилятор хаскеля столько кушает. Сам xmonad небольшой.
не походу, а точно… только зачем нужен хаскел? если нужен только оконный менеджер??
К примеру для того, что бы воспользоваться не дефольтным, а своим конфигом. А, как вам наверняка известно, конфиг для Xmonad пишется на наскеле.
xmonad сам по себе не будет работать без хаскеля, будете вы писать свой конфиг или нет…
а хаскел весит много. ставить его только для того, чтобы использовать xmonad – я считаю глупостью. тем более, что язык ущербный…
Ну на вскидку. Что я полезного заметил. Заранее, ratpoison я особо не смотрел, возможно это есть и там.
Там нету тэгов и столов(там группы), и он не динамичен. Т.е. окна располагать самому. Зато можно сделать дамп в файл, и восстановить из него. Так же можно в стартовом файле, задать параметры. Разделить группы так как надо заранее, и что либо в них запустить. Но тут есть одно но. Муська не ждет пока программа запуститься. Могут возникнуть сложности, но при желании, они решаемы. В каждой группе (читай столы, тэги) есть фрэймы, в каждом фрейме, можно запустить сколько угодно приложений, и очень удобно переключаться(при этом используется dmenu который лично я, обожаю). Так же (с помощью dmenu) можно переключать и группы. Каждый фрэйм, можно пометить как обычный, для всех новых открываемых окон, и зарезервированный под текущее окно(т.е. новые окна в него не будут попадать). Так же можно не управлять окнами которые помечены в конфиге(для conky, dzen2 и прочих панелей). Ну и до кучи ему можно отдавать команды прямо на ходу. В общем это надо видеть. Мне кажется очень удобным. Особенно когда настроил биндинги похожие на емакс, стало просто счастьем =)
Я в принципе, могу сделать заметку. Мне не сложно. Я как раз сейчас работаю над stand alone блогом )
1. По поводу ущербности я зыка вы погорячились. Если вы его не осилили, то это другой вопрос.
2. Хаскель собирает нативный бинарь. Это не интерпретатор. С вашей логикой без gcc в системе даже ядро не запустится.
Нет не погорячился, я высказал свое мнение.
Я его и не собирался осиливать. Так как очень много разговоров о том, какой это прекрасный и великолепный язык и как много потом сложностей только для того, чтобы сделать очень простые вещи… Примеров тому можно найти много в инете…
Не вам рассматривать мою логику…
И как мы видим ваше мнение строится только на догадках – ведь хаскель вы не осилили и даже не пытались. Полагаю, что «примеры из интернета» написаны такими же как и вы – «это мое мнение, которое ни на что не опирается».
Но мы ушли от темы вашей же статьи, посему предлагаю закончить наш спор
Добрый день. Прошу прощения за не очень умный вопрос, но не могу найти файл .ratpoisonrc у себя в home. Необходимо его создать?
Да, это файл конфигурации, который создается пользователем.
Спасибо за пример для гимпа, сегодня же попробую) Только к ratpoison’ привыкать стал, так тут про musca упоминули )))) А с керилицей проблем у вас не возникало?
Единственно, сам пример я не пробовал, привел то, что нашел…
Спасибо за заметку!
Вопросик возник по ходу ковыряния: как собственно в неиспользуемой области экрана (той, которую padding’ом опрделили) запускать Conky, как его туда загнать?
Очень просто, неиспользуемая область экрана действует только на окна, Conky может работать в нескольких режимах. Выбираете, указываете, где конькам рисовать и собственно все.
спасибо! теперь я еще больше люблю крысиный яд
[...] оконный менеджер, который очень удобен в работе – RatPoison. Проблема заключается только в том, что данный оконный [...]