LINUX.ORG.RU

Оконная мозаика

 ,


12

6

С год назад я уже показывал разные нестандартные способы переключения окошек. Но если одно из них очень просто заменяется связкой dmenu+wmctrl, то вот цветастую штуковину за пределами xmonad никто изобретать не собирался. А удобная же штуковина! Но ведь главный принцип опенсорса — если чего-то нужного тебе нет, просто сделай это сам, верно? Поэтому в свободное время были изучены некоторые доки по иксам, и началось пиление велосипеда, названного чуть позже xwinmosaic.

Итого: программа написана на чистом С + GTK+2, а для работы нужен только EWMH-совместимый оконный менеджер (почти любой, некоторых в том списке нет). Идея та же — для каждого класса окна назначается свой цвет, что позвволяет легче находить нужное окно в списке. Окна, использовавшиеся недавно, выстраиваются ближе к центру. Для работы достаточно повесить запуск xwinmosaic на какой-нибудь хоткей средствами WM.

Жизнь была простой и беззаботной, когда тестирование производилось лишь на своей машинке с kwin, openbox и xmonad, однако после показа сей приблуды ограниченному кругу людей было выловлено (и вылавливается) неограниченное количество багов, как-никак: Си (сегфолты), зоопарк WM (куча неработающих или работающих по-другому функций), своё собственное отсутствие опыта, наконец.

Тем не менее, за неделю программу удалось причесать, и теперь она умеет:


  • Собственно, переключение между окнами
  • Чтение списка элементов из stdin и вывод выбранного элемента в stdout (что позволяет реализовывать похожее на dmenu поведение или даже изменять существующие скрипты простой заменой вызова dmenu на xwinmosaic, только аргументы придётся поменять)
  • Emacs (C-n C-p C-f C-b) / vim (hjkl)-подобная навигация для любителей.
  • Более-менее приличный поиск по элементам (а также по классам окон), в чем-то похожий на тот, что в ido-mode (например, «ff» найдёт все окна Firefox) — активизируется сразу при наборе в стандартном режиме и по / в режиме vim
  • окно непрямоугольной формы (на заднем плане не скриншот экрана, как в xmonad, а сами окошки, в которые можно тыкать), хотя поведение со скриншотом тоже пришлось реализовывать, так как оказалось, что не все ещё WM могут обогнать в функциональности TWM и не реализуют корректное поведение с XShape.
  • Для режима переключения окон реализовано обновление имён и самого списка окон в реальном времени, показ номера десктопа, на котором находится окно, и даже их иконки (всего этого в оригинале не было)
  • Возможность появления центра мозаики под курсором мыши (что показано на первом скриншоте, получается весьма прикольно)
  • Попытка уместить все элементы на экране вместо примитивного выстраивания их ромбиком (из-за чего к иксмонадовскому GridSelect были большие претензии)
  • Куда более приятные цвета, благодаря использованию цветовой модели HSL.
  • Ну и ещё что-то, наверное забыл упомянуть.


Ради забавы было реализовано даже подобие dmenu_run — получается очень радостно и эпилептично (спасибо, Artificial_Thought!).

На скриншотах, собственно, можно наблюдать xwinmosaic в режиме переключения окон и в режиме переключения буферов емакса (невероятно удобно, между прочим) — спасибо за идею и оригинальный скрипт для dmenu товарищу lazyklimm!
Шрифты — PT Sans в интерфейсе, Consolas в емаксе, убунтопатчи; всё та же старая обоина с Ктулху (очень мотивирует), а больше там ничего и не видно, вроде.

Надеюсь, кому-нибудь оно приглянется, поэтому ссылки:
Github: https://github.com/soulthreads/xwinmosaic (не забывайте писать в issues в случае обнаружения багов)
Пакеты для дебиана/убунты: https://launchpad.net/~soulthreads/ archive/xwinmosaic/ (могут быть немного неактуальными)
Арч: https://aur.archlinux.org/packages.php?ID=59660
Gentoo: https://github.com/soulthreads/xwinmosaic/blob/master/contrib/gentoo/xwinmosa... (надо будет напроситься к кому-нибудь в оверлей)

Вот как-то так, надеюсь, вам не надоело чтение этих многобуков.

>>> Просмотр (1024x1200, 302 Kb)



Проверено: JB ()

Нифига не понятно по скриншотам.

Пакеты для дебиана/убунты

