The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Документация для Linux" / Оглавление документа

Меню.

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

К примеру мое главное меню создается следующим кодом:

DestroyMenu /Debian    #Уничтожили меню с этим именем, если оно было
AddToMenu /Debian      #А теперь создаем его

# Читаем автоматически генерируемое пакетом menu главное меню Debian,
# содержащее все установленные у вас интерактивные программы...
Read /etc/X11/fvwm/menudefs.hook Quiet

# Добавляем к нему несколько своих пунктов
AddToMenu /Debian
+  ""            Nop   # Полоска
+ "&Documents"   Popup Documents
+  ""            Nop
+  "Exit Fvwm"   Popup Quit-Verify
Где команда Popup означает вызов другого меню в качестве подменю данного.

Например меню Quit-Verify определяется следующим образом:

DestroyMenu Quit-Verify
# Выведем необязательный заголовок меню
AddToMenu Quit-Verify "Really quit FVWM?" Title
+ "No, restart Fvwm"   Restart  # Команда перезапуска
+ ""                   Nop
+ "Yes, really quit"   Quit     # Команда выхода

Все просто -- не так ли? Но это, конечно, далеко не все.

Наиболее интересной, на мой взгляд, является возможность динамической генерации меню, используя вывод любой программы. Для этого переопределяется функция генерации меню, которая теперь либо прямо определяет состав меню, вызывая в цикле AddToMenu, либо обращается ко внешней программе, которая сделает это и что вам угодно еще... Пример:

# Составляем меню (JpgMenu) из *.jpg файлов, вызывая по 
# клику на них программу xv
AddToMenu JpgMenu foo title
+ DynamicPopupAction Function MakeJpgMenu
AddToFunc MakeJpgMenu
+ I DestroyMenu recreate JpgMenu
+ I AddToMenu JpgMenu Pictures Title
+ I PipeRead 'for i in $HOME/Pictures/*.jpg; \
    do echo AddToMenu JpgMenu "`basename $i`" Exec xv $i; done'

# Более интересный пример.
# Генерирует меню, состоящее из файлов каталога, передаваемого
# функции FuncFvwmMenuDirectory...
# Для выбранного элемента вызывается команда see
DestroyFunc FuncFvwmMenuDirectory
AddToFunc FuncFvwmMenuDirectory I PipeRead 'fvwm-menu-directory \
    --dir "$0" --exec-file ^"see" --xterm=" xterm -e" \
    --icon-dir=mini.folder.xpm --icon-title=mini.term.xpm \
    --icon-file=mini.file.xpm --icon-app=mini.hex.xpm --check-subdir'

# Пример использования функции:
AddToMenu Documents MissingSubmenuFunction FuncFvwmMenuDirectory
+ "&Root dir%mini.folder.xpm%" Popup /
+ "&Home dir%mini.folder.xpm%" Popup ~
Также очень удобно подключить к меню play-list XMMS...

Copyleft © 2002-2003 г.   Nikolay A. Panov, "Intro To Linux" (orig),  niksite@mail.ru,  ICQ: 122-40-8888




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру