LINUX.ORG.RU

Stumpwm


9

0

Всего сообщений: 12

StumpWM как вершина ручного тайлинга

StumpWM — это ручной тайловый менеджер, написанный на Common Lisp. Со стороны эта фраза ничего не значит, но на деле это оконный менеджер с огромным потенциалом для превращения его в удобную рабочую среду, альтернатив которой почти нет (если есть вообще).

Прежде всего, что такое ручной тайлинг (или manual tiling, или static tiling). Это тайлинг, где расположением окон управляет пользователь, а не оконный менеджер. В случае со StumpWM, пользователь делает сетку из фреймов (или тайлов), куда будут распологаться окна. Окна распологаются друг над другом и занимают фрейм полностью. Можно привести аналогию с картами, где окно — это карта и эта карта складывается в общую пачку в виде фрейма и, эти несколько пачек, располагающиеся напротив друг друга — это итоговая сетка из фреймов. По опыту, это самое безболезненное решение из всех, если окон очень много.

Сам оконный менеджер написан на Common Lisp и, благодаря этому, позволяет переконфигурировать его на лету через Emacs+SLIME/Sly. Сам конфиг тоже на лиспе, что удобно. У меня, например, накопилось около 2000 строк кода. WM позиционирует себя как Emacs среди оконных менеджеров. Не в плане того, что может полностью зависнуть, если какой-то из плагинов будет долго думать, а в плане способствования хакам.

Кстати об имаксе. Как и у Emacs, у StumpWM хоткеи работают по принципу цепочки аккордов (chord chain). Например, можно реализовать такой хоткей: нажатие Ctrl+C, отпускание и нажатие таба — это может считаться одним хоткеем и быть забиндено на, скажем, вызов терминала. В конфиге выглядеть это будет примерно так:

(set-prefix-key (kbd "C-c"))
(define-key *root-map* (kbd "Tab") "run-shell-command sakura")

Из кода получается, что при нажатии на Ctrl+C оконный менеджер переключит лейаут клавиатуры на root-map и будет ожидать следующей клавиши. А на этом лейауте будет таб, при нажатии на который будет вызываться команда sakura. Мап, по факту, является раскладкой клавиатуры для оконного менеджера, на котором расположены бинды команд для него. И подобных map-ов может быть, в целом, до бесконечности и можно даже подсунуть мап в хоткей другого мапа:

(set-prefix-key (kbd "C-c"))
(register-kmap *layout-map* nil)
(define-key *root-map* (kbd "w") '*layout-map*)

Тут при переходе на рутовый мап мы можем нажать на W и перейти на следующий мап — layout-map.

Говоря простым языком, мы можем определять потенциально бесконечное число цепочек аккордов для хоткея. И это замечательно в плане эргономики — руки меньше напрягаются для хоткеев.

Я использую патченный StumpWM, т.к. мне не удалось найти, можно ли в лиспе в рантайме менять атрибуты класса. Но у патчей есть свои предпосылки. Ванильный StumpWM для перемещения по лейауту предлагает переключение фреймов по принципу «ближайший в заданном направлении», что неудобно и занимает время при переключении (особенно на мультимониторных конфигурациях). Так что мне удалось встроить в StumpWM свой принцип переключения фреймов, который заключается в тегировании фреймов. Схему в общем виде можно наблюдать на второй пикче. Суть в том, что на фрейм накладывается определённый тег, который привязывается к определённому хоткею. И, соответственно, при нажатии будет немедленное переключение на соответствующий тег. Патч был нужен лишь для добавления атрибута тега в класс фрейма. Функции по работе с этим реализованы на уровне конфига. Теги создаются динамически и также динамически привязываются к хоткеям. Они могут по-разному называться и их может быть до бесконечности.

Весь этот текст — фиксация того, что можно найти в StumpWM, т.к. с него я ухожу. Это один из лучших оконных менеджеров, но в нём есть свои проблемы:

  • Плохая поддержка мультимониторной конфигурации. Если в каком-нибудь herbstluftwm на один монитор даётся один воркспейс, то у StumpWM один воркспейс на все мониторы. Это порождает разного рода проблемы, например, если второй монитор служит информационным дисплеем, то при переключении воркспейсов, воркспейс переключается на всех мониторах, соответственно, убирая информацию со второго монитора.

  • Позиционирование а-ля имакс. Субъективщина, но модульность кажется более лучшим решением, чем всё в одном решении.

  • Мне не удалось придумать как решить проблему, если в воркспейсе накопилось слишком много окон. Ты начинаешь в них утопать, переключая в поисках нужного. То, как это всё реализовано в StumpWM сейчас — лучшее из того, что мне доводилось пробовать. Но хочется лучше. У меня была идея делать субворкспейсы — это обычные воркспейсы, но они условно привязаны к какому-либо из воркспейсов. По типу того, что есть воркспейс anyame и мы создаём подворкспейсы: anyame1, anyame2, etc… И все окна раскидываем по ним. Главное тут во всём: переключение подворкспейсов должно быть максимально доступным, как Alt+Tab, только в два хоткея: вперёд по цепочке и обратно. Но вся идея упёрлась в первый пункт проблем. И это стало малоиспользуемым, по итогу.

  • Просто мелкие баги, которые могут доставлять дискомфорт. Например, может быть так, что WM может застрять между двумя воркспейсами и показывать окна с них одновременно — лечится переключением обратно.

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

А так, в плане кастомизации под свои нужды, этот WM — вершина ручного тайлинга.

Дальнейшие ресурсы для изучения:

 , , ,

rhubear
()

Темный StumpWM

Увидел прошлый скрин в галерее, нахлынули ностальгические воспоминания — решил выложить темно-синий StumpWM в противовес светло-зеленому.

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

alert box, urxvt: http://i.imgur.com/8kMvr48.png?1
«виджеты»: http://i.imgur.com/y3KSX6G.png


Конфиг: https://github.com/zarkone/stumpwm.d

 , ,

zarkone
()

Органичный зеленый

Тему organic-green запилил давно. Обычно у публики она вызывает изумление (иногда недоумение), но я сколько не пытался, перейти на что-то более общепринятое так и не смог (ни темные, ни светлые не подошли). Зеленое на зеленом почему-то меньше всего напрягает. Может на ЛОРе найдутся те кому это тоже понравится )).

