DotFiles/WindowManagers/FVWM

Материал из ALT Linux Wiki
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Советы по настройке FVWM

Несколько (возможно) полезных рекомендаций по настройке оконного менеджера FVWM на примере своего собственного файла конфигурации. Хочу сразу предупредить, что мои требования к рабочему месту довольно своеобразны, результат получился довольно минималистичным, практически без всевозможных свистелок и перделок (хотя FVWM есть чем похвастать в этом плане).

С чего начинать

Начинать следует, конечно же, с чтения поставляемой в комплекте FVWM документации. Первое, что следует изучить - man fvwm.

Настройка количества рабочих столов/страниц, переключения между ними

В FWVM, помимо разбиения на рабочие столы, возможно разбиение рабочего пространства каждого рабочего стола на страницы. Различия между этими понятиями в том, что одно окно может быть расположено на нескольких страницах, но не может быть расположено на нескольких рабочих столах. Кроме того, видимая на экране часть (viewport) может отображать одну страницу или плавно перемещаться между страницами. В результате экспериментов, я пришел к оптимальной для себя конфигурации - 2 рабочих стола, каждый разбит на 4 (2x2) страницы. Итак, поехали (цитирую свой ~/.fvwm/.fvwmrc):

# Количество страниц, на которые разбивается каждый рабочий стол
DeskTopSize     2x2

# Следующая настройка определяет, насколько «тяжело» будет претаскивать окна
# между страницами — задержка переключения страницы 0.5 секунды, размер
# «границы» — 100 пикселей
EdgeResistance  500 100

# Выключаем переключение страниц при простом перемещении мышки за границы
# экрана
EdgeScroll      0 0

# Ширина невидимых «границ» экрана
EdgeThickness   1

Общие настройки

# Настройка модификаторов клавиатуры - клавишные комбинации
# рассматриваются независимо от состояния capslock, numlock, scrollock
IgnoreModifiers L25

# Максимальная задержка (в милисекундах)  между нажатием и отпусканием
# кнопки мышки, при которой событие рассматривается как click
ClickTime       250

# Colormap устанавливается в зависимости от окна,  имеющего фокус
ColormapFocus   FollowsMouse

# "Сетка" которая будет использоваться при перемещении окон
SnapAttraction  8 SameType
SnapGrid        8 8

# Автоматическое всплытие окон через 1 секунду
Module FvwmAuto 1000 Raise Nop

Общие стили оформления

# Определяем, как будет выглядеть меню
MenuStyle *     fvwm, Foreground black, Background grey80, Greyed grey40
MenuStyle *     Font  "-rfx-helvetica-medium-r-*-*-12-*-*-*-*-*-koi8-r"

# Стиль границы окна - простая, рукоятки для изменения размера спрятаны
# внутренняя граница окна не рисуется.
BorderStyle     Simple -- HiddenHandles NoInset Raised

# Заголовки окон - в центре
TitleStyle      Centered

# Стили окон по умолчанию:
# Шрифт заголовка
Style *         Font "-rfx-helvetica-bold-r-*-*-12-*-*-*-*-*-koi8-r"
# Шрифт подписей к иконкам
Style *         IconFont "-rfx-helvetica-bold-r-*-*-12-*-*-*-*-*-koi8-r"
# Цвет границ окна и заголовка активных окон
Style *         HilightFore black, HilightBack azure3
# Ширина границ окна
Style *         BorderWidth 3, HandleWidth 3
# Иконка по умолчанию, цвета для неактивного окна
Style *         Icon unknown1.xpm, Color lightgrey/dimgrey
# Окна в стиле Motif

Style *         MWMFunctions, MWMDecor, HintOverride
Style *         MWMBorder, MWMButtons
# Расположение иконок
Style *         IconBox 0 -10 -280 -1
# По умолчанию переключаем фокус на окно, над которым расположен 
# указатель мыши
Style *         FocusFollowsMouse
# Click на любой части окна поднимает его наверх
Style *         MouseFocusClickRaises
# Вновь создаваемые окна распологаются с минимальным перекрытием
Style *         MinOverlapPlacement
# Декорировать временные окна, игнорировать подсказки программ по поводу
# расположения новых окон
Style *         DecorateTransient, NoPPosition

Рисуем кнопки в заголовке окна

Когда я в начале этого текста писал об отсутствии свистелок я несколько кривил душой. Вот одна из них (ну не нравится мне стандартный вид кнопок в заголовке окна):

# Кнопка, которая будет закрывать окно. У меня эта кнопка выполняет 
# еще одну функцию - при клике правой кнопкой мыши, она "прикрепляет"
# окно к экрану
ButtonStyle 2   Vector 17 25x25@1 35x25@1 50x40@1 65x25@1 75x25@1 75x35@0 60x50@0 75x65@1 75x75@0 65x75@0 50x60@0 35x75@0 25x75@0 25x65@0 40x50@1 25x35@0 25x25@1
# Кнопка максимизации окна
ButtonStyle 4   Vector 12 40x60@1 40x75@1 20x75@1 20x50@1 35x50@1 35x50@1 35x20@1 75x20@1 75x60@0 35x60@0 35x55@0 35x50@1
# Кнопка свертывания окна в заголовок
ButtonStyle 3   Vector 9 25x35@1 25x75@1 75x75@1 75x35@1 75x35@1 75x25@0 25x25@1 25x35@1 75x35@0
ButtonStyle 3   ToggledActiveUp Vector 9 25x35@0 25x25@0 75x25@0 75x35@0 75x35@0 75x75@1 25x75@1 25x35@0 75x35@0
ButtonStyle 3   ToggledActiveDown Vector 9 25x35@0 25x25@0 75x25@0 75x35@0 75x35@0 75x75@1 25x75@1 25x35@0 75x35@0
ButtonStyle 3   ToggledInactive Vector 9 25x35@0 25x25@0 75x25@0 75x35@0 75x35@0 75x75@1 25x75@1 25x35@0 75x35@0
# Кнопка свертывания окна в иконку
ButtonStyle 6   Vector 10 40x50@1 40x75@0 20x75@0 20x50@1 40x50@1 30x50@1 30x20@1 70x20@1 70x60@1 45x60@1

