Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
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> модификатором: | ||