Дистр Arch, stumpwm. Еще скрины с зеленью:

Шрифты в emacs и urxvt - Fira Mono Medium, в stumpwm - Terminus.

 ,

Kostafey
()

Stumpwm + Emacs, сочиняю музыку

Решил выложить первый скриншот на ЛОР. Расскажу подробнее. Музыку я, как вы конечно уже догадались по скиншоту, не сочиняю (потому что просто не умею), а развлекаюсь с программой для синтеза звука в реальном времени Supercollider.

  • OS - FreeBSD 10.0. Потому что есть ZFS, так что я могу напихать в свой пул побольше зеркал, потому что newpcm, а не ALSA итд. Это мои личные предпочтения
  • WM - мой любимый Stumpwm. DE я не пользуюсь с момента выхода четвертых кед, в которых внезапно всё стало другим по сравнению с третьими. Фреймовый stumpwm стал использовать после того, как стало 2 монитора. Кроме того нравится настраиваемость. Изменил (добавил) сочетания клавиш, меню запуска программ, поставил поведение «фокус следует за кликом мышки», ну и mode line со статусом mpd. Вот конфиг, который я когда-то написал: https://github.com/shamazmazum/my-configs/blob/master/stumpwm.rc.lisp
  • Emacs - любимый, опять же, текстовый редактор. Конфигов для него ещё больше, но писал их не я. Что сделал я, так это включил cua-mode и поставил шрифты Terminus.
  • Сначала думал сделать скриншот с emacs и slime, типа как крутой лиспер, но потом решил, что это банально. Поэтому я решил поиграть с supercollider'ом - программой для синтеза звуков в режиме реального времени. Она состоит из сервера, который хранит определения, по которым воспроизводятся звуки, узлы, шины, по которым идет звук, и прочее и который принимает сообщения про протоколу OSC; и программы-реализации языка sclang, сочетающем в себе принципы ООП (как в Smalltalk), ФП (элементы его, такие как функции над списками) и прочие сладости.

    Видно 2 «родных» окна supercollider. Первое - «осциллограф», показывающий аудио выход с 2 каналов. Бесполезная штука, на самом деле. Второе - напротив, очень полезный браузер классов. Для GUI Supercollider использует Qt.

  • Снизу qjackctl - GUI для управления jackd.

Оценивайте, господа. Музон, который вышел, явно сойдет для наркоманов в клубе. Могу продать трек за большие деньги. Fin.

 , ,

hvatitbanit
()

Лисповое безумие

Все что вы можете наблюдать на скриншоте, написано на CL. Тут можно увидеть мой старый 3d tetris, написанный за одну ночь на коленке пару лет назад и попытки сделать вменяемую xmpp библиотеку для cl.

 , , ,

grouzen
()

DSWM на рабочем месте

Решил запостить свое поделие, т.к. оказалось, что этой штукой еще кто-то, кроме меня пользуется :)

Итак, десктоп на работе с Debian Stable/Wheezy, транковой сборкой DSWM на борту и почти эмакс-подобным окружением. Подключены модули (искать здесь):

  • swank4ds (эта штука еще доделывается)
  • emacs (есть стампвмовский вариант stumpmacs)
  • systray переделан отсюда
  • screenshot отсюда (к стати, оказалось, что лисповое zpng собирает png так, что LOR не может его распарсить)

На десктопе:

  • 4 группы, последняя - «плавающая» для программ, вроде gimp-а (не прижилась у меня, почему-то, идея загнать его в тайлы) + «всплывающая» по Alt+` - scratchpad
  • В scratchpad-е висит urxvt (на скриншоте не видно). Еще пару повесил на другом мониторе (справа) В mode-line: первая строчка - дата-время, список групп, вторая строчка - список окон + мигающие Urgent, если есть
  • skype - для работы (видно tray-icon справа вверху) и xchat - для души (никак руки не доходят переехать на что-то, вроде erc)
  • conkeror с блекджеком и шлюхами вкладками и кнопочками
  • Цветовая гамма - дефолт для DSWM
  • ШГ - дефолт. На самом DSWM misc-fixed medium normal 14

Конфигурация самого DSWM почти дефолтная.

 , , ,

c0smonaut
()

Развлекаемся с Common Lisp

Собственно вот моя околоучебная обстановка (иногда я пишу диссер):

  • Debian Sid;
  • stumpwm;
  • в левом верхнем углу виден самодельный велосипед для визуализации построения адаптивных сеток с помощью самоорганизующихся карт Кохонена. Интерфейс на cl-gtk2, отрисовка на cl-cairo2.
  • внизу старый добрый Emacs 23.4.1 и часть кода, реализующего SOM.

 , ,

ymn
()

Рабочее красноглазие

Собственно, так выглядит мой рабочий десктоп:

Собственно вся работа происходит в emacs. Почта, джаббер, словари (dictd) - все в нем, родимом. Работаю в конторе, которая занимается всяким измерительным железом. Приходится писать на Си (ядро + драйвера), Питоне (для всякой скриптоты) и Коммон Лиспе (для всего остального). В обеденный перерыв пилю под себя найденный на просторах интернета конфиг stumpwm.

Ругайте)

 ,

ymn
()

Когда коту делать нечего

Ехал в поезде, внезапно подумалось, что неплохо было бы видеть время как «там», так и «тут». В часовом плагине для lxpanel(x) подобная возможность отсутствовала, потому быстренько на коленке накостылял.

Жаль ни манов, ни интернета не было, потому православность способа (setenv «TZ») у меня вызывает некоторые сомнения, ну да ладно, работает - и хорошо.

 , , , , ,

lazyklimm
()

Stumpwm и... tmpwm!)

Короче очень недоставало фичи ratpoison'a в лице поддержки... глючных окон, то есть те, которые некорректно отображаются или плохо подходят для тайлинга. Нашел решение — Xnest(xyphyr по слухам «круче», но я его не испытывал, потому что у меня сам по себе с аура не установился и я забил, тем более не понятно чем он лучше)
Также на картинке видно emacs(gtk),ncmpcpp с небольшим плейлистом(где-то 800 групп в плейлист не попали ^^).
Ну а внизу там fluxbox,urxvt,vlc.

Терминал — zsh, шрифт — terminus. Такие вот пироги.

P.S я знаю что голубое бельмо в лице флуксбокса портит всю малину, ну да пусть будет как есть)

Кстати советую всем попробовать antimatter. Например ту песню, что в плейлисте.

 , , , , , , , ,

e7z0x1
()

Stumpwm, царство вечной тьмы

На скришноте видно stumpwm с подпиленным конфигом(беспрефикными(и префиксными тоже) комбинациями и ещё кое-чем по мелочи), люблю статический тайлинг больше чем динамический, раньше использовал ион, но конфигурация там(в ионе) сложнее и вообще мне почему-то Stumpwm чисто субъективно показался лучше, удобнее он, кроме того лисп более простой язык(в отличие от хвалёмного луа и хвалёного же хаскелля, кроме того мне не очень хочется их учить, и так хватает того что есть). Кроме того понравилось что по дефолту нормально работает youtube и тому подобные сервисы, вернее их полноэкранный режим. Справа finch и клиентик mpd. А ну и vimperator со styler'ом(в самом вимператоре правда вроде как есть встроенная поддержка пользовательский стилей, но я как-то на неё забил), кроме того переделанный zenburn, так кажется,тема для vimperator.

Если кому интересно конфиги потом выложу.

P.S emacs юзаю, а не vim, а то подумаете ещё про меня чего.

 , , , , тьма

e7z0x1
()

Убунту на пару с StumpWM

Дефолтная Ubuntu 9.10, оконный менеджер гнома - StumpWM. В эмаксе - написаная на clojure самодельная многопоточная качалка с местной файлопомойки,

 , , , ,

zahardzhan
()