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
AddToMenu命令里没有结束符(end-of-menu),在配置文件里,多个菜单也不需要在相邻的区域里定义。上面例子里加引号的部分(或一个单词)是菜单的标签,其余部分是菜单项关联的命令。空标签“”和Nop函数用来添加一个分隔符(separator)。
关键词DynamicPopUpAction 和 DynamicPopDownAction作为菜单项名称时具有其特殊的含义。它们关联的操作在菜单弹出或消失时执行,可以通过这种方式实现动态菜单。使用 DestroyMenu 自我销毁并从头重建是可能的,菜单销毁后,不要忘记再次添加动态操作(除非当销毁菜单的时候使用了recreate选项)。
注意:不要触发需要用户交互的操作,它们可能失败并弄糟你的菜单。参看Silent命令。
警告:在动态菜单操作时不要使用MenuStyle命令,它将使fvwm崩溃。
有几个随着fvwm一起发布的有关动态菜单的脚本。它们都有自己的手册页,其中一些,特别是fvwm-menu-directory 和fvwm-menu-desktop,可以和 DynamicPopupAction 一起使用来创建目录列表或GNOME/KDE应用列表。
例如(文件浏览器File browser):
# 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'
例如(图像菜单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 作为菜单项名称也有其特殊含义,它会在你试图弹出一个并不存在的子菜单时被执行。使用这个函数,你能够定义和销毁一个不工作的菜单。它后面可以使用任何命令,但是当跟随一个由 AddToFunc 命令定义的函数的时候,fvwm执行下面的命令:
Function
submenu-name作为第一个参数传递给这个函数。
上面提到的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:
DestroyFunc MakeMissingDirectoryMenu
AddToFunc MakeMissingDirectoryMenu
+ I PipeRead fvwm_make_directory_menu.sh $0
DestroyMenu SomeMenu
AddToMenu SomeMenu
+ MissingSubmenuFunction MakeMissingDirectoryMenu
+ "Root directory" Popup /
这是文件浏览器的另外一种实现方式。
在关键词 Title 后面添加top选项,可以在菜单顶部添加标题,这将覆盖先前的标题。
AddToMenu Utilities Tools Title top
菜单标签里,第一个Tab键之前的文本与菜单左边对齐,右边的文本与第二列左对齐,剩余的文本右对齐第三列。所有其它的Tab被空格替换。可以使用MenuStyle命令的ItermFormat选项改变这个格式。
如果菜单标签里含有标记‘&’,接下来的字母表示该菜单项的热键。标签里的热键会添加下划线。字母‘&’使用“&&”的方式获得。
如果菜单标签里含有由标记‘*’隔开的字符串,两个‘*’之间的文本表示这个菜单项的图标名称。字母‘*’使用“**”的方式获得。例如:
+ Calculator*xcalc.xpm* Exec exec xcalc
将在菜单项“Calculator”中插入图标“xcalc.xpm”,下面
+ *xcalc.xpm* Exec exec xcalc
将删除标签,但留下图标。
如果菜单标签里含有由标记‘%’隔开的字符串,两个‘%’之间的文本表示这个菜单项的图标名称(所谓的显示在菜单标签左边的mini icon)。同样方式,第二个mini icon显示这个菜单项的右边。字母‘%’使用“%%”的方式获得。例如:
+ Calculator%xcalc.xpm% Exec exec xcalc
将在菜单项“Calculator”左边插入图标"xcalc.xpm",下面
+ %xcalc.xpm% Exec exec xcalc
将删除标签,但留下图标。通常这里使用的图片比较小(大概16x16)。
注意:‘%’之间的图标加在菜单项的左边或右边,但‘*’不是。
如果菜单名称里(不是标签)包含由‘@’隔开的字符串,两个‘@’之间的文本表示菜单左边(与菜单底部对齐)显示的xpm或bitmap图像名称。你可以使用 MenuStyle 命令的 SidePic 选项达到同样的效果。字母‘@’使用“@@”的方式获得。例如:
AddToMenu StartMenu@linux-menu.xpm@
创建一个左边带有side picture的菜单。
如果菜单名称里包含由‘^’隔开的字符串,两个‘^’之间的文本表示side picture使用的X11颜色的名字。当side picture的高度比创建的菜单要低的时候,这个颜色会用来填充剩余的部分。你可以使用MenuStyle 命令的 SideColor 选项达到同样的效果。字母‘^’使用“^^”的方式获得。例如:
AddToMenu StartMenu@linux-menu.xpm@^blue^
将在菜单的左下角添加一个图片。
所有上面的例子,菜单的名称都是必须的,其它位于不同分隔符之间的字符串都是可选的。
ChangeMenuStyle menustyle menu ...
改变菜单menu的风格为menustyle。参数中可以指定多个菜单。例如:
ChangeMenuStyle pixmap1 \
ScreenSaverMenu ScreenLockMenu
CopyMenuStyle orig-menustyle dest-menustyle
复制orig-menustyle 为 dest-menustyle,orig-menustyle是已经存在的菜单风格。如果dest-menustyle不存在,则创建它。
DestroyMenu [recreate] menu
销毁菜单,后面对它的使用不再有效。你能够通过这个命令在 fvwm 会话期间改变一个菜单的内容。这个菜单能够使用AddToMenu命令重建。参数recreate通知fvwm丢弃所有的菜单项,包括标题。
DestroyMenu Utilities
DestroyMenuStyle menustyle
销毁名为menustyle的菜单样式,所有使用这个样式的菜单将使用默认样式。默认的菜单样式不能被销毁。
DestroyMenuStyle pixmap1