AddToMenu menu-name [menu-label action]
定義一個菜單。典型的定義像這樣:
AddToMenu Utilities Utilities Title
+ Xterm Exec exec xterm -e tcsh
+ Rxvt Exec exec rxvt
+ "Remote Logins" Popup Remote-Logins
+ Top Exec exec rxvt -T Top -n Top -e top
+ Calculator Exec exec xcalc
+ Xman Exec exec xman
+ Xmag Exec exec xmag
+ emacs Exec exec xemacs
+ Mail MailFunction xmh "-font fixed"
+ "" Nop
+ Modules Popup Module-Popup
+ "" Nop
+ Exit Fvwm Popup Quit-Verify
菜單可以這樣觸發:
Mouse 1 R A Menu Utilities Nop
或
Mouse 1 R A Popup Utilities
并沒有一個符號表示菜單定義的結束,也不需要在配置文件中連續的定義。上面實例中,被引號引用的部分(或者第一個詞)是菜單的標簽,出現在菜單中。剩下的部分是fvwm命令,菜單選中時被執行。一個空的菜單標簽("")和一個Nop函數用來在菜單中插入一個分隔條。
關鍵字DynamicPopUpAction和DynamicPopDownAction被用作菜單標簽時有特殊的意義,菜單彈出和關閉時,它后面的命令會被執行。通過這種方法可以實現動態菜單。甚至使用DestroyMenu把它自己銷毀,然后在重新建立都是可以的。菜單銷毀后(除非銷毀菜單時你使用了recreate選項)不要忘了新建菜單時也要含有相應的DynamicPopUpAction或DynamicPopDownAction項。
注意:不要執行需要和用戶交互的動作。它可能會失敗,搞亂菜單。見Silent命令.
警告:不要在動態菜單的命令中使用MenuStyle命令,fvwm很有可能因此而崩潰。
隨fvwm一起安裝的有幾個自動配置菜單的腳本。它們有自己的manpage。其中fvwm-menu-directory和fvwm-menu-desktop可以和DynamicPopupAction配合使用,創建目錄列表或者GNOME/KDE的應用程序列表。
例(文件瀏覽器):
#You can find the shell script fvwm_make_browse_menu.sh
#in the utils/ directory of the distribution.
AddToMenu BrowseMenu
+ DynamicPopupAction Piperead 'fvwm_make_browse_menu.sh BrowseMenu'
Example (Picture menu):
# Build a menu of all .jpg files in
# $HOME/Pictures
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'
關鍵字MissingSubmenuFunction有類似的用途。當你彈出一個不存在的子菜單時,就執行它指定的命令。利用這個函數可以隨時定義和銷毀菜單。MissingSubmenuFunctionhou后可以使用任何命令,but the name of an item (that isa submenu) defined with AddToFunc follows it,并按下面方式執行指定的命令:
Function
那個不存在的菜單名作為第一個參數傳給函數,可以用引用。
上面曾提到的fvwm-menu-directory腳本可以和MissingSubmenuFunction搭配,產生即時的遞歸目錄列表。如:
# There is another shell script fvwm_make_directory_menu.sh
# in the utils/ directory of the distribution. To use it,
# define this function in your configuration file:
AddToFunc MakeMissingDirectoryMenu
+ I Exec fvwm_make_directory_menu.sh
AddToMenu SomeMenu
+ MissingSubmenuFunction MakeMissingDirectoryMenu
+ "Root directory" Popup /
這是另一個文件瀏覽器,用子菜單顯示子目錄。
Titles命令可以定義菜單的標題,如果后面跟top選項,標題將被放在菜單的頂部,并覆蓋原有的標題。
AddToMenu Utilities Tools Title top
在菜單標簽中第一個Tab左側的字符與菜單左側對齊,第一個Tab右側的字符與第二個標簽欄左側對齊,標簽中的其它字符與第三標簽欄右側對齊。所有其它的Tab替換為空格。這種格式不是固定的,你可以使用MenuStyle的ItemFormat選項改變它。
如果菜單的標簽包含'&',它的下一個字符就被作為熱鍵,并且字符下面加一個下劃線來標識。要想在標簽中使用'&',需插入'&&'。
菜單的標簽中用'*'標識的字符串,被解釋為一個圖片文件名,并插入到菜單里。要在標簽里使用'*',需插入'**'。例如:
+ Calculator*xcalc.xpm* Exec exec xcalc
菜單中插入一項,以"Calculator"為標簽,上面有一個圖片。 下面的:
+ *xcalc.xpm* Exec exec xcalc
只留下一個圖片,沒有標簽。
菜單的標簽中用'%'標識的字符串,被解釋為一個圖片文件名(稱為mini icon),并插入到標簽左側。以同樣的方式給出第二個mini icon被放在標簽的右側。要在標簽里使用'%',需插入'%%'。例如:
+ Calculator%xcalc.xpm% Exec exec xcalc
菜單中插入一項,以"Calculator"為標簽,標簽左側有一個圖片。 下面的:
+ %xcalc.xpm% Exec exec xcalc
只留下一個圖片,沒有標簽。
使用這種方式指定的圖片應該小一些(如16x16)。
菜單名(不是標簽)中用'@'標識的字符串,被解釋為一個xpm或bitmap的圖片文件名,并出現在整個菜單的左側(side pixmap)。使用MenuStyle的SidePic選項也可以實現同樣的效果。要在標簽里使用'@',需插入'@@'。例如:
AddToMenu StartMenu@linux-menu.xpm@
創建一個左下角帶圖片的菜單。
菜單名中用'^'標識的字符串被解釋為X11的一個顏色名,菜單中包含side picture的部分用該顏色填充。這個顏色也可以用MenuStyle的SideColor選項指定。要在標簽里使用'^',需插入'^^'。例如:
AddToMenu StartMenu@linux-menu.xpm@^blue^
創建一個左下角帶圖片的菜單,包含圖片的部分用藍色填充。
在上面的各種情況下,最終的菜單名是去掉以上特殊部分后的結果。