FVWM Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:fvwm [2011/04/02 23:20]
[Функции]
wiki:fvwm [2011/04/02 23:52] (текущий)
[FVWM]
Строка 1: Строка 1:
 +<note warning>​Статья в переработке до середины апреля. ​
 +tartan</​note>​
 +
 ====== FVWM ====== ====== FVWM ======
- 
-<​note>​ 
-Эта статья помечена как незаконченная. См. заметку в конце статьи. 
-</​note>​ 
- 
 FVWM - оконный менеджер,​ предоставляющий пользователю возможность самостоятельно настроить все возможные аспекты управления окнами в соответствии со своими представлениями об удобстве. В fvwm можно реализовать такие вещи, как открытие окон с произвольными размерами и координатами на определённом рабочем столе, большое количество чувствительных к контексту сочетаний клавиш для любых операций,​ до десяти кнопок в заголовке окна, которым можно назначить произвольные действия,​ меню, в том числе динамически генерируемые меню, меню, генерируемые с помощью скриптов (как pipe-menu в openbox) и tear-off меню, разные обои на разных рабочих столах,​ группировка окон со вкладками в заголовке окна, помещение окон в произвольные слои, заголовок окна на любой из сторон окна, стили оформления окон, возможность добавления своих элемнтов интерфейса с помощью модуля FvwmButtons. Приложение очень "​лёгкое",​ файл конфигурации достаточно легко читается,​ особенно по сравнению с xml или кодом на lua или haskel. FVWM - оконный менеджер,​ предоставляющий пользователю возможность самостоятельно настроить все возможные аспекты управления окнами в соответствии со своими представлениями об удобстве. В fvwm можно реализовать такие вещи, как открытие окон с произвольными размерами и координатами на определённом рабочем столе, большое количество чувствительных к контексту сочетаний клавиш для любых операций,​ до десяти кнопок в заголовке окна, которым можно назначить произвольные действия,​ меню, в том числе динамически генерируемые меню, меню, генерируемые с помощью скриптов (как pipe-menu в openbox) и tear-off меню, разные обои на разных рабочих столах,​ группировка окон со вкладками в заголовке окна, помещение окон в произвольные слои, заголовок окна на любой из сторон окна, стили оформления окон, возможность добавления своих элемнтов интерфейса с помощью модуля FvwmButtons. Приложение очень "​лёгкое",​ файл конфигурации достаточно легко читается,​ особенно по сравнению с xml или кодом на lua или haskel.
  
-{{:wiki:fvwm.png?500|}}+Одно из основных отличий ​fvwm от других оконных менеджеров - по умолчанию он не предоставляет пользователю практически ничего. С другой стороны,​ возможности настройки настолько широки,​ что если вас не устраивает fvwm, то пора задуматься о написании собственного менеджера окон.
  
 +===== Общие принципы настройки =====
  
 +Возможно,​ лучший способ понять принципы настройки fvwm - думать о нём как о специализированном языке программирования высокого уровня.
  
 +Как любой язык программирования,​ fvwm предоставляет пользователю **команды** для управления окнами и элементами интерфейса,​ **управляющие структуры** и возможность написания собственных **функций**. Существует несколько **библиотек** - модулей. Команды и функции привязываются к различным событиям от устройств ввода - клавиатуры и мыши. Полное описание всех команд и функций занимает около двухсот страниц,​ в этой статье мы попытаемся рассмотреть практические аспекты программирования fvwm и создать окружение,​ напоминающее openbox с заимствованием нескольких удачных рещений из других оконных менеджеров.
  
 +===== Команды =====
  
 +Команды позволяют двигать окна, изменять их размеры
  
-==== Сочетания клавиш ==== 
  
-{{wiki:​window_layout.png }}Всего существует два типа биндингов:​ к мыши и к клавиатуре. Чтобы лучше понять,​ как это работает,​ давайте взглянем на типичный экран с одним развёрнутым окном и двумя свёрнутыми. Из следующей схемы ясно, что экран разделён на следующие области:​ R — рабочий стол, I — иконки,​ в которые свёрнуты окна, F — углы рамок окон, S — стороны рамок окон, T — заголовок окна, W — клиентская область приложения,​ 0—9 — кнопки заголовка окна. Запомните,​ что A означает везде, то есть не важно, где расположен курсор. 
  
-Задавать биндинги вы можете по нижеследующему образцу. Все клавиатурные биндинги записываются как ''​Key X Контекст Модификатор Действие'',​ а мышинные как ''​Mouse X Контекст Модификатор Действие''​. Здесь X — это клавиша или кнопка мыши, контекст — область,​ в которой была нажата клавиша или кнопка,​ модификатор — это модификатор клавиатуры (типа Капс-Лока,​ Контрола,​ шифта и пр.), и действие — то, что нужно совершить по данному событию. Модфификаторы кодируются как A — любой (any), C — <​key>​Control</​key>,​ S — <​key>​Shif</​key>,​ M — <​key>​Meta</​key>,​ N — никакой (nothing), или числами 1—5, что повторяет X-Модификаторы (man xmodmap). ​ 
  