# Поведение кнопок
ButtonStyle 1   - Clear MwmDecorMenu
ButtonStyle 2   - Clear MwmDecorStick
ButtonStyle 3   - Clear MwmDecorShade
ButtonStyle 4   - Clear MwmDecorMax
ButtonStyle 6   - Clear MwmDecorMin

Стили различных приложений

FVWM умеет задавать разный стиль для разных приложений/классов окон/в зависимости от заголовка окна:

# Стили для различных модулей Fvwm - отсутствие заголовка, окна прикреплены к
# экрану, отсутствие в списке окон, при переключении игнорируются:
Style Fvwm*     NoTitle,  Sticky, WindowListSkip
Style Fvwm*     BorderWidth 1, CirculateSkipIcon, CirculateSkip

# Стиль для xterm - иконка, окно удерживает фокус при уходе указателя мышки.
Style XTerm     Icon xterm.xpm, SloppyFocus

# Стили для прочих программ:
Style xcalc     Icon xcalc.xpm, NoButton 4, ClickToFocus

# Далее список часто используемых мной приложений с разбивкой по рабочему 
# столу/странице на котором они запускаются

# На странице 0 0 рабочего стола 0 у меня редактор и средства разработки
# Emacs - я его не таскаю и не изменяю размер, поэтому в заголовке нет
# необходимости. Фокус - sloppy, то есть удерживается при уходе мышки
Style Emacs     SloppyFocus, NoTitle, StartsOnPage 0 0 0
# Иногда запускаемые мной средства разработки
Style Tora      StartsOnPage 0 0 0
Style *MySQLCC* StartsOnPage 0 0 0
Style Tkcon     StartsOnPage 0 0 0
Style Eric3.py  StartsOnPage 0 0 0
Style Eclipse   StartsOnPage 0 0 0

# Страница 0 1 Рабочего стола 0 - браузер, почта, news
Style Mozilla-bin StartsOnPage 0 0 1
Style Firefox-bin StartsOnPage 0 0 1
Style psi       StartsOnPage 0 0 1
Style *mutt*    StartsOnPage 0 0 1
Style *slrn*    StartsOnPage 0 0 1

# На странице 1 0 рабочего стола 0 у меня обычно отображается документация
# Сюда же запихал и OpenOffice с mc
Style Xpdf      StartsOnPage 0 1 0
Style Acroread  StartsOnPage 0 1 0
Style GV        StartsOnPage 0 1 0
Style wxHtmlHelp StartsOnPage 0 1 0
Style *xCHM*    StartsOnPage 0 1 0
Style Djview    StartsOnPage 0 1 0
Style Kchm    	StartsOnPage 0 1 0
Style TkInfo   	StartsOnPage 0 1 0
Style OpenOffice* StartsOnPage 0 1 0
Style *mc*      StartsOnPage 0 1 0

# Страницу 1 1 рабочего стола 0 у меня всю занимает xterm - больше сюда 
# ничего не размещаю

# Игрушки заняли почетное пятое место на странице 0 0 рабочего стола 1
Style Pysol     StartsOnPage 1 0 0
Style Ksokoban  StartsOnPage 1 0 0
# NoButton 4 означает, что кнопки максимизации нет
Style Klickety  StartsOnPage 1 0 0, NoButton 4
Style Kshisen   StartsOnPage 1 0 0
Style Mahjongg  StartsOnPage 1 0 0
Style Kpat      StartsOnPage 1 0 0
Style Katomic   StartsOnPage 1 0 0
Style Gnomine   StartsOnPage 1 0 0
Style Gnometris StartsOnPage 1 0 0
Style Same-gnome StartsOnPage 1 0 0
Style GtkBalls  StartsOnPage 1 0 0, NoButton 4
Style *Pingus*  StartsOnPage 1 0 0
Style XBoard    StartsOnPage 1 0 0
Style Angband   StartsOnPage 1 0 0
Style Qnetwalk  StartsOnPage 1 0 0
Style *Crossfire* StartsOnPage 1 0 0
Style *Scorched3D* StartsOnPage 1 0 0
Style *Freeciv* StartsOnPage 1 0 0
# Приложения SDL
Style SDL_App   StartsOnPage 1 0 0

# Мультимедийные приложения на странице 0 1 рабочего стола 1
# Конечно же музыка
Style *cmus*    StartsOnPage 1 0 1
# xmms сам управляет своим внешним видом
Style xmms      NoHandles, NoTitle, StartsOnPage 1 0 1
# Видео
# Размещаем окно mplayer в центре, убирам заголовок
Style MPlayer   NoTitle, CenterPlacement, StartsOnPage 1 0 1
Style xine      NoTitle, StartsOnPage 1 0 1
# Иногда необходим звуковой редактор
Style *Audacity* StartsOnPage 1 0 1

