DotFiles/WindowManagers/FVWM
Советы по настройке 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/