-<​file>#####​ 
-# Базовые биндинги 
-########### 
-Key F1 A M Menu MenuFvwmRoot 
-Key Tab A M WindowList Root c c NoDeskSort, SelectOnRelease Meta_L 
-Key Super_L A A FvwmATerm 
-Mouse 1 R A Menu FvwmRootMenu 
-Mouse 3 R A Menu FvwmWindowOpsMenu 
-Mouse 1 1 A FvwmDeleteOrDestroy 
-Mouse 1 3 A FvwmIconifyOrShade 
-Mouse 1 5 A FvwmMaximize 100 100 
-Mouse 2 5 A FvwmMaximize 0 100 
-Mouse 3 5 A FvwmMaximize 100 0 
-Mouse 1 W M FvwmMoveOrIconify 
-Mouse 1 I A FvwmMoveOrIconify 
-Mouse 4 T A FvwmWindowShade True 
-Mouse 5 T A FvwmWindowShade False</​file>​ 
  
-Это можно описать как: +{{:wiki:fvwm.png?500|}}
-  - По нажатию <​key>​A-F1</​key>​ независимо от фокуса и положения курсора открывает главное меню FVWM. +
-  - Позволяет переключать окна по <​key>​A-tab</​key>​ +
-  - Запускает ATerm по нажатию левой командной клавиши. +
-  - Открывает главное меню по клику левой кнопкой мыши на рабочем столе. +
-  - Открывает WindowOpsMenu по клику правой кнопкой мыши на рабочем столе. +
-  - Закрывает или удаляет окно по клику или двойному клику по кнопке №1. +
-  - Сворачивает окно в иконку или в заголовок по клику или двойному клику на кнопке №3 . +
-  - Разворачивает окно на полный экран, когда первая кнопка мыши (левая) нажимает на кнопку №5. +
-  - Растягивает окно по вертикали,​ когда вы кликаете второй кнопкой мыши на кнопку №5. +
-  - Растягивает окно по вертикали,​ когда вы кликаете третьей кнопкой мыши на кнопку №5. +
-  - Перемещает окно, если мы тащим его мышью с зажатым <​key>​A</​key>​ и сворачивает в иконку по двойному клику. +
-  - FIXME Binds the FvwmMoveOrIconify function to work on '​Icons'​ so they can be moved and UnIconified. +
-  - Сворачивает окно в заголовок,​ когда вы крутите колёсиком вверх хотя бы два раза. +
-  - Разворачивает активное окно из заголовка,​ когда вы крутите колёсиком вниз хотя бы два раза.  +
- +
-==== Внешний вид окон ==== +
- +
-В FVWM вы можете задавать внешний вид окон через цветовые схемы и изображения. В качестве первого примера рассмотрим простой дизайн окон без картинок. Для начала зададим колорсеты,​ определяющие базовые цвета, которые мы будем использовать. Колорсеты могут быть использованы для задания цветов всего, чего угодно,​ в FVWM. Следующий кусок конфига задаёт три простых колорсета:​ +
- +
-<​file>#####​ +
-# Window Colorsets +
-###########​ +
-Colorset 3 fg #101060, bg #e6e7d7 +
-Colorset 4 fg Black, bg #a6a797 +
-Colorset 5 fg White, bg Black</​file>​ +
- +
-Это задаёт три колорсета с номерами 3, 4 и 5, которые имеют цвет текста (foreground,​ fg) и цвет фона (background,​ bg). Цвета могут быть заданы в hex-нотации или псевдонимами X, записанными в ''/​etc/​X11/​rgb.txt''​. +
-===== Настройка ====== +
-====Клавиатура и мышь ==== +
- +
-Сочетание клавиш для fvwm - это заданное пользователем действие,​ выполняемое при нажатии клавиши (или кнопки мыши) в определённом контексте,​ с определённым модификатором,​ несколькими модификаторами или без модификаторов и в зависимости от имени окна. +
- +
-Поддержка контекста для хоткеев и кнопок мыши - важная и удобная черта любого wm, именно благодаря ей правый клик по содержимому окна отличается от правого клика по его заголовку или по рабочему столу, а сочетания клавиш wm не конфликтуют с сочетаниями клавиш в приложениях. +
- +
-fvwm понимает следующие контексты:​ +
- +
-''​R''​ - рабочий стол\\ +
-''​I''​ - иконка\\ +
-''​F''​ - углы декорации окна\\ +
-''​S''​ - стороны декорации окна\\ +
-''​T''​ - заголовок окна\\ +
-''​W''​ - окно приложения\\ +
-''​0-9''​ - кнопки\\ +
-''​M''​ - меню\\ +
-''​A''​ - любое место на десктопе\\ +
- +
-{{:wiki:window_layout.png|}} +
- +
-Контексты можно комбинировать между собой: ''​FSTW'',​ ''​WT'',​ ''​FS''​. +
- +
-Модификаторами могут служить клавиши <​key>​Ctrl</​key>,​ <​key>​Shift</​key>,​ <​key>​Super</​key>​ и т.д. +
- +
-Модификаторы,​ понимаемые fvwm и их обозначения в конфигурационном файле:​ +
- +
-<​key>​Ctrl</​key>​ - ''​С''​\\ +
-<​key>​Super</​key>​ - ''​4''​\\ +
-<​key>​Alt</​key>​ - ''​1''​\\ +
-<​key>​Shift</​key>​ - ''​S''​\\ +
-<​key>​Caps Lock</​key>​ - ''​L''​\\ +
-<​key>​Num Lock</​key>​ - ''​2''​\\ +
- +
-Модификаторов может быть несколько:​ ''​C1'',​ ''​CS'',​ ''​C4''​. +
- +
-Поскольку клавиши <​key>​Caps Lock</​key>​ и <​key>​Num Lock</​key>​ являются модификаторами,​ при включении цифровой клавиатуры или верхнего регистра они считаются fvwm нажатыми,​ что приводит к некорректной работе (сбросу настроек клавиатуры,​ мыши и политики фокуса на дефолтные). Для того, чтобы этого избежать,​ нужно добавить в конфигурационный файл строку +
- +
-<​code>​IgnoreModifiers 2L</​code>​ +
- +
- +
-Кроме всего перечисленного,​ fvwm может принимать во внимание название активного окна, оно указывается в скобках после ''​Key''​ или ''​Mouse'',​ можно использовать wildcards (*). +
- +
-В качестве действия можно указывать любую команду fvwm - ''​Exec'',​ ''​Function'',​ ''​PipeRead'',​ ''​Restart''​ и т.д. +
- +
-Таким образом,​ сочетания клавиш задаются так: +
- +
-Key/Mouse (Окно) Клавиша/​Кнопка Контекст Модификатор Действие +
- +
-Несколько примеров:​ +
- +
-Список окон по <​key>​Alt-Tab</​key>​ +
-<​code>​Key Tab A 1 WindowList Root NoGeometry</​code>​+
  