# Графика и прочее на рабочем столе 1 страница 1 0
Style Gimp      StartsOnPage 1 1 0
Style GQview    StartsOnPage 1 1 0
Style *ImageMagick* StartsOnPage 1 1 0
Style Synaptic  StartsOnPage 1 1 0

# Vmware на рабочем столе 1 страница 1 1
Style Vmware    StartsOnPage 1 1 1

Клавиатурные комбинации для навигации

Большинство операций на моем рабочем месте выполняются при помощи клавиатуры. Поскольку мой основной рабочий инструмент - emacs, в котором задействовано большое количество комбинаций клавиш с Ctrl, Shift, Alt, я часто использую для управления FVWM комбинации с кнопкой Win (модификатор 4).

# Навигация по рабочим столам и страницам.
# Alt+F1/2 переключают рабочие столы
# Описание функции MyGotoDesk см. ниже
Key F1          A       M       MyGotoDesk 0 0
Key F2          A       M       MyGotoDesk 0 1

# Win+1..8 переключают страницы
# Описание функции MyGotoDeskAndPage см. ниже
Key 1           A       4       MyGotoDeskAndPage 0 0 0
Key 2           A       4       MyGotoDeskAndPage 0 0 1
Key 3           A       4       MyGotoDeskAndPage 0 1 0
Key 4           A       4       MyGotoDeskAndPage 0 1 1
Key 5           A       4       MyGotoDeskAndPage 1 0 0
Key 6           A       4       MyGotoDeskAndPage 1 0 1
Key 7           A       4       MyGotoDeskAndPage 1 1 0
Key 8           A       4       MyGotoDeskAndPage 1 1 1

# Комбинации для переключения на соседнюю страницу
Key Left        A       4       Scroll -100 0
Key Right       A       4       Scroll +100 +0
Key Up          A       4       Scroll +0   -100
Key Down        A       4       Scroll +0   +100
# Комбинации для плавного перемещения viewport между страницами
Key Left        A       M       Scroll -10 +0
Key Right       A       M       Scroll +10 +0
Key Up          A       M       Scroll +0   -10
Key Down        A       M       Scroll +0   +10

Клавиатурные комбинации для манипуляции окнами

# Для прижатия окна к углам/сторонам страницы и перемещения в центр
# я использую Win+буква. Схема примерно следующая:
# !-------!
# !q  w  e!
# !       !
# !a  s  d!
# !       !
# !z  x  c!
# !-------!
# Описание функций Center*Window см. ниже
Key Q           WTSF    4       Move 0 0
Key E           WTSF    4       Move -0 0
Key Z           WTSF    4       Move 0 -0
Key C           WTSF    4       Move -0 -0
Key S           WTSF    4       CenterWindow
Key W           WTSF    4       CenterUpWindow
Key X           WTSF    4       CenterDownWindow
Key A           WTSF    4       CenterWestWindow
Key D           WTSF    4       CenterEastWindow

# Перемещение окон между страницами рабочего стола - Win+F1/4
Key F1          WTSF    4       MoveToPage 0 0
Key F2          WTSF    4       MoveToPage 0 1
Key F3          WTSF    4       MoveToPage 1 0
Key F4          WTSF    4       MoveToPage 1 1

# Перемещение окон между рабочими столами - Ctrl+Alt+1/2
Key 1           A       MC      MoveToDesk 0 0
Key 2           A       MC      MoveToDesk 0 1

# Вызов Window menu
Key F4          WTSF    C       Popup MenuFvwmWindowOps2

# Различные варианты максимизации окна - полная (Win+m), 
# в высоту (Win+n), в ширину (Win+b)
Key M           WTSF    4       Maximize
Key N           WTSF    4       Maximize 0 100
Key B           WTSF    4       Maximize 100 0
# Сворачивание в иконку/разворачивание (Win+i)
Key I           WTSF    4       Iconify
Key I           I       4       Iconify Off
# Сворачивание в заголовок (Win+h)
Key H           WTSF    4       WindowShade
# Закрытие (Win+F4)
Key F4          WTSFI   4       Close

# Переключение между окнами в пределах одной страницы
Key KP_Add      A       M       Next (AcceptsFocus CurrentPage !Iconic) SelectWindow
Key KP_Subtract A       M       Prev (AcceptsFocus CurrentPage !Iconic) SelectWindow

# Переключение между всеми окнами (в дополнении к Alt+Tab):
Key Next        A       SCM     Next [*] Focus
Key Prior       A       SCM     Prev [*] Focus

# Переход к следующему окну xterm, описание функции ниже
Key T           A       4C      NextXTerm

Клавиатурные комбинации для запуска наиболее часто применяемых программ

# Win + клавиша - самые часто-вызываемые приложения
# Вызов Xterm с моими стандартными настройками  (80x32, черные буквы на сером фоне)
Key T           A       4       Exec exec xterm
# alsamixer. Описание RunInXterm см. ниже
Key L           A       4       RunInXterm alsamixer
# Emacs. Функция StartApp ищет окно программы, если окно не найдено - запускает. Описание
# функции - см. ниже
Key Y           A       4       StartApp "exec emacs" Emacs
# Firefox
Key R           A       4       StartApp 'exec firefox' Firefox-bin
# Eclipse
Key U           A       4       StartApp "exec eclipse" Eclipse
# CMus. Еще одна красивость - запуск cmus в "прозрачном" aterm.  Описание
# функции RunTransparent см. ниже
Key V           A       4       RunTransparent cmus

# Ctrl+Win + клавиша - более редко вызываемые приложения
# Большой Xterm
Key A           A       4C      Exec exec xterm -geometry 124x46
Key B           A       4C      Exec exec tkcon
# Иногда я использую Calc из OpenOffice
Key C           A       4C      Exec exec oocalc2
Key D           A       4C      Exec exec xpdf
Key E           A       4C      StartApp 'exec easytag' Easytag
Key F           A       4C      StartApp "exec gimp" Gimp
Key H           A       4C      Exec exec gv
# ALSA-mixer для встроенной C-Media PCI
Key I           A       4C      RunInXterm "alsamixer -c 1"
# Извлечение CD
Key J           A       4C      Exec exec eject /dev/dvd
# ALSA-mixer для SB Live!
Key L           A       4C      RunInXterm alsamixer
# Показать дату/время (OSD). Используется osd_cat (описание функции ShowTime 
# см. ниже)
Key M           A       4C      ShowTime
Key O           A       4C      RunInXterm top
Key P           A       4C      StartApp "exec psi" psi
Key Q           A       4C      StartApp "exec gqview" GQview
# Консоль root
Key R           A       4C      Exec exec xterm -e su -
# Запуск хранителя экрана - см. ниже
Key S           A       4C      StartScreensaver
# Запуск mc
Key U           A       4C      RunFileManager
Key W           A       4C      StartApp "exec vmware" Vmware
# Музыка
Key X           A       4C      RunInXterm cmus
#Key X           A       4C      StartApp "exec xmms" xmms
Key Y           A       4C      Exec exec mysqlcc
# Эмуляция консоли Linux - xterm с жирным шрифтом, серое на черном
Key Z           A       4C      Exec exec xterm -geometry 80x40 -bg black -fg gray -fn -*-terminus-bold-*-*-*-16-*-*-*-*-*-koi8-r

Клавиатурные комбинации для некоторых специальных действий

# Управление CMus (ранее было XMMS)
#   Пауза/продолжение
# с CMus я записываю статус/имя трека в ~/np.txt
Key P           A       4       Exec exec sh -c "if ( grep playing ~/np.txt >/dev/null ) ; then cmus-remote -u; else cmus-remote -p; fi"
# С XMMS было:
#Key P           A       4       Exec exec xmms_play_pause
# xmms_play_pause имеет следующий вид:
##!/bin/sh
#if xmmsctrl running; then
# if xmmsctrl playing; then
#  xmmsctrl pause
# else
#  xmmsctrl play
# fi
#fi

#   следующий трек
Key J           A       4       Exec exec cmus-remote -n
#Key J           A       4       Exec exec xmms_next
# xmms_next имеет следующий вид:
##!/bin/sh
#if xmmsctrl running; then
# if xmmsctrl playing; then
#  xmmsctrl next
# fi
#fi

#   предыдущий трек
Key K           A       4       Exec exec cmus-remote -r
#Key K           A       4       Exec exec xmms_prev
# xmms_prev подобен xmms_next но использует xmmsctrl prev

#   показать имя трека (OSD)
Key O           A       4       Exec exec cat ~/np.txt|osd_cat --pos=bottom --align=left --color=green --font=-*-terminus-medium-r-*-*-20-*-*-*-*-*-koi8-r --delay=4 --shadow=1 --lines=1
#Key O           A       4       Exec exec xmmsctrl title|osd_cat --pos=bottom --align=center --color=green --font=-*-terminus-medium-r-*-*-20-*-*-*-*-*-koi8-r --delay=4 --shadow=1 --lines=1

#   управление громкостью
Key F           A       4       SetMixerMaster 5%+
#Key F           A       4       Exec exec xmmsctrl vol +5
Key G           A       4       SetMixerMaster 5%-
#Key G           A       4       Exec exec xmmsctrl vol -5

#   показать диалог открытия файла - не используется с CMus
#Key L           A       4       Exec exec xmmsctrl eject

Использование мультимедийных клавиш клавиатуры

В случае с FVWM, для использования мультимедийных кнопок клавиатуры нет необходимости в специальных программах, подобных lineakd или sven. Вот как это сделал я:

1. Просматриваем файл /usr/share/X11/xkb/symbols/inet, ищем там наиболее подходящую модель клавиатуры. В моем случае точного соответствия я не нашел, но, методом проб и ошибок, установил, что наиболее подходит модель microsoftprooem 2. Прописываем в /etc/X11/xorg.conf в секцию InputDevice, посвященную клавиатуре

Option "XkbModel" "microsoftprooem"

3. Перезагружаем X. 4. При помощи xev определяем, какие символьные коды клавиш получились у мультимедийных кнопок. 5. Прописываем нужные нам действия в ~/.fvwm/.fvwm2rc:

# Мультимедийные клавиши
#  управление громкостью
Key XF86AudioRaiseVolume  A       N       SetMixerMaster 5%+
Key XF86AudioLowerVolume  A       N       SetMixerMaster 5%-
#  запуск почтовой программы
Key XF86Mail              A       N       RunInBigXterm mutt
#  браузер
Key XF86HomePage          A       N       StartApp "exec firefox" Firefox-bin
#  управление плейером
#   воспроизведение/пауза
Key XF86AudioPlay         A       N       Exec exec sh -c "if ( grep playing ~/np.txt >/dev/null ); then cmus-remote -u; else cmus-remote -p; fi"
#   следующий трек
Key XF86AudioNext         A       N       Exec exec cmus-remote -n
#   предыдущий трек
Key XF86AudioPrev         A       N       Exec exec cmus-remote -r
#   останов
Key XF86AudioStop         A       N       Exec exec cmus-remote -s

Комбинации для мышки

#   для root-окна:
# Правая кнопка мыши вызывает меню
Mouse 3         R       A       Menu MenuFvwmRoot Nop
#Mouse 1         R       A       Menu MenuFvwmWindowOps Nop
# Средняя кнопка мыши - список окон
Mouse 2         R       A       WindowList

#   переключение страниц при помощи колеса мышки (с Ctrl и с Alt):
Mouse 4        	A       C       GotoPage 0p -1p
Mouse 5        	A       C       GotoPage 0p +1p
Mouse 4       	A       M       GotoPage -1p 0p
Mouse 5        	A       M       GotoPage +1p 0p

#   для кнопок заголовка окна:
# Нажатие любой кнопки мышки на кнопке заголовка 0 выдает оконное меню, 
# двойной щелчок - закрытие.
Mouse 0         1       A       Menu MenuFvwmWindowOps2 Close
# Кнопка 2 - левая кнопка мышки - закрыть, правая - "прикрепить" окно
Mouse 1         2       A       Close
Mouse 3         2       A       Stick
# Кнопка 3 - свернуть в заголовок/развернуть
Mouse 0         3       A       WindowShade
# 4 - в зависимости от кнопки мыши различные формы максимизации
Mouse 1         4       A       Maximize
Mouse 2         4       A       Maximize 0 100
Mouse 3         4       A       Maximize 100 0
# 6 - свернуть в иконку
Mouse 0         6       A       Iconify

#   для остальных частей окон/границ/иконок:
Mouse 1         FS      A       FuncFvwmResizeOrRaise
Mouse 1         T       A       FuncFvwmMoveOrRaise
Mouse 1         I       A       FuncFvwmMoveOrIconify

Mouse 2         TSIF    A       RaiseLower
Mouse 3         I       A       Iconify
Mouse 3         FST     A       Menu MenuFvwmWindowOps2 Nop

Специальные действия мышкой

#   управление громкостью колесом мышки
#     с Shift - SB Live!
Mouse 4        	A       S       SetMixerMaster 2%+
Mouse 5        	A       S       SetMixerMaster 2%-
#     с Ctrl+Alt - C-Media PCI
Mouse 4        	A       MC      Exec exec amixer -c 1 sset Master,0 2%+
Mouse 5        	A       MC      Exec exec amixer -c 1 sset Master,0 2%-
#     с Shift+Alt - громкость задних колонок (SB Live!)
Mouse 4        	A       SM      SetMixerSurround 2%+
Mouse 5        	A       SM      SetMixerSurround 2%-

Функции

Это самая большая часть моего .fvwmrc файла


# Эта функция вызывается при различных формах манипуляции левой кнопкой 
# мышки над заголовком окна - одинарный щелчок - всплытие, перемещение, 
# двойной щелчок - сворачивание в заголовок
DestroyFunc FuncFvwmMoveOrRaise
AddToFunc   FuncFvwmMoveOrRaise
+ I Raise
+ M Move
+ D WindowShade

# Манипуляция левой кнопкой над иконкой
DestroyFunc FuncFvwmMoveOrIconify
AddToFunc   FuncFvwmMoveOrIconify
+ I Raise
+ M Move
+ D Iconify

# Манипуляция левой кнопкой над границами окна
DestroyFunc FuncFvwmResizeOrRaise
AddToFunc   FuncFvwmResizeOrRaise
+ I Raise
+ M Resize
+ D Lower

# Функция выбора окна - фокус, разворачивание из иконки, всплывание, 
# перемещение указателя мыши в центр окна
DestroyFunc SelectWindow
AddToFunc   SelectWindow
+ I Focus
+ I Iconify false
+ I Raise
+ I WarpToWindow 50 50

# Функция для перемещения окна в центр
DestroyFunc CenterWindow
AddToFunc   CenterWindow
+ I ThisWindow Piperead "echo Move \
    $(( $[vp.width]/2-$[w.width]/2 ))p \
    $(( $[vp.height]/2-$[w.height]/2 ))p"

# Прижатие окна к середине верхней границы страницы
DestroyFunc CenterUpWindow
AddToFunc   CenterUpWindow
+ I ThisWindow Piperead "echo Move \
    $(( $[vp.width]/2-$[w.width]/2 ))p 0"

# Прижатие окна к середине нижней границы страницы
DestroyFunc CenterDownWindow
AddToFunc   CenterDownWindow
+ I ThisWindow Piperead "echo Move \
    $(( $[vp.width]/2-$[w.width]/2 ))p -0"

# Прижатие окна к середине левой границы страницы
DestroyFunc CenterWestWindow
AddToFunc   CenterWestWindow
+ I ThisWindow Piperead "echo Move 0 \
    $(( $[vp.height]/2-$[w.height]/2 ))p"

# Прижатие окна к середине правой границы страницы
DestroyFunc CenterEastWindow
AddToFunc   CenterEastWindow
+ I ThisWindow Piperead "echo Move -0 \
    $(( $[vp.height]/2-$[w.height]/2 ))p"

# Переключение на страницу и отображение в нижнем левом углу 
# экрана номера страницы (OSD)
DestroyFunc MyGotoPage
AddToFunc   MyGotoPage
+ I GotoPage $0 $1
+ I PipeRead "echo ShowOSDMessage \\\'Страница $(( 2*$0+$1+1 ))\\\'"

# Переключение на страницу/рабочий стол и отображение в нижнем
# левом углу  экрана номера страницы/рабочего стола (OSD)
DestroyFunc MyGotoDeskAndPage
AddToFunc   MyGotoDeskAndPage
+ I GotoDeskAndPage $0 $1 $2
+ I PipeRead "echo ShowOSDMessage \\\'Страница $(( 2*$1+$2+1 )), Рабочий стол $0\\\'"

# Переключение на рабочий стол и отображение в нижнем левом углу 
# экрана номера рабочего стола (OSD)
DestroyFunc MyGotoDesk
AddToFunc   MyGotoDesk
+ I GotoDesk $0 $1
+ I PipeRead "echo ShowOSDMessage \\\'Рабочий стол $1\\\'"

# Функция для отображения сообщения в нижнем левом углу окна,
# используется osd_cat
DestroyFunc ShowOSDMessage
AddToFunc   ShowOSDMessage
+ I Exec exec echo $0|osd_cat --pos=bottom --align=left --color=white --font=-*-terminus-bold-r-*-*-28-*-*-*-*-*-koi8-r --delay=1 --shadow=1 --lines=1

# Функция для установки фона рабочего стола, используется xli,
# файл обоев прописан в .fvwm/background
DestroyFunc SetBackground
AddToFunc   SetBackground
+ I Exec test -r $HOME/.fvwm/background && xli -onroot -quiet `cat $HOME/.fvwm/background|tr -d "\n"`

# Функция для запуска хранителя экрана
DestroyFunc StartScreensaver
AddToFunc   StartScreensaver
+ I Exec xscreensaver-command -activate

# Отображение текущей даты/времени (OSD)
DestroyFunc ShowTime
AddToFunc   ShowTime
+ I Exec exec date|osd_cat --pos=bottom --font=-*-terminus-bold-r-*-*-32-*-*-*-*-*-koi8-r --shadow=1 --lines=1

# Редактирование файла из меню - используется моя обертка над egnuclient
DestroyFunc EditFile
AddToFunc   EditFile
+ I Exec exec eclient "$0"

# Запуск приложения в xterm
DestroyFunc RunInXterm
AddToFunc   RunInXterm
+ I Exec exec xterm +sb -ut -e $0

# Запуск приложения в xterm большого размера
DestroyFunc RunInBigXterm
AddToFunc   RunInBigXterm
+ I Exec exec xterm +sb -ut -geometry 124x46 -fn -*-terminus-medium-*-*-*-16-*-*-*-*-*-koi8-r -e $0

# Запуск приложения в "прозрачном" aterm
DestroyFunc RunTransparent
AddToFunc   RunTransparent
+ I Exec exec aterm -tr +sb -ut -e $0

# Запуск mc
DestroyFunc RunFileManager
AddToFunc   RunFileManager
+ I Exec exec xterm -geometry 80x40 -sb +sk -si -sl 500 -j -ls -e mc -x

# Функция для отображение содержимого каталога в меню
DestroyFunc FuncFvwmMenuDirectory
AddToFunc   FuncFvwmMenuDirectory
+ I PipeRead 'fvwm-menu-directory -d "$0" --exec-file "^eclient" --check-subdir --links --wm-icons'

# Поиск окна приложения, запуск, если не найдено
DestroyFunc StartApp
AddToFunc StartApp
+ I Next ($1) Focus
+ I Next ($1) Iconify False
+ I Next ($1) Raise
+ I Next ($1) WarpToWindow 50 50
+ I None ($1) Exec $0

# Переход к следующему окну xterm
DestroyFunc NextXTerm
AddToFunc NextXTerm
+ I Next (XTerm) Focus
+ I Next (XTerm) Iconify False
+ I Next (XTerm) Raise
+ I Next (XTerm) WarpToWindow 50 50

# Установка громкости (Master), отображение громкости через osd_cat
DestroyFunc SetMixerMaster
AddToFunc SetMixerMaster
+ I Exec exec amixer sset Master,0 $0|grep Front|grep -v channels|osd_cat --pos=bottom --align=left --color=green --font=-*-terminus-medium-r-*-*-20-*-*-*-*-*-koi8-r --delay=1 --shadow=1 --lines=2

# Установка громкости (Surround), отображение громкости через osd_cat
DestroyFunc SetMixerSurround
AddToFunc SetMixerSurround
+ I Exec exec amixer sset 'Wave Surround',0 $0|grep Front|grep -v channels|osd_cat --pos=bottom --align=left --color=green --font=-*-terminus-medium-r-*-*-20-*-*-*-*-*-koi8-r --delay=1 --shadow=1 --lines=2

