Это старая версия документа.


Эта статья помечена как незаконченная. См. заметку в конце статьи.

FVWM - оконный менеджер, предоставляющий пользователю возможность самостоятельно настроить все возможные аспекты управления окнами в соответствии со своими представлениями об удобстве. В fvwm можно реализовать такие вещи, как открытие окон с произвольными размерами и координатами на определённом рабочем столе, большое количество чувствительных к контексту сочетаний клавиш для любых операций, до десяти кнопок в заголовке окна, которым можно назначить произвольные действия, меню, в том числе динамически генерируемые меню, меню, генерируемые с помощью скриптов (как pipe-menu в openbox) и tear-off меню, разные обои на разных рабочих столах, группировка окон со вкладками в заголовке окна, помещение окон в произвольные слои, заголовок окна на любой из сторон окна, стили оформления окон, возможность добавления своих элемнтов интерфейса с помощью модуля FvwmButtons. Приложение очень «лёгкое», файл конфигурации достаточно легко читается, особенно по сравнению с xml или кодом на lua или haskel.

Сочетания клавиш

Всего существует два типа биндингов: к мыши и к клавиатуре. Чтобы лучше понять, как это работает, давайте взглянем на типичный экран с одним развёрнутым окном и двумя свёрнутыми. Из следующей схемы ясно, что экран разделён на следующие области: R — рабочий стол, I — иконки, в которые свёрнуты окна, F — углы рамок окон, S — стороны рамок окон, T — заголовок окна, W — клиентская область приложения, 0—9 — кнопки заголовка окна. Запомните, что A означает везде, то есть не важно, где расположен курсор.

Задавать биндинги вы можете по нижеследующему образцу. Все клавиатурные биндинги записываются как Key X Контекст Модификатор Действие, а мышинные как Mouse X Контекст Модификатор Действие. Здесь X — это клавиша или кнопка мыши, контекст — область, в которой была нажата клавиша или кнопка, модификатор — это модификатор клавиатуры (типа Капс-Лока, Контрола, шифта и пр.), и действие — то, что нужно совершить по данному событию. Модфификаторы кодируются как A — любой (any), C — Control, S — Shif, M — Meta, N — никакой (nothing), или числами 1—5, что повторяет X-Модификаторы (man xmodmap).

#####
# Базовые биндинги
###########
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

Это можно описать как:

  1. По нажатию Alt+F1 независимо от фокуса и положения курсора открывает главное меню FVWM.
  2. Позволяет переключать окна по Alt+Tab
  3. Запускает ATerm по нажатию левой командной клавиши.
  4. Открывает главное меню по клику левой кнопкой мыши на рабочем столе.
  5. Открывает WindowOpsMenu по клику правой кнопкой мыши на рабочем столе.
  6. Закрывает или удаляет окно по клику или двойному клику по кнопке №1.
  7. Сворачивает окно в иконку или в заголовок по клику или двойному клику на кнопке №3 .
  8. Разворачивает окно на полный экран, когда первая кнопка мыши (левая) нажимает на кнопку №5.
  9. Растягивает окно по вертикали, когда вы кликаете второй кнопкой мыши на кнопку №5.
  10. Растягивает окно по вертикали, когда вы кликаете третьей кнопкой мыши на кнопку №5.
  11. Перемещает окно, если мы тащим его мышью с зажатым Alt и сворачивает в иконку по двойному клику.
  12. FIXME Binds the FvwmMoveOrIconify function to work on 'Icons' so they can be moved and UnIconified.
  13. Сворачивает окно в заголовок, когда вы крутите колёсиком вверх хотя бы два раза.
  14. Разворачивает активное окно из заголовка, когда вы крутите колёсиком вниз хотя бы два раза.

Внешний вид окон

В FVWM вы можете задавать внешний вид окон через цветовые схемы и изображения. В качестве первого примера рассмотрим простой дизайн окон без картинок. Для начала зададим колорсеты, определяющие базовые цвета, которые мы будем использовать. Колорсеты могут быть использованы для задания цветов всего, чего угодно, в FVWM. Следующий кусок конфига задаёт три простых колорсета:

#####
# Window Colorsets
###########
Colorset 3 fg #101060, bg #e6e7d7
Colorset 4 fg Black, bg #a6a797
Colorset 5 fg White, bg Black

Это задаёт три колорсета с номерами 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 - любое место на десктопе

Контексты можно комбинировать между собой: FSTW, WT, FS.

Модификаторами могут служить клавиши Ctrl, Shift, Super и т.д.

Модификаторы, понимаемые fvwm и их обозначения в конфигурационном файле:

Ctrl - С
Super - 4
Alt - 1
Shift - S
Caps Lock - L
Num Lock - 2

Модификаторов может быть несколько: C1, CS, C4.

Поскольку клавиши Caps Lock и Num Lock являются модификаторами, при включении цифровой клавиатуры или верхнего регистра они считаются fvwm нажатыми, что приводит к некорректной работе (сбросу настроек клавиатуры, мыши и политики фокуса на дефолтные). Для того, чтобы этого избежать, нужно добавить в конфигурационный файл строку

IgnoreModifiers 2L

Кроме всего перечисленного, fvwm может принимать во внимание название активного окна, оно указывается в скобках после Key или Mouse, можно использовать wildcards (*).

В качестве действия можно указывать любую команду fvwm - Exec, Function, PipeRead, Restart и т.д.

Таким образом, сочетания клавиш задаются так:

Key/Mouse (Окно) Клавиша/Кнопка Контекст Модификатор Действие

Несколько примеров:

Список окон по Alt+Tab

Key Tab A 1 WindowList Root NoGeometry

Закрытие окна по левому клику на крайней правой кнопке декорации

#Функция
DestroyFunc DeleteWin
AddToFunc DeleteWin
+ I Delete

#Вызов функции
Mouse 1 2 N DeleteWin

Меню по правому клику на рабочем столе

Mouse 3 R N Menu MainMenu

При активном окне браузера вызвать gmrun по Ctrl+Alt+Z

Key (*Namoro*) Z A C1  Exec exec gmrun

Практические советы

Несколько советов по настройке fvwm, которые могут помочь в настройке, улучшить читаемость и переносимость конфигурационного файла, задействовать полезные функции fvwm.

  • Удобно разнести настройки, отвечающие за разные аспекты поведения wm по разным конфигурационным файлам и объединить их с помощью функции Read - это облегчит чтение конфигурационных файлов, внесение в них изменений по ходу работы и обмен интересными вариантами настройки. В последствии можно будет создать меню настроек fvwm, где каждый пункт будет ссылаться на соответствующий конфигурационный файл.
  • В процессе настройки полезно добавить горячие клавиши для FvwmIdent и FvwmConsole - первая функция позволяет вызвать информацию об окне - слой, геометрия, тип и т.д., а вторая - вводить команды fvwm в специальной консоли.
  • Если вы хотите использовать в своей конфигурации fvwm скрипты в меню, подобные pipe-scripts в openbox, такие меню имеет смысл делать динамически генерируемыми. Синтаксис такого меню:
#Создаём меню и объявляем его динамически воссоздаваемым функцией 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
  • В репозитариях Ubuntu нет неофициального пакета fvwm-patched - fvwm 2.5.28 с набором патчей, но исходники без проблем компилируются.
  • Для того, чтобы нажатие NumLock не приводило к сбросу ваших настроек, добавьте в свой конфигурационный файл строку, заставляющую fvwm не считать NumLock модификатором:
IgnoreModifiers 2

Полезные ссылки

FIXME Эта статья не окончена. Пожалуйста, если вы располагаете соответствующими знаниями и небольшим количеством свободного времени, попробуйте улучшить эту статью.
  • Стилистика этой статьи не соответствует рекомендуемому минимуму.
  • Содержание этой статьи не соответствует рекомендуемому минимуму.
  • Структура статьи меняется по мере написания.
  • Вероятно, стоит перевести FVWM Beginners Guide до конца, добавить ссылок на оригинал и более детально объяснить это вообще такое, FVWM.
  • Дополнительно было бы неплохо приложить к статье несколько скриншотов и соответствующих им примеров конфигураций.

MadKox