-Закрытие окна по левому клику на крайней правой кнопке декорации 
-<​code>#​Функция 
-DestroyFunc DeleteWin 
-AddToFunc DeleteWin 
-+ I Delete 
  
-#Вызов функции 
-Mouse 1 2 N DeleteWin</​code>​ 
  
  
-Меню по правому клику на рабочем столе 
-<​code>​Mouse 3 R N Menu MainMenu</​code>​ 
  
-При активном окне браузера вызвать ​ gmrun по <​key>​Ctrl-Alt-Z</​key>​ 
-<​code>​Key (*Namoro*) Z A C1  Exec exec gmrun</​code>​ 
  
-===== Практические советы ===== 
  
-Несколько советов по настройке fvwm, которые могут помочь в настройке,​ улучшить читаемость и переносимость конфигурационного файла, задействовать полезные функции fvwm. 
  
-  * Удобно разнести настройки,​ отвечающие за разные аспекты поведения wm по разным конфигурационным файлам и объединить их с помощью функции ''​Read''​ - это облегчит чтение конфигурационных файлов,​ внесение в них изменений по ходу работы и обмен интересными вариантами настройки. В последствии можно будет создать меню настроек fvwm, где каждый пункт будет ссылаться на соответствующий конфигурационный файл. 
-  * В процессе настройки полезно добавить горячие клавиши для ''​FvwmIdent''​ и ''​FvwmConsole''​ - первая функция позволяет вызвать информацию об окне - слой, геометрия,​ тип и т.д., а вторая - вводить команды fvwm в специальной консоли. 
-  * Если вы хотите использовать в своей конфигурации fvwm скрипты в меню, подобные pipe-scripts в [[openbox]],​ такие меню имеет смысл делать динамически генерируемыми. Синтаксис такого меню: 
-<​code>​ 
-#​Создаём меню и объявляем его динамически воссоздаваемым функцией MakeBasicMenu 
-AddToMenu Basic Basic title 
-+ DynamicPopupAction Function MakeBasicMenu 
  
-#​Добавляем пункты меню 
-AddToFunc MakeBasicMenu 
-+ I DestroyMenu recreate Basic 
-+ I AddToMenu Basic "​Gedit"​ Exec exec gedit 
-+ I AddToMenu Basic "​Firefox"​ Exec exec firefox 
-</​code>​ 
   * В репозитариях Ubuntu нет неофициального пакета [[fvwm-patched]] - fvwm 2.5.28 с набором патчей,​ но исходники без проблем компилируются.   * В репозитариях Ubuntu нет неофициального пакета [[fvwm-patched]] - fvwm 2.5.28 с набором патчей,​ но исходники без проблем компилируются.
   * Для того, чтобы нажатие <​key>​NumLock</​key>​ не приводило к сбросу ваших настроек,​ добавьте в свой конфигурационный файл строку,​ заставляющую fvwm не считать <​key>​NumLock</​key>​ модификатором:​   * Для того, чтобы нажатие <​key>​NumLock</​key>​ не приводило к сбросу ваших настроек,​ добавьте в свой конфигурационный файл строку,​ заставляющую fvwm не считать <​key>​NumLock</​key>​ модификатором:​