Функции инициализации/перезагрузки

# Функция инициализации
AddToFunc InitFunction
# Единственный модуль, который я использую - FvwmPager, запускается для рабочих столов 0 и 1
+ I Module FvwmPager 0 1
+ I exec xset b off m 20/10 4
+ I exec xsetroot -cursor_name left_ptr
# Установка обоев
+ I Function SetBackground
# Просмотр /var/log/messages прямо на рабочем столе, используется root-tail
+ I exec root-tail -g 1150x450+1+1 -fn -*-terminus-medium-*-*-*-12-*-*-*-*-*-koi8-r /var/log/messages,green
# xterm
+ I exec xterm -fn -*-terminus-medium-*-*-*-16-*-*-*-*-*-koi8-r -geometry 140x52+0+0 -xrm "*Page:0 1 1"
+ I Wait xterm
# emacs
+ I exec emacs
# Хранитель экрана
+ I exec xscreensaver -nosplash
# Часы
+ I exec tclock -geometry 100x100-0+0
# xxkb
+ I exec xxkb
+ I GotoPage 0 0

# Действия, выполняемые при перезагрузке
AddToFunc RestartFunction
+ I Module FvwmPager 0 1
+ I exec xsetroot -cursor_name left_ptr
# Установка обоев
+ I Function SetBackground

Главное меню

DestroyMenu MenuFvwmRoot
# Стандартное меню ALT-Linux
Read /etc/X11/fvwm/menu
AddToMenu MenuFvwmRoot
+ ""              Nop
+ "&S. $[gt.Рабочее место]"      Popup MenuFvwmWorkspace
+ ""              Nop
+ MissingSubmenuFunction FuncFvwmMenuDirectory
+ "&H. $[gt.Домашний каталог]"   Popup ~
+ ""              Nop
+ "&M. $[gt.Модули Fvwm]"      Popup MenuFvwmModules
+ "&W. $[gt.Операции с окнами Fvwm]"   Popup MenuFvwmWindowOps
+ ""              Nop
+ "&F. $[gt.Обновить экран]"   Refresh
+ ""              Nop
+ "&X. $[gt.Выход из Fvwm]" Popup MenuFvwmQuitVerify

# Подменю навигации по рабочим столам/страницам
DestroyMenu MenuFvwmWorkspace
AddToMenu MenuFvwmWorkspace "$[gt.Рабочее место]" Title
+ "&1. $[gt.Перейти на страницу 1]"      MyGotoPage 0 0
+ "&2. $[gt.Перейти на страницу 2]"      MyGotoPage 0 1
+ "&3. $[gt.Перейти на страницу 3]"      MyGotoPage 1 0
+ "&4. $[gt.Перейти на страницу 4]"      MyGotoPage 1 1
+ "" Nop
+ "&A. $[gt.Перейти на рабочий стол 1]"  MyGotoDesk 0 0
+ "&B. $[gt.Перейти на рабочий стол 2]"  MyGotoDesk 0 1

# Меню управления модулями FVWM
DestroyMenu MenuFvwmModules
AddToMenu MenuFvwmModules "$[gt.Модули Fvwm]"    Title
+ "&1. $[gt.Control Animation]" Popup  MenuFvwmAnimate
+ "&B. Button-Bar"        Module FvwmButtons
+ "&O. IconBox"           FuncFvwmConfigureIconBox
+ "&F. Forms"             Popup  MenuFvwmForms
+ "&I. Identify"          Module FvwmIdent
+ "&M. IconMan"           Module FvwmIconMan
+ "&N. Banner"            Module FvwmBanner
+ "&C. Console"           Module FvwmConsole
+ "&P. Pager"             Module FvwmPager 0 0
+ "&2. Pager (2 $[gt.desks])"   Module FvwmPager 0 1
+ "&R. Backer"            Module FvwmBacker
+ "&S. ScrollBar"         Module FvwmScroll 50 50
+ "&T. FvwmTaskBar"       Module FvwmTaskBar
+ "&U. AutoRaise"         Module FvwmAuto 200 Raise Nop
+ "&W. WinList"           Module FvwmWinList
+ "&X. $[gt.Меню остановки модулей]"  Popup  MenuFvwmStopModule

# Остановка модулей FVWM
DestroyMenu MenuFvwmStopModule
AddToMenu MenuFvwmStopModule "$[gt.Остановка модулей Fvwm]" Title
+ "&B. $[gt.Stop] Button-Bar"  KillModule FvwmButtons
+ "&O. $[gt.Stop] IconBox"     KillModule FvwmIconBox
+ "&M. $[gt.Stop] IconMan"     KillModule FvwmIconMan
+ "&P. $[gt.Stop] Pager"       KillModule FvwmPager
+ "&R. $[gt.Stop] Backer"      KillModule FvwmBacker
+ "&S. $[gt.Stop] ScrollBar"   KillModule FvwmScroll
+ "&T. $[gt.Stop] FvwmTaskBar" KillModule FvwmTaskBar
+ "&U. $[gt.Stop] AutoRaise"   KillModule FvwmAuto
+ "&W. $[gt.Stop] WinList"     KillModule FvwmWinList

# Формы FVWM
DestroyMenu MenuFvwmForms
AddToMenu MenuFvwmForms
+ "&C. Capture"       Module FvwmForm FvwmForm-Capture
+ "&D. Form Defaults" Module FvwmForm FvwmForm-Form
+ "&P. RootCursor"    Module FvwmForm FvwmForm-RootCursor
+ "&S. Setup"         Module FvwmForm FvwmForm-Setup
+ "&T. Talk Form"     Module FvwmForm FvwmForm-Talk
+ "&Q. QuitVerify"    Module FvwmForm FvwmForm-QuitVerify

# Подменю выхода
DestroyMenu MenuFvwmQuitVerify
AddToMenu MenuFvwmQuitVerify "$[gt.На самом деле выйти?]" Title
+ "&Q. $[gt.Выходи уже давай]" Quit
+ ""                     Nop
+ "&R. $[gt.Перезапустить]"    Restart
+ ""                     Nop
+ "&N. $[gt.Ой, я передумал]"  Nop

# Конфигурирование и запуск iconbox на лету
DestroyFunc FuncFvwmConfigureIconBox
AddToFunc FuncFvwmConfigureIconBox
+ I Module FvwmIconBox
+ I Style     *  NoIcon

Меню работы с окнами

Это меню вызывается при клике на кнопке системного меню в заголовке окна и при клике правой кнопкой мышки на заголовке окна.

# Основная часть оконного меню
DestroyFunc FuncFvwmWindowCommon
AddToFunc FuncFvwmWindowCommon
+ I AddToMenu $0 "&M. $[gt.Переместить]"       Move
+ I AddToMenu $0 "&R. $[gt.Размер]"            Resize
+ I AddToMenu $0 "&A. $[gt.Вверх]"             Raise
+ I AddToMenu $0 "&L. $[gt.Вниз]"              Lower
+ I AddToMenu $0 "&I. $[gt.Свернуть]"          Iconify
+ I AddToMenu $0 "&S. $[gt.Приколоть]"         Stick
+ I AddToMenu $0 "&X. $[gt.Развернуть]"        Maximize
+ I AddToMenu $0 "&H. $[gt.В заголовок]"       WindowShade
+ I AddToMenu $0 ""                 Nop
+ I AddToMenu $0 "&D. $[gt.Удалить]"           Delete
+ I AddToMenu $0 "&C. $[gt.Закрыть]"           Close
+ I AddToMenu $0 "$[gt.Разрушить]"             Destroy
+ I AddToMenu $0 ""                 Nop

# Первое меню работы с окнами, связано с:
# средняя кнопка мышки на root-window,
# главным меню
DestroyMenu MenuFvwmWindowOps
AddToMenu MenuFvwmWindowOps   "$[gt.Операции с окнами]" Title
FuncFvwmWindowCommon MenuFvwmWindowOps
+ "&F. $[gt.Обновить окно]" RefreshWindow

# Второе меню работы с окнами, связано с:
# любая кнопка мышки на кнопке системного меню в заголовке окна,
# средняя кнопка мышки на заголовке окна
DestroyMenu MenuFvwmWindowOps2
AddToMenu MenuFvwmWindowOps2
FuncFvwmWindowCommon MenuFvwmWindowOps2
+ "&P. $[gt.Разместить повторно]" PlaceAgain
+ "&E. $[gt.Identify]" Module FvwmIdent
+ "&B. $[gt.Панель прокрутки]"  Module FvwmScroll 2 2
+ "" Nop
+ "&W. $[gt.Переместить]"       Popup  MenuFvwmMoveWindow

# Подменю перемещения окон на рабочий стол/страницу
DestroyMenu MenuFvwmMoveWindow
AddToMenu MenuFvwmMoveWindow "$[gt.Переместить]" Title
+ "&1. $[gt.На страницу 1]"      MoveToPage 0 0
+ "&2. $[gt.На страницу 2]"      MoveToPage 0 1
+ "&3. $[gt.На страницу 3]"      MoveToPage 1 0
+ "&4. $[gt.На страницу 4]"      MoveToPage 1 1
+ "" Nop
+ "&A. $[gt.На рабочий стол 1]"  MoveToDesk 0 0
+ "&B. $[gt.На рабочий стол 2]"  MoveToDesk 0 1

Конфигурация модуля FvwmPager

Модуль FvwmPager - единственный модуль, которым я пользуюсь (кроме FvwmAuto). Его конфигурация записана у меня в отдельный файл ~/.fvwm/ConfigFvwmPager . Для чтения настроек из этого файла в основном файле конфигурации добавлена строчка:

read ConfigFvwmPager

Сам файл конфигурации FvwmPager выглядит следующим образом:

DestroyModuleConfig FvwmPager: *
*FvwmPager: Back gray80
*FvwmPager: Fore  #484048
*FvwmPager: Font -*-helvetica-medium-r-*-*-10-*-*-*-*-*-koi8-r
*FvwmPager: Hilight ivory3
*FvwmPager: Geometry -1-1
*FvwmPager: Label 0 Главный
*FvwmPager: Label 1 Второй
*FvwmPager: Balloons            All
*FvwmPager: BalloonBack         azure3
*FvwmPager: BalloonFore         Black
*FvwmPager: BalloonFont         -*-fixed-medium-r-semicondensed-*-13-*-*-*-*-*-koi8-r
*FvwmPager: BalloonYOffset      +2
*FvwmPager: BalloonBorderWidth  1
*FvwmPager: BalloonBorderColor  Black


EugeneVlasov /08.11.2005 17:23/