С выходом Vista поплевался и стал надеяться, что следующая версия Windows не станет очередной глянцевой порнографией; но да, к официальному релизу Windows 7 уже пересел на Linux, — к уютному, квадратному интерфейсу девяностых.
(Windows XP на последний момент перед переходом на Linux)
Важно, чтобы оформление было не просто красивым с точки зрения обывателя (какими шаблонно лепят Windows 7, Linux {Ubuntu,Mint}, Mac OS X), а впервую очередь оно нравилось мне, так как в своей среде комфортнее работать и повышается производительность.
Первым моим оконным менеджером стал evilwm. Простой, лаконичный, полностью управляем с клавиатуры, без свистелок-перделок и прочих рюшечек, — WM, который не умеет ничего, кроме как управлять окнами. Все же со временем его возможностей стало нехватать, так как приходилось лишний раз помнить на каком рабочем столе какая задача выполняется.
Почитав историю развития Linux, базовых утилит, и уже жалея, что потратил
десяток лет сидя за Windows, решил для себя начать изучение Linux’а с самого
его начала.
Первым появившимся на свет оконным менеджером стал TWM, который с позволения его автора начали включать по-умолчанию в поставку с X.Org, но на тот момент многих пользователей не устраивало, что TWM расходует слишком много системных ресурсов. Автор rvxt решил разобраться в коде и выпустил форк — F(?)VWM (со временем значение буквы F было утеряно), который не прекращал своего развития и вырос в огромный проект.
(Мой первый FVWM, — да, это FVWM, не Gnome 2)
То, что FVWM поддерживает все стандарты (EWMH, ICCCM-2, GNOME) управления окнами — уже по-умолчанию делает его полноценным оконным менеджером.
┌─[myhost ~] └─╼ pmap $(pgrep fvwm) | grep total total 8932K
Он потребляет мало системных ресурсов, в отличии от, и можно сделать еще меньше, если отключить %ненужно% (см. выхлоп pmap) в опциях ./configure. Почему современные DE расходуют память сотнями Мбайт? К ним прикрутили прозрачность, добавили тени, закругленные декорации? FVWM же не привязан ко времени, — да, у него уродливые декорации окон из коробки, но все настраиваемо.
В FVWM есть все, — логика любых свистелок-перделок пишется на Bash и прикручиваются к интерфейсу FVWM, так что любой мало-мальски продвинутый пользователь в состоянии что-нибудь да реализовать. Грубо говоря, мягко выражаясь, FVWM — это как Emacs в мире WM, в котором вы самостоятельно, вкупе с Bash, встроенными модулями и скриптинговым движком можете реализовать любые элементы интерфейса.
Перед первым запуском FVWM следует создать конфиг, в котором потом вы будете описывать все настройки и правила управления окнами, создавать свои функции, меню, декорации и прочие элементы интерфейса.
mkdir ~/.fvwm && touch ~/.fvwm/config, но конфигурация предоставляемая из коробки отпугнет любого пользователя.
Для начала освоения подойдет упрощенная evilwm-конфигурация:
DesktopSize 3x1 EdgeThickness 0 HideGeometryWindow Always OpaqueMoveSize 0 MoveThreshold 0 DestroyFunc Click1 AddToFunc Click1 + I Raise + M Move DestroyFunc Click2 AddToFunc Click2 + I Lower DestroyFunc Click3 AddToFunc Click3 + M Resize Mouse 1 R A - Mouse 2 R A - Mouse 3 R A - Mouse 1 W M Click1 Mouse 2 W M Click2 Mouse 3 W M Click3 Key Return A CM Exec urxvt Key Delete W CM Close Key Insert W CM RaiseLower Key Tab A M WindowList Root c c NoCurrentDeskTitle Key BackSpace A CM Restart Key x W CM Maximize Key 1 A CM GotoPage 0 0 Key 2 A CM GotoPage 1 0 Key 3 A CM GotoPage 2 0 Style * !Title, !Handles, !Borders Style * !UsePPosition, PositionPlacement UnderMouse, SloppyFocus
Где у окон напрочь отсутствуют декорации, фокусируются окна при наведении на них мышкой, и появляются все новые окна отцентрованными ровно под курсором мышки.
Горячая мышка:
Alt + Левая кнопка мыши — перемещает окно;
Alt + Средняя кнопка мыши — переключает окно;
Alt + Правая кнопка мыши — изменяет размер окна.
И горячие клавиши:
Ctrl + Alt + Enter — откроет терминал Rxvt-Unicode;
Ctrl + Alt + Delete — закрывает активное окно;
Ctrl + Alt + Tab, Insert — переключают между окнами;
Ctrl + Alt + x — развернет окно на весь экран и восстановит обратно;
Ctrl + Alt + 1, 2, 3 — переключают между тремя рабочими столами;
Ctrl + Alt + BackSpace — перезапускает FVWM (для обновления конфигурации, если вы внесли изменения)
Казалось бы, что еще нужно для управления окнами? Удобно и имеется весь необходимый минимум. Я с подобной конфигурацией за evilwm просидел целый год.
Получив мало-мальски удобный в управлении оконный менеджер теперь можно обвешивать его рюшечками, — поговорим о вкусном.
Чтобы не запоминать, какие окна на каком рабочем столе находятся, подключим FvwmPager (в правый нижний угол):
Style Fvwm* !Title, !Handles, !Borders, !Iconifiable, NeverFocus, WindowListSkip, CirculateSkip, CirculateSkipIcon Style Fvwm* Sticky, StaysOnBottom, FixedPosition, FixedSize DestroyFunc StartFunction AddToFunc StartFunction + I Module FvwmPager * DestroyModuleConfig FvwmPager: * *FvwmPager: Geometry -0-0 *FvwmPager: SmallFont 5x7 *FvwmPager: WindowLabelFormat %c
Чтобы на каждую программу не запускать терминал, — не выполнять заклинания навроде [Ctrl + Alt + Enter]firefox &[Ctrl + D], нарисуем панель быстрого
запуска, используя модуль FvwmButtons.
ImagePath /usr/share/icons/gnome/:+ CleanupColorsets Colorset 0 RootTransparent Style Fvwm* !Title, !Handles, !Borders, !Iconifiable, NeverFocus, WindowListSkip, CirculateSkip, CirculateSkipIcon Style Fvwm* Sticky, StaysOnBottom, FixedPosition, FixedSize DestroyFunc StartFunction AddToFunc StartFunction + I Module FvwmButtons FvwmDock DestroyModuleConfig FvwmDock: * *FvwmDock: Geometry +0-0 *FvwmDock: Rows 1 *FvwmDock: Padding 0 0 *FvwmDock: Frame 0 *FvwmDock: Colorset 0 *FvwmDock: (Icon "32x32/apps/utilities-terminal.png", ActiveIcon "48x48/apps/utilities-terminal.png", Action (Mouse 1) "Exec urxvtc") *FvwmDock: (Icon "32x32/apps/internet-web-browser.png", ActiveIcon "48x48/apps/internet-web-browser.png", Action (Mouse 1) "Exec firefox") *FvwmDock: (Icon "32x32/apps/phone.png", ActiveIcon "48x48/apps/phone.png", Action (Mouse 1) "Exec skype") *FvwmDock: (Icon "32x32/apps/wine.png", ActiveIcon "48x48/apps/wine.png", Action (Mouse 1) "Exec wine")
И при наведении на иконку она будет увеличиваться в размерах, с 32×32 до 48×48 пикселей (почти прям как в Mac OS X).
Для полного счастья и создания полнофункционального рабочего окружения нам нехватает разве что TaskBar’а, — попробуем сотворить что-нибудь нескучное, подобное TaskBar’у в Windows 7, чтобы отображались миниатюры окон.
В стиле UNIX-way, использовать мы будем сторонние утилиты, поэтому понадобятся пакеты xorg-xwd и imagemagick.
DestroyFunc StartFunction AddToFunc StartFunction + I Test (Init) PipeRead "test -d \"/tmp/fvwm-$[UID]\" || mkdir \"/tmp/fvwm-$[UID]\"; echo Nop" + I Test (Init) PipeRead "fvwm-root --retain-pixmap \"$[HOME]/Desktop/Wallpapers/#400040.png\"; echo Nop" DestroyFunc ExitFunction AddToFunc ExitFunction + I Test (Quit) PipeRead "rm --force --recursive \"/tmp/fvwm-$[UID]\"; echo Nop" DestroyFunc FuncFvwmThumbnail AddToFunc FuncFvwmThumbnail + I SetEnv Icon-$[w.id] $[w.iconfile] + I Raise + I PipeRead "xwd -silent -id $[w.id] | convert -scale 192 -quality 0 xwd:- png:- | composite -gravity SouthEast $[w.iconfile] - /tmp/fvwm-$[UID]/Icon-$[w.id].png && echo WindowStyle Icon \"/tmp/fvwm-$[UID]/Icon-$[w.id].png\", IconOverride" DestroyFunc FuncFvwmDeThumbnail AddToFunc FuncFvwmDeThumbnail + I PipeRead "echo WindowStyle Icon \\$\\[Icon-$[w.id]\\], NoActiveIconOverride" + I UnsetEnv Icon-$[w.id] + I PipeRead "rm --force \"/tmp/fvwm-$[UID]/Icon-$[w.id].png\"; echo Nop" DestroyFunc FuncFvwmIconify AddToFunc FuncFvwmIconify + I ThisWindow (!Shaded, Iconifiable, !Iconic) FuncFvwmThumbnail + I ThisWindow (Iconic) FuncFvwmDeThumbnail + I Iconify + I All (CurrentPage, Iconic) PlaceAgain Icon Style * !IconTitle, IconBackgroundRelief 0, IconBackgroundPadding 0, IconBackgroundColorset 0 Style * IconBox 0 0 -0 -0, IconGrid 1 1, IconFill Left Bottom Mouse 1 I A FuncFvwmIconify Mouse 2 I A - Mouse 3 I A - Key z W CM FuncFvwmIconify
При нажатии Ctrl + Alt + Z (подобно как Ctrl + Z в командной оболочке) окно свернется в миниатюру, а при клике по ней развернется обратно.
Cлепив все вместе — мы получим вполне себе комфортное рабочее окружение.
Таков FVWM, в котором из ничего, из уже готовых деталей — можно слепить что угодно. В данный момент я занимаюсь полноценной реализацией TaskBar’а из Windows 7 на чистом FVWM. И без пошлого глянца by-design.
Меня полностью устраивают окна без декораций, — не понимаю зачем они вообще
нужны, когда функции по управлению окнами можно повешать на горячие клавиши, или максимум на жесты мышкой. «Что вы как неандертальцы, с машиной вместо нормального текста — жестами общаетесь?» ©
Если вы все-же станете использовать декорации окон, то вам, как и мне, может
быть удобно отключать декорации окон при их развертывании на весь экран
(особенно, если у вас маленькое разрешение).
DestroyFunc Fullscreen AddToFunc Fullscreen + I ThisWindow (Maximized) DestroyWindowStyle + I TestRc (NoMatch) ThisWindow (!Maximized) WindowStyle !Title, !Handles, !Borders, ResizeHintOverride, !Iconifiable, FixedPosition, FixedSize + I UpdateStyles + I ThisWindow (Maximized) Maximize + I TestRc (NoMatch) Maximize ewmhiwa 100 100
Просто замените везде функцию Maximize на Fullscreen, и теперь у окон будут отключаться декорации и они даже будут игнорировать стандарт EWMH, чтобы разввернуться на весь(!) экран целиком.
Если у вас остались какие-то идеи для реализации нескучных фич, — вы можете описать их в комментариях, и я бы их с радостью реализовал в FVWM.
Ну и просто, спрашивайте ответы.
ссылка на оригинал статьи http://habrahabr.ru/post/161937/
Добавить комментарий