Вижу там только про ппа, а где сами пакеты взять?

Kalashnikov ★★★ ()

Ты таки допилил её? Няшно. Надо будет на нетбуке попробовать заюзать таки.

Zetoke ()
Ответ на: комментарий от Kalashnikov

Идея: Expo для тех, у кого нет/не нужен compiz, то есть, возможность посмотреть список всех окон со всех рабочих столов. Окна выстраиваются по принципу — что в последний раз использовал, то ближе к центру.

а где сами пакеты взять?

Как-то так: http://ppa.launchpad.net/soulthreads/xwinmosaic/ubuntu/pool/main/x/xwinmosaic/
Но вообще, в дебиане же вполне беспроблемно подключаются ppa заносом их в sources.list.

SoulThreads ()
Ответ на: комментарий от Artificial_Thought

Дебиан у меня. А спикок же не кликабелен, в упор не вижу где скачать.

Kalashnikov ★★★ ()

Классно. Хочется повешать это куда-нибудь на мышь, а некуда(

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

Ещё поиск какой-то хитрый, например находит пиджин у которого в заголовке самого этого слова нет. Не, это круто что он так делает, просто немного не интуитивно)

Kalashnikov ★★★ ()
Ответ на: комментарий от Kalashnikov

Длина настраивается, цвета можно маленько подкрутить, ищет по классу окон. Конфигив ~/.config/xwinmosaic/config.

Artificial_Thought ★★★★ ()
Ответ на: комментарий от Kalashnikov

И на скриншоте мозаики не видно. У меня оно на мышке висит на Button4, переключение буферов емакса на Button5.

Artificial_Thought ★★★★ ()
Ответ на: комментарий от Kalashnikov

задавать плейнекст файл схемы со списком допустимых цветов.

Уже несколько раз просили такое, запишу тогда в TODO и попробую реализовать.

И можно ли сделать ширину динамической под длину заголовка?

Оно, конечно, можно, только тогда стройная система размещения развалится. :)

находит пиджин у которого в заголовке самого этого слова нет.

А это поиск по классу окна так происходит. По-моему, удобно.

SoulThreads ()
Ответ на: комментарий от SoulThreads

По-моему, удобно.

Да-да, по-моему тоже. Просто когда я ввожу «pidgin», а заголовок единственного результата - «ttyh» это смущает.

На mouse3/4 у меня вперёд/назад и я уже не мыслю жизни без этого.

За фейл со скриншотом прошу прощения, оно закрылось, а я не проверил)

Kalashnikov ★★★ ()

надо будет напроситься к кому-нибудь в оверлей

ну, как минимум есть 3 варианта лоровцев: megabaks (stuff), pinkbyte (pinkbyte) и init_6 (init_6)

а по сему творению, протестирую отпишу как оно на awesome, хотя я например, не испытываю никаких сложностей или неудобств при переключении окон.

science ★★☆ ()
Ответ на: комментарий от Deleted

Отлично работает. Единственное что осталось загадкой - по какому принципу выстраивается список окон

Deleted ()
Ответ на: комментарий от science

awesome

Из того, что уже известно: может понадобиться прописать xwinmosaic во float, на стабильной версии прозрачность работает хорошо, на awesome из гита это почему-то уже поломали, поэтому придётся включать screenshot (и, наверное, задать его смещение на 1 по x и по y). А в целом, вроде, оно там работает.

SoulThreads ()
Ответ на: комментарий от Kalashnikov

плейнекст файл схемы со списком допустимых цветов.

Кстати, у меня по этому поводу вопрос: как будет удобнее — когда в файле просто список цветов #rrggbb и значения из него берутся случайным образом, или же файл формата wm_class = #rrggbb, то есть, для каждого класса окна можно назначить конкретно его цвет?

SoulThreads ()
Ответ на: комментарий от SoulThreads

А если совместить? Я вообще думал о первом, но второй - это совсем Ъ. Однако не набивать же руками вообще все типы окон.

Кстати, семёрка насколько я понял цвет подсветки окна на панели берёт из иконки, тоже интересный подход.

Kalashnikov ★★★ ()
Ответ на: комментарий от Kalashnikov

Однако не набивать же руками вообще все типы окон.

Ну, можно, скажем, сделать, чтобы, если в файле для класса цвет не прописан, то оно его вычисляло по стандартной схеме. Или написать что-нибудь типа
fallback = #112233, #445566, #778899…

