Меню.

В 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



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости