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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:fvwm [2010/11/24 00:03]
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?​200|}} +Одно из основных отличий fvwm от других оконных менеджеров - по умолчанию он не предоставляет пользователю практически ничего. ​С другой стороны,​ возможности настройки настолько широки,​ что если вас не устраивает fvwm, то пора задуматься о написании собственного менеджера окон.
- +
-===== Перевод FVWM Beginners Guide ===== +
-==== Пролог ==== +
- +
-Feeble Virtual Window Manager (Слабый вирутальный окнонный менеджер) это чрезвычайно гибкий менеджер окон для [[X Window System]]. Слово «слабый» в названии может ввести в заблуждение. Дело в том, что FVWM является форком TWM, и сделан как его слабая замена,​ но к сегодняшнему дню FVWM вырос из слабого и скромного в самый гибкий в настройке оконный менеджер. ​От FVWM вы можете ​добиться всего, что хотите от подобной программы ​и даже больше. Поскольку название «слабый» больше не подходит к FVWM, то строят разные легенды по поводу того, что же эта F в названии значит. Чаще всего в F не раскрывают и пишут F? Virtual Window Manager. +
- +
-Не смотря на то, что FVWM очень гибок в настройке,​ многие стараются не использовать его потому,​ что нет визуальных ​инструментов для управления параметрами FVWM. Предпринимались попытки создать для настройки FVWM подобные вещи, такие как ''​fvwm-themes'',​ однако,​ такое огромное количество опций и настроек не так-то просто перевести в графический интерфейс,​ так что лучший способ настроить FVWM — написать свой конфигурационный файл. В этом вам поможет сие руководство,​ здесь вы ознакомитесь с синтаксисом конфигурационных файлов FVWM и основными командами. Первая часть руководства расскажет вам шаг за шагом, как создать простой конфигурационный файл FVWM. Не смотря на то, что это руководство,​ информация предоставляется в таком виде, что вы просто можете скопировать настройки и вставить их в конфигурационный файл. После того, как вы создадите базовую конфигурацию,​ мы с вами углубимся в некоторые темы и настройки и вы сможете позабавиться с ними на вашем рабочем столе. Я надеюсь,​ что к концу этого руководства вы достаточно ознакомитесь с настройкой FVWM и сможете создать такую конфигурацию,​ какая вам необходима. +
- +
-Я попытаюсь достаточно хорошо объяснить все настройки,​ которые я вам представил,​ но в манах FVWM всё достаточно чётко написано. Маны довольно длинные,​ но они полны ключевых слов, ищите по ним, чтобы узнать,​ что делает та или иная опция. О некоторых опциях я говорю мало и не полно, и надеюсь,​ что вы воспользуйтесь манами,​ чтобы узнать те детали,​ которые я опустил. Так что если вы от меня что-то не узнали,​ то маны являются для вас ценным ресурсом. +
- +
-Это руководство было написано к нестабильному релизу, ​fvwm-2.5.10 на тот момент. Я не тестировал конфигурацию на стабильном релизе и не уверен в его работе на нём. Рекомендую использовать версию 2.5.10. Не смотря на то, что этот релиз не стабильный,​ стандартные функции работают нормально и я не заметил никаких проблем с ним. Я также использую патч для прозрачности. +
- +
-Всё в FVWM можно настроить в одном единственном файле. В стандартной сборке из репозиториев он лежит в ''​~/​.fvwm/​config''​. Ещё возможны варианты типа ''​~/​.fvwm/​.fvwm2rc''​ и ''​~/​.fvwm2rc''​. Однако,​ имеется команда ''​Read'',​ позволяющая обрабатывать содержимое ​других ​файлов. С её помощью можно разделить один большой ​конфиг ​на несколько малых. Но в целях просто обучиться настройке FVWM, мы будем записывать все настройки в один файл. Так что для начала создайте в домашнем каталоге папку ''​.fvwm''​ и в ней простой текстовый файл ''​config''​. Если вы уже запустили FVWM, не настроив его, не ужасайтесь — стандартная конфигурация FVWM очень уродлива,​ ведь FVWM требует тонкой настройки. +
- +
-Откройте наш ''​~/​.fvwm/​config''​ в своём любимом текстовом редакторе. Этот файл перечитывается FVWM при каждом запуске и определяет вид и поведение нашего нового оконного менеджера. Комментарии должны начинаться символом “''#''​”. +
- +
-==== Общие настройки ==== +
- +
-Первое,​ что мы должны сделать ​это задать переменные окружения и сделать базовую настройку рабочего стола. В FVWM переменные окружения нужны в основном для задания расположения разных файлов (например,​ иконок),​ которые используются в конфиге. Но не стоит засорять среду переменными и использовать переменные для чего ни попадя:​ не нужно обозначать переменными то, что меняется раз в год. Вот пример задания переменных:​ +
-<​file>​ +
-# Задание переменных +
-SetEnv fvwm_img /​usr/​share/​images +
-SetEnv fvwm_icon /​usr/​share/​fvwm/​icons +
-SetEnv fvwm_scrpt /​usr/​share/​fvwm/​scripts +
-SetEnv fvwm_wallpapers $[FVWM_USERDIR]/​wallpaper +
-SetEnv fvwm_webbrowser /​usr/​bin/​opera +
-SetEnv fvwm_video_player /​usr/​bin/​mplayer +
-</​file>​ +
- +
-Теперь зададим ''​ImagePath'':​ +
-<​file>​ +
-# ImagePath +
-ImagePath $[fvwm_icon]:​$[fvwm_icon];​.png:​$[fvwm_wallpapers]:​+ +
-</​file>​ +
- +
-Это значит,​ что все иконки берутся из папки, указанной в переменной ''​$[fvwm_icon]''​. ''​.png''​ означает,​ что иконки в формате ПНГ. Так же могут использоваться икс-пи-эм-иконки ​по умолчанию. Можно легко добавить больше директорий в ''​ImagePath'',​ если, ​например, есть глобальные иконки для всех ​пользователей в ''/​usr/​share/​images''​ и личные для отдельного пользователя в ''​~/​fvwm/​icons''​. +
- +
-Теперь настроим виртуальные рабочие столы. FVWM позволяет иметь сколько угодно рабочих ​столов, да ещё каждый из них может состоять из множества страниц. Зададим три рабочих стола, каждый из которых состоит из четырёх страниц в конфигурации 2×2: +
-<​file>​ +
-# Настройки виртуальных рабочих столов +
-DesktopSize 2x2 +
-DesktopName 0 Главный +
-DesktopName 1 Работа +
-DesktopName 2 Игры +
-EdgeScroll 100 100 +
-EdgeResistance 150  150 +
-EdgeThickness 1 +
-</​file>​ +
- +
-Переменная ''​DesktopSize''​ определяет ​количество страниц на рабочем столе. Затем, с помощью переменных ''​DesktopName''​ мы задаём рабочие столы и их названия. Параметр ''​EdgeScroll''​ определяет,​ на сколько процентов сдвигается рабочий стол при подведении курсора к краю экрана. ''​EdgeScroll 100 100''​ говорит,​ что при ​заезде указателя на край экрана страница будет прокручиваться на 100%, то есть целиком. ''​EdgeResistance''​ определяет время, через которое должно произойти перемещение,​ после движения курсора. ''​EdgeThicknes''​ определяет толщину края экрана. То есть ту область вокруг экрана,​ в которую необходимо ​попасть,​ чтобы переместиться. Если вам не нужно такое перемещение,​ можете задать ''​EdgeThickness 0'' ​или ''​EdgeScroll 0 0''​. +
- +
-Теперь назначим поведение мыши и фокус+
-<​file>​ +
-# Настройки мыши и фокус +
-ClickTime 350 +
-MoveThreshold 3 +
-Style * SloppyFocus,​ MouseFocusClickRaises +
-</​file>​ +
- +
-Параметр ''​ClickTime''​ определяет время в милисекундах между нажатием мыши и тем моментом,​ который FVWM считает за клик. Если нажатие длиться дольше,​ чем указанное время, то FVWM определяет это, как удержание мыши. ''​MoveThreshold''​ это такое количество пикселей,​ на которе нужно сместить мышь, чтобы это было воспринято,​ как движение. +
- +
-==== Функции ==== +
- +
-Функции могут быть использованы для настройки самых разнообразных вещей в FVWMМы рассмотрим только базовый синтаксис и несколько элементарных функций. Для начала поглядим на скелет функции. Он закомментирован для того, чтобы вы могли скопировать его себе в конфиг,​ как напоминание. +
- +
-<​file>​ +
-# Конспект функции FVWM +
-+
-# DestroyFunc FuncName +
-# AddToFunc ​  ​FuncName +
-# + I (Действие происходит немедленно) +
-# + C (Действие происходит по клику) +
-# + D (Действие происходит по двойному клику) +
-# + H (Действие происходит при задержке мыши) +
-# + M (Действие происходит при движении мыши) +
-</​file>​ +
- +
-Таким образом,​ первое,​ что нужно сделать — это очистить функцию командой ''​DestroyFunc'',​ это освободит функцию от всего, что могло случайно попасть в неё раньше. Затем командой ''​AddToFunc''​ вы добавляете действия,​ которые должны происходить при вызове функциии, как ​вы могли ​заметить выше, эти действия выполняются при определённом событии,​ совершаемом мышью. Когда вы вызываете функцию в FVWM, вы можете передать ей различные параметры. Например,​ вы можете вызвать вышеозначенную функцию так: ''​FuncName $0 $1 $2 $3 $4'',​ где $0-$4 — это параметры,​ передаваемые функции,​ и они  +
-могут определять вывод этой функции. Теперь давайте рассмотрим следующий список базовых функций. +
- +
-<​file>#####​ +
-# Базовые функции +
-###########​ +
-DestroyFunc FvwmDeleteOrDestroy +
-AddToFunc ​  ​FvwmDeleteOrDestroy +
-+ H Nop +
-+ M Nop +
-+ C Delete +
-+ D Destroy +
- +
-DestroyFunc FvwmIconifyOrShade +
-AddToFunc ​  ​FvwmIconifyOrShade +
-+ C Iconify +
-+ D WindowShade +
- +
-DestroyFunc FvwmMaximize +
-AddToFunc ​  ​FvwmMaximize +
-+ H Nop +
-+ M Nop +
-+ C Maximize $0 $1 +
- +
-DestroyFunc FvwmMoveOrIconify +
-AddToFunc ​  ​FvwmMoveOrIconify +
-+ M Move +
-+ D Iconify +
- +
-DestroyFunc FvwmWindowShade +
-AddToFunc ​  ​FvwmWindowShade +
-+ D WindowShade $0</​file>​ +
- +
-Первая функция ''​FvwmDeleteOrDestroy''​ не делает ничего,​ если мышь задержена при наведении или двигает. На одиночный клик эта функция закроет окно обычным образом,​ а на двойной удалит,​ даже если оно будет сопротивляться. Вторая функция ''​FvwmIconifyOrShade'' ​на одиночный клик ​свернёт окно на панель задач, а на двойной — свернёт в заголовок. Функция ''​FvwmMaximized''​ примет два параметра, ​определяющие,​ как развернуть окно. Например,​ вы можете вызвать функцию ''​FvwmMaximized 100 100'',​ и тогда окно развернётся на 100% по горизонтали и вертикали. Если же вы вызовете её как ''​FvwmMaximize 100 0'',​ то окно растянется во всю ​ширину ​окна, но сохранит свою высоту. Функция ''​FvwmMoveOrIconify''​ позволит перетаскивать окнокогда вы двигаете его мышью, и свернёт его на панель задач при двойном клике. А функция ''​FvwmWindowShade''​ свернёт окно в заголовок, ​если ​ей передан параметр true (''​FvwmWindowShade True''​),​ и развернёт его из заголовка,​ если ей передан параметр false. Если она вызвана без параметров,​ то она развернёт свёрнутое окно и свернёт развёрнутое. +
- +
-Теперь напишем несколько функций запуска приложений,​ чтобы потом просто вызывать эти функции. Эти функции очень просты, но они вносят немного организованности:​ +
- +
-<​file>#####​ +
-# Функции для запуска программ +
-###########​ +
-DestroyFunc FvwmXTerm +
-AddToFunc ​  ​FvwmXTerm +
-+ I Exec exec xterm +
- +
-DestroyFunc FvwmATerm +
-AddToFunc ​  ​FvwmATerm +
-+ I Exec exec aterm +
- +
-DestroyFunc FvwmGVim +
-AddToFunc ​  ​FvwmGVim +
-+ I Exec exec gvim +
- +
-DestroyFunc FvwmGimp +
-AddToFunc ​  ​FvwmGimp +
-+ I Exec exec gimp-2.0 +
- +
-DestroyFunc FvwmFireFox +
-AddToFunc ​  ​FvwmFireFox +
-+ I Exec exec firefox +
- +
-DestroyFunc FvwmIrssi +
-AddToFunc ​  ​FvwmIrssi +
-+ I Exec exec aterm -e irssi +
- +
-DestroyFunc FvwmXmms +
-AddToFunc ​  ​FvwmXmms +
-+ I Exec exec xmms +
- +
-DestroyFunc FvwmViewManPage +
-AddToFunc ​  ​FvwmViewManPage +
-+ I Exec exec xterm -fg White -bg DarkBlue -g 80x40 -fn 7x14 -fb 7x14bold \ +
- -n "​Manual Page - $0" -T "​Manual Page - $0" -e man "​$0"</​file>​ +
- +
-Первые функции должны быть понятны,​ а вот последнюю стоит объяснить. Она принимает в качестве аргумента man-страницу. Например,​ если вы выполните ''​FvwmViewManPage ​fvwm''​, то отобразится страница man fvwm в терминале xterm. Также обратите внимание на синтаксис ​последних строк. Вторая строка снизу оканчивается на обратный слэш (''​\''​),​ это означает,​ что следующая строка должна восприниматься ​как продолжение текущей. То есть последние две строки интерпретируются как одна, благодаря бэкслэшу. +
- +
-Теперь взглянем на три специальные функции: ''​StartFunction'',​ ''​InitFunction''​ и ''​RestartFunction''​. Функция ''​StartFunction''​ выполняется при запуске FVWM, в то время как ''​InitFunction''​ выполняется после ''​StartFunction'',​ когда инициализируется FVWM. Функция ''​RestartFunction''​ выполняется после ''​StartFunction''​ при перезапуске FVWM. +
- +
-<​file>#####​ +
-# Функции запуска +
-###########​ +
-DestroyFunc StartFunction +
-AddToFunc ​  ​StartFunction +
-+ I Module FvwmTaskBar +
-+ I Module FvwmPager 0 2 +
-+ I Module FvwmButtons MyButtons +
- +
-DestroyFunc InitFunction +
-AddToFunc ​  ​InitFunction +
-+ I Exec exec xscreensaver +
-+ I Exec exec fvwm-root -r $[fvwm_wallpapers]/​background.png +
-+ I FvwmXmms +
-+ I FvwmATerm +
- +
-DestroyFunc RestartFunction +
-AddToFunc ​  ​RestartFunction +
-+ I Nop</​file>​ +
- +
-Во время запуска FVWM подгружает три модуля:​ FvwmTaskBar,​ FvwmPages и FvwmButtons. После запуска FVWM включает скринсейвер,​ задаёт фоновое изображение,​ запускает XMMS и ATerm. При перезапуске он ничего не делает (кроме ''​StartFunction''​). +
- +
-Функции могут быть достаточно подробными,​ добавить много функциональности вашему окружению. Функции могут иметь любое число параметров ($1, $2, $3 и т.д.) и сочетать в себе любое количество действий мыши. Функции могут иметь любое имя, кроме зарезервированных ​для FVWM, таких как Nop, Delete, Destroy, Restart и пр. +
- +
-Вот ещё немного примеров разных функций:​ +
- +
-<​file>#####​ +
-# Screenshot Functions (uses ImageMagick) +
-###########​ +
-DestroyFunc FvwmWindowScreenshot +
-AddToFunc ​  ​FvwmWindowScreenshot +
-+ I ThisWindow (!Shaded !Iconic Iconifiable) \ +
-  Exec import -window $[w.id] -quality 100 -silent \ +
-  "​$[fvwm_home]/​screenshot/​screenshot-`date +%F[%R]`.$[w.id].jpg"​ +
- +
-DestroyFunc FvwmDesktopScreenshot +
-AddToFunc ​  ​FvwmDesktopScreenshot +
-+ I Exec sleep $0; import -window root -quality 100 -silent \ +
-  "​$[fvwm_home]/​screenshot/​screenshot-`date +%F[%R]`.jpg"​ +
- +
-##### +
-# XRoach Invasion +
-###########​ +
-DestroyFunc XRoachInvasion +
-AddToFunc ​  ​XRoachInvasion +
-+ I Exec exec xroach -roaches 5 -rc Cyan -speed 17 +
-+ I Exec exec xroach -roaches 3 -rc Red -speed 15 +
-+ I Exec exec xroach -roaches 7 -rc Green -speed 10 +
-+ I Exec exec xroach -roaches 3 -rc Blue -speed 20 +
-+ I Exec exec xroach -roaches 1 -rc Black -speed 30 +
-+ I Exec exec xroach -roaches 1 -rc White -speed 40 +
- +
-DestroyFunc XRoachExterminate +
-AddToFunc ​  ​XRoachExterminate +
-+ I Exec killall xroach</​file>​ +
- +
-Первая пара функций делает скриншот одного окна или всего рабочего стола с помощью ImageMagick'​а. Чтобы сделать скриншот одного окна, вызовите первую функцию как ''​Pick (Circulate Hit) FvwmWindowScreenshot''​. После чего сменится курсор. Выберите им то окно, снимок которого хотите получить. Вторая функция сделает скриншот рабочего стола после паузы, длительность которой передаётся параметром $0 в секундах. ''​FvwmDesktopScreenshot 5''​ сделает снимок рабочего стола через пять секунд после вызова. Это хороший путь для того, например,​ чтобы снять меню. Вторая группа функций запускает древнюю игрушку X.org'​а - тараканов,​ ползающих по вашему экрану. Для этого у вас должен быть установлен xroach. +
- +
-==== Сочетания клавиш ==== +
- +
-{{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>​ +
- +
-===== Настройка ====== +
-====Клавиатура и мышь ==== +
- +
-Сочетание клавиш для 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 нажатыми, что приводит к некорректной работе (сбросу настроек клавиатуры, мыши и политики фокуса на дефолтные). Для того, чтобы этого избежать, нужно добавить в конфигурационный файл строку+Возможно, ​лучший способ понять принципы настройки fvwm - думать о нём как о специализированном языке программирования высокого уровня.
  
-<​code>​IgnoreModifiers 2L</​code>​+Как любой язык программирования,​ fvwm предоставляет пользователю **команды** для управления окнами и элементами интерфейса,​ **управляющие структуры** и возможность написания собственных **функций**. Существует несколько **библиотек** - модулей. Команды и функции привязываются к различным событиям от устройств ввода - клавиатуры и мыши. Полное описание всех команд и функций занимает около двухсот страниц,​ в этой статье мы попытаемся рассмотреть практические аспекты программирования fvwm и создать окружение,​ напоминающее openbox с заимствованием нескольких удачных рещений из других оконных менеджеров.
  
 +===== Команды =====
  
-Кроме всего перечисленного,​ fvwm может принимать ​во внимание название активного окна, оно указывается в скобках после ''​Key''​ или ''​Mouse'',​ можно использовать wildcards (*).+Команды позволяют двигать окна, изменять их размеры
  
-В качестве действия можно указывать любую команду fvwm - ''​Exec'',​ ''​Function'',​ ''​PipeRead'',​ ''​Restart''​ и т.д. 
  
-Таким образом,​ сочетания клавиш задаются так: 
  
-Key/Mouse (Окно) Клавиша/​Кнопка Контекст Модификатор Действие 
  
-Несколько примеров:​ 
  
-Список окон по <​key>​Alt-Tab</​key>​ +{{:​wiki:​fvwm.png?​500|}}
-<​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>​ модификатором:​