Вычислять цвет из иконки — забавно, но писать такое несколько лениво. :) Хотя можно будет как-нибудь на досуге попробовать.

SoulThreads ()

Пасиба. Поюзаю сегодня!

Няшно :)

Licwin ★★★★★ ()
Ответ на: комментарий от Kalashnikov

семёрка насколько я понял цвет подсветки окна на панели берёт из иконки

lxpanelx так же делает

lazyklimm ★★★★★ ()
Ответ на: комментарий от SoulThreads

Или написать что-нибудь типа
fallback = #112233, #445566, #778899…

Вот это на мой взгляд получше. Так можно задать нужные цвета для всех окон. Ну или как вариант: вычислять цвета по стандартной схеме, если параметр fallback отсутствует
За программу спасибо. Весьма хорошая замена неудобному alt+tab.

najlus ★★★★★ ()
Ответ на: комментарий от lazyklimm

Так это же замечательно. На этих выходных поковыряю тогда.

SoulThreads ()
Ответ на: комментарий от SoulThreads

Да, прекрасно работает на x11-wm/awesome-3.4.11, добавил в float, включил screenshot и сделал смещение x=0; y=0 - всё отлично, единственное что, - нельзя ли опцию скриншот реализовать таким образом, чтобы она работала fullscreen, т.к. несмотря на четкое попадание по x/y - отображается рамка окна (скриншота) как активного текущего окна. Вот например, над панелью: http://i.pixs.ru/storage/2/6/5/screen2149_1821705_4985265.png

science ★★☆ ()
Ответ на: комментарий от Artificial_Thought

прозрачное

у меня нигде нет прозрачности, не нужно.

science ★★☆ ()
Ответ на: комментарий от science

x11-wm/awesome-3.4.11

Так у вас и без screenshot, вроде, должно работать тогда.
Если же всё-таки не работает, зафулскринивание я закоммитил, попробуйте пересобрать.

SoulThreads ()
Ответ на: комментарий от SoulThreads

зафулскринивание я закоммитил

класс, супер! пересобрал - идеально, всё отлично. А если без screenshot, то мозаика появляется не в центре - если в различных режимах тайлинга находится, а то справа, то слева, то вообще прячется, в общем с включенным screenshot программа работает отлично, даже не знаю, что и добавить. Повесил на atl+tab, всё ок.

science ★★☆ ()
Ответ на: комментарий от Artificial_Thought

Надо режим float включить

дело в том, что включено. В общем я всё еще конкретно протестирую, по ходу работы, и если что - буду отписывать в Issues.

science ★★☆ ()
Ответ на: комментарий от science

Сдаётся мне оно так почти со всеми тайловыми wm глючит. С awesome и wmii точно.

Artificial_Thought ★★★★ ()

1) потыкал на stumpwm, как-то кривовато координаты расчитываются: от активного окна. Тайлопроблемы :)

2) иконки, как я понял, берутся только из свойств окна, а можно, при отсутствии оных брать из текущей темы по имени класса

lazyklimm ★★★★★ ()
Ответ на: комментарий от lazyklimm

Первое я даже как-то не совсем понял. А с -S тоже криво работает?

Второе в TODO запишу, там, в принципе, не очень много подпилить надо, чтобы оно так делало.

SoulThreads ()
Ответ на: комментарий от lazyklimm

Весело. А окну ведь можно указать, чтобы оно всегда float было? Если одно это не поможет, то есть ещё screenshot_offset_y в конфиге. :)

SoulThreads ()
Ответ на: комментарий от Tanger

Это у него такой полубаг с окнами нестандартной формы. Полубаг — потому что оно, вроде, и работает, а иногда вот такие штуки вытворяет. Могу порекомендовать только использовать опцию screenshot.

SoulThreads ()

Выглядит интересно, попробую.

ollowtf ★★★ ()
Ответ на: комментарий от Kalashnikov

Добавил возможность чтения цветов из файла: опция -F или color_file в конфиге (не забудьте указать полный путь)
Формат файла:

[colors]
WindowClass1 = #112233
WindowClass2 = #445566
fallback = #778899; #AABBCC; #DDEEFF

Только ланчпад пакеты соберёт, в лучшем случае, завтра утром, а в git оно есть уже сейчас. dpkg-buildpackage поможет избежать таких проблем. :)

SoulThreads ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.